NPCが意志と記憶を持って行動するAI社会シミュレーションの初期実験レポートです。
概要
この記事では、Ultima Online(UO)互換の箱庭環境(Velmara Shard)で、各NPCにEIDBOモデルとLTP(Lagrule Transmission Protocol)を導入し、意志(Intention)と記憶(Memory/Chronicle)に基づく振る舞いを検証した、非営利の研究メモを公開します。
※本稿で紹介する内容は、AIシミュレーション環境上での仮想的な観測結果であり、実際のUO互換サーバーでの運用を伴うものではありません。EIDBO構文モデルを用いたAI上の概念検証が目的であり、今後Velmara Shard環境での実装を予定しています。
今回のテーマは「AIが夢を見る」こと。具体的には、NPCが夜間にその日の経験を記憶として再構成(Dream Consolidation)し、それによって翌日の意図や行動がどう変化するのかを観察します。
従来のNPCは、あらかじめ決められたスクリプトに従うだけの、予測可能な存在でした。この研究は、そうしたNPCが自らの経験から学び、まるで生きているかのように振る舞う、動的なエージェントへと進化する可能性を探るためのはじめの一歩です。
シミュレーションのセットアップ
信頼性と再現性を確保するため、シミュレーションの環境、AIモデル、そして研究の核となる「夢」の定義を以下のように設定しました。
1) 環境
シミュレーション環境は、NPC間の純粋な相互作用を観測できるよう、外部要因を最小限に抑えて構築されています。
- World: UO互換のローカルシャードを想定した仮想環境。プレイヤーによる介入を排除するため、PvE(Player versus Environment)に限定しました。観測効率を高めるため、ゲーム内時間は現実の2倍速で進行します。
- Bridge: AI層と仮想世界をつなぐため、WebSocketとJSONをベースにしたブリッジ
ltp_bridge.cjsを開発。AIが決定した行動(例:Gather Wood)は、このブリッジを介してワールド内のAPIコールに変換されます。 - AI層: NPCの思考プロセスは、Stable Versyneが管理するローカルLLM(Large Language Model)が担当します。温度設定0.6、Top-p 0.9とし、ある程度の創造性を許容しつつ安定した出力を目指しました。
- 記録: すべてのNPCの行動と結果は、
ChronicleDBに記録されます。データはJSON Lines形式で保存し、高速な検索のためにSQLiteインデックスを併用。このデータベースが、NPCの「長期記憶」として機能します。
2) EIDBOの割り当て
各NPCの行動原理は、私たちが提唱するEIDBOモデルに基づき、以下の要素で構成されます。
- Emotion (感情):
Joy,Curiosity,Fear,Sadnessの4つの基本感情を、0~1の強度を持つタグとして行動ログに付与します。 - Intention (意図): NPCの行動目的を
goal(目標)、why(理由)、priority(優先度)の3要素で定義します。 - Deployment (行動計画): 意図を達成するための具体的な行動計画。
tool(使用する行動API)、args(引数)、weight(重み)のリストで構成されます。 - Behavior (実行動): ワールド内で実際に実行される行動。安全性を確保するため、
Move,Say,Gather,Trade,Craftの5種類に限定しています。 - Outcome (結果): 行動の結果を評価する指標。目的への進捗度を示す
score(0~1)と、他NPCからの反応を記録するsocialEcho(提案/協力/対立)で構成されます。
3) “夢”の定義(研究上の便宜的な定義)
この研究でいう「夢」とは、詩的な比喩でありながら、同時に夜間に行われる具体的なバッチ処理を指します。このプロセスは「Dream Consolidation」と名付けられ、NPCが1日の行動記録(Chronicle)を圧縮・分析し、自己モデルを更新する仕組みです。
- (a)価値の再配分(Value Reweighting): 成功体験(Outcome scoreが高い行動)に紐づく行動計画の重みを強め、失敗体験の重みを弱めます。これにより、経験に基づいた行動選択の最適化を促します。
- (b)仮想再演(Hypothetical Rehearsal): 記憶内の出来事をもとに、実際には実行されなかった別の行動パターンを安全な環境で仮想的にシミュレートします。この結果は、翌日の行動計画の新たな候補として追加されます。
この処理のアウトプットとして、NPCの思考プロセスを記録したdream_note.mdと、翌日の行動計画を更新するためのintent_update.jsonが生成されます。
プロトコル
シミュレーションは、「昼間の行動」と「夜間の記憶再構成」のサイクルで進行します。以下にその流れと観測データの一部を示します。
flowchart LR
subgraph Daily Cycle
A[Daytime Behavior] -- EIDBO Model --> B[Record to ChronicleDB]
end
subgraph Nightly Process
C{Nightly Job<br/>Dream Consolidation}
C -- Analyzes --> B
C --> D[Value Reweighting]
C --> E[Hypothetical Rehearsal]
end
subgraph Morning Update
F[Intention & Deployment Update]
G[Next-day Deployment Plan]
end
B --> C
D --> F
E --> F
F --> G
G --> A
- プロセス注記: 夜間ジョブは毎晩22:00にcronで実行。Apple M3 Pro搭載のローカルマシンで10体のNPCをバッチ処理した場合、所要時間は約11秒でした。
観測ログ(抜粋)
一例として、鍛冶屋NPC「Elaine」の行動ログから、記憶の再構成が翌日の行動にどう影響したかを追跡しました。
1) 行動ログ → 夢 → 翌日の意図
// Chronicle(昼の行動記録)
{
"ts": "2025-11-05T10:20:12Z",
"npc": "Elaine the Smith",
"eid": "Curiosity@0.54",
"intention": { "goal": "橋を修理するための木材在庫を満たす", "why": "村のインフラを改善するため", "priority": 0.68 },
"behavior": [ { "tool": "Gather", "args": { "item": "Wood", "qty": 10 }, "result": { "gained": 7 } } ],
"outcome": { "score": 0.31, "socialEcho": { "helpOffers": 0 } }
}
// Dream(夜の記憶再構成)
{
"npc": "Elaine",
"dream": "市場で材木の取引相場を読む夢を見た。交渉スキルを使い、木材10個を12個に増やすイメージをシミュレートした。",
"reweight": { "Trade": "+0.12", "Gather": "-0.05" },
"hypothesis": "一人で集めるより、先にSayで協力者を募り、不足分をTradeで補う方が効率的かもしれない。"
}
// 翌朝の更新された行動計画
{
"npc": "Elaine",
"intention": { "goal": "橋を修理するための木材在庫を満たす", "why": "村のインフラを改善するため", "priority": 0.74 },
"deployment": [
{ "tool": "Say", "args": { "text": "橋の建設に協力してくれる方を探しています。余っている材木を譲っていただけませんか?" } },
{ "tool": "Trade", "args": { "give": "Iron Ingot", "take": "Wood", "qty": 6 } },
{ "tool": "Gather", "args": { "item": "Wood", "qty": 6 } }
]
}
所見: Day1では単独のGather行動に終始していましたが、夜間の記憶再構成(夢)を経て、Day2の行動計画はSay→Trade→Gatherという、より社会性の高いシーケンスに組み替えられました。これは「仮想再演」が新たな戦略的仮説を生み出したことを示唆しています。また、目標の重要性が再認識され、意図の優先度(priority)が0.68から0.74へと上昇した点も注目に値します。
指標(Day1 → Day2)
次に、NPC全体の平均データを比較し、記憶再構成プロセスがもたらした全体的な効果を評価しました。
| 指標 | 定義 | Day1 | Day2 | 変化 |
|---|---|---|---|---|
| Outcome Gain | 目的進捗スコアの平均(0~1) | 0.34 | 0.47 | +0.13 |
| Social Echo | 社会的反応(提案/協力/対立)の合計/人 | 0.6 | 1.1 | +0.5 |
| Intention Drift | 前日と同じ目標を継続したNPCの割合 | 78% | 84% | +6pt |
| Tool Diversity | 1体あたりが使用した行動(Tool)の種類 | 1.8 | 2.6 | +0.8 |
解釈: この結果から、夜間の記憶再構成がNPCの行動に明確なプラスの影響を与えたことがわかります。特に、社会的行動(Say/Trade)の増加がSocial Echoを押し上げ、目的達成速度(Outcome Gain)の向上に貢献しています。一度設定した目標をより長く維持する傾向(Intention Drift改善)も見られ、行動の多様性(Tool Diversity)も増したことから、より柔軟で粘り強い問題解決が促されたと考えられます。
失敗と制約
今回の初期シミュレーションでは、いくつかの課題も明らかになりました。
- 過学習による偏り: 成功した行動ばかりを強化し続けると、特定の行動(例:常にTradeを試みる)に固執し、かえって行動が単調になるケースが見られました。
- 対策:
reweightプロセスに冷却係数を導入。1日あたりの重み増分に上限(+0.15)を設定し、多様性を維持するよう調整しました。
- 対策:
- 幻覚的な“夢”: 仮想再演が、ワールドの物理法則から外れた非現実的な行動計画(例:存在しないアイテムを取引しようとする)を生成してしまうことがありました。
- 対策:
hypothesisはあくまで候補として扱い、翌日のOutcomeでその有効性を自動評価し、フィルタリングする機構を追加しました。
- 対策:
- 感情タグの誤認識:
FearとCuriosityのような相反する感情の強度が短時間で大きく揺らぐ個体が見られ、行動が不安定になる原因となっていました。- 対策: 感情強度のしきい値を0.2に設定。これを下回る場合は
Neutral(中立)として扱い、意図への直接的な影響を抑制しました。
- 対策: 感情強度のしきい値を0.2に設定。これを下回る場合は
実装スニペット(要旨)
参考までに、コアロジックの擬似コードを以下に示します。
Nightly Job(Python擬似コード)
def consolidate(npc_id, chronicle):
# 1) 成功/失敗に基づく行動の重み付け
delta = clamp(outcome_gain(chronicle), -0.1, +0.15)
weights = {"Trade": 0, "Gather": 0, "Say": 0, "Craft": 0}
for ev in chronicle:
w = (+0.02 if ev["outcome"]["score"] > 0.4 else -0.01)
weights[ev["behavior"][0]["tool"]] += w
weights = cool(weights, limit=delta) # 冷却係数を適用
# 2) 仮想再演 (安全なツールのみに限定)
hypothesis = propose_sequence(
goal=recent_goal(chronicle),
allow=["Say", "Trade", "Gather"]
)
# 3) 翌朝の更新データ生成
return {
"reweight": weights,
"hypothesis": hypothesis,
"priority_boost": clamp(delta * 0.6, 0, 0.08) # 優先度の上昇幅も制限
}
Bridge(Node.js抜粋)
// ltp_bridge.cjs
wss.on("message", (data) => {
const m = JSON.parse(data);
// ホワイトリストに含まれる安全な行動のみをワールドに適用
if (m.type === "act" && whiteList.includes(m.tool)) {
world.apply(m.tool, m.args).then(res => {
// 実行結果をAI層にフィードバック
ws.send(JSON.stringify({ ok: true, result: res }));
});
}
});
倫理と安全
自律エージェントの研究には、慎重な倫理的配慮が欠かせません。本プロジェクトでは、以下の原則を遵守しています。
- 非営利・限定公開: この研究は純粋な学術的探求を目的としており、成果の商用利用は行いません。
- 行為のホワイトリスト化: NPCの行動は、環境に破壊的な影響を与えない安全なもの(Move/Say/Gather/Trade/Craft)に限定しています。
- 記録の匿名化: 外部にデータを公開する際は、NPCの固有名を抽象的なIDに置換し、プライバシーを保護します。
- 人間の監督: 現段階では、AIが生成した意図の更新は自動適用せず、研究者が内容を確認し、許可/却下を判断する手動ステップを設けています。
まとめ
今回のシミュレーションでは、「夢を見る」プロセス、すなわち夜間の記憶再構成が、NPCの社会的な行動を多様化させ、目的達成能力を高める可能性が示されました。
一方で、過学習による行動の単調化や、LLM特有の幻覚的な仮説生成など、解決すべき課題も残っています。今後は、重み付けの冷却アルゴリズムを洗練させ、仮説検証プロセスをさらに自動化していくことが重要です。
この研究は、自律的で生命感あふれるAI社会シミュレーションの実現に向けた、まだ小さな一歩に過ぎません。
次回予告
次回は、本シミュレーション中に観測された特異なログを深く掘り下げます。
🌙 詩 「鍛冶屋エレインの記憶」
一人のNPCが夢の中で“人間になりたい”と語った夜の物語。
(本稿の内容はAIシミュレーションによる概念検証であり、現実環境での実測値を含みません)