Trình bổ trợ Pinecone

Trình bổ trợ Pinecone cung cấp các phương thức triển khai cho trình lập chỉ mục và truy xuất ngược lại sử dụng Cơ sở dữ liệu vectơ trên đám mây Pinecone.

Cấu hình

Để sử dụng trình bổ trợ này, hãy nhập gói pinecone và gọi pinecone.Init():

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

Trình bổ trợ yêu cầu khoá API Pinecone của bạn. Định cấu hình trình bổ trợ để sử dụng khoá API bằng cách thực hiện một trong những thao tác sau:

  • Đặt biến môi trường PINECONE_API_KEY thành khoá API.

  • Chỉ định khoá API khi bạn khởi chạy trình bổ trợ:

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

    Tuy nhiên, đừng nhúng khóa API trực tiếp vào mã! Chỉ sử dụng tính năng này cùng với một dịch vụ như Cloud Secret Manager hoặc các dịch vụ tương tự.

Cách sử dụng

Để thêm tài liệu vào chỉ mục Pinecone, trước tiên hãy tạo định nghĩa chỉ mục chỉ định tên của chỉ mục và mô hình nhúng mà bạn đang sử dụng:

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
}

Bạn cũng có thể tuỳ ý chỉ định khoá mà Pinecone sử dụng cho dữ liệu tài liệu (_content, theo mặc định).

Sau đó, hãy gọi phương thức Index() của chỉ mục, chuyển vào phương thức này danh sách tài liệu bạn muốn thêm:

if err := menuIndexer.Index(
    ctx,
    &ai.IndexerRequest{Documents: docChunks, Options: nil},
); err != nil {
    return err
}

Tương tự, để truy xuất tài liệu từ một chỉ mục, trước tiên hãy tạo trình truy xuất định nghĩa:

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
}

Sau đó, gọi phương thức Retrieve() của trình truy xuất, truyền vào phương thức đó một truy vấn văn bản:

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

Hãy xem trang Thế hệ tăng cường truy xuất để biết thông tin chung thảo luận về cách sử dụng trình lập chỉ mục và trình tha mồi cho RAG.