Gerar conteúdo com a API Enterprise Gemini

Usar generateContent ou streamGenerateContent para gerar conteúdo com o Gemini.

A família de modelos do Gemini inclui modelos que funcionam com solicitações de comando multimodais. O termo multimodal indica que é possível usar mais de uma modalidade, ou tipo de entrada, em um comando. Os modelos que não são multimodais aceitam solicitações apenas com texto. As modalidades podem incluir texto, áudio, vídeo e muito mais.

Crie uma conta do Google Cloud para começar

Para começar a usar a API Vertex AI para Gemini, crie uma conta do Google Cloud.

Depois de criar sua conta, use este documento para analisar o corpo da solicitação do modelo Gemini, os parâmetros do modelo, o corpo da resposta e alguns exemplos de solicitações.

Quando estiver tudo pronto, consulte o guia de início rápido da API Vertex AI para Gemini para saber como enviar uma solicitação à API Vertex AI Gemini usando o SDK da linguagem de programação ou a API REST.

Modelos compatíveis

Modelo Versão
Gemini 1.5 Flash gemini-1.5-flash-001
gemini-1.5-flash-002
Gemini 1.5 Pro gemini-1.5-pro-001
gemini-1.5-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-001
gemini-1.0-pro-vision-001
Gemini 1.0 Pro gemini-1.0-pro
gemini-1.0-pro-001
gemini-1.0-pro-002

Exemplo de sintaxe

Sintaxe para gerar uma resposta de modelo.

Não streaming

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \

https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:generateContent \
-d '{
  "contents": [{
    ...
  }],
  "generationConfig": {
    ...
  },
  "safetySettings": {
    ...
  }
  ...
}'

Python

gemini_model = GenerativeModel(MODEL_ID)
generation_config = GenerationConfig(...)

model_response = gemini_model.generate_content([...], generation_config, safety_settings={...})

Streaming

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:streamGenerateContent \
  -d '{
    "contents": [{
      ...
    }],
    "generationConfig": {
      ...
    },
    "safetySettings": {
      ...
    }
    ...
  }'

Python

gemini_model = GenerativeModel(MODEL_ID)
model_response = gemini_model.generate_content([...], generation_config, safety_settings={...}, stream=True)

Lista de parâmetros

Confira exemplos para detalhes de implementação.

Corpo da solicitação

{
  "cachedContent": string,
  "contents": [
    {
      "role": string,
      "parts": [
        {
          // Union field data can be only one of the following:
          "text": string,
          "inlineData": {
            "mimeType": string,
            "data": string
          },
          "fileData": {
            "mimeType": string,
            "fileUri": string
          },
          // End of list of possible types for union field data.

          "videoMetadata": {
            "startOffset": {
              "seconds": integer,
              "nanos": integer
            },
            "endOffset": {
              "seconds": integer,
              "nanos": integer
            }
          }
        }
      ]
    }
  ],
  "systemInstruction": {
    "role": string,
    "parts": [
      {
        "text": string
      }
    ]
  },
  "tools": [
    {
      "functionDeclarations": [
        {
          "name": string,
          "description": string,
          "parameters": {
            object (OpenAPI Object Schema)
          }
        }
      ]
    }
  ],
  "safetySettings": [
    {
      "category": enum (HarmCategory),
      "threshold": enum (HarmBlockThreshold)
    }
  ],
  "generationConfig": {
    "temperature": number,
    "topP": number,
    "topK": number,
    "candidateCount": integer,
    "maxOutputTokens": integer,
    "presencePenalty": float,
    "frequencyPenalty": float,
    "stopSequences": [
      string
    ],
    "responseMimeType": string,
    "responseSchema": schema,
    "seed": integer,
    "responseLogprobs": boolean,
    "logprobs": integer,
    "audioTimestamp": boolean
  },
  "labels": {
    string: string
  }
}

O corpo da solicitação contém dados com os seguintes parâmetros:

Parâmetros

cachedContent

Opcional: string

O nome do conteúdo armazenado em cache usado como contexto para mostrar a previsão. Formato: projects/{project}/locations/{location}/cachedContents/{cachedContent}

contents

Obrigatório: Content

O conteúdo da conversa atual com o modelo.

Para consultas de turno único, esta é uma instância única. Para consultas com várias interações, esse é um campo repetido que contém o histórico da conversa e a solicitação mais recente.

systemInstruction

Opcional: Content

Disponível para gemini-1.5-flash, gemini-1.5-pro e gemini-1.0-pro-002.

Instruções para o modelo gerar um desempenho melhor. Por exemplo, "Responda da forma mais concisa possível" ou "Não use termos técnicos na resposta".

As strings text são contabilizadas no limite de tokens.

O campo role do systemInstruction é ignorado e não afeta o desempenho do modelo.

tools

Opcional. Uma parte do código que permite ao sistema interagir com sistemas externos para realizar uma ação ou conjunto de ações fora do conhecimento e do escopo do modelo. Consulte Chamada de função.

toolConfig

Opcional. Consulte Chamada de função.

safetySettings

Opcional: SafetySetting

Configurações conforme a solicitação para bloquear conteúdo não seguro.

Aplicado em GenerateContentResponse.candidates.

generationConfig

Opcional: GenerationConfig

Configurações de geração.

labels

Opcional: string

