Wtyczka Pinecone udostępnia implementacje indeksujące i retrievera, które korzystają z Wektorowa baza danych Pinecone w chmurze.
Konfiguracja
Aby użyć tej wtyczki, zaimportuj pakiet pinecone
i wywołaj pinecone.Init()
:
import "github.com/firebase/genkit/go/plugins/pinecone"
if err := pinecone.Init(ctx, ""); err != nil {
return err
}
Wtyczka wymaga klucza interfejsu Pinecone API. Skonfiguruj wtyczkę do korzystania z klucza interfejsu API, wykonując jedną z tych czynności:
Ustaw zmienną środowiskową
PINECONE_API_KEY
na swój klucz interfejsu API.Podaj klucz interfejsu API podczas inicjowania wtyczki:
if err := pinecone.Init(ctx, pineconeAPIKey); err != nil { return err }
Nie umieszczaj jednak klucza interfejsu API bezpośrednio w kodzie. Używaj tylko tej funkcji w połączeniu z usługą taką jak Cloud Secret Manager lub podobną.
Wykorzystanie
Aby dodać dokumenty do indeksu Pinecone, najpierw utwórz definicję indeksu, która określa nazwę indeksu i używany model wektora dystrybucyjnego:
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
}
Możesz też opcjonalnie określić klucz używany przez Pinecone do przechowywania danych dokumentu
(domyślnie _content
).
Następnie wywołaj metodę Index()
indeksu, przekazując do niej listę dokumentów,
chcesz dodać:
if err := ai.Index(
ctx,
menuIndexer,
ai.WithIndexerDocs(docChunks...)); err != nil {
return err
}
Podobnie, aby pobierać dokumenty z indeksu, najpierw utwórz aplikację retriever. definicja:
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
}
Następnie wywołaj metodę Retrieve()
pobierającego, przekazując do niej zapytanie tekstowe:
resp, err := menuRetriever.Retrieve(ctx, &ai.RetrieverRequest{
Document: ai.DocumentFromText(userInput, nil),
Options: nil,
})
if err != nil {
return err
}
menuInfo := resp.Documents
Ogólne informacje znajdziesz na stronie Generowanie rozszerzonego przez wyszukiwanie. .