Programmatic Tool Calling は「まとめ処理」と「承認が要る実行」を混ぜるなと迫る
このノートは原文の代替ではありません。読むべきポイントと実装上の意味を整理し、原典への入口を示します。
要点まとめ
- この guide の核心は、tool を複数つないで楽をすること自体ではなく、どの段階ならコードに任せてよく、どの段階は人やアプリ側の明示的な判断を残すべきかを切り分ける点にある。
- OpenAI は generated program を fresh な isolated V8 runtime で動かし、Node.js、直接の network、汎用 filesystem、subprocess、永続 state は持たせないと明記している。
- その一方で、読み取り結果の集約や重複除去のような predictable control flow には Programmatic Tool Calling を使い、write や approval-sensitive action には direct tool calling を既定にせよと線を引いている。
- 実務上の読後行動は、「複数 tool をコードでまとめると賢そう」という発想をやめ、read-only 集約段階と権限実行段階を別の handoff に分けることだ。
読み終えたら次へ
この1本で終わらせず、同じ目的・同じテーマ・近い原典へ進めます。
権限、秘密情報、監査、失敗時の扱いを確認したい人向け。
同じテーマで読む AIエージェントツール利用、MCP、Agent SDK、長時間タスク、実行責任の設計。
次の記事 Claude Workload Identity Federation は「CI に API key を置きっぱなし」を終わらせる入口Anthropic は 2026-05-04 の release note で Workload Identity Federation を GA とし、AWS IAM、Google Cloud、GitHub Actions、Kubernetes、SPIFFE、Microsoft Entra ID、Okta などの OIDC token から短命な Claude API token を発行できるようにした。
何が変わったのか
この guide は tool use を「model が関数名を返す」だけの話から一段進めています。generated JavaScript を hosted runtime で動かし、parallel call、loop、condition、途中結果の整理まで許す一方、その runtime 自体はかなり狭く制限されています。外部との接点は有効化した tools 経由だけです。 さらに重要なのは、使い分けの規則をかなり具体的に書いている点です。predictable control flow なら Programmatic Tool Calling、semantic judgment や approval-sensitive action、native artifact や citation の最終検証は direct tool calling を使う。つまり「便利だから全部 program」にしないための guardrail が本文の中心です。
なぜ重要か
日本語圏では「複数 tool をコードで束ねれば agent が賢くなる」という語りになりやすいですが、運用で本当に大事なのは責任境界です。どこまでが read-only の整形で、どこからが money movement、外部送信、在庫変更、公開更新のような重い操作なのかを明確にしないと、事故時に説明できません。 創業者や PM にも意味があります。Programmatic Tool Calling は機能追加ではなく、workflow 分解を迫る仕様だからです。集計や比較は高速化できても、承認や最終確認まで自動で飲み込ませるべきではない、と公式が書いている点は導入判断の基準になります。
技術的ポイント
- OpenAI は generated program を fresh な isolated V8 runtime で実行し、Node.js、package install、direct network、汎用 filesystem、subprocess、永続 JavaScript state は持たせません。外部接続は request で有効化した tool 経由だけです。
- `allowed_callers` で tool ごとに direct だけ許すか、program からだけ許すか、両方許すかを分けます。つまり「その tool を誰が呼べるか」が API 契約に入ります。
- guide は read-only 集約や predictable な依存 call には program を勧めますが、write や approval-sensitive action には direct tool calling を既定にせよとしています。承認境界を保つためです。
- MCP tool は `require_approval` で program を一時停止できます。つまり program があるから approval が消えるのではなく、どこで止まるかを app 側が設計する必要があります。
- guide の orchestration 例では、side-effecting action を program に繰り返させず、retry 回数、停止条件、structured failure を先に決めるよう求めています。便利さより failure behavior の明文化が優先です。
英日キーワード
| 英語 | 日本語 | 補足 |
|---|---|---|
| Programmatic Tool Calling | プログラム経由のツール呼び出し | model が書いた JavaScript から複数 tool をまとめて使う仕組み。 |
| allowed_callers | 呼び出し許可元 | その tool を direct で呼べるか、program 経由で呼べるかを決める設定。 |
| isolated V8 runtime | 分離された V8 実行環境 | JavaScript は動くが、Node.js や直接 network を持たない hosted runtime。 |
| approval-sensitive action | 承認が要る操作 | 更新、送信、削除など、実行前に明示判断を残したい操作。 |
| authorization boundary | 承認境界 | どこから先はコード任せにせず、人やアプリ側で止めるかの線。 |
| side-effecting action | 副作用のある操作 | 外部状態を変える操作。 |
試すなら
- 自分の workflow を「読むだけの集約」「比較と整形」「実際の更新や送信」の 3 段に分ける。
- 2 段目までに Programmatic Tool Calling を限定し、3 段目は direct call と別承認に残す。
- tool ごとに `allowed_callers` を棚卸しし、program から呼んでよいものを read-only 中心に絞る。
- retry 回数、停止条件、structured failure を先に決め、side effect を持つ call を同じ program に混ぜない。
注意点
- `store: false` は stateless continuation を助けますが、それだけで Zero Data Retention が有効になるわけではないと guide は明記しています。
- runtime が分離されていても、tool 側の権限が広ければ安全になるわけではありません。危険は tool contract 側に戻ります。
- final citation や native artifact の検証を program に任せるなら、原物保持と完全検証の条件を自分で満たせるか厳しく確認すべきです。
この記事は役に立ちましたか
公益的に続けるため、役に立った点や読みづらかった点だけを短く送れます。メールアドレスは不要です。