Enviar una petición multimodal

Las peticiones multimodales son entradas de modelos que incluyen más de una modalidad, como texto, imágenes, audio, vídeo y documentos.

En esta guía, enviarás las siguientes solicitudes multimodales a Gemini mediante la API y verás las respuestas del modelo:

  • Una petición y la URL de una imagen almacenada en un segmento
  • Una petición y una pista de audio entre líneas

Consulta otras funciones multimodales de Gemini, como las peticiones con vídeos y documentos.

Puedes completar esta guía usando bibliotecas de cliente de Python en tu entorno local o enviando solicitudes de línea de comandos a la API REST.

Consulta los idiomas disponibles en Gemini en los que puedes enviar tus peticiones.

Antes de empezar

Antes de empezar a enviar peticiones multimodales para que Gemini genere texto, debes tener un proyecto con la API de Gemini habilitada y los roles y las credenciales adecuados. Debes instalar, inicializar y autenticarte con la CLI de gdcloud, así como instalar bibliotecas de cliente para Python.

Para obtener más información, consulta el artículo Empezar a usar la función.

Enviar una petición y una URL de imagen

Usa el siguiente código para enviar una petición que incluya texto e imagen a la API de Gemini. Proporcionas una imagen JPG que indica su URL desde un segmento de almacenamiento de GDC (s3://file-bucket/image.jpg). Este ejemplo devuelve una descripción de la imagen proporcionada.

Puedes ejecutar el código desde la línea de comandos, usando un IDE o incluyéndolo en tu aplicación.

Python

Sigue estos pasos para enviar una petición y una imagen, y generar texto a partir de un script de Python:

  1. Instala las bibliotecas de Python necesarias:

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. Sube tu imagen a un segmento de almacenamiento de GDC. En este ejemplo, la ruta de la imagen en el segmento es s3://file-bucket/image.jpg.

  3. Guarda tu solicitud de API en un archivo JSON llamado request.json. El archivo debe tener un aspecto como el siguiente ejemplo:

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

    Para obtener más información sobre el cuerpo de la solicitud, consulta el artículo Formato de las solicitudes de la API.

    Puedes experimentar con los parámetros de tu solicitud. Para obtener más información, consulta Funciones.

  4. Define las variables de entorno necesarias en una secuencia de comandos de Python.

  5. Autentica tu solicitud a la API.

  6. Añade el siguiente código a la secuencia de comandos de Python que has creado:

    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)
    

    Haz los cambios siguientes:

  7. Guarda la secuencia de comandos de Python.

  8. Envía una solicitud a Gemini con la interfaz Chat Completions:

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

    Haz los cambios siguientes:

Debes obtener una respuesta similar a la siguiente:

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

Sigue estos pasos para enviar una petición y una imagen, y generar texto a través de una solicitud curl a la API REST:

  1. Sube tu imagen a un segmento de almacenamiento de GDC. En este ejemplo, la ruta de la imagen en el segmento es s3://file-bucket/image.jpg.

  2. Guarda tu solicitud de API en un archivo JSON llamado request.json. El archivo debe tener un aspecto como el siguiente ejemplo:

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

    Para obtener más información sobre el cuerpo de la solicitud, consulta el artículo Formato de las solicitudes de la API.

    Puedes experimentar con los parámetros de tu solicitud. Para obtener más información, consulta Funciones.

  3. Autentica tu solicitud a la API.

  4. Haz la solicitud:

    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
    

    Haz los cambios siguientes:

Debes obtener una respuesta similar a la siguiente:

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 una petición y un audio entre líneas

Usa el siguiente código para enviar una petición que incluya texto y audio a la API de Gemini. Proporcionas un archivo de audio MP3 insertado como datos codificados en Base64. Este ejemplo devuelve la letra de la canción proporcionada.

Puedes ejecutar el código desde la línea de comandos, usando un IDE o incluyéndolo en tu aplicación.

Python

Sigue estos pasos para enviar una petición y un audio para generar texto a partir de una secuencia de comandos de Python:

  1. Instala las bibliotecas de Python necesarias:

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. Codifica el archivo con la herramienta de línea de comandos base64. Asegúrate de evitar el salto de línea con la marca -w 0:

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  3. Guarda tu solicitud de API en un archivo JSON llamado request.json. El archivo debe tener un aspecto como el siguiente ejemplo:

    {
        "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 obtener más información sobre el cuerpo de la solicitud, consulta el artículo Formato de las solicitudes de la API.

    Puedes experimentar con los parámetros de tu solicitud. Para obtener más información, consulta Funciones.

  4. Define las variables de entorno necesarias en una secuencia de comandos de Python.

  5. Autentica tu solicitud a la API.

  6. Añade el siguiente código a la secuencia de comandos de Python que has creado:

    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)
    

    Haz los cambios siguientes:

  7. Guarda la secuencia de comandos de Python.

  8. Envía una solicitud a Gemini con la interfaz Chat Completions:

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

    Haz los cambios siguientes:

Debes obtener una respuesta similar a la siguiente:

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

Sigue estos pasos para enviar una petición y un audio para generar texto a través de una solicitud curl a la API REST:

  1. Codifica el archivo con la herramienta de línea de comandos base64. Asegúrate de evitar el salto de línea con la marca -w 0:

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  2. Guarda tu solicitud de API en un archivo JSON llamado request.json. El archivo debe tener un aspecto como el siguiente ejemplo:

    {
        "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 obtener más información sobre el cuerpo de la solicitud, consulta el artículo Formato de las solicitudes de la API.

    Puedes experimentar con los parámetros de tu solicitud. Para obtener más información, consulta Funciones.

  3. Autentica tu solicitud a la API.

  4. Haz la solicitud:

    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
    

    Haz los cambios siguientes:

Debes obtener una respuesta similar a la siguiente:

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

Siguientes pasos