Enviar um comando multimodal

Os comandos multimodais se referem a entradas de modelo que incluem mais de uma modalidade, como texto, imagens, áudio, vídeo e documentos.

Neste guia, você vai enviar as seguintes solicitações multimodais ao Gemini usando a API e conferir as respostas do modelo:

  • Um comando e um URL de uma imagem armazenada em um bucket
  • Um comando e uma faixa de áudio inline

Saiba mais sobre outros recursos multimodais do Gemini, incluindo comandos com vídeos e documentos.

É possível concluir este guia usando bibliotecas de cliente para Python no seu ambiente local ou enviando solicitações de linha de comando para a API REST.

Saiba quais idiomas são aceitos no Gemini para enviar comandos.

Antes de começar

Antes de começar a enviar comandos multimodais para o Gemini gerar texto, você precisa ter um projeto com a API Gemini ativada e funções e credenciais adequadas. É necessário instalar, inicializar e fazer a autenticação com a CLI gdcloud e instalar bibliotecas de cliente para Python.

Para mais informações, consulte Começar.

Enviar um comando e um URL de imagem

Use o código a seguir para enviar um comando que inclui texto e uma imagem para a API Gemini. Você fornece uma imagem JPG indicando o URL dela em um bucket de armazenamento do GDC (s3://file-bucket/image.jpg). Este exemplo retorna uma descrição da imagem fornecida.

É possível executar o código na linha de comando, usando um ambiente de desenvolvimento integrado ou incluindo o código no aplicativo.

Python

Siga estas etapas para enviar um comando e uma imagem e gerar texto com um script Python:

  1. Instale as bibliotecas necessárias do Python:

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. Faça upload da imagem para um bucket de armazenamento do GDC. Neste exemplo, o caminho da imagem no bucket é s3://file-bucket/image.jpg.

  3. Salve a solicitação de API em um arquivo JSON chamado request.json. O arquivo precisa ser parecido com o exemplo a seguir:

    {
        "messages": [
          {
            "role": "user",
            "content": "What's in this image?"
          },
          {
            "role": "user",
            "content": [
              {
                "type": "image_url",
                "image_url": {
                  "url": "s3://file-bucket/image.jpg"
                }
              }
            ]
          }
        ]
    }
    

    Para detalhes sobre o corpo da solicitação, consulte Formatar solicitações de API.

    Você pode testar parâmetros na sua solicitação. Para mais informações, consulte Recursos.

  4. Defina as variáveis de ambiente necessárias em um script Python.

  5. Autentique sua solicitação de API.

  6. Adicione o seguinte código ao script Python que você criou:

    import json
    import os
    
    from absl import app
    from absl import flags
    from openai import OpenAI, OpenAIError
    
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    
    from typing import Sequence
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _HOST = flags.DEFINE_string("host", None, "Chat Completion endpoint", required=True)
    _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True)
    
    def chat_completion_client(host):
        return OpenAI(
            api_key="None",
            base_url="https://" + host + "/v1/projects/PROJECT_ID/locations/PROJECT_ID"
        )
    
    def chat_completion(client, messages, token):
    
        try:
            response = client.chat.completions.create(
            model="MODEL_ID",
            messages=messages,
            extra_headers={"Authorization" : "Bearer " + token, "Content-Type": "application/json"}
            )
            print("response:", response)
        except Exception as e:
            print("Got exception:", e)
    
    def main(argv: Sequence[str]):
        del argv  # Unused.
        with open(_INPUT.value) as json_file:
            data = json.load(json_file)
    
        print("Request: ", data)
    
        client = chat_completion_client(_HOST.value,)
    
        chat_completion(client=client, messages=data["messages"], token=_TOKEN.value)
    
    if __name__=="__main__":
        app.run(main)
    

    Substitua:

  7. Salve o script Python.

  8. Envie uma solicitação ao Gemini com a interface Chat Completions:

    python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN
    

    Substitua:

Você vai receber uma resposta semelhante a esta:

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s what\'s in the image: Several freshly baked blueberry scones are arranged on parchment paper.\n", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

curl

Siga estas etapas para enviar um comando e uma imagem e gerar texto por uma solicitação curl para a API REST:

  1. Faça upload da imagem para um bucket de armazenamento do GDC. Neste exemplo, o caminho da imagem no bucket é s3://file-bucket/image.jpg.

  2. Salve a solicitação de API em um arquivo JSON chamado request.json. O arquivo precisa ser parecido com o exemplo a seguir:

    {
        "messages": [
          {
            "role": "user",
            "content": "What's in this image?"
          },
          {
            "role": "user",
            "content": [
              {
                "type": "image_url",
                "image_url": {
                  "url": "s3://file-bucket/image.jpg"
                }
              }
            ]
          }
        ]
    }
    

    Para detalhes sobre o corpo da solicitação, consulte Formatar solicitações de API.

    Você pode testar parâmetros na sua solicitação. Para mais informações, consulte Recursos.

  3. Autentique sua solicitação de API.

  4. Faça a solicitação:

    curl  \
      -H "Authorization: Bearer TOKEN"  \
      -H "Content-Type: application/json; charset=utf-8"  \
      -X POST  https://ENDPOINT:443/v1/projects/PROJECT_ID/locations/PROJECT_ID/chat/completions  -d @./request.json
    

    Substitua:

