21 KiB
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 事件双源(核心设定)
- 全局事件:世界 Agent 按日历/规则/随机触发(发工资、股价波动、公告)。
- 自主行为事件:人物 Agent 因动机主动发起。典型链路:A 暗恋 B(关系状态)→ 傍晚社交需求高(动机状态)→ 产生"约 B 吃饭"意图 → 系统校验 B 可达 → B 被唤醒自主决定 → 生成约定事件 → 双方记忆同源写入。
两类事件走同一条裁决与落库管道——世界只有一个事实来源。
1.3 三大目标与产品形态
- 规模可控:Agent 数、触发频率、时间压缩比、成本全部可配置、可调速、可暂停。
- 逻辑自洽:客观事实只有一个出处;两人对同一事件的记忆不矛盾;随机判定可复现。
- 简单可视化:一眼看到"谁在哪、干什么、想什么"。
- 产品形态:抖音直播(黄金档连续剧 + 24/7 可访问的世界)+ PC 互动端(v2 后置)。卖点一句话:40 个 AI 白领的长弧线关系连续剧。
2. 调研依据(简表)
| 参照 | 借鉴点 |
|---|---|
| Generative Agents(Stanford,2023) | 记忆流(新近度×重要性×相关度检索)、反思、计划;25 人规模与本项目同量级 |
| Concordia(DeepMind) | Game Master 模式:Agent 声明意图、GM 裁决落地;组件网络含内稳态需求驱动 |
| AgentSociety(清华,2025) | 异步架构 + 消息队列 + LLM 网关 + 全量记录驱动可视化的分层 |
| AI Town(a16z) | 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 模型分配
| 负载 | 模型 | 理由 |
|---|---|---|
| 人物决策/对话(主力, |
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)+ **每日黄金档 45 小时真人值守人力**。 - 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. 长期路线
- 数据资产:事件库=自生长的中文社会行为语料库 → 微调本地 8B 替代部分云端调用(降本+风格统一)。
- 规模扩展:40 → 多栋楼/多公司(触发方案 C 完整分布式化)。
- 产品化:"模拟器+导播+直播"做成可复制的直播间模板。
- 远期互动:观众付费"入住"公寓成为第 25 人(P0 合规稳定后再议)。
附:待办确认项
- 路线:A+C 融合(已确认)
- 凌晨回放轮播:首播即制度化(已纳入排期)
- 黄金档真人值守人力来源(本人 or 另请主播)——影响成本口径,开工前明确