Plug-in Pinecone

O plug-in Pinecone fornece implementações do indexador e do retriever que usam o Banco de dados de vetores de nuvem Pinecone.

Configuração

Para usar esse plug-in, importe o pacote pinecone e chame pinecone.Init():

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

O plug-in requer sua chave de API Pinecone. Siga um destes procedimentos para configurar o plug-in para usar sua chave de API:

  • Defina a variável de ambiente PINECONE_API_KEY como sua chave de API.

  • Especifique a chave de API ao inicializar o plug-in:

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

    No entanto, não incorpore a chave de API diretamente no código. Usar apenas este recurso junto com um serviço como o Cloud Secret Manager ou similar.

Uso

Para adicionar documentos a um índice Pinecone, primeiro crie uma definição de índice que especifica o nome do índice e o modelo de embedding que você está usando:

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
}

Também é possível especificar a chave que a Pinecone usa para os dados dos documentos (_content, por padrão).

Em seguida, chame o método Index() do índice, passando uma lista dos documentos que você que você quer adicionar:

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

Da mesma forma, para recuperar documentos de um índice, primeiro crie um recuperador definição:

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
}

Em seguida, chame o método Retrieve() do recuperador, transmitindo uma consulta de texto:

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

Consulte a página Geração aumentada de recuperação para discussão sobre o uso de indexadores e recuperadores para RAG.