Plugin Pinecone

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.