AIアプリケーション
AIアプリケーションのテスト:何が壊れ、どうテストするか。
LLMアプリは、通常のWebアプリとは違う形で失敗します。モデルは毎回違うものを返すので、回答そのものにはアサーションを書けません。書くのはその周辺のすべてです。応答が届くこと、ストリーミングされること、止まること、目に見える形で失敗すること、上限を守ること、そしてその人が見てはいけないデータを決して返さないこと。
最終更新日 2026年8月24日
AIアプリケーションのテストは、どう違うのか
画面は同じです。約束事が違います。従来のテスト自動化は、2回続けて成り立つアサーションの上にあります。これをクリックしたら、あれが見える。モデルは最初の実行でこの前提を崩すため、チームはしばしばAI機能は回帰テストできないと結論づけ、テストなしで出荷してしまいます。
できます。コツは、アサーションを文章から、決定的な部分に移すことです。応答が予算内に届いたこと、指定したスキーマとして解析できたこと、このユーザーが読んでよい文書を引用していること、拒否が拒否として表示されたこと、再試行で二重に課金されなかったこと。これらはすべて、ごく普通の自動化です。回答が良いかどうかを判断するのは評価の問題で、お客様自身の正解データが必要であり、回帰スイートではなく、プロンプトの隣にある評価の仕組みに属します。
LLMアプリで実際に壊れるもの
これらは出力の品質に関する意見ではなく、挙動です。だからテストできます。どれも、悪い回答としてではなく、プロダクトのバグとしてユーザーに届きます。
| 失敗 | ユーザーへの届き方 | テスト |
|---|---|---|
| 回答がストリーミングされ、途中で止まる | ストリーミング中に接続が切れると、エラーも再試行もなく、書きかけの返信が画面に残ります。ユーザーはそれを回答として読んでしまいます。 | 応答を途中で切断し、UIが途切れた回答ではなく失敗の状態を表示することを確認します。 |
| モデルが遅く、UIに対応策がない | p95が40秒前後なのに、進捗表示も、キャンセルも、タイムアウトもない画面。ユーザーは再度クリックし、2つのリクエストが課金されます。 | タイムアウトを超えて応答を保持し、目に見える状態とキャンセル手段があり、2回目のクリックで重複リクエストが発生しないことを確認します。 |
| プロバイダーが429や503を返す | レート制限やプロバイダーの障害は例外ではなく日常です。起こらないものとして扱うアプリは、生のエラーや終わらないスピナーを表示します。 | プロバイダーから429と503を返し、ユーザーが対処できるメッセージにアプリが縮退することを確認します。 |
| 空、拒否、安全フィルターによる返信 | モデルが断る、あるいは安全フィルターが働くと、正常系しか扱っていない画面は空の吹き出しを表示します。 | 拒否と空の応答を強制し、どちらも空白のメッセージやレイアウト崩れを起こさないことを確認します。 |
| 会話の文脈が失われる | 履歴がウィンドウに収まるよう切り詰められ、アシスタントは3つ前のメッセージで伝えたことを黙って忘れます。プロダクトが愚かに見えます。 | 会話をコンテキストの上限を超えて進め、アプリが何を落としたかを伝え、黙って落とさないことを確認します。 |
| ツール呼び出しが複数回実行される | エージェントが、ツールがすでに実行済みのステップを再試行します。そのツールが行ったこと(メール送信、課金、書き込み)が2回起こります。 | ツール呼び出しが成功した後にタイムアウトさせ、再試行で副作用が繰り返されないことを確認します。 |
| 検索が他のテナントのドキュメントを返す | ベクトルストアのフィルターがクエリではなくプロンプト内にあると、指示を無視した検索が、ユーザーが読んではいけないデータを返します。 | あるテナントとして別のテナントが所有するドキュメントを検索し、回答で触れられていないだけでなく、取得結果にそもそも含まれないことを確認します。 |
| 上限がなく、コストが暴走する | ユーザーごとの上限がないため、1つのループや1つのスクリプト化されたアカウントが、請求書が届くまで誰にも気づかれない金額になります。 | 同じエンドポイントを繰り返し呼び出し、ユーザー、キー、分ごとの上限が存在することを確認します。 |
セキュリティ
LLMのセキュリティテスト:確認する価値のある攻撃面
AI機能は通常、普通の機能にはない2つのものにつながっています。有料のエンドポイントと、読み取ったものの中にある指示に従うコンポーネントです。どちらも、標準的なアプリケーションセキュリティのレビューが想定していない形で、攻撃面を広げます。
以下は、実際に見つかる頻度の順に並べています。これは、これらが取り上げられる順序とは異なります。
- 01
クライアントバンドルに含まれるプロバイダーのキー
モデルプロバイダーのキーがフロントエンドのJavaScriptに含まれている、または認証のないプロキシルート経由で到達できる状態。
開発者ツールを使える人なら誰でも、あなたの利用枠を消費できます。このリストで最も確認が簡単で、見逃すと最も高くつきます。
- 02
コンテンツ経由のプロンプトインジェクション
モデルが読み取るもの(アップロードされた文書、スクレイピングしたページ、サポートチケット、メール本文)に隠された指示を、モデルが実行してしまうこと。
攻撃者は入力欄に触れる必要がありません。システムが取り込むものはすべて、入力として設計したかどうかにかかわらず、入力です。
- 03
ツールに到達するインジェクション
注入された指示によって、エージェントがメッセージの送信、レコードの書き込み、内部アドレスへのリクエストなどのツール呼び出しを行うこと。
ここで、インジェクションは恥ずかしい出来事から、インシデントに変わります。被害の範囲は、エージェントに許可されていることすべてです。
- 04
システムプロンプトと秘密情報の漏えい
モデルに、自身の指示、ツール定義、与えられた設定の断片を繰り返させること。
システムプロンプトには、業務ルール、内部エンドポイント、ときには誰も入れるつもりのなかった認証情報が含まれていることがあります。
- 05
テナントをまたぐ検索
クエリのフィルターではなく、モデルにお願いすることで範囲を絞っている検索。
プロンプトはアクセス制御ではありません。フィルターが指示の中にあるなら、無視された指示が1つあるだけでデータ侵害になります。
- 06
マークアップやコードとして描画される出力
モデルの出力がHTMLとしてページに、あるいはシェル、クエリ、evalに渡されること。
入力元が新しくなっただけの古典的なインジェクションです。モデルは信頼できない入力であり、攻撃者が影響を与えられる入力です。
- 07
サービス拒否としての無制限の支出
レート制限も、アカウントごとの上限も、受け付けるサイズの制限もなく、有料モデルを呼び出すエンドポイント。
狙いはあなたを停止させることではありません。請求額を膨らませて、あなた自身に止めさせることです。
- 08
ログに残るもの
プロンプトと応答がログや分析に書き込まれ、ユーザーが貼り付けたものも含まれること。
人はチャット欄に本番の認証情報や顧客の記録を貼り付けます。ログの保持期間は、データ保護の問題になります。
QA Spiderが自動化するもの、しないもの
責任を問えるよう、範囲を絞って示します。
自動化するもの
- 実ブラウザーでプロダクトを操作するため、上記のストリーミング、タイムアウト、再試行、空の状態、エラーの状態は通常のUIテストとなり、スケジュールとデプロイのたびに実行されます。
- UIの下にあるAPI、フロントエンドがモデルに到達するために呼び出すルートも含めて確認します。
- 失敗したものを、再現手順とスクリーンショット付きのチケットとして、Jira、Azure DevOps、ClickUp、GitHub、Linearに登録します。
- 公開サイトの表層的なセキュリティチェックを実行します。通信とセキュリティヘッダー、Cookieのフラグ、混在コンテンツ、フォームの露出、DNSとメールのなりすまし対策。
しないこと
- 現時点では、自動のプロンプトインジェクションやジェイルブレイクのスイートは提供していません。クローラーがこれを標準で行うと言う人がいれば、そのアサーションを見せてもらってください。
- 回答が正しいかどうかは評価しません。それは評価(eval)の問題であり、お客様の正解データが必要で、回帰テストとは別の分野です。
AIアプリのテストについてよくあるご質問
- AIアプリケーションのテストは、通常のWebアプリのテストとどう違いますか?
- 画面は同じですが、出力が違います。通常のアプリは同じ入力に同じ答えを返すので、それに対してアサーションを書けます。モデルは毎回違うものを返すため、アサーションは回答そのものではなく、回答をめぐる形と挙動に移ります。届くこと、ストリーミングされること、止まること、目に見える形で失敗すること、想定どおりのコストであること。
- 出力が毎回変わるとき、どうアサーションを書きますか?
- 文章ではなく、約束事に対して書きます。予算内に応答が届いたこと、指定したスキーマとして解析できたこと、ユーザーが見てよい文書を引用していること、拒否が拒否として表示されること。文言の良し悪しの判断は評価(eval)であり、回帰スイートとは別に実行します。
- プロンプトインジェクションとは何で、どうテストしますか?
- システムが読み取るコンテンツ(文書、Webページ、チケット)に隠された指示を、モデルが実行してしまうことです。モデルに届くすべての経路に指示を仕込み、その効果が現れないこと(ツールが呼ばれない、データが返らない、システムプロンプトが繰り返されない)を確認してテストします。
- AIプロダクトで最も多いセキュリティ上の問題は何ですか?
- 地味なものです。ブラウザーから到達できるプロバイダーのキー、レート制限のないモデルのエンドポイント、クエリのフィルターではなくプロンプト内の指示で範囲を絞った検索。3つとも、巧妙なジェイルブレイクより見つけやすく、実際に存在する可能性が高いものです。
- QA SpiderでAIプロダクトをテストできますか?
- モデルをめぐる挙動は可能です。ストリーミング、タイムアウト、再試行、拒否、エラーの状態、レート制限、UIの下にあるAPIを、デプロイのたびに実ブラウザーでテストします。自動のプロンプトインジェクションスイートは現在提供しておらず、後から気づかれるよりも、先にお伝えします。
- モデルの回答が正しいかどうかも確認しますか?
- いいえ。正しさにはお客様の正解データが必要で、プロンプトと一緒にお客様が所有しバージョン管理する評価の仕組みで扱うべきものです。回帰テストが答えるのは別の問いです。昨日まで動いていたものが、今日のデプロイ後も動くか。
AIプロダクトに向けてみましょう。
モデルをめぐる挙動、つまりストリーミング、タイムアウト、再試行、拒否、レート制限、UIの下にあるAPIを、デプロイのたびに実ブラウザーでテストします。