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:
Instala las bibliotecas de Python necesarias:
pip install openai pip install absl-py pip install typing pip install protobufSube 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.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.
Define las variables de entorno necesarias en una secuencia de comandos de Python.
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:
PROJECT_ID: tu ID de proyecto.MODEL_ID: el ID del endpoint del modelo del que quieres generar la respuesta.
Guarda la secuencia de comandos de Python.
Envía una solicitud a Gemini con la interfaz Chat Completions:
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKENHaz los cambios siguientes:
SCRIPT_NAME: el nombre que le has dado a tu secuencia de comandos de Python, comoclient.py.ENDPOINT: el endpoint de Gemini que usas en tu organización. Para obtener más información, consulta el estado del servicio y los endpoints.TOKEN: el token de autenticación que has obtenido.
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:
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.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.
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.jsonHaz los cambios siguientes:
TOKEN: el token de autenticación que has obtenido.ENDPOINT: el endpoint de Gemini que usas en tu organización. Para obtener más información, consulta el estado del servicio y los endpoints.PROJECT_ID: tu ID de proyecto.MODEL_ID: el ID del endpoint del modelo del que quieres generar la respuesta.
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:
Instala las bibliotecas de Python necesarias:
pip install openai pip install absl-py pip install typing pip install protobufCodifica 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_FILEGuarda 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.
Define las variables de entorno necesarias en una secuencia de comandos de Python.
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:
PROJECT_ID: tu ID de proyecto.MODEL_ID: el ID del endpoint del modelo del que quieres generar la respuesta.
Guarda la secuencia de comandos de Python.
Envía una solicitud a Gemini con la interfaz Chat Completions:
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKENHaz los cambios siguientes:
SCRIPT_NAME: el nombre que le has dado a tu secuencia de comandos de Python, comoclient.py.ENDPOINT: el endpoint de Gemini que usas en tu organización. Para obtener más información, consulta el estado del servicio y los endpoints.TOKEN: el token de autenticación que has obtenido.
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:
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_FILEGuarda 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.
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.jsonHaz los cambios siguientes:
TOKEN: el token de autenticación que has obtenido.ENDPOINT: el endpoint de Gemini que usas en tu organización. Para obtener más información, consulta el estado del servicio y los endpoints.PROJECT_ID: tu ID de proyecto.MODEL_ID: el ID del endpoint del modelo del que quieres generar la respuesta.
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))