Plugin Pinecone menyediakan implementasi pengindeks dan pengambil 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. Konfigurasi 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 penyematan 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 menambahkan:
if err := menuIndexer.Index(
ctx,
&ai.IndexerRequest{Documents: docChunks, Options: nil},
); err != nil {
return err
}
Demikian pula, untuk mengambil dokumen dari indeks, pertama-tama buat retriever definisi:
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 Pembuatan yang ditingkatkan untuk diskusi tentang penggunaan pengindeks dan pengambilan untuk RAG.