Files
xsl 0652c2f0e6 research(hunt-sim): 10 人并发在线模拟×多 agent 设计迭代——研究设施与全套档案
研究命题(00-plan):验证并打磨《围猎》联机纯音频体验——不是逻辑能跑通,
而是真人玩起来是什么体验、愿不愿意再来一局。

设施 web/harness/hunt-sim/(可复用,零依赖):
- arena.mjs 编排器:起真实服务器(随机端口+临时数据目录隔离),10 个拟人客户端
  经真实 WS 同时在线,错峰组队、真实时长对局、局间状态跨轮维护
- sim-client.mjs:game.js 行为移植(协议+手势路由+R1-R8 音频调度逐字节对齐),
  产出「玩家耳朵听到什么」的感知时间线(语音全文/loop 方位音量档/喊话/震动)
- brain.mjs:人设大脑——察觉延迟/前后判读(以真值为条件的正确率模型)/掩蔽放大/
  冷却乱滑/技能囤积/呼喊倾向/分心断网,全部随机判定用按实体 id 哈希的独立抽签
  (mulberry32 流会被刷怪座位轮转结构带偏,实测造成系统性镜像反转,已证伪)
- recorder.mjs:每人每局 events.jsonl 全量 + percept.md 感知转写 + 对局速览

研究档案 research/hunt-sim/:
- players/:10 人配置(LLM 亲笔)+策略自述+逐局去留决策+人设终评+退游者重访
- rounds/:v1 三轮(R0 教学+R1/R2 真人快速)+ v2 复测两轮,共 48 局全记录
- analysis/01-04:数值曲线/音频信息设计/协作社交/上手留存四视角报告
- synthesis.md(S1-S9 裁定)、metrics.md/metrics-v2.md(两版对比总账)、report.md(总报告)

v1 核心发现:10 人 3 轮 28 局 100% 胜率 26S/营地零损耗;击杀垄断(专家单人 30/39);
呼喊 3 次/28 局应答 0;N/S 前后判读仅 63/69% 可命中;四种退游死因
(失衡/社交真空/交互摩擦/观光无聊)→ 详见 report.md
2026-09-19 11:06:07 +08:00

6.3 KiB
Raw Permalink Blame History

《围猎》10 人并发模拟 × 多 agent 迭代 — 最终报告

2026-09-18/19 | 章程:00-plan.md | 用户指令:多 agent 模拟 10 人同时在线 → 多 agent 分析迭代设计 → 全程记录 → 目标是「真正吸引人、玩家愿意玩的音频游戏」。

1. 做了什么(一句话)

10 个 LLM 玩家 agent(每人一张人设卡、亲笔写 20+ 参数的「玩家大脑配置」)驱动 10 个 拟人客户端,通过真实 WebSocket 连真实服务器同时在线打了 v1 三轮 28 局(教学轮 + 两轮真人快速匹配,含组队/断线/走神/乱滑/跳教学等真实行为),全程逐事件录制并生成 每人的「感知转写」(耳朵听到什么的逐秒记录);局间由玩家 agent 本人读转写决定去留、 赛后写人设终评;4 个分析 agent 分视角(数值/音频信息/协作/上手留存)审全部数据产出 40+ 项修复提案,synthesis 裁定 9 项 P0(S1-S9)落地实施,同阵容(10 人配置一字未改) 复测两轮 20 局对比验证。

2. v1 → v2 核心对比(详表:metrics.md / metrics-v2.md)

指标 v1 v2 判定
R1 后同步点去留 2 人退游(P01/P06) 0 人退游(P01 回流、P06 收回退游决定) ✅
终评愿意继续玩 6/10 10/10(四人重访全部改判) ✅
方位弧错率 22% 11% ✅ S6 低通双线索
N/S 家族可命中 63% / 69% 75% / 81% ✅ 同上
真人房队友喊话 0 条/局 7.7 条/人/局 ✅ S5① 座位角色接线
呼喊-应答闭环 3 次/28 局、应答 0 呼喊必有应答(ack 11 条可闻) ✅ S5②③
闲置语音(看门狗) 93 次/全场(80 次误伤) 17 次(≤1/人/局) ✅ S4
冷却反馈 666 次乱滑全 error 震 首拦才震 + 就绪轻叮(P07 实证闭环) ✅ S2
战斗中误触菜单 多人中招(P01 单局 14 次) 0(下滑恒出击) ✅ S1
「你还没开张」羞辱 0 杀局点名 4 遍 沉默处理(P08 因此 0杀→12杀突破) ✅ S3
营地零损耗 6/6 快速局余 10 18/20 局余 10 ❌ v3 头号遗留
S 评级占比 93% 仍 100%(双轴条件被专家房轻易满足) ❌ 随难度一并修

