Plug-in da IA generativa do Google

O plug-in da IA generativa do Google fornece interfaces para os modelos do Gemini do Google pela API Gemini.

Instalação

npm i --save @genkit-ai/googleai

Configuração

Para usar esse plug-in, especifique-o ao inicializar o Genkit:

import { genkit } from 'genkit';
import { googleAI } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
});

O plug-in exige uma chave de API para a API Gemini, que você pode acessar no Google AI Studio.

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

  • Defina a variável de ambiente GOOGLE_GENAI_API_KEY como sua chave de API.
  • Especifique a chave de API ao inicializar o plug-in:

    googleAI({ apiKey: yourKey });
    

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

Uso

Esse plug-in exporta estaticamente referências aos modelos compatíveis:

import {
  gemini15Flash,
  gemini15Pro,
  textEmbedding004,
} from '@genkit-ai/googleai';

Você pode usar essas referências para especificar qual modelo generate() usa:

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const llmResponse = await ai.generate('Tell me a joke.');

ou use embedders (por exemplo, textEmbedding004) com embed ou retrievers:

const ai = genkit({
  plugins: [googleAI()],
});

const embedding = await ai.embed({
  embedder: textEmbedding004,
  content: input,
});

API Gemini Files

É possível usar arquivos enviados para a API Gemini Files com o Genkit:

import { GoogleAIFileManager } from '@google/generative-ai/server';
import { genkit } from 'genkit';
import { googleAI } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
});

const fileManager = new GoogleAIFileManager(process.env.GOOGLE_GENAI_API_KEY);
const uploadResult = await fileManager.uploadFile(
  'path/to/file.jpg',
  {
    mimeType: 'image/jpeg',
    displayName: 'Your Image',
  }
);

const response = await ai.generate({
  model: gemini15Flash,
  prompt: [
    {text: 'Describe this image:'},
    {media: {contentType: uploadResult.file.mimeType, url: uploadResult.file.uri}}
  ]
});

Modelos ajustados

É possível usar modelos ajustados com a API Google Gemini. Siga as instruções da API Gemini ou ajuste um modelo usando o AI Studio.

O processo de ajuste usa um modelo base, por exemplo, o Gemini 1.5 Flash, e seus exemplos fornecidos para criar um novo modelo ajustado. Lembre-se do modelo de base que você usou e copie o ID do novo modelo.

Ao chamar o modelo ajustado no Genkit, use o modelo base como o parâmetro model e transmita o ID do modelo ajustado como parte do bloco config. Por exemplo, se você usou o Gemini 1.5 Flash como modelo base e recebeu o ID do modelo tunedModels/my-example-model-apbm8oqbvuv2, é possível fazer a chamada com:

const ai = genkit({
  plugins: [googleAI()],
});

const llmResponse = await ai.generate({
  prompt: `Suggest an item for the menu of fish themed restruant`,
  model: gemini15Flash.withConfig({
    version: "tunedModels/my-example-model-apbm8oqbvuv2",
  }),
});

Armazenamento em cache de contexto

O plug-in da IA generativa do Google oferece suporte ao armazenamento em cache de contexto, que permite que os modelos reutilizem o conteúdo armazenado em cache anteriormente para otimizar o desempenho e reduzir a latência em tarefas repetitivas. Esse recurso é especialmente útil para fluxos de conversa ou cenários em que o modelo faz referência a um grande volume de texto de forma consistente em várias solicitações.

Como usar o armazenamento em cache de contexto

Para ativar o armazenamento em cache de contexto, verifique se o modelo oferece suporte a ele. Por exemplo, gemini15Flash e gemini15Pro são modelos compatíveis com o armazenamento em cache de contexto.

É possível definir um mecanismo de armazenamento em cache no app desta forma:

const ai = genkit({
  plugins: [googleAI()],
});

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: 'Here is the relevant text from War and Peace.' }],
    },
    {
      role: 'model',
      content: [
        {
          text: 'Based on War and Peace, here is some analysis of Pierre Bezukhov’s character.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache this message for 5 minutes
        },
      },
    },
  ],
  model: gemini15Flash,
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 currently supports context caching
  },
  prompt: 'Describe Pierre’s transformation throughout the novel.',
});

Nessa configuração: - messages: permite transmitir o histórico de conversas. - metadata.cache.ttlSeconds: especifica o time to live (TTL) para armazenar uma resposta específica em cache.

Exemplo: como usar textos grandes com contexto

Para aplicativos que fazem referência a documentos longos, como Guerra e Paz ou O Senhor dos Anéis, é possível estruturar as consultas para reutilizar contextos em cache:

const fs = require('fs/promises');

const textContent = await fs.readFile('path/to/war_and_peace.txt', 'utf-8');

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: textContent }], // Include the large text as context
    },
    {
      role: 'model',
      content: [
        {
          text: 'This analysis is based on the provided text from War and Peace.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache the response to avoid reloading the full text
        },
      },
    },
  ],
  model: gemini15Flash,
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 currently supports context caching
  },
  prompt: 'Analyze the relationship between Pierre and Natasha.',
});

Como armazenar outros modos de conteúdo em cache

Os modelos do Gemini são multimodais, e outros modos de conteúdo também podem ser armazenados em cache.

Por exemplo, para armazenar em cache um conteúdo de vídeo longo, primeiro faça o upload usando o gerenciador de arquivos do SDK de IA do Google:

import { GoogleAIFileManager } from '@google/generative-ai/server';

const fileManager = new GoogleAIFileManager(
  process.env.GOOGLE_GENAI_API_KEY
);

// Upload video to Google AI using the Gemini Files API
const uploadResult = await fileManager.uploadFile(videoFilePath, {
  mimeType: 'video/mp4', // Adjust according to the video format
  displayName: 'Uploaded Video for Analysis',
});

const fileUri = uploadResult.file.uri;

Agora você pode configurar o cache nas chamadas para ai.generate:

const analyzeVideoResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [
        {
          media: {
            url: fileUri, // Use the uploaded file URL
            contentType: 'video/mp4',
          },
        },
      ],
    },
    {
      role: 'model',
      content: [
        {
          text: 'This video seems to contain several key moments. I will analyze it now and prepare to answer your questions.',
        },
      ],
      // Everything up to (including) this message will be cached.
      metadata: {
        cache: true,
      },
    },
  ],
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 versions support context caches
  },
  model: gemini15Flash,
  prompt: query,
});

Modelos com suporte para armazenamento em cache de contexto

Somente modelos específicos, como gemini15Flash e gemini15Pro, são compatíveis com o armazenamento em cache de contexto. Se um modelo sem suporte for usado, um erro será gerado, indicando que o armazenamento em cache não pode ser aplicado.

Leitura adicional

Confira mais informações sobre o armazenamento em cache de contexto na documentação da Google AI.