1. 环境准备:手把手带你搭好开发舞台
咱们今天要聊的,是 Spring AI Alibaba Graph。听起来是不是有点高大上?别怕,我刚开始接触的时候也觉得这玩意儿肯定特复杂,但实际用下来发现,Spring 生态的“开箱即用”特性在这里体现得淋漓尽致。简单来说,它就是一个帮你轻松玩转知识图谱的“瑞士军刀”,让你不用去深究底层图数据库那些繁琐的 API,用 Spring 开发者最熟悉的姿势就能操作图数据。
知识图谱是啥?你可以把它想象成一张巨大的、智能的关系网。比如,在电影领域,“汤姆·汉克斯”是一个点,“《阿甘正传》”是另一个点,他们之间有一条边叫“主演”。通过无数这样的点和边,我们就能把散乱的信息编织成一张结构化的知识大网,进行非常高效的查询和推理,比如“找找汤姆·汉克斯主演的、由罗伯特·泽米吉斯导演的电影”。Spring AI Alibaba Graph 就是帮你快速构建和操作这张网的利器。
要开始玩,首先得把舞台搭好。我强烈建议你使用 IntelliJ IDEA 或者 VS Code 这类现代 IDE,它们对 Spring Boot 的支持非常友好。咱们的项目基于 Spring Boot 3.x 和 Java 17 或更高版本,这是享受 Spring AI 最新特性的前提。打开你的 IDE,新建一个 Spring Boot 项目,这一步我就不赘述了,和创建普通的 Web 项目一模一样。
接下来就是重头戏:引入依赖。打开你的 pom.xml 文件,在 <dependencies> 部分加入以下内容。这里有个小坑我踩过,Spring AI 的版本迭代比较快,建议去官方仓库看看最新稳定版,我这里用 1.0.0 作为示例,但你实际操作时可能需要调整。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-alibaba-graph</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
等等,你可能会问,为什么还有个 spring-boot-starter-data-neo4j?这里有个关键点:Spring AI Alibaba Graph 本身是一个抽象和集成层,它需要连接一个实际的图数据库后端。虽然它原生适配阿里云的图数据库,但在本地开发和测试时,我们完全可以用 Neo4j 这种开源图数据库来替代,两者在查询语言(如 Cypher)层面是相通的。这样我们就不用一开始就去申请云服务,直接在本地就能跑起来,学习成本低,效果却一样。当然,如果你已经有阿里云 Graph 服务的账号和实例,也可以直接配置上去。
1.1 搞定本地图数据库(Neo4j)
为了快速上手,我强烈推荐先在本地用 Docker 启动一个 Neo4j。如果你没安装 Docker,去官网下一个,安装过程很简单。然后打开终端,执行下面这条命令:
docker run -d \
--name neo4j-spring-ai \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/your_password_here \
neo4j:latest
这条命令干了啥?它拉取了最新的 Neo4j 镜像,创建了一个名为 neo4j-spring-ai 的容器,把浏览器访问端口 7474 和数据库连接端口 7687 都映射到了本地。最关键的是 -e NEO4J_AUTH,它设置了默认用户 neo4j 的密码,这里你务必把 your_password_here 换成你自己设定的强密码,比如 MySecretPass123!。
启动成功后,打开浏览器,访问 http://localhost:7474。你会看到 Neo4j Browser 的登录界面,用户名填 neo4j,密码填你刚才设置的。第一次登录它会要求你改密码,按提示操作即可。登录进去后,你就能看到一个交互式的图数据库查询界面了,这证明你的数据库服务已经就绪。
1.2 配置你的 Spring Boot 应用
数据库跑起来了,现在告诉我们的 Spring Boot 应用怎么连接它。回到项目,打开 src/main/resources/application.yml 文件(如果没有就新建一个)。我们需要配置两个数据源:一个是给 Spring AI Alibaba Graph 的核心配置(虽然我们暂时用 Neo4j模拟,但配置结构类似),另一个是直接给 Spring Data Neo4j 用的。这样配置是为了让框架层和驱动层都能正确工作。
spring:
neo4j:
uri: bolt://localhost:7687
authentication:
username: neo4j
password: MySecretPass123! # 替换成你实际的密码
ai:
alibaba:
graph:
endpoint: bolt://localhost:7687 # 这里指向本地Neo4j,模拟环境
username: neo4j
password: MySecretPass123!
# 如果是真实的阿里云Graph服务,配置类似如下:
# endpoint: https://your-instance.gdb.aliyuncs.com
# access-key: your-access-key-id
# secret-key: your-access-key-secret
配置完成后,启动你的 Spring Boot 应用。如果控制台没有报错,并且能看到类似 “Connected to Neo4j” 的日志信息,那么恭喜你,环境搭建这最基础也最容易出问题的一步,你已经稳稳地跨过去了。接下来,我们就可以开始定义数据模型,真正创建我们的知识图谱了。
2. 数据建模:定义你的第一个知识图谱
环境搭好了,就像盖房子打好了地基,接下来我们要设计房子的蓝图——也就是数据模型。在知识图谱的世界里,万物皆可抽象为两种基本元素:顶点(Vertex) 和 边(Edge)。顶点代表实体,比如“人”、“电影”、“城市”;边代表实体之间的关系,比如“主演”、“出生于”、“位于”。Spring AI Alibaba Graph 通过一套非常直观的注解,让我们能用熟悉的 Java 对象(POJO)来定义这些元素,这比直接写晦涩的图查询语句要友好太多了。
让我们从一个简单的社交网络场景开始。假设我们要构建一个关于朋友和兴趣的知识图谱。首先,我们创建两个顶点类型:Person(人)和 Hobby(爱好)。在项目中新建一个 entity 包,然后创建 Person.java 文件。
package com.example.knowledgegraph.entity;
import org.springframework.data.annotation.Id;
import org.springframework.ai.alibaba.graph.core.annotation.Vertex;
import java.util.List;
@Vertex(label = "Person") // 声明这是一个顶点,在图数据库中的标签是“Person”
public class Person {
@Id // 标识这是实体的唯一ID
private String id; // 图数据库中的ID通常是字符串类型
private String name;


798

被折叠的 条评论
为什么被折叠?



