9. LLMの指示に依存する設計とコードによる制御の境界線
プロンプトの「指示」とコードの「実行」の混同
LLMのプロンプトは、人間が対話する際の「指示」や「思考のガイドライン」を記述する場です。しかし、この指示をそのままシステムロジックとして扱うと、予期せぬ入力やLLMの誤解釈によって、システム全体が不安定になります。
プロンプトとコードの役割の分離
この分離を理解することが、堅牢なエージェント設計の第一歩です。
プロンプトの役割(知性・判断):LLMに期待するのは、知識の検索、情報の要約、次のアクションの「提案」や「判断軸の提示」です。これは、人間が思考するプロセスを模倣する部分です。
スクリプトの役割(実行・制御):スクリプトは、外部APIの呼び出し、データ型の強制変換、リソースの確保・解放など、副作用を伴う「物理的な操作」を担います。これは、システムが物理的に動くための「筋肉」です。
「判断」と「実行」の境界線引きの技術的アプローチ
境界線を引くための最も強力な手法は、**「思考の出力」を「実行可能なデータ構造」に強制変換する**ことです。
| レイヤー | 出力形式 | OpenClawでの実装 |
|---|---|---|
| 思考フェーズ | JSON Schemaに準拠した構造化テキスト(例:{ "action": "call_api", "params": { "endpoint": "user/profile" } }) | LLMの出力検証とパース(最も重要) |
| 実行フェーズ | 実行すべき具体的なコマンド引数やデータ(例:user_id=123, action=fetch) | スクリプトが直接受け取り、実行する引数として利用する |
プロンプトの「ガードレール」としての利用
プロンプト自体にもガードレールを設けるべきです。例えば、「もし次のステップで外部APIを呼び出す必要がある場合は、必ずJSON形式で『...』タグで囲んで出力し、それ以外の形式で出力した場合は、そのステップはスキップせよ」といった指示を組み込むことで、LLMの出力を構造化された「命令」として扱う訓練をさせる必要があります。
まとめ:信頼性を担保する「実行の壁」の構築
プロンプトは「何を考えるか」を定義し、スクリプトは「何を実行するか」を定義します。この二つを明確に分離し、スクリプト側でLLMの出力を厳密に検証する仕組みを組み込むことが、実用的なAIエージェントの設計指針となります。

