Pinecone プラグイン

Pinecone プラグインは、Pinecone クラウド ベクトル データベースを使用するインデクサーとリトリーバーの実装を提供します。

構成

このプラグインを使用するには、pinecone パッケージをインポートして pinecone.Init() を呼び出します。

import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
	return err
}

このプラグインには Pinecone API キーが必要です。次のいずれかの方法で、API キーを使用するようにプラグインを設定します。

  • PINECONE_API_KEY 環境変数を API キーに設定します。

  • プラグインを初期化するときに API キーを指定します。

    if err := pinecone.Init(ctx, pineconeAPIKey); err != nil {
    	return err
    }
    

    ただし、API キーをコードに直接埋め込まないでください。この機能は、Cloud Secret Manager などのサービスと組み合わせてのみ使用してください。

用途

Pinecone インデックスにドキュメントを追加するには、まず、インデックスの名前と使用している埋め込みモデルを指定するインデックス定義を作成します。

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
}

必要に応じて、Pinecone がドキュメント データに使用するキー(デフォルトは _content)を指定することもできます。

次に、インデックスの Index() メソッドを呼び出して、追加するドキュメントのリストを渡します。

if err := ai.Index(
	ctx,
	menuIndexer,
	ai.WithIndexerDocs(docChunks...)); err != nil {
	return err
}

同様に、インデックスからドキュメントを取得するには、まずリトリーバーの定義を作成します。

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
}

次に、リトリーバーの Retrieve() メソッドを呼び出して、テキストクエリを渡します。

resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
	Document: ai.DocumentFromText(userInput, nil),
	Options:  nil,
})
if err != nil {
	return err
}
menuInfo := resp.Documents

RAG でインデクサーとリトリーバーを使用する一般的な方法については、検索拡張生成のページをご覧ください。