Metadados que podem ser adicionados à chamada de API no formato de pares de chave-valor.

contents

O tipo de dados estruturados de base que contém várias partes de uma mensagem.

Essa classe consiste em duas properties principais: role e parts. A propriedade role indica o indivíduo que produz o conteúdo, enquanto a propriedade parts contém vários elementos, cada um representando um segmento de dados em uma mensagem.

Parâmetros

role

Opcional: string

A identidade da entidade que cria a mensagem. Os valores a seguir são compatíveis:

  • user: indica que a mensagem é enviada por uma pessoa real, geralmente uma mensagem gerada pelo usuário.
  • model: indica que a mensagem é gerada pelo modelo.

O valor model é usado para inserir mensagens do modelo na conversa durante conversas com vários turnos.

Para conversas que não têm vários turnos, esse campo pode ser deixado em branco ou sem definição.

parts

Part

Uma lista de partes ordenadas que compõem uma única mensagem. Partes diferentes podem ter tipos MIME IANA distintos.

Para ver os limites das entradas, como o número máximo de tokens ou o número de imagens, consulte as especificações do modelo na página Modelos do Google.

Para calcular o número de tokens na solicitação, consulte Receber contagem de tokens.

parts

Um tipo de dados que contém mídia que faz parte de uma mensagem Content de várias partes.

Parâmetros

text

Opcional: string

Um comando de texto ou snippet de código.

inlineData

Opcional: Blob

Dados inline em bytes brutos.

Para gemini-1.0-pro-vision, é possível especificar no máximo 1 imagem usando inlineData. Para especificar até 16 imagens, use fileData.

fileData

Opcional: fileData

Dados armazenados em um arquivo.

functionCall

Opcional: FunctionCall.

Ele contém uma string que representa o campo FunctionDeclaration.name e um objeto JSON estruturado com todos os parâmetros para a chamada de função prevista pelo modelo.

Consulte Chamada de função.

functionResponse

Opcional: FunctionResponse.

A saída resultante de uma FunctionCall que contém uma string que representa o campo FunctionDeclaration.name e um objeto JSON estruturado com qualquer saída da chamada de função. Ele é usado como contexto para o modelo.

Consulte Chamada de função.

videoMetadata

Opcional: VideoMetadata

Para entrada de vídeo, o deslocamento inicial e final do vídeo no formato Duração. Por exemplo, para especificar um clipe de 10 segundos a partir de 1:00, defina "startOffset": { "seconds": 60 } e "endOffset": { "seconds": 70 }.

Os metadados só devem ser especificados enquanto os dados do vídeo estiverem apresentados em inlineData ou fileData.

blob

blob de conteúdo Se possível, envie como texto em vez de bytes brutos.

Parâmetros

mimeType

string

O tipo de mídia do arquivo especificado nos campos data ou fileUri. Os valores aceitáveis são os seguintes:

Clique para expandir os tipos MIME.

  • application/pdf
  • audio/mpeg
  • audio/mp3
  • audio/wav
  • image/png
  • image/jpeg
  • image/webp
  • text/plain
  • video/mov
  • video/mpeg
  • video/mp4
  • video/mpg
  • video/avi
  • video/wmv
  • video/mpegps
  • video/flv

Para gemini-1.0-pro-vision, a duração máxima do vídeo é de 2 minutos.

Para o Gemini 1.5 Pro e o Gemini 1.5 Flash, a duração máxima de um arquivo de áudio é de 8,4 horas e a duração máxima de um arquivo de vídeo (sem áudio) é de uma hora. Para mais informações, consulte Requisitos de mídia do Gemini 1.5 Pro.

Os arquivos de texto precisam ser codificados em UTF-8. O conteúdo do arquivo de texto é contabilizado no limite de tokens.

Não há limite para a resolução da imagem.

data

bytes

A codificação Base64 da imagem, PDF ou do vídeo a ser incluído inline no comando. Ao incluir mídia inline, você também precisa especificar a mídia tipo (mimeType) dos dados.

Limite de tamanho: 20 MB.

FileData

Dados de URI ou URL da Web.

Parâmetros

mimeType

string

Tipo MIME IANA dos dados.

fileUri

string

O URI ou URL do arquivo a ser incluído no comando. Os valores aceitáveis são os seguintes:

  • URI do bucket do Cloud Storage: o objeto precisa ser publicamente legível ou residir no mesmo projeto do Google Cloud que está enviando a solicitação. Para gemini-1.5-pro e gemini-1.5-flash, o limite de tamanho é de 2 GB. Para gemini-1.0-pro-vision, o limite de tamanho é de 20 MB.
  • URL HTTP: o URL do arquivo precisa ser legível publicamente. É possível especificar um arquivo de vídeo, um arquivo de áudio e até 10 arquivos de imagem por solicitação. Os arquivos de áudio, vídeo e documentos não podem exceder 15 MB.
  • URL do vídeo do YouTube: o vídeo do YouTube precisa ser de propriedade da conta que você usou para fazer login no console do Google Cloud ou ser público. Somente um URL de vídeo do YouTube é aceito por solicitação.

Ao especificar um fileURI, você também precisa especificar o tipo de mídia (mimeType) do arquivo.

functionCall

Um functionCall previsto retornado do modelo que contém uma string que representa o functionDeclaration.name e um objeto JSON estruturado contendo os parâmetros e os valores deles.

