Plugin Pinecone menyediakan implementasi indexer dan retriever yang menggunakan database vektor cloud Pinecone.
Konfigurasi
Untuk menggunakan plugin ini, impor paket pinecone
dan panggil pinecone.Init()
:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
Plugin ini memerlukan kunci API Pinecone Anda. Konfigurasikan plugin untuk menggunakan kunci API Anda dengan melakukan salah satu hal berikut:
Tetapkan variabel lingkungan
PINECONE_API_KEY
ke kunci API Anda.Tentukan kunci API saat Anda menginisialisasi plugin:
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
Namun, jangan sematkan kunci API Anda secara langsung di dalam kode. Gunakan fitur ini saja bersama dengan layanan seperti Cloud Secret Manager atau yang serupa.
Penggunaan
Untuk menambahkan dokumen ke indeks Pinecone, pertama-tama buat definisi indeks yang menentukan nama indeks dan model embedding yang Anda gunakan:
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
}
Anda juga bisa secara opsional menentukan kunci yang digunakan Pinecone untuk data dokumen
(_content
, secara default).
Lalu, panggil metode Index()
indeks, dengan meneruskan daftar dokumen yang
ingin ditambahkan:
if err := ai.Index(
ctx,
menuIndexer,
ai.WithIndexerDocs(docChunks...)); err != nil {
return err
}
Demikian pula, untuk mengambil dokumen dari indeks, pertama-tama buat definisi pengambil:
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
}
Kemudian, panggil metode Retrieve()
pengambil, dengan meneruskan kueri teks:
resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
Document: ai.DocumentFromText(userInput, nil),
Options: nil,
})
if err != nil {
return err
}
menuInfo := resp.Documents
Lihat halaman Retrieval-augmented generation untuk mengetahui diskusi umum tentang penggunaan indexer dan retriever untuk RAG.