O plug-in Pinecone fornece implementações do indexador e do retriever que usam o banco de dados de vetores de nuvem Pinecone.
Configuração
Para usar esse plug-in, importe o pacote pinecone
e chame pinecone.Init()
:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
O plug-in requer sua chave de API Pinecone. Siga um destes procedimentos para configurar o plug-in para usar sua chave de API:
Defina a variável de ambiente
PINECONE_API_KEY
como sua chave de API.Especifique a chave de API ao inicializar o plug-in:
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
No entanto, não incorpore a chave de API diretamente no código. Use este recurso apenas em conjunto com um serviço como Cloud Secret Manager ou similar.
Uso
Para adicionar documentos a um índice Pinecone, primeiro crie uma definição de índice que especifica o nome do índice e o modelo de embedding que você está usando:
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
}
Também é possível especificar a chave que a Pinecone usa para os dados dos documentos
(_content
, por padrão).
Em seguida, chame o método Index()
do índice, passando uma lista dos documentos que você
quer adicionar:
if err := ai.Index(
ctx,
menuIndexer,
ai.WithIndexerDocs(docChunks...)); err != nil {
return err
}
Da mesma forma, para recuperar documentos de um índice, primeiro crie uma definição de recuperador:
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
}
Em seguida, chame o método Retrieve()
do recuperador, transmitindo uma consulta de texto:
resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
Document: ai.DocumentFromText(userInput, nil),
Options: nil,
})
if err != nil {
return err
}
menuInfo := resp.Documents
Consulte a página geração aumentada de recuperação para conferir discussão sobre o uso de indexadores e recuperadores para RAG.