赞
踩
本节将指导您如何设置 Chroma VectorStore ,并使用组件进行存储文档嵌入向量和相似性检索。
Chroma 是开源的嵌入向量数据库。它提供了文档嵌入向量、内容和元数据存储,并配备了通过这些嵌入向量进行搜索的工具,包括元数据过滤。
要设置 ChromaVectorStore,您需要提供您的 OpenAI API 密钥。请将其设置为环境变量,如下所示:
export SPRING_AI_OPENAI_API_KEY='Your_OpenAI_API_Key'
将这些依赖项添加到您的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
* Chroma VectorStore
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-chroma-store</artifactId>
</dependency>
请参阅 03. 开始章节 的 Dependency Management 部分,将 Spring AI BOM 添加到构建文件中
首先使用对应的 ChromaDB 配置创建一个 RestTemplate 实例,并使用它来创建一个 ChromaApi 实例:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public ChromaApi chromaApi(RestTemplate restTemplate) {
String chromaUrl = "http://localhost:8000";
ChromaApi chromaApi = new ChromaApi(chromaUrl, restTemplate);
return chromaApi;
}
使用 Static API Token Authentication 保护的 ChromaDB 情况,请使用 ChromaApi#withKeyToken() 方法设置您的凭据。查看 ChromaWhereIT 以获取示例。
使用 Basic Authentication 保护的 ChromaDB 情况,请使用 ChromaApi#withBasicAuth(, ) 方法设置您的凭据。查看 BasicAuthChromaWhereIT 以获取示例。
接下来通过将 Spring Boot OpenAI starter 添加到您的项目中,与 OpenAI 的嵌入向量组件集成。 Embeddings 客户端的实现示例:
@Bean
public VectorStore chromaVectorStore(EmbeddingClient embeddingClient, ChromaApi chromaApi) {
return new ChromaVectorStore(embeddingClient, chromaApi, "TestCollection");
}
在您的主代码中,创建一些文档:
List<Document> documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
new Document("The World is Big and Salvation Lurks Around the Corner"),
new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));
将文档添加到您的向量存储中:
vectorStore.add(documents);
最后,检索相似的文档:
List<Document> results = vectorStore.similaritySearch("Spring");
如果一切顺利,您应该能够检索包含文本“Spring AI rocks!!”的文档。
您也可以利用通用的、便携的元数据过滤器与 ChromaVector 存储组件一起使用。
例如,您可以使用文本表达语言:
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()));
这些过滤表达式会自动转换为专有的 Chroma where 过滤表达式。
例如,这个便携的过滤器表达式:
author in ['john', 'jill'] && article_type == 'blog'
被转换为专有的 Chroma 格式
{"$and":[
{"author": {"$in": ["john", "jill"]}},
{"article_type":{"$eq":"blog"}}]
}
docker run -it --rm --name chroma -p 8000:8000 ghcr.io/chroma-core/chroma:0.4.15
在 localhost:8000/api/v1 启动一个 chroma 存储
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。