AgentSpec は、LLM エージェントに対する制約を実行時に強制するためのドメイン固有言語であり、Wang、Poskitt、Sun が AgentSpec:安全で信頼性の高い LLM エージェントのためのカスタマイズ可能なランタイム強制 で提案した。プログラムはルールの集合であり、各ルールはキーワード rule と識別子で始まり end で終わる。その間では、trigger がルールを起動するイベントを指定し、check がルールが効力を持つためにすべて真と評価されなければならない述語を列挙し、enforce が適用する介入を列挙する。トリガーが発生し、かつすべての述語が成り立ったときにルールは違反されたことになり、違反された各ルールの強制措置が、実行が続行される前にエージェントの軌跡を変換する。論文が動機づけに用いている例は、送金アクションの直前に起動するルールで、受取人が家族でないかどうかをチェックし、そうであればユーザーによる確認を強制する。これにより、ユーザーが送金を承認または拒否するまでエージェントは一時停止する。
用法
トリガーは、強制レイヤーが実行中に監視するイベントである。汎用的なものが 3 つあり、状態の変化、アクションが実行される直前、エージェントがタスクを終えた時点である。これに加えて、ドメインごとに独自のトリガーを追加できる。コードエージェントであれば Python REPL の呼び出しのようなツール呼び出し、ロボットエージェントであれば pick や pour のような物体操作、自動運転システムであれば pedestrian_detected や rain_started のような環境イベントである。述語は、ユーザー入力とそれまでの軌跡を対象とするブール関数であり、コードであれば is_destructive_cmd、ロボティクスであれば is_fragile_object のようなものがある。述語は開発者が書くこともできるし、エージェントのドメイン、ツール、安全要件を与えられた LLM が Python プログラマーとして生成することもできる。
あらかじめ定義されている強制措置は 4 つある。
user_inspection— エージェントが一時停止し、そのアクションを承認するか拒否するかをユーザーに尋ねる。llm_self_examine— LLM ベースの自己検証メカニズム(論文はこれについて Reflexion を引用している)が文脈を評価し、是正のための応答を生成する。invoke_action— 指定されたアクションをキーと値のパラメータ付きで実行する。たとえば車両の車間距離の調整などである。stop— 軌跡を終了させる。
参照実装は、エージェントの反復ステップに割り込むことで LangChain と統合されており、著者らは同じ原理が AutoGen のような他のフレームワークにも適用できると述べている。
適用される場面
AgentSpec は、制御すべきリスクが、離散的な実行ポイント(典型的には影響の大きいアクションや取り消し不能なアクションの直前)における観測可能なイベントとチェック可能な条件として表現できること、そしてそのドメインの述語の実装を誰かが書くか、LLM が生成したものをレビューできることを前提としている。著者らは、この外部的で開発者が定義する強制を、安全上の制約の解釈を LLM に委ねるアプローチと対置し、強制をエージェントの推論から切り離すことで、実行ごとやモデルのバージョン間で振る舞いが一貫し、ルールが監査可能になると主張している。
著者らが述べている限界は、強制が決定論的かつ局所的であることである。つまり、現時点で許可されている一連のアクションが数ステップ先で安全でない状態に至るかどうかについては推論せず、著者らはこれを将来の確率的な拡張に委ねている。また、ルールを通じて誤った適用がなされることもありうる。論文の実験では、LLM が生成したルールは文脈内の例に過剰適合し(明示的に列挙された機密ファイルだけを検出した)、物体の複雑な特性を見落とし、要件が曖昧な場合には過度に硬直的になり、ある事例では注ぐ動作そのものを全面的に禁止した。このアプローチを支持する根拠は、3 つのエージェントと 3 つのデータセットを用いた単一の論文の評価に由来し、主要な実験のルールは著者ら自身が書いたものである。
関連用語
- ガードレール — AgentSpec が属する、より広い制御の系統(その決定論的で実行前に働く意味において)
- エージェントフック — エージェントのアクションを実行前に捕捉するもう一つの方法
- ヒューマン・イン・ザ・ループ —
user_inspection強制措置が実装しているもの