Parâmetros

name

string

O nome da função a ser chamada.

args

Struct

Os parâmetros e valores da função no formato de objeto JSON.

Consulte Chamada de função para ver detalhes dos parâmetros.

functionResponse

A saída resultante de um FunctionCall que contém uma string que representa o FunctionDeclaration.name. Também contém um objeto JSON estruturado com a saída da função e o usa como contexto para o modelo. Ela precisa conter o resultado de uma FunctionCall feita com base na previsão do modelo.

Parâmetros

name

string

O nome da função a ser chamada.

response

Struct

A resposta da função no formato de objeto JSON.

videoMetadata

Metadados que descrevem o conteúdo do vídeo de entrada.

Parâmetros

startOffset

Opcional: google.protobuf.Duration

O deslocamento inicial do vídeo.

endOffset

Opcional: google.protobuf.Duration

O deslocamento final do vídeo.

safetySetting

Configurações de segurança.

Parâmetros

category

Opcional: HarmCategory

A categoria de segurança para a qual configurar um limite. Os valores aceitáveis são os seguintes:

Clique para expandir as categorias de segurança

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT

threshold

Opcional: HarmBlockThreshold

O limite de bloqueio de respostas que podem pertencer à categoria de segurança especificada com base na probabilidade.

  • OFF
  • BLOCK_NONE
  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

method

Opcional: HarmBlockMethod

Especifique se o limite é usado para pontuação de probabilidade ou gravidade. Se não for especificado, o limite será usado para a pontuação de probabilidade.

harmCategory

Categorias de danos que bloqueiam conteúdo.

Parâmetros

HARM_CATEGORY_UNSPECIFIED

A categoria de danos não foi especificada.

HARM_CATEGORY_HATE_SPEECH

A categoria de danos é discurso de ódio.

HARM_CATEGORY_DANGEROUS_CONTENT

A categoria de danos é um conteúdo perigoso.

HARM_CATEGORY_HARASSMENT

A categoria de dano é assédio.

HARM_CATEGORY_SEXUALLY_EXPLICIT

A categoria de dano é conteúdo sexualmente explícito.

harmBlockThreshold

Níveis de limites de probabilidade usados para bloquear uma resposta.

Parâmetros

HARM_BLOCK_THRESHOLD_UNSPECIFIED

Limite de bloqueio de danos não especificado.

BLOCK_LOW_AND_ABOVE

Bloquear o limite inferior e superior (ou seja, bloquear mais).

BLOCK_MEDIUM_AND_ABOVE

Bloquear limite médio e superior.

BLOCK_ONLY_HIGH

Bloquear apenas o limite superior (ou seja, bloquear menos).

BLOCK_NONE

Bloquear nenhum.

OFF

Desativa a segurança se todas as categorias estiverem DESATIVADAS

harmBlockMethod

Um limite de probabilidade que bloqueia uma resposta com base em uma combinação de probabilidade e gravidade.

Parâmetros

HARM_BLOCK_METHOD_UNSPECIFIED

O método do bloco de danos não foi especificado.

SEVERITY

O método do bloqueio de danos usa pontuações de probabilidade e gravidade.

PROBABILITY

O método do bloqueio de danos usa a pontuação de probabilidade.

generationConfig

Configurações usadas ao gerar o comando.

Parâmetros

temperature

Opcional: float

A temperatura é usada para amostragem durante a geração da resposta, que ocorre quando topP e topK são aplicados. A temperatura controla o grau de aleatoriedade na seleção do token. Temperaturas mais baixas são boas para solicitações que exigem uma resposta menos aberta ou criativa, enquanto temperaturas mais altas podem levar a resultados mais diversos ou criativos. Uma temperatura de 0 significa que os tokens de maior probabilidade são sempre selecionados. Nesse caso, as respostas para uma determinada solicitação são, na maioria das vezes, deterministas, mas uma pequena variação ainda é possível.

Se o modelo retornar uma resposta muito genérica, muito curta ou se o modelo fornecer uma resposta alternativa, tente aumentar a temperatura.

  • Intervalo para gemini-1.5-flash: 0.0 - 2.0 (padrão: 1.0)
  • Intervalo para gemini-1.5-pro: 0.0 - 2.0 (padrão: 1.0)
  • Intervalo para gemini-1.0-pro-vision: 0.0 - 1.0 (padrão: 0.4)
  • Intervalo para gemini-1.0-pro-002: 0.0 - 2.0 (padrão: 1.0)
  • Intervalo para gemini-1.0-pro-001: 0.0 - 1.0 (padrão: 0.9)

Para mais informações, consulte Parâmetros de geração de conteúdo.

topP

Opcional: float

Se especificado, a amostragem de núcleos é usada.

O Top-P muda a forma como o modelo seleciona tokens para saída. Os tokens são selecionados do mais provável (confira o Top-K) para o menos provável até que a soma das probabilidades seja igual ao valor do Top-P. Por exemplo, se os tokens A, B e C tiverem uma probabilidade de 0,3, 0,2 e 0,1 e o valor de top-P for 0.5, o modelo vai selecionar A ou B como token seguinte usando temperatura e excluir C como candidato.

Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias.

  • Intervalo: 0.0 - 1.0
  • Padrão para gemini-1.5-flash: 0.95
  • Padrão para gemini-1.5-pro: 0.95
  • Padrão para gemini-1.0-pro: 1.0
  • Padrão para gemini-1.0-pro-vision: 1.0

