Pinecone-Plug-in

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.