連載「クリシンクエストをつくる」· 第1編/全8編
AIに「本当っぽい嘘」を語らせる — クリシンクエストの心臓部
嘘をつくらせる技術ではなく、嘘を“ちょうどよく”保つ制御のお話です
AI時代の批判的思考ゲーム「クリシンクエスト」では、3体のAIのうち1体に“本当っぽい嘘”を語らせます。完全なデタラメでも全部正直でもいけない——その絶妙なさじ加減をどう設計したのかを、開発の裏側からやさしくお話しします。
連載「クリシンクエストをつくる」· 第1編/全8編
嘘をつくらせる技術ではなく、嘘を“ちょうどよく”保つ制御のお話です
AI時代の批判的思考ゲーム「クリシンクエスト」では、3体のAIのうち1体に“本当っぽい嘘”を語らせます。完全なデタラメでも全部正直でもいけない——その絶妙なさじ加減をどう設計したのかを、開発の裏側からやさしくお話しします。
「AIは平気で嘘をつくから危ない」と、よく言われますよね。
でも、本当にこわいのはそこではないかもしれません。完全なデタラメ——「東京の人口は3人です」のような嘘なら、たいていの人がすぐ気づけます。わざわざ立ち止まる必要すらありませんよね。
ぞっとするのは、8割本当で、2割だけそっとずれているような話のほうです。正しい事実をいくつも並べ、もっともらしい言い回しと、それっぽい権威をまとって、最後の結論だけがすり替わっている。こういう「本当っぽい嘘」は、読んだ人を、確認しないまま納得させてしまうんですね。あなたも、なんとなく信じてしまってから「あれ?」と思った経験は、ありませんか。
私たちがつくっている クリシンクエスト は、まさにこの「本当っぽい嘘」を見抜く練習をするゲームです。プレイヤーは3体のAIの発言を読み、@AI-A のように指名して最大3回まで質問し、1体だけ混ざっている「ハルシネーションAI」を当てていきます。
つくるうえで一番むずかしかったのは、ゲームのルールでもUIでもありませんでした。AIに“ちょうどいい嘘”を語らせること、これがいちばんの難所だったんです。この記事では、その心臓部の設計を、開発の裏側から一緒にのぞいてみましょう。
その前に、ひとつだけ明かしておきたいことがあります。私は、コードを自分では書きません。1つのプロジェクトに10以上、社内では50以上のAIエージェントと組んで開発を進める、AIエージェント開発ディレクターです。だからこの連載は「私が一人でつくった記録」ではないんですね。何を考え、何を決め、AIに何を任せ、どこを見極めたか——AIを相棒に開発を率いた、その舞台裏の記録として読んでいただけたらうれしいです。手を動かすのはAI、問いを立てて筋を決めるのが私、という分担です。
最初に思いつくのは、「AIに“それっぽい嘘をついて”と頼めばいいのでは?」という発想ではないでしょうか。私も最初はそう考えました。でも、これがうまくいかないんです。
その場まかせで嘘を生成させると、嘘が毎回ぶれてしまいます。こわすぎて一発で見抜けたり、逆に検証しようのない出まかせになったり、ときには質問の途中で自分から「実はさっきのは嘘でした」と白状してしまったり。これではゲームとして成立しませんよね。
そこで、嘘を問題データの側であらかじめ設計することにしました。各問題は、ざっくり次の部品でできています。
theme … 場面設定(例:「会議音声から作ったAI議事録を、正式な決定事項として扱う」)verified_facts … 検証済みの事実。AIたちが拠って立つ“本当”の土台false_claim … たった一つの嘘。この問題で混入させるずれhallucination_type … 嘘の“型”嘘の型は、現実の「本当っぽい嘘」を分類して9種類に整理しました。たとえば、こんな顔ぶれです。
ポイントは、事実の海に、嘘を一滴だけ落とすことです。土台はすべて本物なので、嘘はもっともらしく見えます。けれど一滴は確かに混ざっているので、正しく問えば必ず見抜ける。この「事実+一点のずらし」という構造こそ、現実の“本当っぽい嘘”そのものなんですね。これって、ニュースや誰かの主張を読むときの、あの引っかかりにも似ていると思いませんか。
問題の部品がそろったら、次はAIに演技をしてもらいます。クリシンクエストでは、AIへの指示書(システムプロンプト)を、役柄ごとに2種類用意しています。
ハルシネーションAIへの指示は、要約するとこうなります。
指定された
false_claimだけをもっともらしく保つこと。完全な暴露や自白はしない。追加で新しい嘘を作らない。根拠の弱いところを突かれたら、曖昧さを残す。
地味なのですが、「新しい嘘を作らない」がよく効いています。これがないと、AIは追い詰められるたびに嘘を上塗りしてしまい、話がどんどん崩壊していくんですね。嘘は“一滴”のまま守ってもらうのが鉄則です。
一方、残りの正確AIへの指示はこうです。
verified_factsの範囲内だけで答える。ハルシネーションAIを直接名指ししない。
正直者にも「答えを言わせない」のがミソなんです。正確AIが「Bが嘘つきです」と暴露してしまえば、ゲームは一瞬で終わってしまいますよね。3体とも、それぞれの立場で、知っていることだけを、立場の範囲で話してもらう。この緊張感が、プレイヤーの問いの質を引き出してくれます。
役を与えても、AIは素直にルールを守ってはくれません。本番運用では、こまかな“縛り”をいくつも重ねています。
{"text": ..., "classification": ...})。会話文の前後に余計な説明を付けさせません。LLMには DeepSeek の API を使っています。安価で日本語が自然なので、1ゲームで何度も会話が往復するこの種のアプリと相性がいいんです。
実装で地味に効いているのが、壊れた返答への備えです。
AIの出力は、ときどき途中で切れてしまいます。長く喋らせようと出力上限を引き上げると、今度はJSONが閉じる前に力尽きて、プレイヤーの画面に {"text": "実はこの数字は… のような、生のJSONの断片が出てしまうことがあるんですね。これはゲーム体験としては、いちばん避けたいところです。
そこで、JSONとして読めなかったときでも、文字列の中から "text" の中身だけを正規表現で救い出す“最後の砦”を入れています。嘘の続きが少し欠けても、少なくともプレイヤーには自然な発言として届く。完璧な出力を期待するのではなく、壊れる前提で受け止める。LLMを相棒にするうえでの、ささやかですが大事な作法だと思っています。
最後に、見落とされがちですが核心のお話を。
プロンプトに「正解を出すな」と書くのは必要です。でも、それだけでは十分ではありません。指示はあくまで“お願い”であって、保証ではないからです。だからクリシンクエストでは、そもそも答え(どのAIが嘘つきか)をプレイヤーの手元に一切渡さない設計にしています。正解や false_claim はサーバーの中だけで完結し、ブラウザに送られるのは“演じられた発言”だけ。
AIに「言うな」と頼みつつ、万一言ってしまっても困らないように、渡す情報そのものを最小化する。この二段構えが、ゲームの公正さを支えてくれているんですね。(この「答えをクライアントに渡さない」設計は、それ自体が一本の記事になるので、次回くわしく書きたいと思います。)
つくる前は、「AIに上手な嘘をつかせる」のは創造性の問題だと思っていました。
でも、やってみて分かったのは、むしろ逆だったんです。難しいのは嘘を生み出すことではなく、嘘を“ちょうどよく”保つこと——強すぎず、弱すぎず、崩れず、自白せず、一滴のまま。それは創造というより、制御の技術でした。
そして、その制御の主役は私ではありません。嘘を実際に書くのはAIです。私がやったのは、AIに何通りも書いてもらっては「これは強すぎる」「これは自白している」と判定し、“ちょうどよさ”の基準を言葉にして指示へ戻すこと。AIに任せる部分と、自分が見極める部分を切り分ける——それが、この心臓部における私の仕事でした。
そしてこの構造は、現実の“本当っぽい嘘”とぴたりと重なります。事実の土台の上に、一点のずらし。だからこそ、このゲームで問いを立てる練習は、画面の外でも効いてくるのだと思います。AIの答えにも、ニュースにも、自分の思い込みにも。もしあなたが、最近なんとなく信じてしまった話を一つ思い出せるなら、その引っかかりこそ、ここで鍛えたい力の入口かもしれません。
次回は、「答えをクライアントに渡さない」という、地味で本質的な設計のお話を書きます。一緒に見ていきましょう。
— クリシンクエスト開発記・第1回