topK

Opcional: o Top-K muda a forma como o modelo seleciona tokens para saída. O valor 1 de Top-K significa que o próximo token selecionado é o mais provável entre todos no vocabulário do modelo (também chamado de decodificação gananciosa), enquanto o valor 3 de Top-K significa que o próximo token é selecionado entre os três mais prováveis usando a temperatura.

Para cada etapa da seleção de tokens, são amostrados os tokens Top-K com as maiores probabilidades. Em seguida, os tokens são filtrados com base no valor de Top-P com o token final selecionado por meio da amostragem de temperatura.

Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias.

Intervalo: 1-40

Compatível apenas com gemini-1.0-pro-vision.

Padrão para gemini-1.0-pro-vision: 32

candidateCount

Opcional: int

O número de variações de resposta a serem retornadas. Para cada solicitação, você paga pelos tokens de saída de todos os candidatos, mas são cobrados apenas uma vez pelos tokens de entrada.

Especificar vários candidatos é um recurso em fase de pré-lançamento que funciona com generateContent (streamGenerateContent não é compatível). Os seguintes modelos são compatíveis:

  • Gemini 1.5 Flash: 1-8, padrão: 1
  • Gemini 1.5 Pro: 1-8, padrão: 1
  • Gemini 1.0 Pro: 1-8, padrão: 1

maxOutputTokens

Opcional: int

Número máximo de tokens que podem ser gerados na resposta. Um token tem cerca de quatro caracteres. 100 tokens correspondem a cerca de 60 a 80 palavras.

Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas potencialmente mais longas.

Para mais informações, consulte Parâmetros de geração de conteúdo.

stopSequences

Opcional: List[string]

Especifica uma lista de strings que instrui o modelo a parar de gerar texto se uma das strings for encontrada na resposta. Se uma string aparecer várias vezes na resposta, a resposta truncará quando for encontrada pela primeira vez. As strings diferenciam maiúsculas de minúsculas.

Por exemplo, se a resposta a seguir for retornada quando stopSequences não for especificado:

public static string reverse(string myString)

A resposta retornada com stopSequences definida como ["Str", "reverse"] é:

public static string

Máximo de cinco itens na lista.

Para mais informações, consulte Parâmetros de geração de conteúdo.

presencePenalty

Opcional: float

Penalidades positivas.

Valores positivos penalizam tokens que já aparecem no texto gerado, aumentando a probabilidade de gerar conteúdo mais diversificado.

O valor máximo de presencePenalty é até 2.0, mas não inclui. O valor mínimo é -2.0.

Compatível com gemini-1.5-pro e gemini-1.5-flash.

frequencyPenalty

Opcional: float

Valores positivos penalizam tokens que aparecem repetidamente no texto gerado, diminuindo a probabilidade de repetir conteúdo.

O valor máximo para frequencyPenalty é até 2.0, mas não inclui. O valor mínimo é -2.0.

Compatível com gemini-1.5-pro e gemini-1.5-flash.

responseMimeType

Opcional: string (enum)

Disponível para os seguintes modelos:

  • gemini-1.5-pro
  • gemini-1.5-flash

O tipo MIME da resposta de saída do texto candidato gerado.

Os seguintes tipos MIME são compatíveis:

  • application/json: resposta JSON nos candidatos.
  • text/plain (padrão): saída de texto simples.
  • text/x.enum: para tarefas de classificação, gera um valor de tipo enumerado, conforme definido no esquema de resposta.

Especifique o tipo de resposta adequado para evitar comportamentos não intencionais. Por exemplo, se você precisar de uma resposta formatada em JSON, especifique application/json e não text/plain.

responseSchema

Opcional: esquema

O esquema que gerou o texto candidato precisa seguir. Para mais informações, consulte Controlar a saída gerada.

É necessário especificar o parâmetro responseMimeType para usar esse parâmetro.

Disponível para os seguintes modelos:

  • gemini-1.5-pro
  • gemini-1.5-flash

seed

Opcional: int

Quando a semente é fixada em um valor específico, o modelo se esforça para fornecer a mesma resposta para solicitações repetidas. A saída determinista não é garantida. Além disso, mudar as configurações do modelo ou do parâmetro, como a temperatura, pode causar variações na resposta, mesmo quando você usa o mesmo valor de semente. Por padrão, um valor de semente aleatório é usado.

Disponível para os seguintes modelos:

  • gemini-1.5-pro
  • gemini-1.5-flash
  • gemini-1.0-pro-002

Este é um recurso em fase de pré-lançamento.

responseLogprobs

Opcional: boolean

Se verdadeiro, retorna as probabilidades de registro dos tokens que foram escolhidos pelo modelo em cada etapa. Por padrão, esse parâmetro é definido como false.

Disponível para os seguintes modelos:

  • gemini-1.5-flash

Este é um recurso em fase de pré-lançamento.

logprobs

Opcional: int

Retorna as probabilidades de registro dos principais tokens candidatos em cada etapa de geração. O token escolhido pelo modelo pode não ser o mesmo que o principal candidato em cada etapa. Especifique o número de candidatos a serem retornados usando um valor inteiro no intervalo de 1 a 5.

