Le plug-in Pinecone fournit des implémentations d'indexeur et de récupérateur qui utilisent la base de données vectorielle cloud Pinecone.
Configuration
Pour utiliser ce plug-in, importez le package pinecone
et appelez pinecone.Init()
:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
Le plug-in nécessite votre clé API Pinecone. Configurez le plug-in pour qu'il utilise votre clé API en procédant comme suit :
Définissez la variable d'environnement
PINECONE_API_KEY
sur votre clé API.Spécifiez la clé API lorsque vous initialisez le plug-in :
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
Toutefois, n'intégrez pas votre clé API directement dans le code. Utiliser uniquement cette fonctionnalité conjointement avec un service comme Cloud Secret Manager ou similaire.
Utilisation
Pour ajouter des documents à un index Pinecone, créez d'abord une définition d'index qui spécifie le nom de l'index et le modèle d'encapsulation que vous utilisez :
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
}
Vous pouvez également spécifier la clé que Pinecone utilise pour les données de document (_content
, par défaut).
Appelez ensuite la méthode Index()
de l'index en lui transmettant une liste des documents que vous souhaitez ajouter :
if err := ai.Index(
ctx,
menuIndexer,
ai.WithIndexerDocs(docChunks...)); err != nil {
return err
}
De même, pour récupérer des documents à partir d'un index, créez d'abord une définition de récupérateur :
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
}
Appelez ensuite la méthode Retrieve()
du récupérateur en lui transmettant une requête textuelle :
resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
Document: ai.DocumentFromText(userInput, nil),
Options: nil,
})
if err != nil {
return err
}
menuInfo := resp.Documents
Consultez la page Génération augmentée de récupération pour en savoir plus sur l'utilisation des indexeurs et des récupérateurs pour la génération augmentée de récupération.