Complemento de IA generativa de Google

El complemento de IA generativa de Google proporciona interfaces para los modelos de Gemini de Google a través de la API de Gemini.

Configuración

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

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

El complemento requiere una clave de API para la API de Gemini, que puedes obtener en Google AI Studio

Configura el complemento para usar tu clave de API mediante una de las siguientes acciones:

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

  • Especifica la clave de API cuando inicialices el complemento:

    if err := googleai.Init(ctx, &googleai.Config{APIKey: yourKey}); 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

Modelos generativos

Para obtener una referencia a un modelo compatible, especifica su identificador:

langModel := googleai.Model("gemini-1.5-pro")

Se admiten los siguientes modelos: gemini-1.0-pro, gemini-1.5-pro y gemini-1.5-flash.

Las referencias de modelo tienen un método Generate() que llama a la API de IA de Google:

genRes, err := langModel.Generate(ctx, ai.NewGenerateRequest(
    nil, ai.NewUserTextMessage("Tell me a joke.")), nil)
if err != nil {
    return err
}

Consulta Generación de contenido para obtener más información.

Modelos de incorporación

Para obtener una referencia a un modelo de incorporación compatible, especifica su identificador:

embeddingModel := googleai.Embedder("text-embedding-004")

Se admiten los siguientes modelos: text-embedding-004 y embedding-001.

Las referencias de incorporaciones tienen un método Embed() que llama a la API de IA de Google:

embedRes, err := embeddingModel.Embed(ctx, &ai.EmbedRequest{
    Documents: []*ai.Document{ai.DocumentFromText(userInput, nil)},
})
if err != nil {
    return err
}

También puedes pasar un Embedder al método Index() de un indexador y al método Método Retrieve():

if err := myIndexer.Index(ctx, &ai.IndexerRequest{Documents: docsToIndex}); err != nil {
    return err
}
retrieveRes, err := myRetriever.Retrieve(ctx, &ai.RetrieverRequest{
    Document: ai.DocumentFromText(userInput, nil),
})
if err != nil {
    return err
}

Consulta Generación aumentada de recuperación (RAG) para obtener más información.