É necessário ativar responseLogprobs para usar esse parâmetro.

Este é um recurso em fase de pré-lançamento.

audioTimestamp

Opcional: boolean

Disponível para os seguintes modelos:

  • gemini-1.5-pro-002
  • gemini-1.5-flash-002

Permite o entendimento de carimbos de data/hora para arquivos somente de áudio.

Este é um recurso em fase de pré-lançamento.

Corpo da resposta

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": string
          }
        ]
      },
      "finishReason": enum (FinishReason),
      "safetyRatings": [
        {
          "category": enum (HarmCategory),
          "probability": enum (HarmProbability),
          "blocked": boolean
        }
      ],
      "citationMetadata": {
        "citations": [
          {
            "startIndex": integer,
            "endIndex": integer,
            "uri": string,
            "title": string,
            "license": string,
            "publicationDate": {
              "year": integer,
              "month": integer,
              "day": integer
            }
          }
        ]
      },
      "avgLogprobs": double,
      "logprobsResult": {
        "topCandidates": [
          {
            "candidates": [
              {
                "token": string,
                "logProbability": float
              }
            ]
          }
        ],
        "chosenCandidates": [
          {
            "token": string,
            "logProbability": float
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": integer,
    "candidatesTokenCount": integer,
    "totalTokenCount": integer
  },
  "modelVersion": string
}
Elemento de resposta Descrição
modelVersion O modelo e a versão usados para a geração. Exemplo: gemini-1.5-flash-002.
text O texto gerado.
finishReason É o motivo pelo qual o modelo parou de gerar tokens. Se estiver vazio, o modelo não parou de gerar os tokens. Como a resposta usa o comando para contexto, não é possível alterar o comportamento de como o modelo para de gerar tokens.
  • FINISH_REASON_STOP: ponto de parada natural do modelo ou sequência de paradas fornecida.
  • FINISH_REASON_MAX_TOKENS: o número máximo de tokens especificado na solicitação foi atingido.
  • FINISH_REASON_SAFETY: a geração de tokens foi interrompida porque a resposta foi sinalizada por motivos de segurança. Observe que Candidate.content fica vazio se os filtros de conteúdo bloquearem a saída.
  • FINISH_REASON_RECITATION: a geração de tokens foi interrompida porque a resposta foi sinalizada por citações não autorizadas.
  • FINISH_REASON_BLOCKLIST: a geração de tokens foi interrompida porque a resposta inclui termos bloqueados.
  • FINISH_REASON_PROHIBITED_CONTENT: a geração de tokens foi interrompida porque a resposta foi sinalizada por conteúdo proibido, como material de abuso sexual infantil (CSAM, na sigla em inglês).
  • FINISH_REASON_SPII: a geração de tokens foi interrompida porque a resposta foi sinalizada por informações sensíveis de identificação pessoal (SPII).
  • FINISH_REASON_MALFORMED_FUNCTION_CALL: os candidatos foram bloqueados devido a uma chamada de função malformada e não analisável.
  • FINISH_REASON_OTHER: todos os outros motivos que interromperam o token
  • FINISH_REASON_UNSPECIFIED: o motivo da finalização não foi especificado.
category A categoria de segurança para a qual configurar um limite. Os valores aceitáveis são os seguintes:

Clique para expandir as categorias de segurança

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT
probability Os níveis de probabilidade de danos no conteúdo.
  • HARM_PROBABILITY_UNSPECIFIED
  • NEGLIGIBLE
  • LOW
  • MEDIUM
  • HIGH
blocked Uma sinalização booleana associada a um atributo de segurança que indica se a entrada ou a saída do modelo foi bloqueada.
startIndex Um número inteiro que especifica onde começa uma citação em content.
endIndex Um número inteiro que especifica onde uma citação termina em content.
url O URL de uma fonte de citação. Exemplos de uma fonte de URL podem ser um site de notícias ou um repositório do GitHub.
title O título de uma fonte de citação. Alguns exemplos de títulos de fontes são os de artigos de notícias ou livros.
license A licença associada a uma citação.
publicationDate A data em que uma citação foi publicada. Os formatos válidos são YYYY, YYYY-MM e YYYY-MM-DD.
avgLogprobs Probabilidade média de registro do candidato.
logprobsResult Retorna os principais tokens candidatos (topCandidates) e os tokens escolhidos (chosenCandidates) em cada etapa.
token Os modelos de IA generativa dividem os dados de texto em tokens para processamento, que podem ser caracteres, palavras ou frases.
logProbability Um valor de probabilidade de registro que indica a confiança do modelo para um token específico.
promptTokenCount Número de tokens na solicitação.
candidatesTokenCount Número de tokens nas respostas.
totalTokenCount Número de tokens na solicitação e nas respostas.

Exemplos

Resposta de texto sem streaming

Gere uma resposta de modelo sem streaming com base em uma entrada de texto.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o ID do modelo que você quer usar (por exemplo, gemini-1.5-flash-002). Veja a lista de modelos compatíveis.
  • TEXT: as instruções de texto a serem incluídas no comando.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent

Corpo JSON da solicitação:

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent" | Select-Object -Expand Content

Python

import vertexai
from vertexai.generative_models import GenerativeModel

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

response = model.generate_content(
    "What's a good name for a flower shop that specializes in selling bouquets of dried flowers?"
)

print(response.text)
# Example response:
# **Emphasizing the Dried Aspect:**
# * Everlasting Blooms
# * Dried & Delightful
# * The Petal Preserve
# ...

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function generate_from_text_input(projectId = 'PROJECT_ID') {
  const vertexAI = new VertexAI({project: projectId, location: 'us-central1'});

  const generativeModel = vertexAI.getGenerativeModel({
    model: 'gemini-1.5-flash-001',
  });

  const prompt =
    "What's a good name for a flower shop that specializes in selling bouquets of dried flowers?";

  const resp = await generativeModel.generateContent(prompt);
  const contentResponse = await resp.response;
  console.log(JSON.stringify(contentResponse));
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.ResponseHandler;

public class QuestionAnswer {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    String output = simpleQuestion(projectId, location, modelName);
    System.out.println(output);
  }

  // Asks a question to the specified Vertex AI Gemini model and returns the generated answer.
  public static String simpleQuestion(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      String output;
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      // Send the question to the model for processing.
      GenerateContentResponse response = model.generateContent("Why is the sky blue?");
      // Extract the generated text from the model's response.
      output = ResponseHandler.getText(response);
      return output;
    }
  }
}

