Envie um comando multimodal

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

Neste guia, envia os seguintes pedidos multimodais ao Gemini através da API e vê as respostas do modelo:

  • Um comando e um URL de uma imagem armazenada num contentor
  • Um comando e uma faixa de áudio inline

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

Pode concluir este guia usando bibliotecas cliente para Python no seu ambiente local ou enviando pedidos da linha de comandos para a API REST.

Saiba mais sobre os idiomas suportados pelo Gemini nos quais pode enviar os seus comandos.

Antes de começar

Antes de poder começar a enviar comandos multimodais para o Gemini gerar texto, tem de ter um projeto com a API Gemini ativada e ter funções e credenciais adequadas. Tem de instalar, inicializar e autenticar com a CLI gcloud, bem como instalar bibliotecas de cliente para Python.

Para mais informações, consulte o artigo Comece a usar o Google Workspace.

Envie um comando e um URL de imagem

Use o seguinte código para enviar um comando que inclua texto e uma imagem para a API Gemini. Fornece uma imagem JPG que indica o respetivo URL a partir de um contentor de armazenamento do GDC (s3://file-bucket/image.jpg). Este exemplo devolve uma descrição da imagem fornecida.

Pode executar o código a partir da linha de comandos, através de um IDE ou incluindo o código na sua aplicação.

Python

Siga estes passos para enviar um comando e uma imagem, e gerar texto a partir de um script Python:

  1. Instale as bibliotecas Python necessárias:

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

  3. Guarde o seu pedido de API num ficheiro JSON denominado request.json. O ficheiro tem de ter o seguinte aspeto:

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

    Para ver detalhes do corpo do pedido, consulte o artigo Formate os seus pedidos à API.

    Pode experimentar parâmetros no seu pedido. Para mais informações, consulte Capacidades.

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

  5. Autentique o seu pedido de API.

  6. Adicione o seguinte código ao script Python que 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 o seguinte:

  7. Guarde o script Python.

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

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

    Substitua o seguinte:

Tem de obter uma resposta semelhante à seguinte:

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 estes passos para enviar um comando e uma imagem, e gerar texto através de um pedido curl à API REST:

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

  2. Guarde o seu pedido de API num ficheiro JSON denominado request.json. O ficheiro tem de ter o seguinte aspeto:

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

    Para ver detalhes do corpo do pedido, consulte o artigo Formate os seus pedidos à API.

    Pode experimentar parâmetros no seu pedido. Para mais informações, consulte Capacidades.

  3. Autentique o seu pedido de API.

  4. Faça o pedido:

    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 o seguinte:

Tem de obter uma resposta semelhante à seguinte:

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))

Envie um comando e áudio inline

Use o seguinte código para enviar um comando que inclua texto e áudio para a API Gemini. Fornece um ficheiro de áudio MP3 inline como dados codificados em base64. Este exemplo devolve a letra da música fornecida.

Pode executar o código a partir da linha de comandos, através de um IDE ou incluindo o código na sua aplicação.

Python

Siga estes passos para enviar um comando e áudio para gerar texto a partir de um script Python:

  1. Instale as bibliotecas Python necessárias:

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. Codifique o ficheiro através da ferramenta de linhas de comandos base64, certificando-se de que impede a mudança de linha com a marca -w 0:

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  3. Guarde o seu pedido de API num ficheiro JSON denominado request.json. O ficheiro tem de ter o seguinte aspeto:

    {
        "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 ver detalhes do corpo do pedido, consulte o artigo Formate os seus pedidos à API.

    Pode experimentar parâmetros no seu pedido. Para mais informações, consulte Capacidades.

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

  5. Autentique o seu pedido de API.

  6. Adicione o seguinte código ao script Python que 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 o seguinte:

  7. Guarde o script Python.

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

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

    Substitua o seguinte:

Tem de obter uma resposta semelhante à seguinte:

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 estes passos para enviar um comando e áudio para gerar texto através de um pedido curl à API REST:

  1. Codifique o ficheiro através da ferramenta de linhas de comandos base64, certificando-se de que impede a mudança de linha com a marca -w 0:

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  2. Guarde o seu pedido de API num ficheiro JSON denominado request.json. O ficheiro tem de ter o seguinte aspeto:

    {
        "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 ver detalhes do corpo do pedido, consulte o artigo Formate os seus pedidos à API.

    Pode experimentar parâmetros no seu pedido. Para mais informações, consulte Capacidades.

  3. Autentique o seu pedido de API.

  4. Faça o pedido:

    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 o seguinte:

Tem de obter uma resposta semelhante à seguinte:

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))

O que se segue?