这一部分将指导您设置`Neo4jVectorStore`来存储文档嵌入并执行相似性搜索。
链接:https://neo4j.com[Neo4j] 是一个开源的NoSQL图数据库。它是一个完全支持事务的数据库(遵循ACID原则),以图的形式存储数据,包含节点和连接节点的关系。受到现实世界结构的启发,它能够在复杂数据上提供高查询性能,同时对开发者来说又直观简单。
该链接:https://neo4j.com/docs/cypher-manual/current/indexes-for-vector-search/[Neo4j的向量搜索] 允许用户从大型数据集中查询向量嵌入。嵌入是数据对象的数值表示,例如文本、图像、音频或文档。嵌入可以存储在 节点 属性上,并且可以使用 db.index.vector.queryNodes()
函数进行查询。这些索引由Lucene提供支持,使用分层导航小世界图(HNSW)来执行向量字段的k近似最近邻(k-ANN)查询。
前提条件
-
一个运行中的Neo4j (5.15及以上版本) 实例。以下选项可用:
-
链接:https://hub.docker.com/_/neo4j【Docker】镜像
-
链接:[Neo4j 桌面版](https://neo4j.com/download/)
-
链接:[Neo4j Aura](https://neo4j.com/cloud/aura-free/)
-
链接:https://neo4j.com/deployment-center/[Neo4j服务器]实例
-
-
如果需要的话,一個 API 密钥用于 EmbeddingClient 来生成由
Neo4jVectorStore
存储的嵌入。
依赖项
将Neo4j Vector Store依赖项添加到您的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-neo4j-store</artifactId>
</dependency>
或者添加到您的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-neo4j-store'
}
Tip
|
参考依赖管理部分,将Spring AI BOM添加到你的构建文件中。 |
配置
要连接到Neo4j并使用`Neo4jVectorStore`,你需要提供你实例的访问详情。一个简单的配置可以通过Spring Boot的_application.properties_提供,
spring.neo4j.uri=<uri_for_your_neo4j_instance>
spring.neo4j.authentication.username=<your_username>
spring.neo4j.authentication.password=<your_password>
# API key if needed, e.g. OpenAI
spring.ai.openai.api.key=<api-key>
环境变量
export SPRING_NEO4J_URI=<uri_for_your_neo4j_instance>
export SPRING_NEO4J_AUTHENTICATION_USERNAME=<your_username>
export SPRING_NEO4J_AUTHENTICATION_PASSWORD=<your_password>
# API key if needed, e.g. OpenAI
export SPRING_AI_OPENAI_API_KEY=<api-key>
或者可以是这些的混合。例如,如果你想将你的API密钥存储为环境变量,但其余部分保留在普通的_application.properties_文件中。
Note
|
如果你选择创建一个shell脚本以便将来工作的便捷,请务必在启动应用程序之前通过“源”运行它,即使用`source <your_script_name>.sh`命令。 |
Note
|
除了_application.properties_和环境变量之外,Spring Boot提供了https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config[额外的配置选项]。 |
Spring Boot的Neo4j驱动自动配置功能会创建一个bean实例,该实例将被`Neo4jVectorStore`使用。
自动配置
Spring AI为Neo4j Vector Store提供了Spring Boot自动配置。要启用它,请在项目的Maven `pom.xml`文件中添加以下依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-neo4j-store-spring-boot-starter</artifactId>
</dependency>
或者添加到您的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-neo4j-store-spring-boot-starter'
}
Tip
|
参考依赖管理部分,将Spring AI BOM添加到你的构建文件中。 |
请查看配置参数列表,以了解向量存储的默认值和配置选项。
Tip
|
参考仓库部分,添加里程碑和/或快照仓库到你的构建文件中。 |
此外,您将需要一个已配置的`EmbeddingClient` bean。有关更多信息,请参考EmbeddingClient章节。
这里是所需豆类的一个示例:
@Bean
public EmbeddingClient embeddingClient() {
// Can be any other EmbeddingClient implementation.
return new OpenAiEmbeddingClient(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}
在Spring Boot自动配置的Neo4j Driver
Bean不符合您的需求时,您仍然可以定义您自己的Bean。请阅读https://neo4j.com/docs/java-manual/current/client-applications/[Neo4j Java Driver reference]以获取有关自定义驱动配置的更深入信息。
@Bean
public Driver driver() {
return GraphDatabase.driver("neo4j://<host>:<bolt-port>",
AuthTokens.basic("<username>", "<password>"));
}
现在您可以自动将 Neo4jVectorStore
作为向量存储在您的应用程序中进行配置。
元数据过滤
您也可以利用通用的、可移植的元数据过滤器,与Neo4j存储一起使用。
例如,您可以使用文本表达式语言:
vectorStore.similaritySearch(
SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression("author in ['john', 'jill'] && 'article_type' == 'blog'"));
或者使用`Filter.Expression` DSL编程方式:
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression(b.and(
b.in("john", "jill"),
b.eq("article_type", "blog")).build()));
Note
|
那些(可移动的)过滤表达式会自动转换成专有的Neo4j WHERE 过滤表达式。
|
例如,这个便携式过滤表达式:
sql author in ['john', 'jill'] && 'article_type' == 'blog'
转换成专有的Neo4j过滤格式:
node.`metadata.author` IN ["john","jill"] AND node.`metadata.'article_type'` = "blog"
Neo4j向量存储属性
你可以在Spring Boot配置中使用以下属性来自定义Neo4j向量存储。
Property | Default value |
---|---|
|
neo4j |
|
1536 |
|
cosine |
|
Document |
|
embedding |
|
spring-ai-document-index |