Você vai receber uma resposta semelhante a esta:

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s what\'s in the image: Several freshly baked blueberry scones are arranged on parchment paper.\n", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

Enviar um comando e áudio inline

Use o código a seguir para enviar um comando que inclui texto e áudio para a API Gemini. Você fornece um arquivo de áudio MP3 in-line como dados codificados em base64. Este exemplo retorna a letra da música fornecida.

É possível executar o código na linha de comando, usando um ambiente de desenvolvimento integrado ou incluindo o código no aplicativo.

Python

Siga estas etapas para enviar um comando e um áudio para gerar texto usando um script Python:

  1. Instale as bibliotecas necessárias do Python:

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. Codifique o arquivo usando a ferramenta de linha de comando base64, evitando a quebra de linha com a sinalização -w 0:

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  3. Salve a solicitação de API em um arquivo JSON chamado request.json. O arquivo precisa ser parecido com o exemplo a seguir:

    {
        "messages": [
          {
            "role": "user",
            "content": "Show me the lyrics of this song."
          },
          {
            "role": "user",
            "content": [
              {
                "type": "input_audio",
                "input_audio": {
                  "data": "BASE64_ENCODED_DATA",
                  "format": "mp3"
                }
              }
            ]
          }
        ]
    }
    

    Para detalhes sobre o corpo da solicitação, consulte Formatar solicitações de API.

    Você pode testar parâmetros na sua solicitação. Para mais informações, consulte Recursos.

  4. Defina as variáveis de ambiente necessárias em um script Python.

  5. Autentique sua solicitação de API.

  6. Adicione o seguinte código ao script Python que você criou:

    import json
    import os
    
    from absl import app
    from absl import flags
    from openai import OpenAI, OpenAIError
    
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    
    from typing import Sequence
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _HOST = flags.DEFINE_string("host", None, "Chat Completion endpoint", required=True)
    _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True)
    
    def chat_completion_client(host):
        return OpenAI(
            api_key="None",
            base_url="https://" + host + "/v1/projects/PROJECT_ID/locations/PROJECT_ID"
        )
    
    def chat_completion(client, messages, token):
    
        try:
            response = client.chat.completions.create(
            model="MODEL_ID",
            messages=messages,
            extra_headers={"Authorization" : "Bearer " + token, "Content-Type": "application/json"}
            )
            print("response:", response)
        except Exception as e:
            print("Got exception:", e)
    
    def main(argv: Sequence[str]):
        del argv  # Unused.
        with open(_INPUT.value) as json_file:
            data = json.load(json_file)
    
        print("Request: ", data)
    
        client = chat_completion_client(_HOST.value,)
    
        chat_completion(client=client, messages=data["messages"], token=_TOKEN.value)
    
    if __name__=="__main__":
        app.run(main)
    

    Substitua:

  7. Salve o script Python.

  8. Envie uma solicitação ao Gemini com a interface Chat Completions:

    python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN
    

    Substitua:

Você vai receber uma resposta semelhante a esta:

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s the lyrics of the song: There are places I remember all my life, though some have changed...", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

curl

Siga estas etapas para enviar um comando e um áudio para gerar texto usando uma solicitação curl para a API REST:

  1. Codifique o arquivo usando a ferramenta de linha de comando base64, evitando a quebra de linha com a sinalização -w 0:

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  2. Salve a solicitação de API em um arquivo JSON chamado request.json. O arquivo precisa ser parecido com o exemplo a seguir:

    {
        "messages": [
          {
            "role": "user",
            "content": "Show me the lyrics of this song."
          },
          {
            "role": "user",
            "content": [
              {
                "type": "input_audio",
                "input_audio": {
                  "data": "BASE64_ENCODED_DATA",
                  "format": "mp3"
                }
              }
            ]
          }
        ]
    }
    

    Para detalhes sobre o corpo da solicitação, consulte Formatar solicitações de API.

    Você pode testar parâmetros na sua solicitação. Para mais informações, consulte Recursos.

  3. Autentique sua solicitação de API.

  4. Faça a solicitação:

    curl  \
      -H "Authorization: Bearer TOKEN"  \
      -H "Content-Type: application/json; charset=utf-8"  \
      -X POST  https://ENDPOINT:443/v1/projects/PROJECT_ID/locations/PROJECT_ID/chat/completions  -d @./request.json
    

    Substitua:

Você vai receber uma resposta semelhante a esta:

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s the lyrics of the song: There are places I remember all my life, though some have changed...", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

A seguir