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 Vision e Áudio.
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:
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[{"text": "Write a story about a magic backpack."}]
}]
}' 2> /dev/null
Nesse caso, a instrução ("Explique como a IA funciona") 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:
# Use a temporary file to hold the base64 encoded image data
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"
# Use a temporary file to hold the JSON payload
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT
cat > "$TEMP_JSON" << EOF
{
"contents": [{
"parts":[
{"text": "Tell me about this instrument"},
{
"inline_data": {
"mime_type":"image/jpeg",
"data": "$(cat "$TEMP_B64")"
}
}
]
}]
}
EOF
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d "@$TEMP_JSON" 2> /dev/null
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 e, em vez disso, usar 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.
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=${GOOGLE_API_KEY}" \
-H 'Content-Type: application/json' \
--no-buffer \
-d '{ "contents":[{"parts":[{"text": "Write a story about a magic backpack."}]}]}'
Criar um chat interativo
O SDK do Gemini permite 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 do SDK oferece uma interface para acompanhar
o histórico de conversas, mas, nos bastidores, usa o mesmo método generateContent
para criar a resposta.
O exemplo de código a seguir mostra uma implementação básica de chat:
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{"role":"user",
"parts":[{
"text": "Hello"}]},
{"role": "model",
"parts":[{
"text": "Great to meet you. What would you like to know?"}]},
{"role":"user",
"parts":[{
"text": "I have two dogs in my house. How many paws are in my house?"}]},
]
}' 2> /dev/null | grep "text"
Ativar o streaming de chat
Também é possível usar o streaming com chat, conforme mostrado no exemplo a seguir:
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
{"role":"user",
"parts":[{
"text": "Hello"}]},
{"role": "model",
"parts":[{
"text": "Great to meet you. What would you like to know?"}]},
{"role":"user",
"parts":[{
"text": "I have two dogs in my house. How many paws are in my house?"}]},
]
}' 2> /dev/null | grep "text"
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.
curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"text": "Write a story about a magic backpack."}
]
}],
"safetySettings": [
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_ONLY_HIGH"
}
],
"generationConfig": {
"stopSequences": [
"Title"
],
"temperature": 1.0,
"maxOutputTokens": 800,
"topP": 0.8,
"topK": 10
}
}' 2> /dev/null | grep "text"
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 um stop_sequence
. A sequência de paradas não será incluída como parte da
resposta.
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].
maxOutputTokens
define o número máximo de tokens a serem incluídos em um candidato.
topP
muda a forma como o modelo seleciona tokens para saída. Os tokens são selecionados do
mais ao menos provável até que a soma das probabilidades seja igual ao
valor topP
. O valor padrão de topP
é 0,95.
topK
muda a forma como o modelo seleciona tokens para saída. Um topK
de 1 significa que o
token selecionado é o mais provável entre todos os tokens no vocabulário
do modelo, enquanto um topK
de 3 significa que o próximo token é selecionado entre
os três mais prováveis usando a temperatura. Os tokens são
filtrados com base em topP
, com o token final selecionado usando a amostragem
de temperatura.
Adicionar instruções do sistema
As instruções do sistema permitem orientar o comportamento de um modelo com base nas suas necessidades e casos de uso específicos.
Ao fornecer instruções do sistema ao modelo, você proporciona ao modelo mais contexto para entender a tarefa, gerar respostas mais personalizadas e aderir a diretrizes específicas sobre toda a interação do usuário com o modelo. Também é possível especificar o comportamento no nível do produto definindo instruções do sistema, separadas dos comandos fornecidos pelos usuários finais.
É possível definir instruções do sistema ao inicializar o modelo:
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
"parts":
{ "text": "You are a cat. Your name is Neko."}},
"contents": {
"parts": {
"text": "Hello there"}}}'
Para conferir um exemplo completo de como usar as instruções do sistema, consulte o Colab de instruções do sistema.
A seguir
Agora que você já aprendeu o básico da API Gemini, tente o seguinte:
- Compreensão visual: aprenda a usar a compreensão visual nativa do Gemini para processar imagens e vídeos.
- Entendimento de áudio: aprenda a usar o entendimento de áudio nativo do Gemini para processar arquivos de áudio.