Wtyczka Pinecone

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.Pinecone{}).Init(ctx, g); 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.Pinecone{APIKey: pineconeAPIKey}).Init(ctx, g); 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, g, pinecone.Config{
	IndexID:  "menu_data",                                           // Your Pinecone index
	Embedder: googlegenai.GoogleAIEmbedder(g, "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, g, pinecone.Config{
	IndexID:  "menu_data",                                           // Your Pinecone index
	Embedder: googlegenai.GoogleAIEmbedder(g, "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{
	Query:   ai.DocumentFromText(userInput, nil),
	Options: nil,
})
if err != nil {
	return err
}
menuInfo := resp.Documents

Ogólne informacje znajdziesz na stronie Generowanie rozszerzonego przez wyszukiwanie. .