Il plug-in Pinecone fornisce implementazioni di indicizzatori e retriever che utilizzano il database di vettori cloud Pinecone.
Configurazione
Per utilizzare questo plug-in, importa il pacchetto pinecone
e chiama pinecone.Init()
:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
Il plug-in richiede la chiave API Pinecone. Configura il plug-in in modo che utilizzi la chiave API in uno dei seguenti modi:
Imposta la variabile di ambiente
PINECONE_API_KEY
sulla tua chiave API.Specifica la chiave API durante l'inizializzazione del plug-in:
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
Tuttavia, non incorporare la chiave API direttamente nel codice. Utilizza questa funzionalità solo in combinazione con un servizio come Cloud Secret Manager o uno simile.
Utilizzo
Per aggiungere documenti a un indice Pinecone, crea innanzitutto una definizione di indice che specifichi il nome dell'indice e il modello di embedding in uso:
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
}
Se vuoi, puoi anche specificare la chiave utilizzata da Pinecone per i dati del documento
(_content
per impostazione predefinita).
Quindi, chiama il metodo Index()
dell'indice, passando un elenco dei documenti che vuoi aggiungere:
if err := ai.Index(
ctx,
menuIndexer,
ai.WithIndexerDocs(docChunks...)); err != nil {
return err
}
Analogamente, per recuperare documenti da un indice, devi prima creare un retriever definizione:
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
}
Quindi, chiama il metodo Retrieve()
del retriever, passandogli una query di testo:
resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
Document: ai.DocumentFromText(userInput, nil),
Options: nil,
})
if err != nil {
return err
}
menuInfo := resp.Documents
Per informazioni generali, consulta la pagina relativa alla generazione aumentata del recupero discussione sull'uso di indexer e retriever per RAG.