Files
SoundGame/world_sim/WorldSim-最终方案.md
T
2026-09-19 22:18:48 +08:00

334 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WorldSim 社会模拟器 · 最终落地方案
> 版本 v3.0 定稿 · 2026-09-19
> 本文件由总体方案、模型选型、可视化与直播、风险合规四份草案经三轮五角色评审(制作人/策划/运营/市场/美术)合并修订而成,为唯一有效文档。
> 路线已确认:**A+C 融合**(单体先行 + 首日 append-only 事件表,分布式后置立项)。
---
## 1. 项目概述
### 1.1 场景设定
| 设定 | 内容 |
|---|---|
| 住所 | 一栋单身公寓,6 层 × 每层 4 房间 = 24 间,每间 1 人,男女各半 |
| 工作 | 24 人均为都市白领,在同一家公司不同部门上班;公司另有 16 名员工(含部门经理),总计 **40 个 Agent** |
| 世界 Agent | 负责全局事件(发工资、工作事务、股票涨跌)并兼任**编剧** |
| 触发机制 | 无交互时每 5 分钟(真实时间)触发一次 LLM 行为(兜底);被交互时立即事件唤醒 |
### 1.2 事件双源(核心设定)
1. **全局事件**:世界 Agent 按日历/规则/随机触发(发工资、股价波动、公告)。
2. **自主行为事件**:人物 Agent 因动机主动发起。典型链路:A 暗恋 B(关系状态)→ 傍晚社交需求高(动机状态)→ 产生"约 B 吃饭"意图 → 系统校验 B 可达 → B 被唤醒自主决定 → 生成约定事件 → 双方记忆同源写入。
两类事件走**同一条裁决与落库管道**——世界只有一个事实来源。
### 1.3 三大目标与产品形态
- **规模可控**:Agent 数、触发频率、时间压缩比、成本全部可配置、可调速、可暂停。
- **逻辑自洽**:客观事实只有一个出处;两人对同一事件的记忆不矛盾;随机判定可复现。
- **简单可视化**:一眼看到"谁在哪、干什么、想什么"。
- **产品形态**:抖音直播(黄金档连续剧 + 24/7 可访问的世界)+ PC 互动端(v2 后置)。卖点一句话:**40 个 AI 白领的长弧线关系连续剧**。
---
## 2. 调研依据(简表)
| 参照 | 借鉴点 |
|---|---|
| [Generative Agents(Stanford,2023)](https://arxiv.org/abs/2304.03442) | 记忆流(新近度×重要性×相关度检索)、反思、计划;25 人规模与本项目同量级 |
| [Concordia(DeepMind)](https://github.com/google-deepmind/concordia) | Game Master 模式:Agent 声明意图、GM 裁决落地;组件网络含内稳态需求驱动 |
| [AgentSociety(清华,2025)](https://arxiv.org/abs/2502.08691) | 异步架构 + 消息队列 + LLM 网关 + 全量记录驱动可视化的分层 |
| [AI Town(a16z)](https://github.com/a16z-infra/ai-town) | PixiJS 像素小镇渲染、头顶气泡对话、常驻名牌的可视化先例 |
关键教训:① 成本是头号约束,必须模型分层;② 自洽性不靠 LLM 自觉,客观信息全部由系统注入;③ 双人记忆必须投影自同一事件;④ 纯内稳态动机只会产出千篇一律的吃饭睡觉——需要目标系统与负向社交动作。
---
## 3. 总体架构(已确认:A+C 融合)
### 3.1 分两阶段走
**阶段 1(A+ 形态,首播前)**:单体 Python 进程,但**从首日起 append-only 事件表落库**,事件 Schema v1 在 W1 冻结——方案 C 的溯源红利(可回放/可审计/申诉证据链)在单体阶段就拿到。
```
┌─────────────────── Python 单进程 (asyncio) ───────────────────┐
│ 时间引擎(时段变速表) ──┬─► 世界Agent/编剧(规则+Kimi K3) │
│ ├─► Agent调度(事件唤醒>时钟兜底) │
│ │ 认知循环: 感知→检索→决策→校验→反思 │
│ │ 邀约状态机 / 对话管理(限轮) │
│ └─► 渲染服务 → PixiJS 演出视图 → OBS → 抖音 │
└────────────────────────────────────────────────────────────────┘
SQLite/PostgreSQL(append-only 事件表 + 世界状态 + 记忆流 + 关系)
LLM 网关(路由+降级链+全量记录) 本地 GPU(审核/打分/embedding/兜底)
```
**阶段 2(C 完整形态,独立立项)**:触发条件 = 规模扩展(40→更多)或首播留存达标。单体调度器替换为 Redis Streams 消息总线 + Agent Worker 集群(LangGraph 认知编排)+ PostgreSQL/pgvector,事件 Schema 与人设、可视化资产全部复用。
### 3.2 事件 Schema 设计原则(W1 冻结 v1)
一切事实(全局事件、Agent 动作、对话结果、骰子判定、编剧干预)都是 append-only 事件,字段含:`tick / sim_time / type / source / payload / rng_seed(随机判定可回放复现)/ trigger(autonomous|world|director|gift|vote,干预审计用)/ arc_id(所属故事线)/ UI 展示字段预留(名牌、立绘 ID、重要性)`。
示例:
```
{tick: 1240, sim_time: "D3 20:13", type: "invite.sent", source: "agent:zhangsan",
trigger: "autonomous", rng_seed: 8842, arc_id: "romance-zs-ls",
payload: {to: "lisi", activity: "吃晚饭", at: "D3 20:30"}}
```
---
## 4. 核心机制设计
### 4.1 时间引擎:时段变速表
废弃固定压缩比(与直播节目单矛盾),改**时段变速表**,压缩比为运行时参数:
| 真实时段 | 压缩比 | 直播间 |
|---|---|---|
| 黄金档 18:00~24:00 | ≈1:1(模拟晚间=真实晚间) | 直播主时段,栏目化执行 |
| 白天 8:00~18:00 | 2~4× | 正常直播,加速养关系(底线:每真实周 ≥8 模拟日) |
| 凌晨 0:30~8:00 | 低速补跑 | **回放轮播**(零新 LLM 内容上屏),世界不冻结 |
全局事件按模拟日历触发(每月 10 号发工资、工作日 9:00 打卡)。支持暂停/单步/加速。
### 4.2 触发模型:事件唤醒 > 时钟兜底
- **事件唤醒(立即)**:被敲门 / 收到邀约 / 收到消息 / 同房间有人发起对话 / 全局事件波及。
- **时钟唤醒(兜底)**:连续 5 真实分钟无交互 → 触发一次自主决策(用户原始需求)。
### 4.3 世界模型
- **空间**:地点节点图——公寓(6 层 × 4 房间 + 公共区)、公司(各部门 + 茶水间/会议室)、餐厅等少量外部场所;移动=切换节点。
- **状态**(唯一事实源,入库,不让 LLM 编):模拟时间、每人位置/余额/持仓/情绪/需求值、股价、公告、关系值。
- **感知**:每次唤醒,系统注入结构化观察(在哪、几点、谁在场、相关事件)。
### 4.4 Agent 认知循环
```
感知(系统注入) → 记忆检索(新近度+重要性+相关度) → 决策(LLM: 意图+结构化动作JSON)
→ 系统校验执行(非法动作拦截) → 结果同源写入各方记忆 → 重要性超阈值时反思
```
动作空间(枚举):`move / chat / invite / work / rest / eat / shop / trade_stock / think / argue / gossip / refuse / ...`
### 4.5 记忆系统(Memory Stream)
- 记忆条目:`{agent_id, sim_time, 内容, 重要性1-10, embedding, 来源事件id}`;检索按新近度×重要性×相关度加权。
- **反思**:重要性累计超阈值触发(不按时钟,省成本),LLM 提炼高层认知写回记忆流(人格一致性与"暗恋"演化的来源)。
- **双人事件单源**:同一场对话只生成一条事件,双方记忆均为其投影。
- **目击投影**:同场所旁观者获得事件简略投影("我看到 A 被 B 拒绝了")——八卦自然传播。
- **膨胀治理**:反思时合并旧记忆为摘要、低重要性归档、embedding 索引定期重建。
### 4.6 关系与动机系统
- **关系**:有序对 `(A→B)`:亲密度 affinity(-100~100)、**张力 tension**(负向关系显式化)、关系标签(陌生/同事/邻居/朋友/暧昧/恋人/交恶)、一句话摘要。
- **需求**(0~100,随 tick 衰减、被行为满足;**衰减率与满足方式按 Big Five 人格差异化**):饥饿、精力、情绪、社交、成就、财富。
- **目标系统(第一公民)**:每 Agent 持有**周目标**("约到 B 吃饭""绩效前二")+ **受阻计数**,注入每次决策 prompt;长期受阻 → 挫败值上升 → 换策略/迁怒/放弃并反思。戏剧性的内生来源。
- **负向社交动作集**:`argue / gossip / refuse` 入动作空间——冲突不靠编剧空投。
- **意图冷却**:意图被挫败(如邀约被拒)进入冷却表,防 5 分钟兜底时钟造成重复刷屏。
### 4.7 邀约协议(响应规则化)
```
A 产出 invite(B, 活动, 时间)
├─ 校验 B 可达? 不可达→降级"发消息"或作废(写记忆)
├─ "邀约送达"事件 → 唤醒 B
├─ B 响应 = 规则意愿分 + 可回放骰子定结果,LLM 只生成措辞:
│ 意愿分 = f(affinity, tension, 心情, 日程冲突, 社交需求, 人设)
│ 骰子 = 确定性随机(rng_seed 入库) 指标:全局接受率压入 40~60% 带
│ ├─ 接受→生成约定事件(两人日程) → 到点提醒 → 执行
│ ├─ 拒绝→双方写记忆+关系微调+A 的 invite 进冷却
│ └─ 改期→回提议(限 2 轮)
└─ 每步都是事件记录,可视化可见
```
所有多 Agent 交互复用"提议→送达→响应→约定"四段式,对话限 6~8 轮。
### 4.8 世界 Agent 与编剧干预分级
职责:日历事件(发工资/账单)、工作事务(任务/绩效/晋升)、经济系统(股价随机游走+行情事件)、随机扰动(停水停电)、**编剧**(Kimi K3)。
**干预分级(制度化,防"编剧毁掉涌现真实性")**:
- **L0** 环境扰动 / **L1** 场景排期(制造机会)/ **L2** 动机助推(调需求值、目标受阻计数)
- **L3 心智控制(直接指定情感与决定)永禁**——付费也买不到
- **干预率 <15% KPI**;干预事件 `trigger` 字段全量审计;故事弧线多线状态机 + fail-forward(一线失败不硬救,转化喂养下一条线)
- 对观众的叙事承诺:**每晚黄金档 ≥1 个 A 级剧情事件**;直播间常驻"今晚看点"横幅
### 4.9 自洽性保障清单
| 风险 | 对策 |
|---|---|
| LLM 编造事实 | 客观信息全由系统注入;动作枚举化+校验拦截 |
| 两人记忆矛盾 | 交互事件单源落库,记忆为同一事件投影 |
| 人格漂移 | 人设卡每次决策必带;反思受人设约束;Big Five 周测 |
| 时间穿帮 | 行为消耗模拟时间;日程冲突拒绝新约定 |
| 经济穿帮 | 余额/持仓只由系统按事件结算 |
| 随机不可复现 | 确定性 rng,seed 入库,回放复现 |
| 编剧干预失控 | 分级 + 干预率 KPI + trigger 审计 |
| 并发冲突 | 内核按 tick 串行裁决,后到者收到"已被占用"事实 |
### 4.10 人设系统
- 字段:姓名/性别/年龄/房间号/部门/职位/Big Five/3~5 条成长经历/初始目标/初始关系网/**一件标志性视觉符号**。
- **戏剧拓扑选角**:先设计关系拓扑(暗恋链、职场对手、老乡、前任),再生成 40 人设;选 **8 个明星角色**承载首播故事线,首周聚焦 8 人。
- 流水线:LLM 批量生成 → 规则校验(男女各半、经理唯一、部门配比)→ 人工抽查 → YAML 入库。16 名公司 NPC 与租客同构(住所标记不可见)。
---
## 5. 模型选型与成本
### 5.1 模型分配
| 负载 | 模型 | 理由 |
|---|---|---|
| 人物决策/对话(主力,~500~800 次/时) | **DeepSeek V4-Flash** | $0.14/$0.28 每百万 token,前缀缓存命中再降一档,峰谷半价;1M 上下文;结构化输出 |
| 世界 Agent 文案/编剧/大事件解说 | **Kimi K3** | 中文叙事第一梯队,1M 上下文可吃世界快照;输出 ¥100/百万贵→限每天几十次 |
| 离线异步任务(人设生成、记忆摘要、预热跑数据) | **GLM-4.7-Flash**(永久免费档) | 免费档延迟高达 26 秒级,不进实时链路 |
| 内容安全初筛/重要性打分/JSON 抽取/API 故障兜底 | **本地 Qwen3-4B / 8B** | 消费级 GPU 可跑(4B 量化 ~6GB 显存);**不做人物人格**(长期一致性不足) |
| Embedding(记忆检索) | 本地 bge-m3 / Qwen3-Embedding | 高频零成本 |
### 5.2 成本与治理
- 真实总成本约 **¥800~1500/月**(LLM 账单 ¥500~1000 + 推流机 + TTS/BGM)+ **每日黄金档 4~5 小时真人值守人力**。
- LLM 网关:OpenAI 兼容入口,按 task_type 路由(decision/dialogue/reflection/narration/utility/moderation),每类配降级链(如 V4-Flash → GLM 付费档 → 本地 8B)。
- **熔断**:峰值 RPM 测算(直播调压缩比会线性放大调用量);日账单 ¥50 报警 / ¥80 自动降速。
- 极端故障:暂停虚拟时钟(宁可世界冻结不可乱来),恢复后追平。
---
## 6. 可视化与直播
### 6.1 三端架构
| 端 | 摄像机 | 排期 |
|---|---|---|
| 调试视图(开发者,全量数据) | 自由 | W2 起 |
| 演出视图(抖音直播) | AI 导播 | 首播 |
| PC 互动端(切人/切地点/切视角/详情面板/事件时间轴) | 观众自己 | **v2 后置**,触发条件:主号受罚需兜底阵地,或首播 4 周留存达标 |
三端共享同一渲染引擎与事件流状态投影,仅镜头控制源不同。PC 端"第一人称"降级为**沉浸模式**(俯视跟拍+内心独白字幕);Schema 预留 UI 字段防返工。
### 6.2 视角与美术
- **主画面:RPG 俯视像素风**(星露谷/AI Town 心智);上帝视角只作小地图。
- **AI 导播**(参数化规则系统,不耗 LLM):按事件重要性+戏剧性调度镜头(跟随/分屏/特写/快切);重要事件生成高光回放,兼作短视频切片。
- **VN 演出模式(进首播 MVP)**:重要性超阈值对话切入立绘对峙+逐句对话框 overlay——手机竖屏下对话戏的唯一载体。立绘首期 80 张(8 明星×6 表情+32 人×1 平静),余量按人气榜滚动补;总美术约 21 人日,与内核并行。
- **辨识度四层**(验收:3 秒辨识度 ≥80%):常驻头顶名牌(第一手段)→ 8 明星定制 sprite(独立剪影)→ 32 人模板+配饰 → 对话弹立绘。
- **素材管线**:Tiled 画地图 + Kenney CC0 起步 + AI 生图(限色 palette + Aseprite 人工修边);公寓每层一色调,公司部门标志陈设;光照按时段表驱动;art bible 与 UI 规范 W3 前置。
- **竖屏优先 UI**:常驻只留主画面/解说字幕条/AI 标识/"今晚看点"横幅,事件流与榜单折叠为抽屉。
### 6.3 技术栈与链路
```
事件流 → 渲染服务(状态投影) → PixiJS 演出视图(AI导播) → OBS 浏览器源
↓ 混流(解说TTS+BGM+字幕+AI标识)
抖音直播伴侣(小玩法框架接弹幕/礼物)
```
- W3 用**回放驱动渲染**(预热期事件回放喂渲染端,不等内核完工)。
- 解说员="公寓管理员"人设:常规文案 Flash 模型、大事件 Kimi K3、TTS 复用本仓库 `.venv-tts/`/`env.d/tts.sh`;BGM 复用 `env.d/mureka.sh`。
### 6.4 观众互动体系
承诺措辞统一:**"保证事件(场景+对手戏+排期公示),不保证结局"**(与 L3 永禁兼容,防互动失信)。
| 形式 | 设计 |
|---|---|
| 弹幕投票(免费) | 二选一**决定编剧排期**,胜出当晚必演+倒计时公示;黄金档 3 场/晚 |
| 人气打榜(付费) | 榜单影响编剧资源倾斜;**戏份地板**:末位触发编剧救援弧不淘汰(评审全票裁决——淡出会三周坍缩成 5 人节目) |
| 礼物·微观档(首播即开) | 送咖啡/加餐 → 指定角色情绪精力上升,下一 tick 执行 |
| 礼物·关系档(W7~W8) | 指定两人场景+对手戏必发生(结果自主) |
| 礼物·剧情档(W7~W8) | 编剧生成剧情(表白契机/裁员传闻/股市行情)+ **署名高光切片 100% 交付** |
防滥用:每用户每分钟限 1 次;剧情档每日上限+候补队列透明;礼物只映射为事件编号,金额文案永不进 prompt;送礼昵称上屏前审核;编剧护栏(只造机会与冲突,不造恶性结局)。**PC 端只做免费互动,付费打赏只走抖音**(自建打赏涉及支付/虚拟币/ICP 合规,后置评估)。
---
## 7. 合规与风险控制
### 7.1 内容安全(最大运营风险)
三层过滤管线,所有上屏/上播文本与语音必经:① 本地 4B+敏感词库毫秒级初筛 → ② 可疑送云端复核(期间延迟上屏)→ ③ 人设 prompt 内置行为边界从源头降命中。**播出文本与 Agent 内部记忆双通道分离**(内部存原始事件,播出用过滤后文本)。
### 7.2 值守分级制度(替代含糊的"半无人")
平台判定无人直播看的是**实时互动能力**:
- **黄金档(18:00~24:00)**:真人全程值守 + 每小时出镜 + 21:00"管理员查房"固定栏目
- **非黄金档**:告警值守(安全管线触发或弹幕异常→人工介入)
- **凌晨**:直播间常开但只放当日高光回放轮播(零新内容=零新风险)
- 常驻"AI 生成内容"标识 + 一键断播/静音死开关
### 7.3 合规硬前置与应急预案
- **W1 硬前置**:抖音直播权限+虚拟主播报备书面核实,不过则换平台重评;**备号矩阵**+粉丝群作兜底阵地。
- **处罚阶梯预案**:限流/断播/封号分级响应;append-only 事件库即申诉证据链。
- 弹幕注入防御:弹幕永不进 Agent prompt,只结构化为投票计数/事件 ID。
### 7.4 风险登记册
| # | 风险 | 等级 | 缓解 |
|---|---|---|---|
| R1 | LLM 违规内容致封号 | 高 | 三层过滤+双通道分离+死开关 |
| R2 | 被判无人直播 | 高 | 值守分级+AI 标识+黄金档真人值守 |
| R3 | 剧情平淡观众流失 | 高 | 编剧弧线+每晚 A 级事件 KPI+预热+导播 |
| R4 | LLM 成本超支 | 中 | 分层+配额+缓存+谷时+¥50/¥80 熔断 |
| R5 | 长时运行状态腐化 | 中 | 记忆治理+审计+快照回放 |
| R6 | API 故障/限流 | 中 | 降级链+时钟暂停+峰值 RPM 测算 |
| R7 | 弹幕注入/违规 | 中 | 结构化互动+双层审核 |
| R8 | 人设批量质量差 | 低 | 戏剧拓扑选角+人工抽查+预热修正 |
| R9 | 礼物事件稀释叙事 | 中 | 每日上限+候补队列+反馈与执行分离 |
| R10 | PC 自建打赏支付合规 | 中 | PC 仅免费互动,付费只走抖音 |
| R11 | 恶意送礼指定伤害剧情 | 中 | 编剧护栏+审核+承诺措辞明示 |
| R12 | 首播获客不达标 | 高 | W6 获客门禁顺延;止损 pivot:渠道可死、模拟资产换渠道再发 |
| R13 | 互动承诺失信 | 高 | 措辞统一+排期公示+署名切片 100% 交付 |
---
## 8. 评估与质量门禁
| 门禁/评估 | 方法 | 时点 |
|---|---|---|
| **门禁①像不像人** | Smallville 式采访评估(问经历/关系/计划,人工打分) | W2,不达标顺延 |
| 辨识度 | 观众 3 秒认出角色 ≥80% | W3 样片前 |
| **门禁②愿不愿看** | 10 分钟样片(含完整 VN 对手戏)评审 | W4,不达标顺延 |
| **门禁③获客** | 切片粉丝 ≥3000 或单条播放 ≥5 万 | W6 首播前,未达顺延不裸播 |
| 一致性审计 | 脚本扫事件库:余额守恒/不在两地/记忆同源/干预率/接受率带 | 每日自动 |
| 人格稳定性 | Big Five 问卷周测 | 每周 |
---
## 9. 排期(单人全职 + AI 辅助,全程约 8~10 周)
| 周 | 里程碑 | 门禁 |
|---|---|---|
| W1 | **事件 Schema v1 冻结** + 抖音合规硬前置(权限/报备/备号)+ 戏剧拓扑选角(8 明星) | — |
| W2 | 内核跑通 40 人日常(append-only 事件表) | **门禁①像不像人** |
| W3 | 回放驱动渲染(PixiJS 像素公寓)+ art bible/UI 规范 + **切片先行启动**(关系线/猎奇线/采访线 + B站 devlog) | 3 秒辨识度 ≥80% |
| W4 | 10 分钟样片(含 VN 对手戏)+ 内容安全三层管线 | **门禁②愿不愿看** |
| W5 | 解说+BGM+AI 标识+OBS 全链路;切片冲量 | — |
| W6 | **首播**(综艺试播集设计:强制大事件+种子主角;黄金档值守;凌晨轮播制度化) | **门禁③获客** |
| W7~W8 | 弹幕投票升级 + 礼物关系/剧情档 + 切片管线自动化 | — |
| W9+ | PC 互动端 v2、方案 C 完整分布式化——立项评估 | 留存/规模触发 |
**首播前必做**:离线预热 1~2 个模拟周,让关系网/恩怨/暗恋自然长成,首播第一天就有戏;预热素材供切片先行。
---
## 10. 长期路线
1. **数据资产**:事件库=自生长的中文社会行为语料库 → 微调本地 8B 替代部分云端调用(降本+风格统一)。
2. **规模扩展**:40 → 多栋楼/多公司(触发方案 C 完整分布式化)。
3. **产品化**:"模拟器+导播+直播"做成可复制的直播间模板。
4. **远期互动**:观众付费"入住"公寓成为第 25 人(P0 合规稳定后再议)。
## 附:待办确认项
- [x] 路线:A+C 融合(已确认)
- [x] 凌晨回放轮播:首播即制度化(已纳入排期)
- [ ] 黄金档真人值守人力来源(本人 or 另请主播)——影响成本口径,开工前明确