AI キャラクターの事実接地:幻覚は供給経路で分類する、「モデルが駄目」で片付けない
背景:キャラクターの幻覚はプロダクト事故であって、モデルの欠陥ではない
ある AI キャラクター育成プロダクトでは、キャラクターに人格設定・記憶・自分のスケジュールがある。本番で起きた典型的な事故:16:08 のリクエストに対し、キャラクターは 14:30 として答え、さらに自分のスケジュール表の昼休みを、ユーザーに昼寝を勧める話へすり替えた。この種の問題を「モデルの幻覚」に帰属させると直せない——本当の病巣は、prompt の中に互いに競合する事実が複数存在することだ:現在時刻、カレンダーのアンカー、スケジュールの絶対時間窓がそれぞれ独立に注入され、モデルは複数の権威の中から選び間違えただけである。治めて得た経験則:事実系のバグは供給経路で四類に分け、それぞれを直す——鮮度(事実をいつ取ったか)、権威(複数の事実のどれが正か)、帰属(事実は誰のものか)、出口(モデルは何を書くことを許されるか)。
ターン単位の事実カプセル:同一ターン、同一ソース、同一スナップショット
権威の問題は接収で直す:リクエストごとに、所有者境界(世界/キャラクター/ユーザー)付きの事実カプセルを一枚編纂し、最新のユーザーターンの近くに一度だけ注入する。同時に、あちこちに散らばっていた時計の展開や独立したスケジュール注記は削除する——「いま何時か」を言える場所は二つと残さない。スケジュールの開始時刻は絶対時刻ではなく相対的な長さでレンダリングし、「14:30」のような目立つ数字がモデルに現在時刻へ昇格されるのを防ぐ。カプセルの外には薄い決定論的な受け皿を一層だけ残す:現在時刻や曜日を明示的に言い間違えたら一度だけリトライする。同じ述語をストリーミング・永続化・能動メッセージの fail-closed 経路で使い回す。判断の一文:同一ターンのすべての事実は同一ソース・同一スナップショットでなければならず、「この事実は誰のものか」は言い回しではなく構造に書き込む。
送信時接地:生成を選択へ収縮させる
キャラクターが能動的にユーザーへ話しかける経路では、時間差が幻覚の温床になる:決定の時刻と送信の時刻の間に、スケジューリングと審査が挟まる。権威ある時計を注入しても、「明示的に時刻を言い間違えた」だけを弾くガードでは暗黙の時間宣言を止められない——「夜中までドラマを一気見してた」「遅刻しそう」の類には検証できる数字が一つもないのに、すべてが時間の断言だ。直し方は権限の回収:モデルにメッセージ本文を自由に書かせるのをやめ、サーバー側が保持する候補から candidate_id を選ばせる。中立候補には時計や活動の宣言を一切含めない;スケジュール候補にはスケジュールのスナップショット指紋と二分間のリースを持たせる;審査の後・永続化の前、送信時刻に時間窓・リース・スナップショットがまだ成立しているかを再検証する。並行側はデータベースの原子的クレームで各ユーザー×キャラクターの機会スロットを単一決定にロックし、レコードには観測時刻・実際の送信時刻・接地ソースを残す。判断の一文:検証で弾けない暗黙の宣言は、モデルに書く機会そのものを与えない——生成を選択へ収縮させれば、事実の制約は「プロンプト」から「構造」になる。
意味的想起:モデルは引用を出力し、コードが引用を検証する
「あの引っ越してきたお医者さん、覚えてる?」はアーカイブ内の「新しく来た医師」に当たらない。字面のトピック照合は言い換えを取りこぼし、偽の「記録なし」を生む——キャラクターは覚えているのに忘れたと言うのだから、幻覚より傷が深い。受け皿は有界の意味的証拠セレクタだ:字面照合が空振りした後にだけ起動し、モデルはフィルタ済みの現在セッションのメッセージから高信頼の message ID だけを出力でき、コード側が各 ID を再検証して隣接コンテキストへのみ拡張する。すべて外れたら閉じて、従来の「見つからない」回答へ戻る;候補集合が切り詰めで不完全なときは、断定的な否認ではなく「利用できない」と答える。判断の一文:モデルを検索に参加させてよいが、出力させるのは内容ではなく引用だ——引用はコードで検証できるが、内容は検証できない。
PE サンドボックス:どの修正も、まず再現、それから本番
以上のどの一歩も、同じ基盤に依存している:副作用ゼロの Prompt A/B サンドボックスだ。本番実物の prompt 組み立てロジックと現在のキャラクターコンテキストを使うが、メッセージ・スレッド・親密度イベント・記憶書き込みを一切発生させない:ドラフトには正規化ハッシュがあり、スナップショットは不変で共有され、ツールは読み取り専用の許可リストを通り、バリアントごとに trace を残し、応答予算とキャンセルを備え、staging でのみ開放される。16:08 事故の修正は、まずサンドボックスで同じ質問を新旧二つの注入方式に通し、旧方式が「いまはお昼すぎ、お昼寝の時間だね」と答えるのを再現し、差分を確認してから本番に出した。判断の一文:副作用ゼロの比較サンドボックスがなければ、事実接地のどんな修正も信仰でリリースするしかない。
移植できる判断
キャラクターの一貫性問題の大半は「モデルが駄目」ではなく、事実の供給経路が駄目なのだ。四つの病巣は四つの直し方に対応する:権威はターン単位のカプセルで統一し、鮮度は送信時刻の再接地で守り、暗黙の宣言は事後検証ではなく生成空間の収縮で抑え、記憶の検索はモデルに検証可能な引用を出力させる。この分類の価値は、「prompt にルールをもう一行足す」という条件反射を止めることにある——ルールでは経路は直らず、次の幻覚をルールの届かない言い回しへ先送りするだけだ。