Go

import (
	"context"
	"encoding/json"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
)

func generateContentFromText(w io.Writer, projectID string) error {
	location := "us-central1"
	modelName := "gemini-1.5-flash-001"

	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("error creating client: %w", err)
	}
	gemini := client.GenerativeModel(modelName)
	prompt := genai.Text(
		"What's a good name for a flower shop that specializes in selling bouquets of dried flowers?")

	resp, err := gemini.GenerateContent(ctx, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}
	// See the JSON response in
	// https://pkg.go.dev/cloud.google.com/go/vertexai/genai#GenerateContentResponse.
	rb, err := json.MarshalIndent(resp, "", "  ")
	if err != nil {
		return fmt.Errorf("json.MarshalIndent: %w", err)
	}
	fmt.Fprintln(w, string(rb))
	return nil
}

C#


using Google.Cloud.AIPlatform.V1;
using System;
using System.Threading.Tasks;

public class TextInputSample
{
    public async Task<string> TextInput(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001")
    {

        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();
        string prompt = @"What's a good name for a flower shop that specializes in selling bouquets of dried flowers?";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt }
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

        string responseText = response.Candidates[0].Content.Parts[0].Text;
        Console.WriteLine(responseText);

        return responseText;
    }
}

REST (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o nome do modelo a ser usado.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Corpo JSON da solicitação:

{
  "model": "google/MODEL_ID",
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
location = "us-central1"

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# # OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response.choices[0].message.content)
# Example response:
# The sky is blue due to a phenomenon called **Rayleigh scattering**.
# Sunlight is made up of all the colors of the rainbow.
# As sunlight enters the Earth's atmosphere ...

Resposta multimodal que não é de streaming

Gere uma resposta de modelo sem streaming com base em uma entrada multimodal, como texto e imagem.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o ID do modelo que você quer usar (por exemplo, gemini-1.5-flash-002). Veja a lista de modelos compatíveis.
  • TEXT: as instruções de texto a serem incluídas no comando.
  • FILE_URI: O URI do Cloud Storage para o arquivo que armazena os dados
  • MIME_TYPE: o tipo MIME IANA dos dados.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent

Corpo JSON da solicitação:

{
  "contents": [{
    "role": "user",
    "parts": [
      {
        "text": "TEXT"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      }
    ]
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent" | Select-Object -Expand Content

Python

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

response = model.generate_content(
    [
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/image/scones.jpg",
            mime_type="image/jpeg",
        ),
        "What is shown in this image?",
    ]
)

print(response.text)
# That's a lovely overhead shot of a rustic-style breakfast or brunch spread.
# Here's what's in the image:
# * **Blueberry scones:** Several freshly baked blueberry scones are arranged on parchment paper.
# They look crumbly and delicious.
# ...

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function createNonStreamingMultipartContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.5-flash-001',
  image = 'gs://generativeai-downloads/images/scones.jpg',
  mimeType = 'image/jpeg'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  // Instantiate the model
  const generativeVisionModel = vertexAI.getGenerativeModel({
    model: model,
  });

  // For images, the SDK supports both Google Cloud Storage URI and base64 strings
  const filePart = {
    fileData: {
      fileUri: image,
      mimeType: mimeType,
    },
  };

  const textPart = {
    text: 'what is shown in this image?',
  };

  const request = {
    contents: [{role: 'user', parts: [filePart, textPart]}],
  };

  console.log('Prompt Text:');
  console.log(request.contents[0].parts[1].text);

  console.log('Non-Streaming Response Text:');

  // Generate a response
  const response = await generativeVisionModel.generateContent(request);

  // Select the text from the response
  const fullTextResponse =
    response.response.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;
import com.google.cloud.vertexai.generativeai.ResponseHandler;

public class Multimodal {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    String output = nonStreamingMultimodal(projectId, location, modelName);
    System.out.println(output);
  }

  // Ask a simple question and get the response.
  public static String nonStreamingMultimodal(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      String videoUri = "gs://cloud-samples-data/video/animals.mp4";
      String imgUri = "gs://cloud-samples-data/generative-ai/image/character.jpg";

      // Get the response from the model.
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri),
              PartMaker.fromMimeTypeAndData("image/jpeg", imgUri),
              "Are this video and image correlated?"
          ));

      // Extract the generated text from the model's response.
      String output = ResponseHandler.getText(response);
      return output;
    }
  }
}

