Les requêtes multimodales font référence aux entrées de modèle incluant plusieurs modalités, telles que du texte, des images, de l'audio, des vidéos et des documents.
Dans ce guide, vous allez envoyer les requêtes multimodales suivantes à Gemini à l'aide de l'API et afficher les réponses du modèle :
- Une requête et l'URL d'une image stockée dans un bucket
- Une requête et une piste audio intégrée
Vous pouvez suivre ce guide en utilisant des bibliothèques clientes pour Python dans votre environnement local ou en envoyant des requêtes en ligne de commande à l'API REST.
Découvrez les langues prises en charge par Gemini dans lesquelles vous pouvez envoyer vos requêtes.
Avant de commencer
Avant de pouvoir commencer à envoyer des requêtes multimodales à Gemini pour générer du texte, vous devez disposer d'un projet pour lequel l'API Gemini est activée, et vous devez disposer des rôles et des identifiants appropriés. Vous devez installer, initialiser et vous authentifier auprès de gdcloud CLI, puis installer les bibliothèques clientes pour Python.
Pour en savoir plus, consultez Premiers pas.
Envoyer une requête et l'URL d'une image
Utilisez le code suivant pour envoyer une requête incluant du texte et une image à l'API Gemini. Vous fournissez une image JPG en indiquant son URL à partir d'un bucket de stockage GDC (s3://file-bucket/image.jpg). Cet exemple renvoie une description de l'image fournie.
Vous pouvez exécuter le code à partir de la ligne de commande, à l'aide d'un IDE ou en l'intégrant dans votre application.
Python
Pour envoyer une requête et une image, et générer du texte à partir d'un script Python :
Installez les bibliothèques Python requises :
pip install openai pip install absl-py pip install typing pip install protobufImportez votre image dans un bucket de stockage GDC. Dans cet exemple, le chemin d'accès à l'image dans le bucket est
s3://file-bucket/image.jpg.Enregistrez votre requête API dans un fichier JSON nommé
request.json. Le fichier doit ressembler à l'exemple suivant :{ "messages": [ { "role": "user", "content": "What's in this image?" }, { "role": "user", "content": [ { "type": "image_url", "image_url": { "url": "s3://file-bucket/image.jpg" } } ] } ] }Pour en savoir plus sur le corps de la requête, consultez Mettre en forme vos requêtes d'API.
Vous pouvez tester les paramètres de votre requête. Pour en savoir plus, consultez Fonctionnalités.
Définissez les variables d'environnement requises dans un script Python.
Ajoutez le code suivant au script Python que vous avez créé :
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)Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.MODEL_ID: ID du point de terminaison du modèle pour lequel vous souhaitez générer la réponse.
Enregistrez le script Python.
Envoyez une requête à Gemini avec l'interface Chat Completions :
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKENRemplacez les éléments suivants :
SCRIPT_NAME: nom que vous avez attribué à votre script Python, tel queclient.py.ENDPOINT: point de terminaison Gemini que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison des services.TOKEN: jeton d'authentification que vous avez obtenu.
Vous devez obtenir une réponse semblable à celle-ci :
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
Procédez comme suit pour envoyer une requête et une image, et générer du texte à l'aide d'une requête curl à l'API REST :
Importez votre image dans un bucket de stockage GDC. Dans cet exemple, le chemin d'accès à l'image dans le bucket est
s3://file-bucket/image.jpg.Enregistrez votre requête API dans un fichier JSON nommé
request.json. Le fichier doit ressembler à l'exemple suivant :{ "messages": [ { "role": "user", "content": "What's in this image?" }, { "role": "user", "content": [ { "type": "image_url", "image_url": { "url": "s3://file-bucket/image.jpg" } } ] } ] }Pour en savoir plus sur le corps de la requête, consultez Mettre en forme vos requêtes d'API.
Vous pouvez tester les paramètres de votre requête. Pour en savoir plus, consultez Fonctionnalités.
Envoyez la demande :
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.jsonRemplacez les éléments suivants :
TOKEN: jeton d'authentification que vous avez obtenu.ENDPOINT: point de terminaison Gemini que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison des services.PROJECT_ID: ID de votre projet.MODEL_ID: ID du point de terminaison du modèle pour lequel vous souhaitez générer la réponse.
Vous devez obtenir une réponse semblable à celle-ci :
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))
Envoyer une requête et un contenu audio intégrés
Utilisez le code suivant pour envoyer une requête incluant du texte et de l'audio à l'API Gemini. Vous fournissez un fichier audio MP3 intégré en tant que données encodées en base64. Cet exemple renvoie les paroles du titre fourni.
Vous pouvez exécuter le code à partir de la ligne de commande, à l'aide d'un IDE ou en l'intégrant dans votre application.
Python
Pour envoyer une requête et un fichier audio afin de générer du texte à partir d'un script Python, procédez comme suit :
Installez les bibliothèques Python requises :
pip install openai pip install absl-py pip install typing pip install protobufEncodez le fichier à l'aide de l'outil de ligne de commande
base64, en veillant à empêcher tout retour à la ligne grâce à l'indicateur-w 0:base64 AUDIO_FILE -w 0 > OUTPUT_FILEEnregistrez votre requête API dans un fichier JSON nommé
request.json. Le fichier doit ressembler à l'exemple suivant :{ "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" } } ] } ] }Pour en savoir plus sur le corps de la requête, consultez Mettre en forme vos requêtes d'API.
Vous pouvez tester les paramètres de votre requête. Pour en savoir plus, consultez Fonctionnalités.
Définissez les variables d'environnement requises dans un script Python.
Ajoutez le code suivant au script Python que vous avez créé :
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)Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.MODEL_ID: ID du point de terminaison du modèle pour lequel vous souhaitez générer la réponse.
Enregistrez le script Python.
Envoyez une requête à Gemini avec l'interface Chat Completions :
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKENRemplacez les éléments suivants :
SCRIPT_NAME: nom que vous avez attribué à votre script Python, tel queclient.py.ENDPOINT: point de terminaison Gemini que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison des services.TOKEN: jeton d'authentification que vous avez obtenu.
Vous devez obtenir une réponse semblable à celle-ci :
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
Pour envoyer une requête et un fichier audio afin de générer du texte à l'aide d'une requête curl à l'API REST, procédez comme suit :
Encodez le fichier à l'aide de l'outil de ligne de commande
base64, en veillant à empêcher tout retour à la ligne grâce à l'indicateur-w 0:base64 AUDIO_FILE -w 0 > OUTPUT_FILEEnregistrez votre requête API dans un fichier JSON nommé
request.json. Le fichier doit ressembler à l'exemple suivant :{ "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" } } ] } ] }Pour en savoir plus sur le corps de la requête, consultez Mettre en forme vos requêtes d'API.
Vous pouvez tester les paramètres de votre requête. Pour en savoir plus, consultez Fonctionnalités.
Envoyez la demande :
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.jsonRemplacez les éléments suivants :
TOKEN: jeton d'authentification que vous avez obtenu.ENDPOINT: point de terminaison Gemini que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison des services.PROJECT_ID: ID de votre projet.MODEL_ID: ID du point de terminaison du modèle pour lequel vous souhaitez générer la réponse.
Vous devez obtenir une réponse semblable à celle-ci :
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))