AgentSpeak(L) BDI アーキテクチャ
このスキルを使用するのは、難しい部分が別のワークフローを書くことではなく、自律エージェントが変化する状況下でどのように反応し、コミットし、作業を中断し、その選択を説明するかを決定することである場合です。
使用すべき場合
- システムが、より長期的なコミットメントを放棄することなく、新しいイベントに反応する必要がある場合。
- 単一のモノリシックなコントローラーではなく、現在のコンテキストによって選択される再利用可能な振る舞いを持つプランライブラリが必要な場合。
- エージェントポリシーがドメイン知識から分離されている必要があり、プランを書き換えることなく緊急度、公平性、リスク許容度を変更できる必要がある場合。
- 障害がエージェント全体を崩壊させるのではなく、回復動作と再計画をトリガーする必要がある場合。
- エージェントがなぜ特定のタスクやプランを別のものより選択したかについて、検査可能なメンタルモデルが必要な場合。
使用すべきでない場合
- 永続的なコミットメントやインテンションスタックを必要としない単純なルールエンジンの場合。
- 環境が実行を中断しない静的な計画問題の場合。
- 単一のスケジューラがすべてのステップをすでに決定している集中型ワークフローシステムの場合。
- 信念、プラン、ポリシーを個別に表現したことがないプロンプトのみのエージェントループの場合。
コアメンタルモデル
信念、欲求、意図は異なるオブジェクトである
信念は現在の世界をモデル化し、欲求は候補となる成果を定義し、意図は現在実行予算を消費している、コミットされた特定のプランスタックです。これらが一つの塊に崩壊すると、エージェントは解釈不可能になります。
プランは状況に応じた知識である
AgentSpeak プランは汎用的な手続きではありません。これらはコンテキストガード付きのイベント駆動型レシピであり、同じ目標でも、エージェントが現在何を信じているかに応じて異なる振る舞いを呼び出すことができます。
選択関数がポリシーを保持する
イベントセレクター、オプションセレクター、インテンションセレクターには、緊急度、公平性、リスク許容度が属します。プランは方法(ノウハウ)をエンコードすべきであり、選択関数は戦略をエンコードすべきです。
割り込み可能性は機能であり、バグではない
意図は部分的に実行されたスタックであり、インターリーブ、中断、再開が可能です。これにより、応答性の高いエージェントが、すべての長時間タスクを再起動に変えることなく、割り込みを処理できるようになります。
実行中のシステムから上方に形式化する
AgentSpeak(L) からの実践的な教訓は、動作中のエージェントサイクルから始めて、それが実際に何を行っているかを形式化することです。後で実行時動作に近似する必要がある、洗練された抽象理論を書いてはいけません。
決定点
flowchart TD
A[自律的な振る舞い設計が必要] --> B{永続的なコミットメントが必要か?}
B -->|いいえ| C[ルール、ステートマシン、または単純なワークフローを使用]
B -->|はい| D{環境はアクティブな作業を中断するか?}
D -->|いいえ| E[古典的なプランナーで十分な場合がある]
D -->|はい| F{ポリシーをプランから分離する必要があるか?}
F -->|いいえ| G[カスタムエージェントループ、ただし結合が発生する可能性あり]
F -->|はい| H[AgentSpeak スタイルの BDI を使用]
H --> I{現在の問題}
I -->|間違ったタスクが選択された| J[SI または SE を見直す]
I -->|間違ったプランが選択された| K[SO またはコンテキストガードを見直す]
I -->|障害で実行が停止する| L[障害イベントと回復プランを追加]
I -->|監査が難しい| M[インテンションスタックと選択トレースを公開]
- AgentSpeak スタイルのモデリングは、システムが反応性とコミットメントの一方を選ぶのではなく、バランスを取る必要がある場合に使用します。
- 世界の仮定は、アクション内部に深く埋め込まれた条件文としてではなく、信念クエリとプランガードに配置します。
- 戦略は変更されるがドメイン知識は変わらない場合、プランを書き換える前に選択関数を変更します。
- 長時間タスクをサブゴールに分解することで、インテンションスタックが検査可能かつ割り込み可能なままになります。
障害モード
ゴール-インテンションの崩壊
兆候: 設計上、エージェントが「目標を持っている」とされているが、それに実際にリソースをコミットしたかどうかを示せない。
修正: 候補となるゴールを、現在アクティブなインテンションスタックから分離して表現します。
プランに隠されたポリシー
兆候: すべてのプラン本体に、優先度、公平性、緊急度に関する分岐が含まれている。
修正: それらの選択を、イベント、オプション、またはインテンション選択関数に移動します。
モノリシックなプラン
兆候: プランが非常に長いため、どの割り込みでもシーケンス全体を精神的に再開しなければならない。
修正: 長い振る舞いを、明示的なサブゴール境界を持つ短いプランに分割します。
イベントではなくクラッシュとしての障害
兆候: 失敗したサブゴールがエージェント全体をアボートするか、静かに消滅する。
修正: 障害を、回復、再試行、または破棄のプランをトリガーできるイベントとしてモデル化します。
根拠のないコンテキストガード
兆候: プランが、実際の信念や観測に結びつけられたことのない曖昧な世界の仮定にマッチする。
修正: 信念更新パスを明示的にし、ガードが現在の信念状態に対してクエリ可能であることを保証します。
実践例
緊急割り込みを処理するツール使用LLMエージェント
コーディングエージェントが長期のリファクタリングに取り組んでいるときに、高重大度の本番アラートが届きました。リファクタリングを一つのインテンションスタックとして、アラートを新しいイベントとしてモデル化します。選択関数がリファクタリングをプリエンプトし、後で状態を失うことなく再開できるようにします。
中央ディスパッチャなしの倉庫調整
複数のモバイルエージェントが、通路の混雑と在庫状態に関する共通の信念ベースを共有します。ドメイン知識はプランに残し、選択関数は、混雑時にどの緊急ピックジョブが補充作業よりも優先されるかをエンコードします。
品質ゲート
- 信念、欲求、意図が別々に表現されている。
- 主要なトリガーイベントごとに、少なくとも一つの明示的なコンテキストガードを持つプランがある。
- 設計において、SE、SO、SIのポリシーがどこに存在するかが指定されている。
- 障害パスが、静かな崩壊ではなく、イベントまたは回復プランを作成する。
- レビュー担当者がアクティブなインテンションを検査し、なぜあるプランが別のプランより選択されたかを説明できる。
判別基準
- 誰かが、エージェントが望む目標と、コミットした意図の違いを説明できない場合、その人はこのモデルを内面化していない。
- 「戦略」の変更にプラン本体の書き換えが必要な場合、ポリシーと知識は決して分離されていなかった。
- エージェントが何に中断されたか、次に何を再開するかを言えない場合、それは実際にインテンションスタックを使用していない。
参照ルーティング
references/bdi-architecture-for-agent-orchestration.md: 完全なエージェントサイクルとB/D/Iの相互作用をロードする。references/context-sensitive-plans-as-agent-knowledge.md: プラン構造とガード設計が主要な問題である場合にロードする。references/selection-functions-as-agent-policy.md: 優先度、公平性、リスク許容度に明示的なポリシー処理が必要な場合にロードする。references/intention-management-and-goal-decomposition.md: サスペンド/レジューム、サブゴール、またはインテンションの監査可能性が中心的な場合にロードする。references/failure-modes-in-bdi-systems.md: 現在の設計が既に存在し、その問題点をデバッグしている場合にロードする。