Das Pinecone-Plug-in bietet Indexierungs- und Abrufimplementierungen, die die Pinecone-Cloud-Vektordatenbank verwenden.
Konfiguration
Importieren Sie das Paket pinecone
und rufen Sie pinecone.Init()
auf, um dieses Plug-in zu verwenden:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
Für das Plug-in ist Ihr Pinecone API-Schlüssel erforderlich. Konfigurieren Sie das Plug-in so, dass Ihr API-Schlüssel verwendet wird. Führen Sie dazu einen der folgenden Schritte aus:
Legen Sie die Umgebungsvariable
PINECONE_API_KEY
auf Ihren API-Schlüssel fest.Geben Sie den API-Schlüssel an, wenn Sie das Plug-in initialisieren:
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
Betten Sie Ihren API-Schlüssel jedoch nicht direkt in den Code ein. Nur diese Funktion verwenden in Verbindung mit einem Dienst wie Cloud Secret Manager.
Nutzung
Um Dokumente zu einem Pinecone-Index hinzuzufügen, erstellen Sie zunächst eine Indexdefinition, gibt den Namen des Index und das verwendete Einbettungsmodell an:
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
}
Optional können Sie auch den Schlüssel angeben, den Pinecone für Dokumentdaten verwendet.
(Standardeinstellung: _content
).
Rufen Sie dann die Methode Index()
des Index auf und übergeben Sie eine Liste der Dokumente,
hinzufügen möchten:
if err := ai.Index(
ctx,
menuIndexer,
ai.WithIndexerDocs(docChunks...)); err != nil {
return err
}
Wenn Sie Dokumente aus einem Index abrufen möchten, müssen Sie zuerst eine Abrufdefinition erstellen:
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
}
Rufen Sie dann die Methode Retrieve()
des Retrievers auf und übergeben Sie eine Textabfrage:
resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
Document: ai.DocumentFromText(userInput, nil),
Options: nil,
})
if err != nil {
return err
}
menuInfo := resp.Documents
Auf der Seite Retrieval-Augmented Generation finden Sie allgemeine Informationen zur Verwendung von Indexern und Retrievern für RAG.