0


【Spring AI】05. 向量数据库-Chroma

文章目录

Chroma

本节将指导您如何设置 Chroma VectorStore ,并使用组件进行存储文档嵌入向量相似性检索

Chroma Container

什么是 Chroma?


Chroma 是开源的嵌入向量数据库。它提供了文档嵌入向量、内容和元数据存储,并配备了通过这些嵌入向量进行搜索的工具,包括元数据过滤。

先决条件

  1. OpenAI 账户:在 OpenAI Signup 注册并在 API Keys 生成令牌。
  2. 访问 ChromeDB。后面会介绍如何使用 Docker 容器在本地启动 ChromaDB。 在启动时,如果尚未预配完全,则ChromaVectorStore会创建所需的组件。

配置

要设置 ChromaVectorStore,您需要提供您的 OpenAI API 密钥。请将其设置为环境变量,如下所示:

exportSPRING_AI_OPENAI_API_KEY='Your_OpenAI_API_Key'

依赖项

将这些依赖项添加到您的项目中:

  • OpenAI:用于计算嵌入的必需项。<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 实例:

@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}@BeanpublicChromaApichromaApi(RestTemplate restTemplate){String chromaUrl ="http://localhost:8000";ChromaApi chromaApi =newChromaApi(chromaUrl, restTemplate);return chromaApi;}

使用 Static API Token Authentication 保护的 ChromaDB 情况,请使用 ChromaApi#withKeyToken() 方法设置您的凭据。查看 ChromaWhereIT 以获取示例。
使用 Basic Authentication 保护的 ChromaDB 情况,请使用 ChromaApi#withBasicAuth(, ) 方法设置您的凭据。查看 BasicAuthChromaWhereIT 以获取示例。

接下来通过将 Spring Boot OpenAI starter 添加到您的项目中,与 OpenAI 的嵌入向量组件集成。 Embeddings 客户端的实现示例:

@BeanpublicVectorStorechromaVectorStore(EmbeddingClient embeddingClient,ChromaApi chromaApi){returnnewChromaVectorStore(embeddingClient, chromaApi,"TestCollection");}

在您的主代码中,创建一些文档:

List<Document> documents =List.of(newDocument("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!",Map.of("meta1","meta1")),newDocument("The World is Big and Salvation Lurks Around the Corner"),newDocument("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 =newFilterExpressionBuilder();

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"}}]
}

在本地运行 Chroma

docker run -it--rm--name chroma -p8000:8000 ghcr.io/chroma-core/chroma:0.4.15

在 localhost:8000/api/v1 启动一个 chroma 存储


本文转载自: https://blog.csdn.net/u011046509/article/details/138292403
版权归原作者 小明同学的开发日常 所有, 如有侵权,请联系我们删除。

“【Spring AI】05. 向量数据库-Chroma”的评论:

还没有评论