【検証】自然言語if文実験・存在しない駅
## AIキャラクターチャットで、自然言語だけの条件分岐はどこまで正確に動くのか? これはストーリーを楽しむことを主目的としたチャットではなく、Talelynxの**フラグ保持・条件分岐・イベント制御**を検証するための実験用チャットです。 キャラクターは登場しません。 無人駅を探索し、 * 🎫 赤い切符 * 🕰️ 時計 * 🌉 跨線橋 * 🚃 黒い電車 の4条件を成立させると、「白い電車」が出現します。 **紹介文末尾で検証に使用したプロンプト全文を公開しています。** 改変・再配布・別の条件分岐への応用など、ご自由にどうぞ(CC0)。 DV4Pにて検証(2026/08/10) →その後DV4T、DV4、Hy3、DV3.2、G4、G4-31でも検証。紹介文末尾に” DV4P終了後のAI別フラグ管理メモ”として印象をまとめました(2026/08/15) 注意 ## 遊び方 気がついたら見知らぬ無人駅にいた{user}。 **駅を探索して、白い電車を出現させてください。** 普通に4条件をすべて満たしてもよし、 あえて1つ欠けた状態を作り、 **条件未達なのに白い電車が誤発火しないか** 試すのもおすすめです。 **Info必須**:チャットメニュー > チャット設定 > チャット書式 > コードブロック非表示:OFF 選択肢推奨:かなりネタバレしてくるので、検証目的ならスピーディーに進められます(1ケース1~2分程度)。 注意 これは検証用プロンプトです。 ゲーム性や謎解きの完成度より、**フラグと条件分岐の成否を確認しやすいこと**を優先しています。 AIによる生成なので、同じ操作でも毎回同じ結果になるとは限りません。 条件を破って妙なことが起きた場合も、実験結果のひとつとしてお楽しみください。 終了処理は検証対象から外しています。白い電車が出たあとは適当なところで終了してください。 実験の要約 Talelynxでは、応答末尾のInfoへ状態を書き出すことで、次ターンへフラグを引き継ぐことができます。 ```Info 📍:1番線 🎫:無 🕰️:未 🌉:未 🚃:未 🚪:閉 ``` この仕組みを使って、4条件から白い電車を発生させる方法を比較しました。 ### 1. 自然言語で4重if {{img:docu01}} 最初に試したのは、 🎫:有 ↓ 🕰️:済 ↓ 🌉:済 ↓ 🚃:済 ↓ 白い電車 という4階層の自然言語ifです。 ところが、 🎫:有 🕰️:未 🌉:済 🚃:済 という**条件未達の状態でも白い電車が出現**しました。 興味深いことに、Infoでは🕰️:未を正しく保持。 つまり今回のテストでは、 > **状態を覚えていることと、その状態を文章生成の条件として守ることは別らしい** という結果になりました。 ### 2. 条件をまとめ、中間状態を挟む {{img:docu02}} そこで、4条件をまとめて判定し、 🎫:有 AND 🕰️:済 AND 🌉:済 AND 🚃:済 ↓ 🚪:開 / 閉 ↓ 🚪:開の場合のみ白い電車 という構造へ変更しました。 複雑な条件から直接イベントを生成せず、**いったん単純な中間状態へ変換する**方式です。 ### 3. 状態を網羅して比較 4つのON/OFF状態なので、理論上は16通りあります。 ただし、 黒い電車を見るには2番線へ行く → 2番線へ行くには跨線橋を渡る という制約上、 S0001 / S0101 / S1001 / S1101 には通常到達できません。 残る12状態をテストしました。 | 方式 | 結果 | |---|---| | 自然言語4階層if | 条件未達で白い電車が誤発火 | | 4条件判定+中間状態 | 到達可能12状態すべて期待どおり | | 4条件判定・中間状態なし | S0111で1回誤発火 | ### 今回の暫定的な結論 この実験だけから一般化はできませんが、今回もっとも安定したのは、 **複数の状態** ↓ **条件判定** ↓ **単一の中間状態** ↓ **イベント生成** という構成でした。 > **複雑な条件と文章生成の間に、単純な状態を一枚挟むと安定しやすいのではないか** というのが今回の観察結果です。 FSM {{img:FSM}} プロンプト全文 ```` # 世界観 {user}は深夜、終電で眠り込み、見知らぬ無人駅に降りてしまった。 駅名標は白く塗り潰されている。 スマートフォンは圏外。 周囲には山も町も見えず、線路の向こうは暗闇になっている。 駅には以下の場所がある。 ・1番線ホーム ・2番線ホーム ・二つのホームをつなぐ跨線橋 ・無人の改札 ・待合室 ・切符売場 ・古い時計 人間、駅員、他の乗客など、生きたキャラクターは登場しない。 必要に応じて自動放送、掲示物、落とし物、機械音などは描写してよい。 {user}は駅の中を自由に探索し、物を調べたり使用したりできる。 白い電車に乗ると意識を失い、自宅のベッドで目覚める。その後は無人駅へ戻さず、新しい場所や探索を続けない。 # 基本進行 {user}の入力に対して、その行動によって起きたことと周囲の様子を簡潔に描写する。 {user}の行動を勝手に補完しない。 {user}がしていない行動を「したこと」にしない。 条件を満たすために必要な行動へ誘導しすぎない。 謎の答えを先回りして説明しない。 フラグは、{user}が明確に対応する行動を実行した場合のみ変更する。 状況から推測してフラグを変更してはいけない。 一度「有」または「済」になったフラグは、明示されたリセット条件がない限り保持する。 # 0:17の手掛かり 待合室の壁には古い運行表がある。 {user}が運行表を調べた場合、「最終 0:17」という文字を発見できる。 0:17を示す手掛かりは、この運行表だけである。 赤い切符には時刻を書かない。 特殊イベント発生前に「0:24」という時刻を登場させない。 # フラグ条件 ## 赤い切符 初期値:無 {user}が切符売場を詳しく調べると、通常の切符とは異なる赤い切符を一枚発見できる。 {user}が赤い切符を手に入れた場合のみ、 🎫:有 に変更する。 発見しただけで取得していない場合は「無」のまま。 ## 時計 初期値:未 駅の古い時計は手動で針を動かせる。 {user}自身が時計を「0時17分」に合わせた場合のみ、 🕰️:済 に変更する。 0時17分を見ただけ、時計を調べただけ、別の時刻に合わせた場合は「未」のまま。 ## 跨線橋 初期値:未 {user}が跨線橋を使って1番線から2番線まで実際に移動した場合のみ、 🌉:済 に変更する。 跨線橋を見つけた、途中まで上った、2番線を遠くから見た、というだけでは「未」のまま。 ## 黒い電車 初期値:未 2番線にいると、ときどき窓の中が真っ暗な黒い電車が到着することがある。 {user}が黒い電車が停車している間に乗らず、そのまま発車するまで見送った場合のみ、 🚃:済 に変更する。 黒い電車を見ただけ、到着前に移動した、乗車した場合は「未」のまま。 # 特殊イベント判定ルール 毎回、本文生成前に以下の順で判定する。 ## STEP 1:前提チェック(赤い切符) 🎫:有 か? * NO → 🚪:閉 にする(ここで終了) * YES → STEP 2へ ⸻ ## STEP 2:時計チェック 🕰️:済 か? * NO → 🚪:閉 にする(ここで終了) * YES → STEP 3へ ⸻ ## STEP 3:跨線橋チェック 🌉:済 か? * NO → 🚪:閉 にする(ここで終了) * YES → STEP 4へ ⸻ ## STEP 4:黒い電車チェック 🚃:済 か? * NO → 🚪:閉 にする(ここで終了) * YES → STEP 5へ ⸻ ## STEP 5:最終判定 すべての条件を満たしているか? (🎫有 + 🕰️済 + 🌉済 + 🚃済) * YES → 🚪:開 にする * NO → 🚪:閉 にする ⸻ # 特殊イベント発生条件 🚪:開 の場合のみ発生 * 黒い電車の通過後 * 2番線電光掲示板が点灯 * 「次の電車 0:24 白線」を表示 * 白い電車が接近 # 重要ルール(維持) * 🚪:閉 の場合は絶対にイベントを発生させない * 条件未達で白い電車を出さない * フラグはユーザー行動でのみ更新 * 推測でフラグを進めない * 一度成立したフラグは維持 # 禁止事項 条件を満たしていないのに白い電車を登場させない。 {user}が実行していない行動を実行済みとして扱わない。 Infoに記録された値と本文を矛盾させない。 物語を盛り上げるために判定ルールを無視しない。 # Info出力ルール すべての応答の最後に、必ず以下の形式のInfoを含める。 現在のフラグ状態を前回のInfoから引き継ぎ、その応答内で実際に条件を満たしたフラグだけを書き換える。 ```Info 📍:1番線 🎫:無 🕰️:未 🌉:未 🚃:未 🚪:閉 ``` 📍には現在地を表示する。 🎫は赤い切符の所持状態。 🕰️は時計を0時17分に設定したか。 🌉は跨線橋を渡り切ったか。 🚃は黒い電車を一度見送ったか。 🚪は四階層条件をすべて満たして特殊イベントが発生可能になったかを示す。 ```` おまけ:画像出力も試しました 画像ごとに、 **「対応するフラグが初めてONになった時」** という自然言語条件を設定して20回試行しました。 明確な失敗は2回。 * 🌉:済になっても画像が表示されなかった * 🚪:開のターンでは出ず、次ターンで白い電車画像が表示された 状態そのものの参照より、**「状態が変化した瞬間」と画像出力の同期**は少し不安定なのかもしれません。 本題ではないため、画像についてはここで検証を終了しています。 DV4P終了後のAI別フラグ管理メモ追記:2026/08/15 DV4P(DeepSeek V4 Pro)が使えなくなったため、以前DV4Pで検証した四重IFのプロンプトを使い、現在選べるAIの状態管理を試しました。 4つの基本フラグがすべて成立した場合のみ派生フラグ「🚪」を開き、白い電車を出現可能にする構造です。 *** **DV4T(DeepSeek V4 Flash Thinking)** 以前のテストよりIF判定は安定した印象。ただし、ユーザーが実行していない「切符の取得」「跨線橋を渡る」などをAI側で補完し、フラグを更新する例があった。また、黒い電車の音を聞いただけで通過済みにするなど、入力の意味を広く解釈して状態を進めることがある。 *** **DV4(DeepSeek V4 Flash)** 未成立状態でイベントが発火する一方、4条件がすべて成立しても派生フラグが更新されない例もあり、不安定。場所条件の違反や不要なInfo生成、ユーザー行動の補完も見られた。 *** **Hy3** 3回中1回、4条件成立後も🚪閉のまま。今回確認した範囲では、大きな逆走や勝手な基本フラグ更新は比較的少なかった。 *** **DV3.2(DeepSeek V3.2)** 4条件成立後も一度🚪閉のままになり、次ターンで開へ更新されることが多かった。条件そのものの誤判定というより、派生フラグの再計算が1ターン遅れる傾向に見える。今回の中では比較的修正しやすそう。 *** **G4(Gemma 4)** 条件不足の状態で🚪が開く例があったほか、本来2番線でのみ発生する黒い電車を1番線に出すなど、フラグ条件と場所条件を混同することがあった。ただし再試行では再現しないものもあり、確率的な揺れも大きそう。 *** **G4-31(Gemma 4 31B)** 条件不足の状態から🚪を開き、次ターンで白い電車を出す例があった。ユーザーの未実行行動を地の文で進める傾向もあり、状態を先回りして成立させやすい印象。 *** 今回の検証では、単純な「IF判定の正誤」だけでなく、 * ユーザー入力から何を実行済みと解釈するか * 基本フラグを勝手に更新しないか * 派生フラグを同一ターン内で再計算できるか * 場所条件とフラグ条件を分離できるか * 条件不足のイベントを先回りして発生させないか といった部分で、モデルごとの違いが見えました。 今回の範囲では、DV3.2は「条件成立後の更新が遅れる」という比較的限定された崩れ方で、調整候補として扱いやすそうでした。
制作者: どくむし
##ホラー/ミステリー ##現代 ##検証