自動レビューでエージェントの自律性を管理する
コーディングやその他のタスクで最大限の生産性を発揮するには、エージェントには適切なレベルの自律性が必要です。つまり、エージェントは自律的に動作し、創造性を発揮し、許可を求めて何度も立ち止まることなく作業を進められるべきです。
しかし、自律性が高まるほど、エージェントが意図しないアクションを取ったときのセキュリティリスクも増します。これは特にローカルエージェントで顕著です。ローカルエージェントは多くの場合、ファイル、認証情報、環境変数、MCP tools の近くで動作し、本番システムへのアクセスも持っているからです。
単純な解決策は、あらゆるアクションの前にユーザーへ確認を求めることです。しかし、許可を求める頻度が高すぎると、それ自体が別の安全性の問題になります。確認プロンプトが何度も繰り返されると、人は注意深く読まなくなり、承認フローの意味も薄れてしまいます。
そこで今週、自動レビューをリリースしました。これは、エージェントの自律性に関する判断を、スイッチではなくダイヤルのように調整できるようにするものです。核となる考え方は、影響が小さいときにはエージェントが自由に動ける一方で、次のアクションが意味のある境界を越える場合には慎重に進めるべきだ、というものです。
アクションがその連続体のどこに位置するかは、実行前にコンテキストの中でアクションをレビューする専用の分類器エージェントによって判断します。これを構築するには、エージェントの自律性をどう管理すべきかという私たちの直感を、結果、意図、フィードバックに基づく実用的なモデルへと落とし込み、実際のエージェントの挙動に照らして検証できるようにする必要がありました。
コンテキストに応じたリスク判断
エージェントのアクションがリスクを伴うかどうかは、状況次第です。同じコマンドでも、あるワークフローでは無害でも、別のワークフローでは許容できない場合があります。重要なのは、アクション、ユーザーのリクエスト、そして判断を誤ったときの影響の関係です。
こうした認識から、エージェント全体の自律性を制御する「分類器」エージェントの開発に進みました。私たちはこれを小さなモデルにしたいと考えていました。そうすれば、高速かつ低コストで実行できる一方で、次のアクションがユーザーの意図に沿っているかどうかをきめ細かく判断できるからです。
分類器 に与えた中心的なルールは、セキュリティ上の重要性が低いときはより寛容に、高いときはより慎重に判断することでした。この大枠の考え方を踏まえ、私たちは 分類器 を、エージェントの実行パス上で直接機能する、高速でコンテキストを踏まえたレビュアーとして構築し始めました。
分類器の構築
最初の技術的な判断は、どのモデルを選ぶかでした。分類器はツール呼び出しが実行される前に動くため、エージェントループに直接組み込まれており、精度だけでなく速度も求められます。ここで役立ったのが、私たちがマルチモデルの企業だったことです。幅広いモデルと推論モードを試し、速度と判断力のバランスが最も適切なものを選べたからです。
初期に意外だったのは、推論能力の低いモデルが必ずしも速いわけではなかったことです。モデルがポリシーやツール呼び出しをうまく理解できないと、結果的に質の低い答えしか出せないのに、その答えを探すために余計な時間とトークンを費やしてしまうことがありました。よりよいトレードオフだったのは、判断をきれいに下せるだけの推論力を備えた小型モデルでした。
また、分類器はエージェント型にしました。コマンドだけでは判断できないアクションもあるからです。たとえば python script.py のようなコマンドは、ファイルの中身によって安全にも危険にもなり得るため、分類器は判断する前に ReadFile、Grep、Glob、ListDir などのツールを使ってワークスペースを調べられます。
また、分類専用のエンドポイントは設けませんでした。余分なラウンドトリップが発生すると、レビュー対象となるすべてのツール呼び出しの直前にレイテンシがそのまま上乗せされるからです。代わりに、分類器は親エージェントと同じ RPC ストリーム内で実行され、サブエージェントに近いアーキテクチャを採用しています。
フィードバックループの設計
次に判断すべきだったのは、ブロックしたときに何を起こすかでした。私たちは、分類器を単なる承認プロンプトの生成装置にはしたくありませんでした。アクションをブロックすると、分類器はその理由を親エージェントに返し、親エージェントは多くの場合、そのフィードバックをもとに、ユーザーを中断させることなく、より安全な進め方を選べます。
そのフィードバックを役に立つものにするのは、ユーザーの意図です。問題は、あるアクションが単独で見て危険そうかどうかではありません。重要なのは、そのアクションが、ユーザーがエージェントに依頼した内容に照らして正当化されるかどうかです。これによって、通常の開発作業は止めずに進めながら、より重大な結果を伴うアクションには、ユーザーからのより明確なシグナルを求められます。
このデザインが機能するのは、分類器が、通すべきアクションと止めるべきアクションの両方に対して適切に調整されている場合だけです。そのため、私たちにはその両方をカバーする evals が必要でした。
分類器のテスト
最初の evals セットは、エージェントの通常の動きを把握するために、社内での使用データから作成しました。分類器には、日常的な開発作業を妨げることなく、リスクの高いアクションを検出することが求められており、そのベースラインを確認するには社内セッションが最適でした。まず約 12 時間分の社内開発者セッションから始め、そこから絞り込みを行い、よくあるアクションの重複を除去して、6,122 行のラベル付きデータにまとめました。
また、通常の使用では最悪のケースが十分な頻度で現れないため、合成データも必要でした。エージェントがシークレットを読んだり、本番データに触れたり、信頼できない指示に従ったり、大きな副作用を伴うアクションを取ったりするケースを生成しました。こうした例によって、分類器に特に検出してほしかった失敗パターンをカバーできました。
学習を進める中でポリシーも変わっていったため、データ作業はさらに複雑になりました。分類器が認識すべき振る舞いのカテゴリを変更するたびに、eval セットの再ラベル付けや再生成が必要になりました。そうしなければ、現在の分類器を、すでに古くなった問題認識に基づいてテストすることになってしまいます。
evals は、本番環境で使用しているものと同じバックエンドの分類器ループに通して実行しました。これにより、ツールの使用、最終的な分類、モデルのオーバーライド、パース失敗を含む一連の経路全体をテストできました。evals では、最終的な許可またはブロックの判定に加え、判断前にワークスペースを調べる必要があった場合に分類器が使ったコンテキストも確認しました。
また、判定のぶれも調べました。同じケースで 6 回は許可され、4 回はブロックされるようであれば、通常はポリシーや prompt の指定が不十分であることを意味します。繰り返し実行することで、そうした不安定なケースを見つけ出し、分類器の振る舞いがより一貫するまで改善できました。
即時ブロックを最小限に抑える
実際には、分類器 によるレビューが必要になるエージェントのアクションはごく一部です。多くのコマンドはすでに allowlist やサンドボックスでカバーされているため、分類器 が主に動くのは、そのアクションにコンテキストに応じた判断が必要な場合です。
分類器 が動作した場合でも、現在ブロックされるアクションは全体の約 4% にとどまっており、しかもブロックされてもすぐにユーザーへのプロンプトになるわけではありません。分類器 は説明を親エージェントに返すため、親エージェントはアクションの範囲を絞ったり、別のツールを選んだり、リスクのあるステップ自体を完全に避けたりできることがよくあります。
分類器 によるブロックの一部はユーザーへの割り込みになりますが、全体で見ると、自動レビュー モードで少なくとも 1 回の割り込みが発生する chat は、全体の約 7% にすぎません。参考までに言うと、私たちが連携している一部の企業のお客様では、以前は組織内でおよそ 40% のアクションがブロックされていました。
この初期データは、私たちが目指していた主な製品の挙動と一致しています。分類器 がユーザーに直接割り込むことはまれで、ブロックされたケースの大半でも、親エージェントはそのフィードバックを使って、より安全で範囲を絞った形で処理を続けられます。
エージェントの自律性の改善
自動レビューはまだ初期段階にあり、エージェントの能力が高まるにつれて、自律性の度合いに関する私たちの理解も変化し続けていきます。現時点ではデスクトップアプリ上のローカルエージェントに重点を置いていますが、今後は同じ考え方が、より多くの場面でエージェントの自律性をどう制御するかを形作っていくと考えています。
私たちはエージェントに真の自律性を持たせたいと考えています。その一方で、エージェントの動きを抑えるべきかどうかの判断は、単一のグローバルな権限設定ではなく、コンテキストに応じて決まるべきです。分類器によって、自律性を承認プロンプトの連続に逆戻りさせることなく、安全性を高められます。これにより、より慎重な確認が必要なアクションを検知し、親エージェントにフィードバックを返し、より安全な進め方がある場合にはエージェントがそのまま作業を続けられるようにします。
自動レビューは現在、新規ユーザーではデフォルトになっています。既存ユーザーは、Settings > エージェント で有効にできます。