这一部分将指导您设置Pinecone `VectorStore`以存储文档嵌入并执行相似性搜索。

Pinecone是什么?

链接:https://www.pinecone.io/ [Pinecone] 是一个受欢迎的云基础向量数据库,它允许你高效地存储和搜索向量。

前提条件

  1. Pinecone账号:在开始之前,请先注册一个链接:https://app.pinecone.io/[Pinecone账号]。

  2. 松果项目:注册后,创建一个新项目、一个索引并生成一个API密钥。您将需要这些详细信息进行配置。

  3. OpenAI 账户:在链接:https://platform.openai.com/signup[OpenAI 注册页面] 创建一个账户,并在链接:https://platform.openai.com/account/api-keys[API 密钥页面]生成令牌。

配置

要设置`PineconeVectorStore`,请从你的Pinecone账户收集以下细节:

  • 松果 API 密钥

  • 松果环境

  • 松果项目ID

  • 松果索引名称

  • 松果命名空间

Note

这些信息可以通过Pinecone UI门户向您提供。

在设置嵌入时,选择一个向量维度为`1536`。这与OpenAI的模型`text-embedding-ada-002`的维度相匹配,我们将在本指南中使用它。

此外,您需要提供您的OpenAI API密钥。像这样将其设置为一个环境变量:

export SPRING_AI_OPENAI_API_KEY='Your_OpenAI_API_Key'

代码库

要获取Spring AI工件,请声明Spring快照仓库:

<repository>
	<id>spring-snapshots</id>
	<name>Spring Snapshots</name>
	<url>https://repo.spring.io/snapshot</url>
	<releases>
		<enabled>false</enabled>
	</releases>
</repository>

依赖项

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

  • OpenAI:计算嵌入所需。

<dependency>
	<groupId>org.springframework.ai</groupId>
	<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
  • 松果

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-pinecone</artifactId>
</dependency>
Tip
请参考依赖管理部分,以将Spring AI BOM添加到您的构建文件中。

示例代码

要在您的应用程序中配置Pinecone, 您可以使用以下设置:

@Bean
public PineconeVectorStoreConfig pineconeVectorStoreConfig() {

return PineconeVectorStoreConfig.builder()
        .withApiKey(<PINECONE_API_KEY>)
        .withEnvironment("gcp-starter")
        .withProjectId("89309e6")
        .withIndexName("spring-ai-test-index")
        .withNamespace("") // the free tier doesn't support namespaces.
        .build();
}

通过将Spring Boot OpenAI启动器添加到您的项目中,以集成OpenAI的嵌入功能。这为您提供了嵌入客户端的实现:

@Bean
public VectorStore vectorStore(PineconeVectorStoreConfig config, EmbeddingClient embeddingClient) {
    return new PineconeVectorStore(config, embeddingClient);
}

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

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")));

将文档添加到Pinecone:

vectorStore.add(List.of(document));

最后,检索与查询相似的文档:

List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));

如果一切顺利,你应该会找回包含文本“Spring AI rocks!!”的文档。