Envoyer une requête multimodale

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

Découvrez d'autres fonctionnalités multimodales de Gemini, y compris les requêtes avec des vidéos et des documents.

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 :

  1. Installez les bibliothèques Python requises :

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. 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.

  3. 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.

  4. Définissez les variables d'environnement requises dans un script Python.

  5. Authentifiez votre requête API.

  6. 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 :

  7. Enregistrez le script Python.

  8. Envoyez une requête à Gemini avec l'interface Chat Completions :

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

    Remplacez les éléments suivants :

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 :

  1. 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.

  2. 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.

  3. Authentifiez votre requête API.

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

    Remplacez les éléments suivants :

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 :

  1. Installez les bibliothèques Python requises :

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. 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_FILE
    
  3. Enregistrez 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.

  4. Définissez les variables d'environnement requises dans un script Python.

  5. Authentifiez votre requête API.

  6. 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 :

  7. Enregistrez le script Python.

  8. Envoyez une requête à Gemini avec l'interface Chat Completions :

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

    Remplacez les éléments suivants :

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 :

  1. 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_FILE
    
  2. Enregistrez 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.

  3. Authentifiez votre requête API.

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

    Remplacez les éléments suivants :

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

Étapes suivantes