Plug-in Pinecone

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.