読み込み中

コード実行:Claudeが自ら書いたコードを実行する

レッスン 58 分
読み込み中

コード実行:Claudeが自ら書いたコードを実行する

要約トランスクリプト

コード実行により、ClaudeはPythonを書き、それをAnthropic側で実行し、出力された内容から回答できるようになります。

このビデオのデモは2026年9月に収録されました。Claude Sonnet 5(claude-sonnet-5)上で実行されています。新しいモデルでは結果が異なる場合があります。

多くのファイルにまたがる計算が必要な質問もあります。それはコードの仕事です。

架空のエンジニアリングコンサルティング会社であるMeridianを例に考えてみましょう。同社はポンプステーションごとに1つずつ、計12個のCSVファイルを持っており、各ファイルには1年分の流量測定データが含まれています。同社は、いずれかのステーションが設計容量を超えたことがあるかどうか、もしあればいつだったのかを知りたいと考えています。

コード実行は、Claudeがその仕事をこなす方法です。Claudeは、自ら書いたPythonを実行できるコンテナを与えられ、コードが出力した内容から回答します。

リクエストにツールを追加する

コード実行はサーバーツールであり、Anthropicのインフラストラクチャ上で実行されるツールです。これにはハンドラーを書く必要がなく、コードからtool_resultを送り返す必要もありません。

コード実行を追加するには、toolsリストに1つのエントリを追加するだけです。 エントリのtypeの末尾にある日付はツールのバージョンを表しており、Meridianではcode_execution_20260120を使用しています。現在のバージョンはツールリファレンスに記載されていますので、そこからtypeの値をコピーしてください。

MeridianはこのリストをTOOLSという名前の定数として保持しており、そのリクエストではtools=TOOLSとして渡しています。

python
TOOLS = [{"type": "code_execution_20260120", "name": "code_execution"}]

2026年10月時点で、コード実行はClaude API、Claude Platform on AWS、AnthropicがGoogle Cloud上で管理するClaudeモデル、およびAnthropicでホストされているMicrosoft Foundryデプロイメントで実行できます。

ファイルをコンテナに配置する

Claudeのコードは、Anthropic側のコンテナ内で実行されます。お使いのファイルはまだご自身のマシン上にあるため、コンテナにはまだそれらが存在しません。Meridianのプログラムは、2つのステップでファイルをコンテナに取り込みます。

  1. Files APIを使って各ファイルをアップロードします。これによりファイルIDが返されます。
  2. そのファイルIDを、メッセージ内のcontainer_uploadブロックに入れます。

Meridianのプログラムは、質問と同じメッセージ内に、各ファイルに対して1つのcontainer_uploadブロックを追加します。 これにより、ファイルがコンテナ上に読み込まれ、Claudeのコードがそれらを開けるようになります。

Claudeの回答を読む

お使いのコードは1回のリクエストを送信し、通常はそれで完成した回答を受け取ります。

APIは、長時間実行されるターンを一時停止し、stop_reasonとしてpause_turnを返すことがあります。その場合は、レスポンスのコンテンツを同じtoolsを付けてassistantメッセージとして送り返すことで、Claudeが続行します。

Meridianに対するClaudeの回答は、ステーション7が設計容量である600 L/sを2025年4月と5月の2回超過した、というものです。レスポンスの中では、回答はClaudeが実行したコマンドの後に記載されます。

プログラムをまとめる

以下のMeridianのプログラムは、ツールを追加し、ファイルをコンテナに配置し、回答を読み取ります。このプログラムでは、pathsが12個のCSVファイルをpathlib.Pathオブジェクトとして保持し、QUESTIONがMeridianの質問を保持しています。

読み込み中

重要なポイント

  • コード実行はサーバーツールです。toolsに1つのエントリを追加するだけで、Claudeのコードは Anthropic側のコンテナ内で実行されます。
  • 各ファイルをFiles APIでアップロードし、そのファイルIDをcontainer_uploadブロックに入れます。