Neo4j
本部分将引导您完成 Neo4j VectorStore
设置,以存储文档嵌入
并执行相似性搜索
。
Neo4j 是一个开源 NoSQL 图形数据库。它是一个完全事务性数据库(ACID),存储由节点组成的图形结构的数据,通过关系连接。受现实世界结构的启发,它允许对复杂数据进行高查询性能,同时对开发人员来说保持直观和简单。
Neo4j的向量搜索 允许用户从大型数据集中查询向量嵌入。嵌入是数据对象的数字表示,例如文本、图像、音频或文档。嵌入可以存储在节点属性上,并且可以使用 db.index.vector.queryNodes()
函数进行查询。这些索引由使用分层可导航小世界图 (HNSW) 的 Lucene 提供支持,对向量字段执行 ak 近似最近邻 (k-ANN) 查询。
先决条件
- 运行 Neo4j (5.15+) 实例。可以使用以下选项:
- 如果需要, 可以给 EmbeddingClient 配置 API 密钥,生成嵌入结果并通过
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'
}
配置
要连接到 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
文件中。
注意:如果您选择创建 shell 脚本以方便将来的工作,请务必在启动应用程序之前通过 “sourcing” 文件(例:source <your_script_name>.sh
).
注意:除了application.properties
和环境变量
之外,Spring Boot 还提供其他配置选项。
Spring Boot 自动配置功能 针对 Neo4j 驱动程序将创建一个由 Neo4jVectorStore
的实例.
自动配置
Spring AI 为 Neo4j Vector Sore 提供 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'
}
此外,您还需要配置一个EmbeddingClient
bean。有关更多信息,请参阅EmbeddingClient部分。
这是所需 bean 的示例:
@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。请阅读 Neo4j Java 驱动程序参考以获取有关自定义驱动程序配置的更多深入信息。
@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()));
注意:这些(便携式)过滤器表达式会自动转换为专有的 Neo4j WHERE
过滤器表达式。
例如,这个便携式过滤器表达式:
author in ['john', 'jill'] && 'article_type' == 'blog'
转换为专有的 Neo4j 过滤器格式:
node.`metadata.author` IN ["john","jill"] AND node.`metadata.'article_type'` = "blog"
Neo4jVectorStore 属性
您可以在 Spring Boot 配置中使用以下属性来自定义 Neo4j 向量存储。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.vectorstore.neo4j.database-name |
neo4j | |
spring.ai.vectorstore.neo4j.embedding-dimension |
1536 | |
spring.ai.vectorstore.neo4j.distance-type |
cosine | |
spring.ai.vectorstore.neo4j.label |
Document | |
spring.ai.vectorstore.neo4j.embedding-property |
embedding | |
spring.ai.vectorstore.neo4j.index-name |
spring-ai-document-index |
最后编辑:Jeebiz 更新时间:2024-07-06 19:00