agent は一種類ではない。コードを書かせるか、JSON に閉じるかで責任が変わる
このノートは原文の代替ではありません。読むべきポイントと実装上の意味を整理し、原典への入口を示します。
要点まとめ
- この guide の一番大事な点は、agent を一種類の便利機能として扱わず、『決められた道具を呼ぶ型』と『途中でコードまで書いて走らせる型』を分けていることだ。
- この違いは賢さの話ではない。失敗のしかた、安全対策、監査のしやすさが変わる。
- コードを書かせる型は複雑な問題を柔軟に解けるが、そのぶん実行環境を閉じ込める責任が重くなる。
- 逆に、決めた道具だけを決めた形で呼ぶ型は表現力は狭いものの、予測しやすく壊し方も限定しやすい。
何が変わったのか
原典が明確にしたのは、agent の違いを framework 名ではなく execution model で分けることです。`ToolCallingAgent` は決めた形式の JSON で tool を呼ぶ型で、ここで `structured JSON` とは引数の形があらかじめ決まっていること、`schema validation` とはその項目や型を機械的に検査することです。一方 `CodeAgent` は Python code snippets を生成して実行し、`dynamic composition`、つまり問題に応じて手順や tool の組み合わせをその場で変えられます。その代わり syntax error、exception、unsafe execution の可能性が増えるため、guide も `secure execution environment` を前提にしています。
なぜ重要か
日本語圏では agent 選定が『どの OSS が流行っているか』や『どのモデルが強いか』に寄りやすいですが、現実の運用では code execution を許すかどうかのほうが重い判断です。そこを曖昧にすると、必要なのに sandbox を入れない、逆に単純タスクなのに重すぎる実行環境を背負う、という両方の失敗が起きます。実装前にこの切り分けをしておくと、権限設計とテスト設計がかなり楽になります。
技術的ポイント
- `ToolCallingAgent` は schema に従った tool 呼び出しへ閉じるため、任意コード実行がなく、失敗箇所を追いやすい。
- `CodeAgent` は複雑な reasoning や multi-step problem solving に向くが、syntax error、exception、unsafe execution への対策が要る。
- `structured JSON` と `schema validation` は、自由度を削る代わりに予測可能性と監査性を上げる設計である。
- guide 自体が executor として secure code execution tutorial や外部 sandbox を示しており、コード型 agent は実行場所まで含めて設計対象だ。
英日キーワード
| 英語 | 日本語 | 補足 |
|---|---|---|
| CodeAgent | コード実行型 agent | 途中でコードを書いて実行しながら解く型。表現力の代わりに実行環境の責任が重い。 |
| ToolCallingAgent | ツール呼び出し型 agent | 決めた形式で定義済みツールを呼ぶ型。表現力は狭いが壊れ方を限定しやすい。 |
| structured JSON | 決めた形の JSON | 引数の項目や型があらかじめ決まっている JSON。自由度を下げる代わりに機械検査しやすい。 |
| schema validation | スキーマ検証 | 渡された引数が決めた項目名や型に合っているかを機械的に検査すること。 |
| secure execution environment | 安全な実行環境 | コード型 agent を sandbox や container の内側へ閉じ込める実行場所。 |
試すなら
- 今の agent task を見て、『単純な API 呼び出しの並びか』『途中で計算や変換や分岐が必要か』を先に分ける。
- 単純 task なら ToolCallingAgent 相当の構造化呼び出しで足りるかを確認し、不要な code execution を避ける。
- CodeAgent 相当が必要なら、authorized imports、executor、ファイル権限、ネットワーク権限を task 定義と同じくらい先に決める。
注意点
- CodeAgent が高機能でも、単純 task にまで広げると監査負荷と攻撃面だけが増える。表現力は常に得ではない。
- ToolCallingAgent が安全寄りでも、tool 定義が雑なら安全にはならない。schema 設計と tool 側の権限制御は別途必要だ。