Plug-in Pinecone

Il plug-in Pinecone fornisce implementazioni di indicizzatori e retriever che utilizzano il database di vettori cloud Pinecone.

Configurazione

Per utilizzare questo plug-in, importa il pacchetto pinecone e chiama pinecone.Init():

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

Il plug-in richiede la chiave API Pinecone. Configura il plug-in in modo che utilizzi la chiave API in uno dei seguenti modi:

  • Imposta la variabile di ambiente PINECONE_API_KEY sulla tua chiave API.

  • Specifica la chiave API durante l'inizializzazione del plug-in:

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

    Tuttavia, non incorporare la chiave API direttamente nel codice. Utilizza questa funzionalità solo in combinazione con un servizio come Cloud Secret Manager o uno simile.

Utilizzo

Per aggiungere documenti a un indice Pinecone, crea innanzitutto una definizione di indice che specifichi il nome dell'indice e il modello di embedding in uso:

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
}

Se vuoi, puoi anche specificare la chiave utilizzata da Pinecone per i dati del documento (_content per impostazione predefinita).

Quindi, chiama il metodo Index() dell'indice, passando un elenco dei documenti che vuoi aggiungere:

if err := ai.Index(
	ctx,
	menuIndexer,
	ai.WithIndexerDocs(docChunks...)); err != nil {
	return err
}

Analogamente, per recuperare documenti da un indice, devi prima creare un retriever definizione:

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
}

Quindi, chiama il metodo Retrieve() del retriever, passandogli una query di testo:

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

Per informazioni generali, consulta la pagina relativa alla generazione aumentata del recupero discussione sull'uso di indexer e retriever per RAG.