El complemento Pinecone proporciona implementaciones de indexador y recuperador que usan la base de datos de vectores en la nube de Pinecone.
Configuración
Para usar este complemento, importa el paquete pinecone
y llama a pinecone.Init()
:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
El complemento requiere tu clave de API de Pinecone. Configura el complemento para usar tu clave de API mediante una de las siguientes acciones:
Establece la variable de entorno
PINECONE_API_KEY
en tu clave de API.Especifica la clave de API cuando inicialices el complemento:
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
Sin embargo, no incorpores tu clave de API directamente en el código. Usa solo esta característica junto con un servicio como Cloud Secret Manager o uno similar.
Uso
Para agregar documentos a un índice de Pinecone, crea primero una definición de índice que especifique el nombre del índice y el modelo de incorporación que estás 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
}
De manera opcional, también puedes especificar la clave que Pinecone usa para los datos de documentos (_content
, de forma predeterminada).
Luego, llama al método Index()
del índice y pásale una lista de los documentos que deseas agregar:
if err := ai.Index(
ctx,
menuIndexer,
ai.WithIndexerDocs(docChunks...)); err != nil {
return err
}
Del mismo modo, para recuperar documentos de un índice, primero crea una definición 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
}
Luego, llama al método Retrieve()
del recuperador y pásale una 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
Consulta la página de generación mejorada de recuperación para ver un debate general sobre el uso de indexadores y recuperadores para RAG.