テキスト生成

Gemini API は、テキスト、画像、動画、音声を入力として指定すると、テキスト出力を生成できます。

このガイドでは、generateContent メソッドと streamGenerateContent メソッドを使用してテキストを生成する方法について説明します。Gemini のビジョン機能と音声機能の使用方法については、Vision音声のガイドをご覧ください。

テキストのみの入力からテキストを生成する

Gemini API を使用してテキストを生成する最も簡単な方法は、次の例に示すように、モデルにテキストのみの入力を 1 つ提供することです。

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

この場合、プロンプト(「AI の仕組みを説明してください」)には、出力の例、システムの手順、フォーマット情報は含まれません。これはゼロショット アプローチです。ユースケースによっては、1 ショットまたは少数ショットのプロンプトを使用すると、ユーザーの期待に沿った出力が生成される場合があります。場合によっては、モデルがタスクを理解したり、特定のガイドラインに従ったりできるように、システム指示を提供することもあります。

テキストと画像の入力からテキストを生成する

Gemini API は、テキストとメディア ファイルを組み合わせたマルチモーダル入力をサポートしています。次の例は、テキストと画像の入力からテキストを生成する方法を示しています。

# 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

テキストのみのプロンプトと同様に、マルチモーダル プロンプトにはさまざまなアプローチと改良が含まれる場合があります。この例の出力に応じて、プロンプトに手順を追加したり、手順をより具体的にしたりできます。詳細については、ファイル プロンプト戦略をご覧ください。

テキスト ストリームを生成する

デフォルトでは、モデルはテキスト生成プロセス全体が完了した後にレスポンスを返します。結果全体を待たずに、ストリーミングを使用して部分的な結果を処理することで、インタラクションを高速化できます。

次の例は、streamGenerateContent メソッドを使用してストリーミングを実装し、テキストのみの入力プロンプトからテキストを生成する方法を示しています。

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."}]}]}'

インタラクティブなチャットを構築する

Gemini SDK を使用すると、複数のラウンドの質問と回答を収集できます。これにより、ユーザーは回答に段階的に近づいたり、複数の問題についてサポートを受けたりできます。この SDK 機能は、会話履歴を追跡するためのインターフェースを提供しますが、バックグラウンドでは同じ generateContent メソッドを使用してレスポンスを作成します。

次のコード例は、基本的なチャットの実装を示しています。

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"

チャット ストリーミングを有効にする

次の例に示すように、チャットとストリーミングを併用することもできます。

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"

テキスト生成を構成する

モデルに送信するすべてのプロンプトには、モデルがレスポンスを生成する方法を制御するパラメータが含まれています。これらのパラメータは GenerationConfig を使用して構成できます。パラメータを構成しない場合、モデルはデフォルトのオプションを使用します。このオプションはモデルによって異なる場合があります。

次の例は、使用可能ないくつかのオプションを構成する方法を示しています。

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 には、出力生成を停止する一連の文字列(最大 5 つ)を指定します。指定すると、stop_sequence が最初に出現した時点で API が停止します。停止シーケンスはレスポンスには含まれません。

temperature は出力のランダム性を制御します。より創造的なレスポンスを生成する場合は大きい値を、より確定的なレスポンスを生成する場合は小さい値を使用します。値の範囲は [0.0, 2.0] です。

maxOutputTokens は、候補に含めるトークンの最大数を設定します。

topP は、モデルが出力用にトークンを選択する方法を変更します。トークンは、確率の合計が topP 値と等しくなるまで、最も確率が高いものから最も確率が低いものの順に選択されます。デフォルトの topP 値は 0.95 です。

topK は、モデルが出力用にトークンを選択する方法を変更します。topK が 1 の場合、選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります。topK が 3 の場合、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。トークンは topP に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。

システム指示を追加する

システム指示を使用すると、特定のニーズやユースケースに基づいてモデルの動作を制御できます。

モデルにシステム指示を指定すると、タスクを理解するための追加のコンテキストがモデルに提供され、よりカスタマイズされたレスポンスが生成されます。また、モデルとユーザーのインタラクション全体で特定のガイドラインに準拠することができます。エンドユーザーが提供するプロンプトとは別に、システム指示を設定することで、プロダクト レベルの動作を指定することもできます。

システム指示は、モデルを初期化するときに設定できます。

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"}}}'

システム指示を使用するインタラクティブなエンドツーエンドの例については、システム指示の Colab をご覧ください。

次のステップ

Gemini API の基本を理解したので、次のことを試すことができます。

  • 画像認識: Gemini のネイティブな画像認識を使用して画像と動画を処理する方法を学びます。
  • 音声の理解: Gemini のネイティブ音声理解を使用して音声ファイルを処理する方法を学びます。