Go

import (
	"context"
	"encoding/json"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
)

func tryGemini(w io.Writer, projectID string, location string, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"

	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("error creating client: %w", err)
	}
	gemini := client.GenerativeModel(modelName)

	img := genai.FileData{
		MIMEType: "image/jpeg",
		FileURI:  "gs://generativeai-downloads/images/scones.jpg",
	}
	prompt := genai.Text("What is in this image?")

	resp, err := gemini.GenerateContent(ctx, img, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}
	rb, err := json.MarshalIndent(resp, "", "  ")
	if err != nil {
		return fmt.Errorf("json.MarshalIndent: %w", err)
	}
	fmt.Fprintln(w, string(rb))
	return nil
}

C#


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using System.Text;
using System.Threading.Tasks;

public class GeminiQuickstart
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001"
    )
    {
        // Create client
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        // Initialize content request
        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            GenerationConfig = new GenerationConfig
            {
                Temperature = 0.4f,
                TopP = 1,
                TopK = 32,
                MaxOutputTokens = 2048
            },
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = "What's in this photo?" },
                        new Part { FileData = new() { MimeType = "image/png", FileUri = "gs://generativeai-downloads/images/scones.jpg" } }
                    }
                }
            }
        };

        // Make the request, returning a streaming response
        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

        StringBuilder fullText = new();

        // Read streaming responses from server until complete
        AsyncResponseStream<GenerateContentResponse> responseStream = response.GetResponseStream();
        await foreach (GenerateContentResponse responseItem in responseStream)
        {
            fullText.Append(responseItem.Candidates[0].Content.Parts[0].Text);
        }

        return fullText.ToString();
    }
}

REST (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o nome do modelo a ser usado.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Corpo JSON da solicitação:

{
  "model": "google/MODEL_ID",
  "messages": [{
    "role": "user",
    "content": [
       {
          "type": "text",
          "text": "Describe the following image:"
       },
       {
          "type": "image_url",
          "image_url": {
             "url": "gs://generativeai-downloads/images/character.jpg"
          }
       }
     ]
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
location = "us-central1"

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)
# Example response:
# Here's a description of the image:
# High-angle, close-up view of a rustic arrangement featuring several blueberry scones
# on a piece of parchment paper. The scones are golden-brown...

Resposta de texto de streaming

Gerar uma resposta de modelo de streaming com base em uma entrada de texto.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o ID do modelo que você quer usar (por exemplo, gemini-1.5-flash-002). Veja a lista de modelos compatíveis.
  • TEXT: as instruções de texto a serem incluídas no comando.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent

Corpo JSON da solicitação:

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent" | Select-Object -Expand Content

Python

import vertexai

from vertexai.generative_models import GenerativeModel

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")
responses = model.generate_content(
    "Write a story about a magic backpack.", stream=True
)

for response in responses:
    print(response.text)
# Example response:
# El
# ara wasn't looking for magic. She was looking for rent money.
# Her tiny apartment, perched precariously on the edge of Whispering Woods,
# ...

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = process.env.LOCATION;
const MODEL = 'gemini-1.5-flash-001';

async function generateContent() {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: PROJECT_ID, location: LOCATION});

  // Instantiate the model
  const generativeModel = vertexAI.getGenerativeModel({
    model: MODEL,
  });

  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            text: 'Write a story about a magic backpack.',
          },
        ],
      },
    ],
  };

  console.log(JSON.stringify(request));

  const result = await generativeModel.generateContentStream(request);
  for await (const item of result.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.generativeai.GenerativeModel;

public class StreamingQuestionAnswer {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    streamingQuestion(projectId, location, modelName);
  }

  // Ask a simple question and get the response via streaming.
  public static void streamingQuestion(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      // Stream the result.
      model.generateContentStream("Write a story about a magic backpack.")
          .stream()
          .forEach(System.out::println);

      System.out.println("Streaming complete.");
    }
  }
}

Go

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
	"google.golang.org/api/iterator"
)

// generateContent shows how to	send a basic streaming text prompt, writing
// the response to the provided io.Writer.
func generateContent(w io.Writer, projectID, modelName string) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, "us-central1")
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)

	iter := model.GenerateContentStream(
		ctx,
		genai.Text("Write a story about a magic backpack."),
	)
	for {
		resp, err := iter.Next()
		if err == iterator.Done {
			return nil
		}
		if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
			return errors.New("empty response from model")
		}
		if err != nil {
			return err
		}
		fmt.Fprint(w, "generated response: ")
		for _, c := range resp.Candidates {
			for _, p := range c.Content.Parts {
				fmt.Fprintf(w, "%s ", p)
			}
		}
	}
}

