Gemini API のコード実行機能を使用すると、モデルは Python コードを生成して実行し、最終的な出力に到達するまで結果から反復的に学習できます。このコード実行機能を使用すると、コードベースの推論を活用し、テキスト出力を生成するアプリケーションを構築できます。たとえば、方程式を解くアプリやテキストを処理するアプリでコード実行を使用できます。
Gemini API は、関数呼び出しと同様に、コード実行をツールとして提供します。コード実行をツールとして追加すると、モデルがコード実行を使用するタイミングを決定します。
コード実行環境には、次のライブラリが含まれています。独自のライブラリをインストールすることはできません。
- Altair
- チェス
- Cv2
- Matplotlib
- Mpmath
- NumPy
- Pandas
- Pdfminer
- Reportlab
- Seaborn
- Sklearn
- Statsmodels
- Striprtf
- SymPy
- 表形式
サポートされているモデル
次のモデルはコード実行をサポートしています。
モデル | バージョン | コード実行のリリース ステージ |
---|---|---|
Gemini 2.0 Flash | すべてのバージョン | 一般提供 |
コード実行の開始
このセクションでは、Gemini API のクイックスタートに記載されている設定手順が完了していることを前提としています。
モデルでのコード実行を有効にする
基本的なコード実行は、次のように有効にできます。
データをリクエストする前に、次のように置き換えます。
: モデルに生成させるレスポンスのタイプ。モデルのレスポンスを返す方法を生成するメソッドを選択します。GENERATE_RESPONSE_METHOD streamGenerateContent
: レスポンスは生成時にストリーミングされます。ユーザーが遅延を感じることは少なくなります。generateContent
: レスポンスは、完全に生成された後に返されます。
: リクエストを処理するリージョン。使用できる選択肢は以下のとおりです。LOCATION クリックして、利用可能なリージョンの一部を開く
us-central1
us-west4
northamerica-northeast1
us-east4
us-west1
asia-northeast3
asia-southeast1
asia-northeast1
: 実際のプロジェクト ID。PROJECT_ID
: 使用するモデルのモデル ID。MODEL_ID
: コンテンツに関連付けられた会話におけるロール。単一ターンのユースケースでも、ロールの指定が必要です。指定できる値は以下のとおりです。ROLE USER
: 送信するコンテンツを指定します。MODEL
: モデルのレスポンスを指定します。
プロンプトに含める指示のテキスト。TEXT
リクエストを送信するには、次のいずれかのオプションを選択します。
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
cat > request.json << 'EOF' { "tools": [{'codeExecution': {}}], "contents": { "role": "ROLE ", "parts": { "text": "TEXT " } }, } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /publishers/google/models/MODEL_ID :GENERATE_RESPONSE_METHOD "
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
@' { "tools": [{'codeExecution': {}}], "contents": { "role": "ROLE ", "parts": { "text": "TEXT " } }, } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /publishers/google/models/MODEL_ID :GENERATE_RESPONSE_METHOD " | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "candidates": [ { "content": { "role": "model", "parts": [ { "text": "Okay, I understand. You want me to calculate the sum of the first 10 positive integers and to use code to do so. Here's my plan: I will use a loop to add the numbers from 1 to 10 and then return the final sum.\n\n" }, { "executableCode": { "language": "PYTHON", "code": "\ntotal = 0\nfor i in range(1, 11):\n total += i\nprint(f'{total=}')\n" } }, { "codeExecutionResult": { "outcome": "OUTCOME_OK", "output": "total=55\n" } }, { "text": "The sum of the first 10 positive numbers is 55.\n" } ] }, "finishReason": "STOP", "safetyRatings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE", "probabilityScore": 0.19436789, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.17441037 }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.0685376, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.14903527 }, { "category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.23231025, "severity": "HARM_SEVERITY_LOW", "severityScore": 0.2436427 }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "probability": "NEGLIGIBLE", "probabilityScore": 0.08269742, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.10818888 } ], "score": -0.50845032930374146, "avgLogprobs": -0.0046222757209431042 } ], "usageMetadata": { "promptTokenCount": 34, "candidatesTokenCount": 110, "totalTokenCount": 144, "billablePromptUsage": { "textCount": 119 }, "trafficType": "ON_DEMAND" }, "modelVersion": "gemini-2.0-flash-001", "createTime": "2024-12-09T23:33:47.842964Z", "responseId": "W35XZ9S5M6acmecP3vDFkQU" }
Google Gen AI SDK for Python のインストールまたは更新方法を確認する。
詳細については、
Gen AI SDK for Python API リファレンス ドキュメントまたは
python-genai
GitHub リポジトリをご覧ください。
Vertex AI で Gen AI SDK を使用するように環境変数を設定します。
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=us-central1 export GOOGLE_GENAI_USE_VERTEXAI=True
チャットでコード実行を使用する
コード実行をチャットの一部として使用することもできます。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/test-project/locations/us-central1/publishers/google/models/gemini-2.0-flash-001:generateContent -d \
$'{
"tools": [{'code_execution': {}}],
"contents": [
{
"role": "user",
"parts": {
"text": "Can you print \"Hello world!\"?"
}
},
{
"role": "model",
"parts": [
{
"text": ""
},
{
"executable_code": {
"language": "PYTHON",
"code": "\nprint(\"hello world!\")\n"
}
},
{
"code_execution_result": {
"outcome": "OUTCOME_OK",
"output": "hello world!\n"
}
},
{
"text": "I have printed \"hello world!\" using the provided python code block. \n"
}
],
},
{
"role": "user",
"parts": {
"text": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50."
}
}
]
}'
コードの実行と関数呼び出し
コード実行と関数呼び出しは類似した機能です。
- コード実行により、モデルは固定された分離された環境で API バックエンドのコードを実行できます。
- 関数呼び出しを使用すると、モデルがリクエストする関数を任意の環境で実行できます。
一般に、ユースケースを処理できる場合は、コード実行を使用することをおすすめします。コード実行は使いやすく(有効にするだけ)、1 回の GenerateContent
リクエストで解決されます。関数呼び出しでは、各関数呼び出しの出力を返すために追加の GenerateContent
リクエストが必要です。
ほとんどの場合、ローカルで実行する独自の関数がある場合は関数呼び出しを使用し、API で Python コードを記述して実行し、結果を返す場合はコード実行を使用する必要があります。
課金
Gemini API からのコード実行を有効にしても、追加料金は発生しません。使用している Gemini モデルに基づいて、入力トークンと出力トークンの現在のレートで課金されます。
コード実行の課金について、その他の注意事項は次のとおりです。
- モデルに渡す入力トークンと、コード実行ツールによって生成された中間入力トークンに対してのみ課金されます。
- API レスポンスで返された最終出力トークンが課金対象となります。
- 使用している Gemini モデルに基づいて、入力トークンと出力トークンの現在のレートで課金されます。
- Gemini がレスポンスの生成時にコード実行を使用する場合、元のプロンプト、生成されたコード、実行されたコードの結果には「中間トークン」というラベルが付けられ、入力トークンとして課金されます。
- Gemini はサマリーを生成し、生成されたコード、実行されたコードの結果、最終的なサマリーを返します。これらは出力トークンとして課金されます。
- Gemini API の API レスポンスには中間トークン数が含まれるため、最初のプロンプトで渡されたトークン以外の追加入力トークンを追跡できます。
生成されたコードには、テキストとマルチモーダル出力(画像など)の両方を含めることができます。
制限事項
- モデルはコードの生成と実行のみを行います。メディア ファイルなどの他のアーティファクトを返すことはできません。
- この機能は、ファイル I/O や、テキスト以外の出力(データプロットや CSV ファイルのアップロードなど)を伴うユースケースはサポートしていません。
- コードの実行は、タイムアウトするまで最大 30 秒間実行できます。
- コード実行を有効にすると、モデル出力の他の領域(ストーリーの作成など)で回帰が発生することがあります。