MirrorLife 是一款“人生试活 + 社会模拟”游戏。玩家把一段关系、压力、愿望或人生选择投进镜像社区;拥有性格、需求、情绪、关系和记忆的 Citizen Agents 会继续行动,城市则用剧情、关系事件和空间变化作出回应。
它不是一组预先写好的分支,也不是一个套着游戏外壳的聊天窗口。角色的行动由本地 Utility AI、心理状态与社会规则共同驱动,剧情必须引用真实行动证据,世界状态最终由规则引擎裁决。
像世界一样活着,像游戏一样可玩,像镜子一样照见人。
flowchart LR
A["投放现实片段"] --> B["分身试活选择"]
B --> C["Agent 行动与社会互动"]
C --> D["关系、空间与城市改变"]
D --> E["剧情与记忆形成回声"]
E --> F["玩家回看并作出新选择"]
F --> B
| 维度 | 状态 |
|---|---|
| 产品形态 | local-first 单人可玩开发版 |
| 世界 | 20 个固定场所、30+ 种市民行为、可演化社区状态 |
| 室内 | Three.js 真实 3D、人物跟随、WASD 移动、360° 环视与碰撞 |
| 叙事 | 本地 AI 剧情师、行动证据、五建筑章节与关系余波 |
| 存档 | localStorage 热状态、IndexedDB 多槽存档、JSON 导入导出 |
| 在线能力 | 默认无需账号或外部 AI API;云端记忆代理为可选实验能力 |
一次完整体验可以是:
- 创建一个带人格倾向、价值观与关系偏好的社会分身。
- 打开匿名人生胶囊,替另一种人生作出一次关键选择。
- 观察城市、市民关系和分身状态如何回应。
- 跟随人物在社区行动,进入建筑并以真实 3D 视角探索。
- 沿五栋建筑完成“看见 → 留下 → 穿过 → 修正 → 授权”的具身叙事。
- 在剧情志、人生周记和回声档案中回看行动留下的证据。
- 通过本地异步的“镜像接力”,邀请朋友的一次性分身进入下一集。
| 系统 | 体验 |
|---|---|
| 人生试活 | 人生胶囊、关键选择、城市回应、机器人信号与未完回声 |
| 社会分身 | 16 型叙事人格映射到 Big Five、需求、PAD 情绪与价值观 |
| 市民生活 | 通勤、交谈、休息、工作、进出建筑等 30+ 种规则驱动行为 |
| 关系与记忆 | 信任、亲近、互惠、披露、权力平衡与可追溯互动证据 |
| 具身章节 | 静默陪伴、证词视差、误解校准、记忆授权和活体余波 |
| AI 剧情师 | 从社会状态提出戏剧问题,用 Scene Contract 限定动作与权限 |
| 镜像接力 | 双向同意、四幕共演、一次性访客分身与可撤回的分享链路 |
| 自演化社区 | 根据社会缺口,从预设蓝图中解锁新场景与职业 |
桌面端:可移动、可旋转、可跟随人物的 3D 室内 |
![]() |
![]() |
| 朋友分身基于真实 Agent 行动证据参与共演 | 第 16 条证据生成共同结局与下一棒 |
- 拖动地图观察城市,使用滚轮或触控缩放。
- 点击市民查看状态、关系与最近行动,或跟随 TA 的视角。
- 点击建筑进入室内;顶部控制区可暂停、单步推进、调整速度和打开存档。
WASD/ 方向键移动;移动端使用屏幕方向盘。- 拖动场景或使用环绕罗盘旋转视角。
- 靠近人物、家具与剧情热点后使用场景动作。
Esc或“回到街道”离开室内。
- Node.js 22(与 CI 一致)
- npm 10+
- 支持 WebGL 的现代 Chrome / Chromium
git clone https://github.com/plaxkk/MirrorLife.git
cd MirrorLife
npm ci
npm run dev浏览器打开 http://localhost:4173/game.html。
生产构建:
npm run check
npm run build
npm run preview默认运行不需要环境变量、账号或 LLM API key。
可选:连接云端记忆代理
生产密钥只能保存在服务端:
VOLC_MEM0_BASE_URL=<项目连接地址> \
VOLC_MEM0_API_KEY=<API Key> \
npm run memory-proxy然后在游戏的“存档与记忆”面板填入:
http://localhost:8787/api/memory
代理不可用时,系统自动降级到本地 IndexedDB。
MirrorLife 采用浏览器 local-first 架构:Canvas 承载开放社区与 UI,Three.js 承载 3D 室内,规则引擎拥有最终状态;Agent 和叙事层只能通过受控提案与行动证据影响世界。
flowchart TB
UI["game.html + game.css"] --> GAME["public/game.js<br/>UI / Canvas / 交互"]
GAME --> ENGINE["public/engine.js<br/>世界状态 / Utility AI / 关系"]
GAME --> THREE["src/interior-three.js<br/>Three.js 场景 / 相机 / 角色"]
THREE --> PHYSICS["src/interior-physics.js<br/>碰撞 / 寻路 / 世界坐标"]
ENGINE --> AGENTS["Agent Runtime<br/>记忆 / 反思 / 技能"]
AGENTS --> ADAPTER["Narrative Adapter<br/>只提交意图与候选动作"]
ADAPTER --> CONTRACT["Scene Contract<br/>动作 / 证据 / 同意 / 边界"]
CONTRACT --> STORY["public/story-engine.js<br/>剧情弧与剧情师"]
ENGINE --> STORAGE["localStorage / IndexedDB"]
STORAGE -. "可选" .-> MEM0["server/memory-proxy.mjs<br/>Mem0"]
- 规则先于模型:LLM adapter 不能直接修改关系、记忆或城市指标。
- 行动先于台词:剧情推进必须引用真实 Agent
outbox证据。 - 统一空间语义:人物、家具、交互距离与相机共享 X/Z 世界坐标。
- 隐私默认收紧:现实片段与记忆必须可授权、可撤回、可删除。
- 开发资产不冒充正式资产:3D 模型有独立的运行时与发布质量门禁。
项目目录
.
├── game.html # 主游戏页面
├── game.css # HUD、面板、移动端与室内 UI
├── public/
│ ├── engine.js # 社会模拟、Agent runtime 与关系系统
│ ├── game.js # Canvas 渲染、交互与室内编排
│ ├── story-engine.js # 自演化剧情弧与 AI 剧情师
│ ├── storage.js # IndexedDB 多槽存档
│ └── assets/ # 精灵图、GLB、纹理与参考资产
├── src/
│ ├── interior-three.js # Three.js 场景、模型、相机与投影
│ └── interior-physics.js # 碰撞、可行走区域与路径
├── server/memory-proxy.mjs # 可选 Mem0 服务端代理
├── scripts/ # 构建、验证、截图与 3D 资产管线
└── docs/ # 产品、玩法、架构与质量文档
基础回归:
npm run check
npm run test:evolution
npm run build
npm run verify:interior-physics
git diff --check3D 室内还提供物理、人物探索、场景流、连续切换、视觉保真和性能基准脚本:
npm run verify:interior-character-exploration
npm run verify:interior-scene-flow
npm run verify:interior-transitions
npm run verify:characters:civic
npm run verify:reference-fidelity:v3
npm run benchmark:interior正式 3D 资产使用更严格的独立发布门禁,详见 室内 3D 高保真规范。
当前仓库是可玩的开发版本,不应被描述为已经上线的在线 AI 社会:
- 没有账号体系、真实多用户社区或云端世界状态。
- 没有启用生产 LLM provider;浏览器端不得放置生产密钥。
- 漂流瓶和交换人生仍是本地匿名模拟,不是真实用户匹配。
- 3D 运行时资产仍在开发,尚未全部通过正式美术发布门禁。
- MirrorLife 是游戏与叙事实验,不提供心理治疗、诊断或危机干预。
- P0 · 单人闭环:更强的主动介入、可重玩危机、跨建筑剧情、回访摘要与正式 3D 资产。
- P1 · 多 Agent 社会:服务端世界调度、生产 LLM、分层记忆、审计与可解释回放。
- P2 · 同意式弱连接:账号与云存档、签名接力、匿名化、举报屏蔽与数据删除。
- P3 · 持续生长的世界:多街区、公共建设、长期制度与可审核的用户创作。
路线图表达方向,不承诺日期。优先级始终由“是否更好玩、更清楚、更值得回来”决定。
欢迎通过 Issue 或 Pull Request 参与。开发环境、分支与提交约定、验证矩阵、3D 资产要求以及 PR 清单,请阅读贡献指南。
开始提交前,请至少确保改动遵循“游戏先于面板、行动先于台词、规则先于模型”的原则,不包含生产密钥或真实用户数据,并通过与改动范围对应的验证。
MIT © MirrorLife contributors