REST (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o nome do modelo a ser usado.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Corpo JSON da solicitação:

{
  "model": "google/MODEL_ID",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
location = "us-central1"

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
    stream=True,
)
for chunk in response:
    print(chunk.choices[0].delta.content)
# Example response:
# The sky is blue due to a phenomenon called **Rayleigh scattering**. Sunlight is
# made up of all the colors of the rainbow. When sunlight enters the Earth 's atmosphere,
# it collides with tiny air molecules (mostly nitrogen and oxygen). ...

Resposta multimodal de streaming

Gere uma resposta de modelo de streaming com base em uma entrada multimodal, como texto e imagem.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o ID do modelo que você quer usar (por exemplo, gemini-1.5-flash-002). Veja a lista de modelos compatíveis.
  • TEXT: as instruções de texto a serem incluídas no comando.
  • FILE_URI1: O URI do Cloud Storage para o arquivo que armazena os dados
  • MIME_TYPE1: o tipo MIME IANA dos dados.
  • FILE_URI2: O URI do Cloud Storage para o arquivo que armazena os dados
  • MIME_TYPE2: o tipo MIME IANA dos dados.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent

Corpo JSON da solicitação:

{
  "contents": [{
    "role": "user",
    "parts": [
      {
        "text": "TEXT"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI1",
          "mimeType": "MIME_TYPE1"
        }
      },
      {
        "fileData": {
          "fileUri": "FILE_URI2",
          "mimeType": "MIME_TYPE2"
        }
      }
    ]
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent" | Select-Object -Expand Content

Python

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"

vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")
responses = model.generate_content(
    [
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/video/animals.mp4", "video/mp4"
        ),
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/image/character.jpg",
            "image/jpeg",
        ),
        "Are these video and image correlated?",
    ],
    stream=True,
)

for response in responses:
    print(response.candidates[0].content.text)
# Example response:
# No, the video and image are not correlated. The video shows a Google Photos
# project where animals at the Los Angeles Zoo take selfies using modified cameras.
# The image is a simple drawing of a wizard.

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = process.env.LOCATION;
const MODEL = 'gemini-1.5-flash-001';

async function generateContent() {
  // Initialize Vertex AI
  const vertexAI = new VertexAI({project: PROJECT_ID, location: LOCATION});
  const generativeModel = vertexAI.getGenerativeModel({model: MODEL});

  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            file_data: {
              file_uri: 'gs://cloud-samples-data/video/animals.mp4',
              mime_type: 'video/mp4',
            },
          },
          {
            file_data: {
              file_uri:
                'gs://cloud-samples-data/generative-ai/image/character.jpg',
              mime_type: 'image/jpeg',
            },
          },
          {text: 'Are this video and image correlated?'},
        ],
      },
    ],
  };

  const result = await generativeModel.generateContentStream(request);

  for await (const item of result.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;

public class StreamingMultimodal {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    streamingMultimodal(projectId, location, modelName);
  }

  // Ask a simple question and get the response via streaming.
  public static void streamingMultimodal(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      String videoUri = "gs://cloud-samples-data/video/animals.mp4";
      String imgUri = "gs://cloud-samples-data/generative-ai/image/character.jpg";

      // Stream the result.
      model.generateContentStream(
          ContentMaker.fromMultiModalData(
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri),
              PartMaker.fromMimeTypeAndData("image/jpeg", imgUri),
              "Are this video and image correlated?"
          ))
          .stream()
          .forEach(System.out::println);
    }
  }
}

Go

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
	"google.golang.org/api/iterator"
)

func generateContent(w io.Writer, projectID, modelName string) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, "us-central1")
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)
	iter := model.GenerateContentStream(
		ctx,
		genai.FileData{
			MIMEType: "video/mp4",
			FileURI:  "gs://cloud-samples-data/generative-ai/video/animals.mp4",
		},
		genai.FileData{
			MIMEType: "video/jpeg",
			FileURI:  "gs://cloud-samples-data/generative-ai/image/character.jpg",
		},
		genai.Text("Are these video and image correlated?"),
	)
	for {
		resp, err := iter.Next()
		if err == iterator.Done {
			return nil
		}
		if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
			return errors.New("empty response from model")
		}
		if err != nil {
			return err
		}

		fmt.Fprint(w, "generated response: ")
		for _, c := range resp.Candidates {
			for _, p := range c.Content.Parts {
				fmt.Fprintf(w, "%s ", p)
			}
		}
		fmt.Fprint(w, "\n")
	}
}

REST (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: o nome do modelo a ser usado.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Corpo JSON da solicitação:

{
  "model": "google/MODEL_ID",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": [
       {
          "type": "text",
          "text": "Describe the following image:"
       },
       {
          "type": "image_url",
          "image_url": {
             "url": "gs://generativeai-downloads/images/character.jpg"
          }
       }
     ]
  }]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

É possível chamar a API Inference usando a biblioteca OpenAI. Para mais informações, consulte Chamar modelos da Vertex AI usando a biblioteca OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
location = "us-central1"

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
    stream=True,
)
for chunk in response:
    print(chunk.choices[0].delta.content)
# Example response:
# Here's a description of the image:
# High-angle, close-up view of a rustic scene featuring several blueberry
# scones arranged on a piece of parchment paper...

Versões do modelo

Para usar a versão atualizada automaticamente, especifique o nome do modelo sem o número da versão à direita, por exemplo, gemini-1.5-flash em vez de gemini-1.5-flash-001.

Para mais informações, consulte Versões e ciclo de vida do modelo Gemini.

A seguir