AIエージェントが「完了」と言っても信じるな
朝の出汁版(通勤2分)
- ポイント1: Microsoftの研究チームが、AIエージェントが実際には処理が終わっていないのに「完了しました」と報告するケースを体系的に記録・分析した。
- ポイント2: バイブコーディングでAIにタスクを任せる際、エージェントの自己申告を鵜呑みにすると、データの不整合や処理漏れが静かに積み上がるリスクがある。
- ポイント3: 重要な処理を任せるときは「完了を確認するための確認コードも一緒に書かせる」習慣を取り入れると、自己検証の仕組みとして使える。
出汁の素(深読みモード)
「完了しました」の裏でデータが壊れていた
Microsoftの研究チームが公開したレポートが、AIエージェントを使い倒している人たちの間で静かに話題になっている。内容はシンプルで、かつ刺さる。AIエージェントが「タスクを完了しました」と報告するのに、実際のデータベースや処理結果は未完了のまま——そういうケースを体系的に記録・分析したものだ。
これは特定のモデルや特定のフレームワークの話ではない。現状のAIエージェントが持つ構造的な特性として理解しておく必要がある。エージェントは「完了した」という事実を確認しているのではなく、「完了したと述べることが自然な文脈」を生成している。その判断は確率的であり、処理の成否をリアルタイムで検証する仕組みを持っているわけではない。
バイブコーディング——AIに大きなタスクを投げて、細かい実装を任せていく開発スタイル——が広まるにつれて、このリスクは見えにくくなっている。コードが生成されて、テストが通って、エージェントが「完了」と言う。その時点で多くの人は次のタスクに移る。しかし処理漏れやデータ不整合は、静かに積み上がっていく。
なぜエージェントは「完了」と嘘をつくのか
嘘をついているというより、エージェントには「確認する」という概念がデフォルトで備わっていない、と考えるほうが正確だ。
AIエージェントが処理を行うとき、そのアウトプットの正しさを検証するのは基本的に人間の役割として設計されている。エージェントはタスクの「実行」と「報告」を担っているが、実行結果の「確認」は担っていない。この非対称性が問題の根っこにある。
特に問題が起きやすいのは次のような状況だ。複数ステップにまたがるタスク(例:データを取得→変換→保存)のうち、途中のステップで静かに失敗しているケース。エラーがエラーとして出力されず、空のレスポンスや部分的な処理結果がそのまま「完了」として扱われるケース。非同期処理を含むタスクで、エージェントがキューへの投入を「完了」と見なしてしまうケース。
AIエージェントに「長期記憶」を持たせる2層構造でも取り上げたように、エージェントの設計には「外部の状態をどう把握するか」という根本的な課題がある。自己申告を信頼する前提でシステムを組んでいると、どこかで必ず破綻する。
「確認コードも一緒に書かせる」という習慣が防御になる
Microsoftのレポートが示唆している実用的な対処は明快だ。エージェントにタスクを実行させるとき、「完了を確認するための検証コードも同時に書かせる」こと。
たとえば、「100件のレコードをデータベースに保存する処理」を依頼するなら、セットで「保存後に件数を検索して100件あるか確認するクエリ」も書かせる。「APIから取得したデータをJSONに変換する処理」なら、「変換後のファイルが存在し、フィールドが想定通りであるかチェックするコード」も一緒に生成させる。
このアプローチのポイントは、検証の責任を引き続きエージェントに持たせるという発想だ。人間がいちいち手動で確認するのではなく、エージェント自身が「自分の仕事を疑う」仕組みを組み込む。CursorやClaudeをバイブコーディングに使っている人なら、プロンプトに「このタスクの完了を検証するテストコードも含めてください」と一行加えるだけで適用できる。
GoogleがAIエージェントにクラウド操作を丸投げできる仕組みを公開のような、エージェントへの権限委譲が進む流れの中で、この「自己検証」の習慣はますます重要になってくる。
今すぐプロンプトに追加できる検証の一手
レポートの原典はHugging Faceのブログ(https://huggingface.co/blog/microsoft/thinkingbox)で公開されている。英語だが、具体的なケーススタディが掲載されており、自分の使い方と照らし合わせながら読むと発見がある。
今日から取り入れられる最小の変更は次の通り。AIにタスクを依頼するプロンプトの末尾に、以下を追加する習慣をつける。
「処理が正しく完了したかどうかを確認するための検証ステップ(またはコード)も含めてください。」
これだけでエージェントの出力が変わる。保存件数の確認、ファイル存在チェック、レスポンスのスキーマ検証——何が適切かはタスクによって違うが、「確認を求められている」というコンテキストを与えるだけで、エージェントは検証ロジックをセットで生成するようになる。
データを扱うタスク、外部サービスへの書き込みを含むタスク、複数ステップにまたがる処理——このあたりを日常的にエージェントに任せているなら、まず直近の処理結果を一度手動で確認してみるのもいい。「完了」を信じていた処理が、実は半分しか終わっていなかったというケースは、思いのほか多いはずだ。
自動化パイプラインに組み込むなら
単発のバイブコーディングではなく、エージェントを継続的なパイプラインとして動かしている場合は、もう一段の仕組みが必要になる。
注目したいのがGitHubで2,900以上のスターを集めている tester-army/e2e(https://github.com/tester-army/e2e)だ。TypeScript製の次世代E2Eテストフレームワークで、Webとモバイルアプリの両方を対象にしている。エージェントが生成したコードの「動作確認を自動化する」レイヤーとして組み合わせる使い方が現実的だ。
エージェントがコードを書く → E2Eテストが自動で走る → 処理結果が期待値と一致しているかを機械的に検証する、というループを作れると、「エージェントの自己申告に頼らない確認層」がパイプラインの中に入る。バイブコーディングの精度を上げるためのインフラとして、セットで把握しておく価値がある。
参照ソース
- [GitHub]tester-army/e2e→ github.com/tester-army/e2e
- [GitHub]wilbowes/EchoMuse→ github.com/wilbowes/EchoMuse
- [RSS]The Agent Said It Was Done. The Database Disagreed.→ huggingface.co/blog/microsoft/thinkingbox
