Envía una instrucción multimodal

Las instrucciones multimodales hacen referencia a las entradas del modelo que incluyen más de una modalidad, como texto, imágenes, audio, video y documentos.

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

  • Una instrucción y la URL de una imagen almacenada en un bucket
  • Una instrucción y una pista de audio intercalada

Obtén más información sobre otras capacidades multimodales de Gemini, incluidas las instrucciones con videos y documentos.

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

Obtén información sobre los idiomas admitidos en Gemini en los que puedes enviar tus instrucciones.

Antes de comenzar

Antes de comenzar a enviar prompts 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 gcloud, y también instalar las bibliotecas cliente para Python.

Para obtener más información, consulta Cómo comenzar.

Envía una instrucción y la URL de una imagen

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

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

Python

Sigue estos pasos para enviar una instrucción y una imagen, y 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. Sube tu imagen a un bucket de almacenamiento de GDC. En este ejemplo, la ruta de acceso a la imagen en el bucket es s3://file-bucket/image.jpg.

  3. Guarda tu solicitud a la API en un archivo JSON llamado request.json. El archivo debe verse 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 detalles sobre el cuerpo de la solicitud, consulta Cómo dar formato a tus solicitudes a la API.

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

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

  5. Autentica tu solicitud a la API.

  6. Agrega el siguiente código a la secuencia de comandos de Python que creaste:

    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)
    

    Reemplaza lo siguiente:

  7. Guarda la secuencia de comandos de Python.

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

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

    Reemplaza lo siguiente:

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 instrucción y una imagen, y generar texto a través de una solicitud curl a la API de REST:

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

  2. Guarda tu solicitud a la API en un archivo JSON llamado request.json. El archivo debe verse 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 detalles sobre el cuerpo de la solicitud, consulta Cómo dar formato a tus solicitudes a la API.

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

  3. Autentica tu solicitud a la API.

  4. Realiza 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
    

    Reemplaza lo siguiente:

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

Envía un mensaje y audio intercalados

Usa el siguiente código para enviar una instrucción que incluya texto y audio a la API de Gemini. Proporcionas un archivo de audio MP3 intercalado como datos codificados en Base64. En este ejemplo, se muestra la letra de la canción proporcionada.

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

Python

Sigue estos pasos para enviar una instrucción y 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 y asegúrate de evitar el ajuste de línea con la marca -w 0:

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  3. Guarda tu solicitud a la API en un archivo JSON llamado request.json. El archivo debe verse 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 detalles sobre el cuerpo de la solicitud, consulta Cómo dar formato a tus solicitudes a la API.

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

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

  5. Autentica tu solicitud a la API.

  6. Agrega el siguiente código a la secuencia de comandos de Python que creaste:

    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)
    

    Reemplaza lo siguiente:

  7. Guarda la secuencia de comandos de Python.

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

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

    Reemplaza lo siguiente:

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 instrucción y audio para generar texto a través de una solicitud curl a la API de REST:

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

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  2. Guarda tu solicitud a la API en un archivo JSON llamado request.json. El archivo debe verse 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 detalles sobre el cuerpo de la solicitud, consulta Cómo dar formato a tus solicitudes a la API.

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

  3. Autentica tu solicitud a la API.

  4. Realiza 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
    

    Reemplaza lo siguiente:

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

¿Qué sigue?