コードの実行

Gemini API のコード実行機能を使用すると、モデルは Python コードを生成して実行し、最終的な出力に到達するまで結果から反復的に学習できます。このコード実行機能を使用すると、コードベースの推論を活用し、テキスト出力を生成するアプリケーションを構築できます。たとえば、方程式を解くアプリやテキストを処理するアプリでコード実行を使用できます。

コード実行は、AI Studio と Gemini API の両方で使用できます。AI Studio では、右側のパネルの [ツール] でコード実行を有効にできます。Gemini API は、関数呼び出しと同様に、コード実行をツールとして提供します。コード実行をツールとして追加すると、モデルがコード実行を使用するタイミングを決定します。

コード実行環境には、altairchesscv2matplotlibmpmathnumpypandaspdfminerreportlabseabornsklearnstatsmodelsstriprtfsympytabulate のライブラリが含まれています。独自のライブラリをインストールすることはできません。

コード実行の開始

コード実行ノートブックも使用できます。

このセクションでは、クイックスタートに記載されている設定手順が完了していることを前提としています。

モデルでのコード実行を有効にする

次に示すように、モデルでのコード実行を有効にできます。

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

response = client.models.generate_content(
  model='gemini-2.0-flash',
  contents='What is the sum of the first 50 prime numbers? '
           'Generate and run code for the calculation, and make sure you get all 50.',
  config=types.GenerateContentConfig(
    tools=[types.Tool(
      code_execution=types.ToolCodeExecution
    )]
  )
)

ノートブックでは、次のヘルパー関数を使用して、すべてを Markdown 形式で表示できます。

def display_code_execution_result(response):
  for part in response.candidates[0].content.parts:
    if part.text is not None:
      display(Markdown(part.text))
    if part.executable_code is not None:
      code_html = f'<pre style="background-color: #BBBBEE;">{part.executable_code.code}</pre>' # Change code color
      display(HTML(code_html))
    if part.code_execution_result is not None:
      display(Markdown(part.code_execution_result.output))
    if part.inline_data is not None:
      display(Image(data=part.inline_data.data, format="png"))
    display(Markdown("---"))

display_code_execution_result(response)

出力は次のようになります。

最初の 50 個の素数の合計を計算する必要があります。Python スクリプトを使用して最初の 50 個の素数を生成し、合計します。

```python
def is_prime(n):
  """Checks if a number is prime."""
  if n <= 1:
    return False
  for i in range(2, int(n**0.5) + 1):
    if n % i == 0:
      return False
  return True

def sum_of_primes(n):
  """Calculates the sum of the first n prime numbers."""
  primes = []
  i = 2
  while len(primes) < n:
    if is_prime(i):
      primes.append(i)
    i += 1
  return sum(primes)

# Calculate the sum of the first 50 prime numbers
sum_of_first_50_primes = sum_of_primes(50)

print(f"The sum of the first 50 prime numbers is: {sum_of_first_50_primes}")
```

**Output:**

```
The sum of the first 50 prime numbers is: 5117
```

チャットでコード実行を使用する

コード実行をチャットの一部として使用することもできます。

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

chat = client.chats.create(
    model='gemini-2.0-flash',
    config=types.GenerateContentConfig(
      tools=[types.Tool(
        code_execution=types.ToolCodeExecution
      )]
    )
)

response = chat.send_message("Can you run some code to bogo-sort this list of numbers?: [2,34,1,65,4]")
display_code_execution_result(response)

会話は次のように続きます。

リスト [2, 34, 1, 65, 4] を Bogo ソートしたいとのことですね。ボゴソート(Bogosort)は、非効率なソート アルゴリズムとして有名です。リストが並べ替えられるまで、リストを繰り返しシャッフルします。パフォーマンスが非常に低いため、サイズの大きなリストには実用的ではありません。

ただし、デモ目的で、プロセスを示すために、非常に限られた回数の反復処理で簡素化されたバージョンを実行できます。よろしいですか?

response = chat.send_message("Yes, please create the code.")
display_code_execution_result(response)

リストをシャッフルして並べ替えられているかどうかを確認する関数を作成します。最大 10 回反復処理を実行します。...

入出力(I/O)

Gemini 2.0 Flash 以降、コード実行はファイル入力とグラフ出力をサポートしています。これらの新しい入出力機能を使用すると、CSV ファイルとテキスト ファイルをアップロードし、ファイルに関する質問をしたり、レスポンスの一部として Matplotlib グラフを生成したりできます。

I/O の料金

コード実行 I/O を使用すると、入力トークンと出力トークンが課金されます。

入力トークン:

  • ユーザーによるプロンプト

出力トークン:

  • モデルによって生成されたコード
  • コード環境でのコード実行の出力
  • モデルによって生成された概要

I/O の詳細

コード実行 I/O を扱う場合は、次の技術的な詳細に注意してください。

  • コード環境の最大実行時間は 30 秒です。
  • コード環境でエラーが発生した場合、モデルはコード出力を再生成することを決定する場合があります。この操作は最大 5 回行えます。
  • ファイル入力の最大サイズは、モデルトークン ウィンドウによって制限されます。AI Studio で Gemini Flash 2.0 を使用する場合、最大入力ファイルサイズは 100 万トークンです(サポートされている入力タイプのテキスト ファイルの場合は約 2 MB)。サイズが大きすぎるファイルをアップロードすると、AI Studio では送信できません。
シングルターン 双方向(Multimodal Live API)
サポートされているモデル すべての Gemini 2.0 モデル Flash の試験運用版モデルのみ
サポートされているファイル入力タイプ .png、.jpeg、.csv、.xml、.cpp、.java、.py、.js、.ts .png、.jpeg、.csv、.xml、.cpp、.java、.py、.js、.ts
サポートされているプロット ライブラリ Matplotlib Matplotlib
複数のツールの使用 いいえ はい

課金

Gemini API からのコード実行を有効にしても、追加料金は発生しません。使用している Gemini モデルに基づいて、入力トークンと出力トークンの現在のレートで課金されます。

コード実行の課金について、その他の注意事項は次のとおりです。

  • モデルに渡す入力トークンは 1 回だけ課金され、モデルから返された最終出力トークンは課金されます。
  • 生成されたコードを表すトークンは、出力トークンとしてカウントされます。生成されたコードには、テキストや画像などのマルチモーダル出力を含めることができます。
  • コード実行結果も出力トークンとしてカウントされます。

課金モデルを次の図に示します。

コード実行の課金モデル

  • 使用している Gemini モデルに基づいて、入力トークンと出力トークンの現在のレートで課金されます。
  • Gemini がレスポンスの生成時にコード実行を使用する場合、元のプロンプト、生成されたコード、実行されたコードの結果には「中間トークン」というラベルが付けられ、入力トークンとして課金されます。
  • その後、Gemini は概要を生成し、生成されたコード、実行されたコードの結果、最終的な概要を返します。これらは出力トークンとして課金されます。
  • Gemini API の API レスポンスには中間トークン数が含まれるため、最初のプロンプトを超えて追加の入力トークンが返される理由を把握できます。

制限事項

  • モデルはコードの生成と実行のみを行います。メディア ファイルなどの他のアーティファクトを返すことはできません。
  • コード実行を有効にすると、モデル出力の他の領域(ストーリーの作成など)で回帰が発生することがあります。
  • コード実行を正常に使用できるモデルの能力には、若干のばらつきがあります。