Pinecone 插件

Pinecone 插件提供使用 Pinecone 云矢量数据库的索引器和检索器实现。

配置

如需使用此插件,请导入 pinecone 软件包并调用 pinecone.Init()

import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
	return err
}

该插件需要 Pinecone API 密钥。通过执行以下一项操作,将插件配置为使用 API 密钥:

  • PINECONE_API_KEY 环境变量设置为 API 密钥。

  • 在初始化插件时指定 API 密钥:

    if err := pinecone.Init(ctx, pineconeAPIKey); err != nil {
    	return err
    }
    

    不过,请勿直接在代码中嵌入 API 密钥!仅将此功能与 Cloud Secret Manager 或类似服务结合使用。

用法

如需向 Pinecone 索引添加文档,请先创建索引定义,以指定索引名称和要使用的嵌入模型:

menuIndexer, err := pinecone.DefineIndexer(ctx, pinecone.Config{
	IndexID:  "menu_data",                             // Your Pinecone index
	Embedder: googleai.Embedder("text-embedding-004"), // Embedding model of your choice
})
if err != nil {
	return err
}

您还可以选择指定 Pinecone 用于文档数据的键(默认情况为 _content)。

然后,调用索引的 Index() 方法,并向其传递您要添加的文档列表:

if err := ai.Index(
	ctx,
	menuIndexer,
	ai.WithIndexerDocs(docChunks...)); err != nil {
	return err
}

同样,如需从索引中检索文档,请先创建检索器定义:

menuRetriever, err := pinecone.DefineRetriever(ctx, pinecone.Config{
	IndexID:  "menu_data",                             // Your Pinecone index
	Embedder: googleai.Embedder("text-embedding-004"), // Embedding model of your choice
})
if err != nil {
	return err
}

然后,调用检索器的 Retrieve() 方法,并向其传递文本查询:

resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
	Document: ai.DocumentFromText(userInput, nil),
	Options:  nil,
})
if err != nil {
	return err
}
menuInfo := resp.Documents

如需大致了解如何将索引器和检索器用于 RAG,请参阅检索增强生成页面。