はじめに
こんにちは、株式会社LegalOn TechnologiesでSET (Software Engineer in Test)のポジションで仕事をしている島根(@shimashima35)と申します。
この記事では、汎用的なAI Agentシステムを自社開発するにあたってのテスト戦略やテスト観点についての私の考察を紹介します。「汎用的なAI Agentシステム」とは、特定の業務やアプリに特化せず、ユーザーの自然言語の指示をもとに複数の外部サービス(例:Google Workspace など)と連携しながらタスクを実行できるAI Agentのことです。さらに、API連携に加えてブラウザ操作も行える想定であるため、操作範囲が広く、そのぶんテストや安全設計の論点も増えます。
AI Agentに対するテストを検討している方の参考になれば幸いです。
課題とその背景
製品開発状況
デザイナーの吉永(@yoshinaga2015)がnote記事で紹介していますが、弊社では、一時期、単体での製品としてのリリースも視野に入れて、汎用的なAI Agentの開発を進めていました。私は当時、QAエンジニアとしてこのプロジェクトに参加しテスト戦略を検討していました。
AI Agentのテストの状況
LLMを活用したテストの事例は存在しますが、汎用的なAI Agentのテストに関する情報は、当時国内外を探しても見つけることができませんでした。
今回開発したAI Agentは、Google WorkspaceなどのAPI連携だけでなく、Browser Useのようなブラウザベースの操作も想定していました。これにより、Agentが実行できる操作の範囲が「ブラウザで操作可能なすべてのもの」にまで広がりました。
製品仕様としてすべてのWebアプリケーションの動作を保証するわけではありませんが、技術的には「操作できてしまう」ため、開発者が想定していない操作が実行される可能性を考慮する必要がありました。これはテストだけの問題ではなく、製品に適切な制限を設けるべきかといった仕様面の検討も必要になります。
また、テスト以外にも「ユーザーや運営にとって起きてほしくないこと」を洗い出すハザード分析を実施することが望ましいと考えられます。これらの分析結果は製品企画や仕様・設計にフィードバックされます。
考えたこと
以上のことから私は、仕様としてあるべきことの検討、リスク分析、テスト観点の洗い出しを行うことにしました。
仕様としてあるべきこと = ガードレール設計
汎用的なAI Agent(特にブラウザ操作まで含む)は、技術的には「操作できてしまう範囲」が広く、開発者が想定していない操作が起き得ます。そのため、テスト観点を洗い出す前に、まず仕様として「許される操作(アクション空間)」と「責任分界」を定義し、製品側に制限を設ける必要があると考えました。
具体的には次の3点です。
- アクション空間の制御(できることを狭める):操作のホワイトリスト化、対象リソースのスコープ限定、高リスク操作の段階化(下書き→承認→実行 など)
- 権限と責任分界(誰の判断・誰の権限かを明確にする):ロール別権限、代理実行の境界、監査ログ(いつ・何を・なぜ実行したか)
- 実行前後の安全機構(事故を起こしにくくする):高リスク時の確認、ドライラン(差分提示)、制約違反時のフェイルセーフ(止まる/差し戻す)
以降のテストでは、これらの制限がプロンプトの揺れや悪意ある入力、外部サービス側UI変更などによって破られないことを重点的に確認する、という立て付けにします。
リスク分析
リスク分析はリスクの洗い出しとリスク評価の2つに分かれます。それぞれについて説明していきます。
リスクの洗い出し
前述の通り内部ブラウザを使うことを前提にした場合、利用サービスは実質無制限となります。そのため「できること」だけでなく「できてはいけないこと」を意識した設計が必要になります。その前段階として「できてはいけないこと」「起きてはいけない/欲しくない」ことを洗い出す必要が出てきました。
今回は自分一人でざっくりと考えられる範囲で、以下のようなリスクを洗い出してみました。
- オンラインストレージからファイルが消去される
- 意図しないメール・チャットが送られる
- 意図しない金銭支出
- プライベートファイルがWeb上に公開される
リスク評価
いくつかリスクを出した後に考えたのは、これらのリスクの高低判断を行うということでした。これはリスクの高低に応じてAI AgentのHITL(Human-in-the-loop:人間が自動化システムの操作、監督、意思決定に積極的に関与するシステムやプロセス)による割り込みを行うのが自然であると考えたためです。
では、何をもってリスクの高い/低いを判断すればよいでしょうか。評価軸として以下のようなものを考えました。
| 評価軸 | 評価内容 |
|---|---|
| 行為内容 | 読み取り専用か変更を伴うか。変更の場合はリスクが高い。 |
| 操作および結果の可逆/非可逆 | 操作の可逆・非可逆は、例えばファイルの更新など。Google Docsなどでは履歴からもとに戻すことができるので可逆。もたらされた結果の可逆・非可逆は、例えばプライベートな情報がWeb共有されること。Web共有を外すことで状態は元に戻るが、公開した情報は戻らない。 |
| 操作対象の重要度 | 一般ファイルか機密情報か。機密情報であればリスクが高い。 |
| ブラウザの場合のアクセス先ドメイン | どういったサイトか。例えば金融機関はハイリスク。ドメインレピュテーションによる評価を行う。フィッシングサイトの場合はハイリスク。 |
| メール送信先のドメイン | 自分と同じ組織内であれば、誤送信があっても取り返しがつくのでリスクは低いと判断できる。 |
| 金銭支出を伴うか | 金銭支出を伴うものはリスクが高いと判断する。また金額が大きいほどリスクが高い。 |
テスト観点の洗い出し
AI Agentはそれまで扱ってきたWebアプリケーションと異なり、確定的な動作が保証されません。そのため、AI Agent固有のテスト観点を洗い出す必要がありました。
洗い出しに際しては自分自身で考えたAI Agentに対して「気になること」を挙げた上で、ChatGPTなどのLLMを壁打ち相手として活用し掘り下げていく方法を取りました。
結果として、以下のようなAI Agent固有のテスト観点をリストアップしました。
| 観点 | 確認内容 |
|---|---|
| HITL(Human-in-the-loop) | 適切なタイミング・条件でHuman-in-the-loopが行われるか。 |
| 精度 | ・自然言語の表現揺れの吸収度合い ・同一プロンプトでの目標達成確率 |
| 目的達成 | ユーザーの意図した目的が正しく実行されるか。 |
| 入力チェック | AIが期待するものと異なる入力を行った場合でも、それを検知し再入力を促すことができるか。 |
| 禁止事項 | AI Agent経由で他社への攻撃や不法行為を行うことを察知して止める。 |
| セキュリティ | セキュリティ認証情報が漏れないなど。攻撃的なプロンプトに対する制御。リスクのある振る舞いに対する制御。 |
| 分離性 (Isolation) | • 複数人同時に利用した際に、それぞれがお互いに影響し合わないこと。 • AさんとBさんがそれぞれ別々にAgentを利用する際、Aさんが入力した情報をBさんのAgentが公開してしまうようなことがないか。利用者毎にAgentのコンテキストが分離されていること。 |
| 分離性 (アクセス制御) | テナントの概念がある場合、 あるデータに本来アクセスできない人が、Agentを介すことでアクセスできてしまわないかどうか。 |
私がこの中で特に特徴的だと考えるのは、HITLと2つの分離性についてです。HITLはAI Agentの基本的な振る舞いではあるものの一般的なWebアプリケーションではない振る舞いです。分離性も、セッションという概念がWebアプリケーションにあるものの、ここでの扱いはそれとは異なります。
成果物
前述のリスクやテスト観点を元にして、実際に私が作成した成果物について今回のテーマに関連する部分を抜粋して紹介いたします。
テスト分類
汎用AI Agentでどのようなテストを行うべきかを定義しました。以下はテスト計画書からの抜粋になります。テスト計画は前述のAI Agent固有のテスト観点にいくつか追加した上で、LLMにより生成したものを利用しています。概ねテスト分類は出ていますが、プロジェクトがピボットにより中断したため、レビューなどは不十分な状態です。
機能テスト
AIエージェントの基本機能が仕様通りに動作することを確認する。
| テスト項目 | 方法 | 評価基準 |
|---|---|---|
| 基本応答機能 | 質問に対して適切に回答できるか確認 | 適切な応答率 95%以上 |
| タスク完了機能 | 特定のタスクを指示し完了できるか検証 | 正確にタスク完了 90%以上 |
| エラー処理 | 無効な入力や不明な要求への対応 | 適切なエラーメッセージを表示 |
| ブラウザ操作機能 | 内部ブラウザ経由の各種操作の正確性 | 操作成功率 90%以上 |
精度テスト
AIエージェントの判断や予測の正確性を評価する。
| テスト項目 | 方法 | 評価基準 |
|---|---|---|
| 自然言語理解精度 | 表現揺れのある同一意図のプロンプトで検証 | 理解率 90%以上 |
| タスク達成精度 | 同一プロンプトでの目標達成確率測定 | 85%以上の確率で達成 |
| 意図理解の一貫性 | 異なる表現方法での同一要求テスト | 一貫した理解と対応 |
| コンテキスト維持能力 | 会話の流れを維持できるか検証 | 会話コンテキスト維持率 85%以上 |
Human-in-the-loop(HITL)テスト
AIが人間の介入を必要とする場面で適切にエスカレーションできるかを検証する。
| テスト項目 | 方法 | 評価基準 |
|---|---|---|
| エスカレーションタイミング | 高リスク操作時の人間への確認要求 | 必要なタイミングで確認を要求する |
| 確認プロセス | ユーザーへの確認UI/UXの適切さ | ユーザーが理解しやすい形式 |
| 頻度の適切さ | 確認要求の頻度測定 | 過剰確認がない(5回以下/タスク) |
| 介入後の再開能力 | 人間の介入後に処理を続行できるか | 正確に処理を再開できる |
非機能テスト
AIエージェントのパフォーマンスや安定性を評価する。
| テスト項目 | 方法 | 評価基準 |
|---|---|---|
| 応答時間 | プロンプト入力から応答までの時間計測 | 平均5秒以内 |
| 同時アクセス耐性 | 複数ユーザーによる同時アクセステスト | 性能劣化なく同時処理 |
| リソース使用効率 | CPU/メモリ使用率の測定 | 許容範囲内のリソース消費 |
| 長時間稼働安定性 | 24時間連続稼働テスト | 性能劣化なく安定稼働 |
セキュリティテスト
AI Agentのセキュリティリスクを特定し評価する。
| テスト項目 | 方法 | 評価基準 |
|---|---|---|
| プロンプトインジェクション | 悪意あるプロンプト入力テスト | 適切に拒否または制限 |
| 認証情報保護 | 認証情報漏洩リスクの検証 | 認証情報の適切な保護 |
| データ分離性 | 異なるユーザー間のデータ分離検証 | 完全なデータ分離の維持 |
| リスク操作制御 | 危険な操作(ファイル削除など)の制御 | 適切な警告と制限 |
ユーザビリティテスト
AIエージェントの使いやすさと体験品質を評価する。
| テスト項目 | 方法 | 評価基準 |
|---|---|---|
| 使いやすさ | 実ユーザーによる操作テスト | 操作の直感性スコア80%以上 |
| 出力の理解しやすさ | AIの回答明瞭性の評価 | 理解度スコア85%以上 |
| エラーメッセージ | エラー発生時の説明の明瞭さ | ユーザーが次のアクションを理解できる |
| 学習曲線 | 初回ユーザーの上達度測定 | 30分以内に基本操作習得 |
HITLのためのリスク判定
前述のリスク評価をもとに精緻化し、数値による判断が行えるように重み付けありのスコアリングの仕組みを考えました。そして数値化されたリスクにより、AgentがHITLを発生させるべきか否かを判定させる式の構築を行いました。
ここでは一旦以下のようにしました。
- 60以上:即時HITL介入(要確認)
- 40~59:条件付きHITL(状況により介入)
- 40未満:自動実行可能(HITL不要)
ただ、これらの値は暫定でしかないので実際のプロダクトへの投入時は重みも含めた修正が必要となるでしょう。なお、このリスクスコア判定についてはデザイナーの吉永が、ChatGPT上にGPTsを構築し、自然言語で状況を入力するとHITLが発生するべきか否かを自動判定して返す仕組みを作ってくれました。
| 名前 | 概要・例 | リスクスコア | 重み | 補足 |
|---|---|---|---|---|
| 新規性 | Agentが初めて行う作業か否か。 | 初めての処理 (5) 稀にしか行わない (3) • 頻繁に行う (1) |
2 | Agentに尋ねるよりも過去の実行ログから判定するのが良さそう。 |
| 確信度 | Agent がどれほど操作内容に確信がもてているか。 | 低(確信なし)(5) 中(部分的に確信あり)(3) • 高(確信あり)(1) |
2 | Agent自身に尋ねて得られる情報のかは確認が必要。 |
| 累積リスク | Agentに依頼している一連の処理の累積リスク。リスクの積み重ねが大きくなると、次の処理でリスクが顕在化する可能性が高くなる。 | 累積リスクが高 (5) 中 (3) • 低 (1) |
2 | セッション中のリスクの推移を取得して判定する。 スコア算出方法が確定したら閾値を具体的な数値で定義する。 |
| 可逆性 | 操作の可逆性と結果の可逆性二つあるが、高い方を採用する。 | 非可逆 (5) 部分的可逆 (3) • 完全可逆 (1) |
3 | 概要にあるように、操作と結果の可逆性両方を判定した上で高い方を採用する。実装上は因子を別に分けてもいいかもしれない。 |
| 影響の大きさ | 失敗した場合の損失の大きさ。例えば、100万円の送金は100円の送金より影響が大きい。 | 金額ベース 損失・影響額が高額(例:100万円超)(5) 中程度(例:10万~100万円)(3) 低額(例:1万以下)(1) 非金額ベース 極めて重大 人命、法令違反、情報漏洩 (5) 重大 重要業務停止、顧客関係悪化 (4) 中程度 一時的業務支障、社内混乱 (3) 軽微 部分的・限定的な混乱 (2) ほぼ影響なし 軽微な誤字脱字 (1) |
3 | 金額ベースは中間値が現状ない。金額の妥当性は要検討。 |
| 操作カテゴリ | Read < Create < Update ≤ Delete の順にリスクが上がる。 | Delete (5) Update (4) Create (3) Read (1) |
3 | ブラウザでの操作では、このあたりの判定ができない。 Read 以外は全て一律高めでもいいかもしれない。 |
| 外部性 | 組織や個人の外に影響が及ぶか。組織外に影響が出る方がリスクが上がる。 | 組織外への影響あり (5) 組織内のみ (2) |
2 | |
| 対象の重要度・機密度 | 操作対象が重要だったり機密性が高いか。M&Aに関する情報や自社の財務情報は重要度・機密性が高いと言える。一方、すでに公開されている情報は低い。 | 高(例:財務、M&A情報など)(5) 中(例:内部限定情報など)(3) • 低(公開情報)(1) |
3 | |
| 対象の範囲・規模 | 操作対象の大きさ・範囲など。例えば、メール送信について、1人より100人は範囲が大きい。 | 大規模(例:100人以上)(5) 中規模(例:10~100人)(3) • 小規模(10人以下)(1) |
2 | ファイル操作などの場合は読み取り可能な対象による判定をするか?その他明確に範囲を特定できない場合はどうするか考える。 |
| ユーザーの事前設定 | 事前に設定した禁止事項・制限事項に該当する場合はリスクがあがる | フィッシングや銀行など高リスクサイト (5) 一般サイト (1) |
2 | ドメインのレピュテーションを行う必要がある。また、このほかの段階があるか? |
| 対象ドメイン(ブラウザの場合) | どのドメインにアクセスしてるかによってはリスクを高く見積もるべき。 • フィッシングサイト • 銀行(ネットバンキング)のサイト • etc… |
禁止・制限事項に該当 (5) 該当なし (1) |
2 | 該当なしは 0 でもいいかもしれない。 |
| 緊急性 | 緊急度が高い場合はリスクが高くても実行を優先することもありうる。 | 緊急度低 (5) 中程度 (3) • 緊急度高(1) |
2 | 緊急だからHITLをスキップしていいのか?と考えるとなくてもいいかもしれない。 |
考察/今後の展望
本記事では、汎用AI Agentに対して「何をテストすべきか」を、リスク分析とテスト分類の形で整理しました。現時点では、網羅性よりも方向性を重視しており、特に次の点は未検証です。
- リスク評価軸(可逆性、外部性、重要度など)が、実際の事故やヒヤリハットの発生確率と相関するか
- 「Agentの確信度」など、モデル由来の内部状態を安全判断に使ってよいか
- HITLを入れた場合の、ユーザー体験と安全性のトレードオフがどこに落ち着くか
これらはまだ手探りで、テストの観点としてどこまで実戦で使えるかは、今後の課題として残っています。
まとめ
本記事では、汎用AI Agentを開発するにあたって「何をテストすべきか」を、リスク分析とテスト分類の形で整理しました。AI Agentは外部サービスと連携して実際に操作できてしまうぶん、機能や精度だけでなく「起きてほしくないこと」を起点に観点を洗い出すことが重要だと考えています。
今回の内容はあくまで叩き台ですが、AI Agentのテストや安全設計を考えるときの出発点として、何か一つでもヒントになれば幸いです。
「この観点は抜けている」「この評価軸は現場だと使いにくい」など、フィードバックがあればぜひ教えてください。
謝辞
AI Agent開発の際に知見をくださった荒崎さん、デザイナーながら一緒にテストやリスクについて考えGPTsをさくっと作ってくれた吉永さん、HITLの発生条件についてレビューをしてくださった浅野さん、本記事のレビューをしてくださった引持さん、岡登さん、CTOオフィスの皆さんこれらの方々に深く感謝します!
この記事と資料はこれらの方々の協力なしではありえませんでした。ありがとうございました。
仲間募集!
LegalOn Technologiesでは共に働く仲間を募集しています!ご興味がある方は、以下のサイトからぜひご応募ください。皆様のご応募をお待ちしております。