Génération de texte

L'API Gemini peut générer un résultat textuel lorsqu'elle reçoit du texte, des images, des vidéos et des contenus audio en entrée.

Ce guide vous explique comment générer du texte à l'aide des méthodes generateContent et streamGenerateContent. Pour en savoir plus sur l'utilisation des fonctionnalités de vision et audio de Gemini, consultez les guides Vision et Audio.

Générer du texte à partir d'une entrée textuelle

Le moyen le plus simple de générer du texte à l'aide de l'API Gemini consiste à fournir au modèle une seule entrée textuelle, comme illustré dans cet exemple:

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[{"text": "Write a story about a magic backpack."}]
        }]
       }' 2> /dev/null

Dans ce cas, l'invite ("Expliquez le fonctionnement de l'IA") n'inclut aucun exemple de sortie, aucune instruction système ni aucune information de mise en forme. Il s'agit d'une approche zero-shot. Dans certains cas d'utilisation, une invite one-shot ou few-shot peut produire un résultat plus conforme aux attentes des utilisateurs. Dans certains cas, vous pouvez également fournir des instructions système pour aider le modèle à comprendre la tâche ou à suivre des consignes spécifiques.

Générer du texte à partir d'une entrée texte-image

L'API Gemini accepte les entrées multimodales qui combinent du texte et des fichiers multimédias. L'exemple suivant montre comment générer du texte à partir d'une entrée texte et image:

# Use a temporary file to hold the base64 encoded image data
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"

# Use a temporary file to hold the JSON payload
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT

cat > "$TEMP_JSON" << EOF
{
  "contents": [{
    "parts":[
      {"text": "Tell me about this instrument"},
      {
        "inline_data": {
          "mime_type":"image/jpeg",
          "data": "$(cat "$TEMP_B64")"
        }
      }
    ]
  }]
}
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d "@$TEMP_JSON" 2> /dev/null

Comme pour les requêtes textuelles, les requêtes multimodales peuvent impliquer différentes approches et améliorations. En fonction de la sortie de cet exemple, vous pouvez ajouter des étapes à la requête ou être plus précis dans vos instructions. Pour en savoir plus, consultez la section Stratégies de requêtes de fichiers.

Générer un flux de texte

Par défaut, le modèle renvoie une réponse une fois le processus de génération de texte terminé. Vous pouvez accélérer les interactions en n'attendant pas le résultat complet, mais en utilisant le streaming pour gérer les résultats partiels.

L'exemple suivant montre comment implémenter le streaming à l'aide de la méthode streamGenerateContent pour générer du texte à partir d'une invite de saisie textuelle uniquement.

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=${GOOGLE_API_KEY}" \
        -H 'Content-Type: application/json' \
        --no-buffer \
        -d '{ "contents":[{"parts":[{"text": "Write a story about a magic backpack."}]}]}'

Créer un chat interactif

Le SDK Gemini vous permet de collecter plusieurs séries de questions et de réponses, ce qui permet aux utilisateurs d'obtenir des réponses par étapes ou de l'aide pour résoudre des problèmes en plusieurs parties. Cette fonctionnalité du SDK fournit une interface permettant de suivre l'historique des conversations, mais utilise en arrière-plan la même méthode generateContent pour créer la réponse.

L'exemple de code suivant illustre une implémentation de chat de base:

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

Activer le streaming du chat

Vous pouvez également utiliser le streaming avec le chat, comme illustré dans l'exemple suivant:

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

Configurer la génération de texte

Chaque requête que vous envoyez au modèle inclut des paramètres qui contrôlent la manière dont le modèle génère des réponses. Vous pouvez utiliser GenerationConfig pour configurer ces paramètres. Si vous ne configurez pas les paramètres, le modèle utilise des options par défaut, qui peuvent varier selon le modèle.

L'exemple suivant montre comment configurer plusieurs des options disponibles.

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
        "contents": [{
            "parts":[
                {"text": "Write a story about a magic backpack."}
            ]
        }],
        "safetySettings": [
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "threshold": "BLOCK_ONLY_HIGH"
            }
        ],
        "generationConfig": {
            "stopSequences": [
                "Title"
            ],
            "temperature": 1.0,
            "maxOutputTokens": 800,
            "topP": 0.8,
            "topK": 10
        }
    }'  2> /dev/null | grep "text"

stopSequences spécifie l'ensemble de séquences de caractères (jusqu'à cinq) qui met fin à la génération de sortie. Si elle est spécifiée, l'API s'arrête à la première apparition d'un stop_sequence. La séquence d'arrêt n'est pas incluse dans la réponse.

temperature contrôle le caractère aléatoire de la sortie. Utilisez des valeurs plus élevées pour obtenir des réponses plus créatives et des valeurs plus faibles pour des réponses plus déterministes. Les valeurs peuvent être comprises entre [0,0 et 2,0].

maxOutputTokens définit le nombre maximal de jetons à inclure dans une candidate.

topP modifie la façon dont le modèle sélectionne les jetons pour la sortie. Les jetons sont sélectionnés de la probabilité la plus élevée à la plus faible, jusqu'à ce que la somme de leurs probabilités soit égale à la valeur topP. La valeur par défaut de topP est 0,95.

topK modifie la façon dont le modèle sélectionne les jetons pour la sortie. Une valeur topK de 1 signifie que le jeton sélectionné est le plus probable parmi tous les jetons du vocabulaire du modèle, tandis qu'une valeur topK de 3 signifie que le jeton suivant est sélectionné parmi les trois jetons les plus probables à l'aide de la température. Les jetons sont ensuite filtrés en fonction du topP avec le jeton final sélectionné à l'aide de l'échantillonnage de température.

Ajouter des instructions système

Les instructions système vous permettent d'orienter le comportement d'un modèle en fonction de vos besoins et de vos cas d'utilisation spécifiques.

En fournissant des instructions système au modèle, vous lui fournissez un contexte supplémentaire pour qu'il comprenne la tâche, génère des réponses plus personnalisées et respecte des consignes spécifiques pendant toute l'interaction de l'utilisateur avec le modèle. Vous pouvez également spécifier le comportement au niveau du produit en définissant des instructions système, distinctes des requêtes fournies par les utilisateurs finaux.

Vous pouvez définir des instructions système lorsque vous initialisez votre modèle:

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
    "parts":
      { "text": "You are a cat. Your name is Neko."}},
    "contents": {
      "parts": {
        "text": "Hello there"}}}'

Pour obtenir un exemple interactif de bout en bout de l'utilisation des instructions système, consultez les instructions système Colab.

Étape suivante

Maintenant que vous avez découvert les principes de base de l'API Gemini, vous pouvez essayer les éléments suivants:

  • Analyse visuelle: découvrez comment utiliser l'analyse visuelle native de Gemini pour traiter des images et des vidéos.
  • Compréhension audio: découvrez comment utiliser la compréhension audio native de Gemini pour traiter des fichiers audio.