个案亮点:谨慎姐 P08 从 0-1 杀到 12 杀 22 出手(「羞辱链下架让我敢赌第一挥」); 通勤客 P03 从 0 出手观光退游到 5 杀 5 出手 0 错弧;新手 P10 自述「闷声双线索破案 (变小声+发木=身后,只是小声=远)」——教学没教,但线索本身终于可学。

3. 交付物清单

代码(全部回归绿:hunt-sim 16/16、playtest 213、guide 132、engine-voice 19)

  • web/server/hunt-room.js:S5 协作人声包(真人座位角色接线/呼喊邻座代答/help 优先)、 S7 难度重构(4 人房波次 ×4/3 waveCounts、齐压拍 alignPincers、bot 让位窗 mobYielded 2s、双轴评级 gradeForEx:S=耐久≥9 且 ≥2 人各 6 杀)、喊话预算 2→3
  • web/hunt/game.js:S1 下滑恒出击+菜单收窄到波间、S2 冷却首拦震+就绪 beat 震、 S3 0 杀不播 kill_band0、S4 看门狗重定义、S5③ help 永不丢、S6 后半平面 loop 低通 750Hz 第二线索、S8 教学作答步跳过保护、S9 状态链按变化播
  • web/harness/hunt-sim/(新研究设施,可复用):arena.mjs 编排器 + sim-client.mjs (game.js 行为移植)+ brain.mjs(人设大脑)+ recorder.mjs(感知转写)+ ws.mjs/assets.mjs

研究档案(research/hunt-sim/)

  • 00-plan.md 研究章程 | brain-config-schema.md 配置契约
  • players/:10 人配置+策略+逐局去留决策+终评+退游者重访(全部 LLM 亲笔)
  • rounds/:v1 三轮 + v2 两轮,每人每局 percept.md 感知转写 + events.jsonl 全量事件流
    • 按房 match.json(含方位混淆账)
  • analysis/01-04:数值/音频信息/协作/上手留存四视角报告
  • synthesis.md:S1-S9 裁定 | metrics.md / metrics-v2.md:两版对比总账

4. 方法论沉淀(对「做吸引人的音频游戏」的可复用结论)

  1. 「程序化拟人身体 + LLM 玩家灵魂」三层架构经实测成立:感知层逐字节移植客户端 音频调度(信息流可信)、配置层由 LLM 按人设亲笔校准(短板真实)、主观层由 LLM 读感知转写判去留(「愿意玩」可量化为决策点留存率)。
  2. 去留决策点是最硬的产品指标:比评分诚实(P05 的「第三局白给 S 就删」当场兑现 与当场解除,都在转写里对得上账)。
  3. 修「怎么被对待」比修玩法更能救人:v2 里零杀玩家的去留反转(P08/P04)全部来自 羞辱链下架与看门狗重定义——玩法没变,尊严变了。
  4. 信息可学性是纯音频游戏的生命线:N/S 判读从 63%→75% 靠的不是教学而是把单线索 (响度)变双线索(响度+音色)——「玩家自己破案」(P10 语)比「教出来」更留人。
  5. 模拟的盲区也明确:听感层(音色美感/响度平衡)与真实人类的学习迁移仍需真机人耳; 营地零损耗这类「数值吞吐」问题模拟可以精确复现,但最优修法参数要在模拟与 balance-scan 之间迭代。

5. v3 迭代清单(按优先级,数据见 metrics-v2.md 遗留节)

  1. 难度穿透(P05 判决条件:营地要掉血):齐压拍 2-3 组/波、后波 wolfEta 8→7s、 总量 +15%;balance-scan 扩 bot4/opt4 档验收(目标:专家房余耐久带 4-8)。
  2. 真人房参与真空(P04/P09):分层匹配(join.skill)+ 保底猎物(防区优先窗对真人 的可听化版本)。
  3. 喊话情报分级投递(P02 新报占线挤掉开始伤情报)。
  4. TTS 批次:tut_back 教学补身后期、kill_band0 正向改写、波间战报句。
  5. P06 的 v3 愿望清单:报点手势、波间队友战报、喊话零丢包。

6. 复现命令

# 全量回归
tools/node/bin/node --test web/server/test/hunt-sim.test.mjs
tools/node/bin/node web/hunt/test/playtest.mjs
# 平衡扫描(难度参数验证)
tools/node/bin/node web/server/test/hunt-balance-scan.mjs 8
# 再开一轮 10 人模拟(复测协议见 00-plan §6)
tools/node/bin/node web/harness/hunt-sim/arena.mjs <轮名> --quick