ツール制御プレーン
このページへ戻るべき場面
ツール呼び出しが共通の実行面に入る流れを補う資料です。
いっしょに読むと効く章
これは
s02を深く理解するための橋渡し文書です。
問いたいのは:なぜ tool system は単なる
tool_name -> handler表では足りないのか。
先に結論
最小 demo では dispatch map だけでも動きます。
しかし高完成度の system では tool layer は次の責任をまとめて持ちます。
- tool schema をモデルへ見せる
- tool 名から実行先を解決する
- 実行前に permission を通す
- hook / classifier / side check を差し込む
- 実行中 progress を扱う
- 結果を整形して loop へ戻す
- 実行で変わる共有 state へアクセスする
つまり tool layer は:
関数表ではなく、共有 execution plane
です。
最小の心智モデル
model emits tool_use
|
v
tool spec lookup
|
v
permission / hook / validation
|
v
actual execution
|
v
tool result shaping
|
v
write-back to loop
dispatch map だけでは足りない理由
単なる map だと、せいぜい:
- この名前ならこの関数
しか表せません。
でも実システムで必要なのは:
- モデルへ何を見せるか
- 実行前に何を確認するか
- 実行中に何を表示するか
- 実行後にどんな result block を返すか
- どの shared context を触れるか
です。
主要なデータ構造
ToolSpec
モデルに見せる tool の定義です。
tool = {
"name": "read_file",
"description": "...",
"input_schema": {...},
}
ToolDispatchMap
名前から handler を引く表です。
dispatch = {
"read_file": run_read,
"bash": run_bash,
}
これは必要ですが、これだけでは足りません。
ToolUseContext
tool が共有状態へ触るための文脈です。
たとえば:
- app state getter / setter
- permission context
- notifications
- file-state cache
- current agent identity
などが入ります。
ToolResultEnvelope
loop へ返すときの整形済み result です。
{
"type": "tool_result",
"tool_use_id": "...",
"content": "...",
}
高完成度版では content だけでなく:
- progress
- warnings
- structured result
なども関わります。
実行面として見ると何が変わるか
1. Tool は「名前」ではなく「実行契約」になる
1つの tool には:
- 入力 schema
- 実行権限
- 実行時 context
- 出力の形
がひとまとまりで存在します。
2. Permission と Hook の差が見えやすくなる
- permission: 実行してよいか
- hook: 実行の周辺で何を足すか
3. Native / Task / Agent / MCP を同じ平面で見やすくなる
参照実装でも重要なのは:
能力の出どころが違っても、loop から見れば 1 つの tool execution plane に入る
という点です。
初学者がやりがちな誤り
1. tool spec と handler を混同する
- spec はモデル向け説明
- handler は実行コード
2. permission を handler の中へ埋め込む
これをやると gate が共有層にならず、system が読みにくくなります。
3. result shaping を軽く見る
tool 実行結果は「文字列が返ればよい」ではありません。
loop が読み戻しやすい形に整える必要があります。
4. 実行状態を messages[] だけで持とうとする
tool 実行は app state や runtime state を触ることがあります。
一文で覚える
tool system が本物らしくなるのは、名前から関数を呼べた瞬間ではなく、schema・gate・context・result を含む共有 execution plane として見えた瞬間です。