Gerar texto usando a API Gemini

A API Gemini pode gerar saída de texto quando fornece texto, imagens, vídeo e áudio como entrada.

Este guia mostra como gerar texto usando os métodos generateContent e streamGenerateContent. Para saber como trabalhar com os recursos de visão e áudio do Gemini, consulte os guias Visão e Áudio.

Antes de começar: configure o projeto e a chave de API

Antes de chamar a API Gemini, você precisa configurar seu projeto e a chave de API.

Gerar texto com base em uma entrada somente de texto

A maneira mais simples de gerar texto usando a API Gemini é fornecer ao modelo uma única entrada de texto, conforme mostrado neste exemplo:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

Nesse caso, a instrução ("Escreva uma história sobre uma mochila mágica") não inclui exemplos de saída, instruções do sistema ou informações de formatação. É uma abordagem zero-shot. Para alguns casos de uso, uma solicitação one-shot ou few-shot pode produzir uma saída mais alinhada às expectativas do usuário. Em alguns casos, também é possível fornecer instruções do sistema para ajudar o modelo a entender a tarefa ou seguir diretrizes específicas.

Gerar texto com base em entradas de texto e imagem

A API Gemini oferece suporte a entradas multimodais que combinam texto com arquivos de mídia. O exemplo a seguir mostra como gerar texto com base em uma entrada de texto e imagem:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

function fileToGenerativePart(path, mimeType) {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString("base64"),
      mimeType,
    },
  };
}

const prompt = "Describe how this product might be manufactured.";
// Note: The only accepted mime types are some image types, image/*.
const imagePart = fileToGenerativePart(
  `${mediaPath}/jetpack.jpg`,
  "image/jpeg",
);

const result = await model.generateContent([prompt, imagePart]);
console.log(result.response.text());

Assim como os comandos somente de texto, os comandos multimodais podem envolver várias abordagens e refinamentos. Dependendo da saída desse exemplo, talvez seja necessário adicionar etapas ao comando ou ser mais específico nas instruções. Para saber mais, consulte Estratégias de solicitação de arquivo.

Gerar um stream de texto

Por padrão, o modelo retorna uma resposta após concluir todo o processo de geração de texto. É possível conseguir interações mais rápidas sem esperar pelo resultado completo. Em vez disso, use o streaming para processar resultados parciais.

O exemplo a seguir mostra como implementar o streaming usando o método streamGenerateContent para gerar texto de um comando de entrada somente texto.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Write a story about a magic backpack.";

const result = await model.generateContentStream(prompt);

// Print text as it comes in.
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

Criar um chat interativo

Você pode usar a API Gemini para criar experiências de chat interativo para seus usuários. Usando o recurso de chat da API, você pode coletar várias rodadas de perguntas e respostas, permitindo que os usuários avancem gradualmente para as respostas ou recebam ajuda com problemas de várias partes. Esse recurso é ideal para aplicativos que exigem comunicação contínua, como chatbots, tutores interativos ou assistentes de suporte ao cliente.

O exemplo de código a seguir mostra uma implementação básica de chat:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessage("I have 2 dogs in my house.");
console.log(result.response.text());
result = await chat.sendMessage("How many paws are in my house?");
console.log(result.response.text());

Ativar o streaming de chat

Também é possível usar o streaming com chat, conforme mostrado no exemplo a seguir:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessageStream("I have 2 dogs in my house.");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}
result = await chat.sendMessageStream("How many paws are in my house?");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

Configurar a geração de texto

Cada comando enviado ao modelo inclui parâmetros que controlam como o modelo gera respostas. Use GenerationConfig para configurar esses parâmetros. Se você não configurar os parâmetros, o modelo usará as opções padrão, que podem variar de acordo com o modelo.

O exemplo a seguir mostra como configurar várias das opções disponíveis.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
  generationConfig: {
    candidateCount: 1,
    stopSequences: ["x"],
    maxOutputTokens: 20,
    temperature: 1.0,
  },
});

const result = await model.generateContent(
  "Tell me a story about a magic backpack.",
);
console.log(result.response.text());

candidateCount especifica o número de respostas geradas a serem retornadas. Atualmente, esse valor só pode ser definido como 1. Se não for definido, o padrão será 1.

stopSequences especifica o conjunto de sequências de caracteres (até 5) que interromperá a geração de saída. Se especificado, a API vai parar na primeira aparição de uma stop_sequence. A sequência de paradas não será incluída como parte da resposta.

maxOutputTokens define o número máximo de tokens a serem incluídos em um candidato.

temperature controla a aleatoriedade da saída. Use valores mais altos para respostas mais criativas e valores mais baixos para respostas mais deterministas. Os valores podem variar de [0,0, 2,0].

Também é possível configurar chamadas individuais para generateContent:

const result = await model.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text: prompt,
        }
      ],
    }
  ],
  generationConfig: {
    maxOutputTokens: 1000,
    temperature: 0.1,
  },
});
console.log(result.response.text());

Todos os valores definidos na chamada individual substituem os valores no construtor do modelo.

A seguir

Agora que você já aprendeu os conceitos básicos da API Gemini, tente:

  • Compreensão visual: aprenda a usar a compreensão visual nativa do Gemini para processar imagens e vídeos.
  • Instruções do sistema: as instruções do sistema permitem orientar o comportamento do modelo com base nas suas necessidades e casos de uso específicos.
  • Entendimento de áudio: aprenda a usar o entendimento de áudio nativo do Gemini para processar arquivos de áudio.