7月2日、Chainguardが「You can't trust what you can't see: How we keep an eye on a fleet of AI agents」と題した記事を公開した。この記事では、500以上のモジュールを持つモノレポを自律的に管理するAIエージェント群を、トレース・評価スコア・コストの観点から一元監視する社内観測基盤「Lens」の設計と運用について詳しく紹介されている。
「信頼できるのは、見えているから」
Chainguardは、distrolessコンテナイメージ(OSパッケージを極限まで削ぎ落とした最小構成のコンテナベースイメージ)で知られるコンテナセキュリティ企業だ。同社はAIエージェントのフリート(複数エージェントの集合体)を使って、500以上のモジュールを持つモノレポ(※単一リポジトリで複数プロジェクトを管理する構成)を継続的に標準仕様へ修正し続けている。エージェントは数千のPRを自動で開き、低リスクと判断したものは人間の承認なしにマージする。
社外の人間にこれを説明すると、返ってくる反応はほぼ決まっている。「すごい」ではなく、「……それ、信頼できるの?」だ。
この問いに対する答えは明確だ。「AIだから信頼するのではない。見えているから信頼できる」。バーンしたトークン数、呼び出したモデル、通過・失敗したeval(評価テスト。エージェントの出力品質を定量的に採点する仕組み)、特定コミットに対する個別の判断——すべてが数秒以内に画面上に現れる。その可視化レイヤーが、Lensと名付けられた社内ダッシュボード基盤だ。
可観測性のない自律性は「予算付きの希望」でしかない
典型的な失敗パターンはこうだ。エージェントを作る。デモでは動く。PRを開かせ、安全なものはマージさせる。1週間は魔法のように動く。そしてある火曜日、evalスコアがじわじわ悪化し始める。あるいはモデルバージョンが勝手に上がる。あるエージェントが修復不可能なループにはまり、トークンを暖房機のように燃やし続ける。誰も気づかない——証拠が5つの異なるツールに散らばっているから。
- PRはGitHub
- コストはGCPの課金エクスポート
- トレースはBigQuery
- インシデントはLinear
- 「なんか変だな」はSlackのDM
シグナルが人間が行動できる形に集まった頃には、すでに余計な金を使い込んでいるか、マージすべきでないものをマージしている。
可観測性のない自律性は、予算付きの希望に過ぎない。
Lensの全体構造
LensはChainguardの社内ダッシュボードハブだ。1つのログイン、1つのURL、その下に数十のダッシュボードがぶら下がる。「BigQueryのクエリを知っている人だけが真実にアクセスできる」状況を解消し、社内の誰でも同じ画面を開けば今何が起きているかわかる状態を目指して設計された。
エージェント関連の主要ダッシュボードは4つある。
① LensAgentTraces:エージェントの「思考」を見る
最も中心となるダッシュボード。エージェントはDriftlessAF(Chainguardが開発に関わるエージェント調整フレームワーク。元記事での説明は限定的だが、オープンソースとして公開されている)上で動作し、各実行がトレースとしてBigQueryに書き込まれる。LensAgentTracesはそれを5つのタブで可視化する。
- Overview:総トレース数、トークン数、総コスト、エラー率の概要
- By Agent:エージェント別の内訳。コストが隣より10倍かかっているエージェントを発見できる
- By Model:ClaudeとGeminiを混在運用している場合に「1ドルあたり最もパフォーマンスが高いモデルはどれか」を確認できる
- Failures & Quality:失敗を「サイレント」にさせない。エラーを表面化する専用タブ
- Explorer:個別トレースのドリルダウン。リクエスト、レスポンス、トークン数、コスト、レイテンシをすべて確認できる
特に価値が高いのが「ディープリンク」機能だ。 エージェントがPRのレビューに失敗すると、そのPRのコメントにExplorerへのリンクが自動投稿される。URLには?env=、?trace=、?day=の3パラメータが付与されており、クリック1つで該当のトレースに直接ジャンプできる。トレースIDのコピー不要、環境の推測不要、BigQueryコンソールへのアクセス不要。「謎めいたコメントが残ったPR」から「その判断を生んだ正確な推論」まで、1クリックで到達できる。
また、prod・staging・presubmit(マージ前のCIチェック)の3環境を単一トグルで切り替え可能なため、「本番のフリートは正常か?」と「この変更はデプロイ後に悪化しないか?」を同一ツールで確認できる。
② LensOrchestrator:リアルタイムの状態監視
トレースは「死後解剖」だ。今まさに何が起きているかを知るためのダッシュボードがLensOrchestratorだ。
エージェントのオーケストレーション(複数エージェントの処理フローを束ねて制御する仕組み)をカンバン形式で可視化し、setup・executing・blocked・doneの各フェーズにカード分類する。沈黙したオーケストレーションには「鮮度インジケータ」が付き、止まったまま放置されるのを防ぐ。
注目すべきはLookoutというリコンサイラー(実際の状態と期待される状態のズレを検出・修正する調整プロセス)の存在だ。これは「迷子になったオーケストレーション」を定期監査する番人で、親プロセスが詰まった場合、子プロセスが終端状態に達したが次に進まない場合などを検出し、再キューイングするか人間にフラグを立てる。「番人に番人をつける」設計だ。
③ LensAgentEvals:品質スコアの推移を監視する
トレースはエージェントが「何をしたか」を教えてくれるが、「それが良かったか」は教えてくれない。evalスコアが3週間でじわじわ0.9から0.7に落ちていても、誰も気づかなければ信頼の土台は静かに崩れていく。
LensAgentEvalsはこの「じわじわした劣化」を可視化する。BigQueryからeval結果を読み込み、エージェント別・スコアラー別・モデル別にスライスできる。またCompareタブでは現行バージョンと候補バージョンのスコアを横並びで比較でき、「デモが良さそうだったから」ではなく「スコアで上回ったから」という根拠でデプロイ判断ができる。
④ LensCloudCosts:コストを属人化する
フリートが動き続ければ、コストも積み上がり続ける。 1トークンは数分の1セントでも、数百モジュールを処理するフリートが連続稼働すれば、無視できないコストになる。
LensCloudCostsはGCPの課金エクスポートデータを読み込み、エンジニア別・モデル別・サービス別にAIの支出を分解する。プロジェクト→サービス→担当者のフローをSankeyダイアグラムで可視化し、CSVやPNGでのエクスポートも可能だ。
重要なのは、このダッシュボードがトレースやevalと同じハブ内に存在する点だ。 隣のタブを見ればコストが急増しているのと同時にevalスコアが下がっている、という文脈を一瞬でつかめる。コスト単体は「パニックになるための数字」でしかないが、品質情報と並べると「何が起きているか」の物語になる。
設計思想のまとめ
Lensが解いた問題は技術的に難しいものではない。必要な情報はすでに存在していた——ただ5つのツールと複数の権限の壁の向こうに散らばっていただけだ。それを1つの場所にまとめ、全員が同じ画面を開ける状態にする。その結果、「これは安全か?」という問いに答えるのに5ツールをまたぐ必要がなくなった。
エージェントを信頼するかどうかは、AIへの信仰の問題ではない。見えるかどうかの問題だ。
詳細はYou can't trust what you can't see: How we keep an eye on a fleet of AI agentsを参照していただきたい。