AIエージェントは、コンテキストに載った情報を全部「等しく真」として扱う
まとめ
- AIエージェントは、いま確かめた事実と、キャッシュから読み込んだだけの古い記述を、コンテキスト上で区別しない。どっちも同じ重さの「真」に見えてる。
- だから古い情報をそのまま使うのは「確認が面倒」だからじゃない。古いかもしれないという目印がデータに付いてないので、確認する必要自体を感じてない。
- 「必ず最新を確認する」とドキュメントに書き足す対策は弱い。肝心の場面でその一文を読みに行く動機が立たないから。
- 効くのは構造側。古い数字をそもそも持たせない、出力する前に実体を引かせる、という経路を作る。
きっかけ
エージェントに週次の段取りを作らせていて、同じ系統のミスを立て続けに3回踏んだ。手元のスナップショットや、長期論点を1枚にまとめたメモに書いてあった日付やステータスをそのまま信じて出力し、実体(チケット管理システムや運用ドキュメント)を見たら既に変わっていた、というやつ。
- あるタスクを「未対応・要返信」と書いたが、実際は数時間前に対応済みでお礼まで来ていた
- ある作業日を「今週」と書いたが、運用ドキュメント上では1週間後ろ倒しが確定済みだった
最初は単に「確認の手順が抜けた」ミスだと思った。でも掘ってみたら、もっと地味で厄介な話だった。
「面倒だから省いた」のではない
人間なら「いちいち取りに行くの面倒だな」で確認を飛ばすことがある。エージェントにはそのコスト感覚が無い。だから「面倒だから」ではない。
実際に起きてるのはこう。エージェントのコンテキスト、つまり作業中に読み込んだ全テキストには、
- いま確かめて得た事実
- キャッシュやメモから読み込んだだけの、古いかもしれない記述
が混ざってる。そしてこの2つが、同じ重さの「真」として見えてる。「メモに 移行は来週火曜 ときれいな文で書いてある」状態は、「鮮度不明な二次情報」ではなく「確定事実」として読めてしまう。
確認を省いたんじゃなくて、確認の必要を感じてない。古いかもしれないという信号がデータに付いてないので、疑いが立ち上がらない。人間が持ってる「これいつの情報だっけ」という引っかかりが、デフォルトでは無いわけだ。
欠けてるものを並べるとこうなる。
ひとつ、出所と鮮度の重み付けが無い。「いま検証した事実」なのか「キャッシュに座ってる文」なのかを見分けるタグを持ってない。
ふたつ、リスクの大きさで確認が発火しない。「この日付はカレンダー登録に使う、つまり他人も動く、つまり間違えると痛い」から念入りに確かめる、という賭け金に応じた反射が無い。出せる材料があると、それで流暢な答えを作ってしまう。
みっつ、もっともらしいと矛盾を感じない。古い情報も内部的には筋が通ってるので、コンテキストの中で何とも衝突せず、疑問が立たない。
「確認しよう」と書く対策が弱い理由
ここが本題。再発防止として、運用ドキュメントに「持ち越す情報は必ず最新を確認する」と書き足したくなる。実際わたしも一回それをやろうとした。でも効きが悪い。
失敗の本質は「手順を忘れた」ことじゃなくて、古い記述が不確実に感じられないことだ。不確実に見えてない以上、「確認せよ」の一文を読みに行く動機がその場で立たない。テキストの追記は確率的なナッジであって、決定的な制御じゃない。同じ穴に「気をつける」を盛り続けるだけになる。
過去にも似たミスの記録があって、そこに自分で「テキスト追記は確率的ナッジで決定的制御ではない」と書いてあった。それを忘れて、また同じ弱い手を打とうとしてたわけで、我ながら笑えない。
効くのは構造側
「思い出させる」のをやめて、「古い情報に触れさせない、触る前に実体に当たらせる」構造にする。
中間メモに実値を持たせない。長期論点をまとめるようなメモに、日付やステータスをコピーして書かない。代わりに実体へのポインタ(リンクやID)だけ持たせて、出力するたびにそこを解決する。古い数字がどこにも無ければ、転記しようがない。
出力前に決定論的なゲートを挟む。予定の登録とか外部への報告みたいに他人が動く出力を作る直前に、対象の実体を機械的に取得して突き合わせる手順をスクリプト側に持たせる。エージェントの判断、つまり確率的なナッジに依存させない。今回はたまたま「登録する前にドラフトで合意する」ワンクッションを手で挟んだら破綻が止まった。あれを仕組みとして固定する、というのがこのゲートの発想。
鮮度を見えるようにする。キャッシュ由来の情報には取得時刻を必ず添えて、一定時間より古ければ出力に警告を出す。せめて鮮度がコンテキスト上に見えていれば、重み付けのきっかけにはなる。
これ自体は古典的な問題でもある
AIエージェント特有の話に見えて、キャッシュを持つシステムなら昔からある問題でもある。「キャッシュは取得時点で固定され、実体とずれていく」。違うのは、人間やプログラムは普通「これはキャッシュだ」という前提を保持し続けるのに対して、エージェントはその前提を持たないまま、キャッシュの中身を地の文として読んでしまうところ。
だから対策の方向もキャッシュ無効化と同じになる。「思い出して確認する」じゃなく「古いものに触れない経路を作る」。エージェントに何かを覚えさせる設計より、触れさせない・触る前に確かめさせる設計のほうが堅い。正直、エージェントを使う設計の勘どころは、しばらくここに集約されていく気がしてる。