Complemento de piña

El complemento Pinecone proporciona implementaciones de indexadores y retriever que usan el Pinecone en la base de datos de vectores en la nube.

Configuración

Para usar este complemento, importa el paquete pinecone y llama a pinecone.Init():

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

El complemento requiere tu clave de API de Pinecone. Configura el complemento para usar tu clave de API mediante una de las siguientes acciones:

  • Establece la variable de entorno PINECONE_API_KEY en tu clave de API.

  • Especifica la clave de API cuando inicialices el complemento:

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

    Sin embargo, no incorpores tu clave de API directamente en el código. Usar solo esta función junto con un servicio como Cloud Secret Manager o uno similar.

Uso

Para agregar documentos a un índice de Pinecone, primero crea una definición de índice que especifica el nombre del índice y el modelo de incorporación que estás 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
}

De manera opcional, también puedes especificar la clave que Pinecone usa para los datos de documentos (_content, de forma predeterminada).

Luego, llama al método Index() del índice y pásale una lista de los documentos que deseas agregar:

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

Del mismo modo, para recuperar documentos de un índice, primero crea un retriever definición:

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
}

Luego, llama al método Retrieve() del retriever y pásale una 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

Consulta la página de generación aumentada de recuperación para ver un panorama general debate sobre el uso de indexadores y retrievers para RAG.