用 AI 生成一本凶案剧本杀,一个晚上就够:五个人物、一段封闭空间里的命案、每人一条秘密和时间线、若干条线索,文本看着都挺唬人。

但剧本杀剧本有个特殊的质量标准:它要经得起五个玩家拿着各自的剧本互相质问。玩家会把时间线摊在桌上对,会追问”你说 21:40 上塔,他说 21:47 听见闷响,那 21:45 你在哪”,会拿着线索卡指认”这烟蒂是你的”。任何一个数字对不上、一件物证没人认领、一处空间上不可能的目击,都会在对质中炸开,封闭空间推理的幻觉当场塌掉。

我的海龟汤平台(海龟汤)上跑了三本原创真人剧本杀:《守灯人之死》《长夜列车》《雾锁画馆》,外加两本单机剧本和 70 道汤题。2026 年 9 月初,我们对全部剧本内容做了一次逐条审计,抓出 56 处缺陷,全部修复,93 个门禁测试通过。这篇文章复盘这次审计:AI 和人写剧本时会犯什么错,怎么系统地抓住它们。

创作体系:剧本是一份 JSON 种子

审计之前先交代剧本怎么来的。平台上新增一本剧本不需要改代码:剧本就是一份 JSON 种子,放进种子文件,结构测试自动校验,重启即可开局。

剧本列表:三本原创剧本就是三份 JSON 种子

每个角色在 JSON 里有固定的粒度:公开身份、性格、剧本正文(秘密 + 时间线)、开场白、回避策略、铁证补丁、崩溃口径、投票倾向、个人任务、开局线索。引擎按这些字段驱动 AI 演出和行为判定。

这套字段里最容易埋雷的是个人任务。设计任务时必须先想清楚机器怎么判定它完成。平台实现了七种判定谓词:clue_unpublished(线索未公开)、whisper_distinct(与不同人私聊)、search_total(搜证次数)、publish_any(公开指定线索)、public_chat(公屏发言次数)、vote_correct(投中真凶)、survive(活到终局)。写”查出真相”这种没法自动判定的任务,就是给复盘结算埋雷。

角色行为同理:回避什么话题、什么线索公开后说什么辩解、什么证据集齐后松动,全部写成结构化规则,触发由代码判定。行为脚本化让 AI 演出可控,但也意味着规则引用的每一个事实,都必须和剧本正文、时间线、线索描述完全一致。一致性的债,就是在创作阶段欠下的。

审计怎么做:三条线

审计不是通读一遍挑语病。我们分三条线走。

物证归主,每条线索的 points_to 字段(指向嫌疑人)逐条对照人物剧本的事实链,追问这件东西到底是谁的、剧本里谁碰过它。

时间线逐格核对,把每本剧五个角色的行动按时刻铺成一张表,真相锚点定死,然后逐格检查:任何人在任何时刻的说法,和其他人的说法、和真相、和物证位置,能不能同时成立。

《守灯人之死》的时间线核对表长这样(节选):

时刻 何静 秀娥 周小舟 阿潮 林岸
21:30 在疗养院 到塔站摊牌 工棚 靠码头 客栈
21:35-21:42 溜进小屋拿药 争吵至 21:38 摔门
21:47 已离开 劈柴(有证人) 灯室听见闷响
22:00 宿舍 客栈 灯室拨小灯芯 背风湾见”塔影里立着个人”
22:30 工棚 敲塔门无应

可解性演算,搜证有次数限额(每幕每人 3 次),线索按地点池顺序领取。凶手崩溃剧本的触发组、每个席位的线索收入,都要模拟独玩家按最优顺序搜证,看能不能在限额内集齐。触发条件本身够不着,等于白写。

三条线走完,三本真人剧本加两本单机剧本加 70 道汤题,合计抓出 56 处缺陷:1 处致命(P0)、22 处重要(P1)、35 处打磨级(P2)。

孤岛困局被船夫自己的船打破了(P0)

《守灯人之死》的核心设定是封闭孤岛:守灯人老周坠塔身亡,案件读本写着”今晨的船已经离港。下一班船,要等七天。警察上不了岛”。所有人走不了,所以只能查,这是整个剧本的封闭前提。

问题出在船夫阿潮身上。翻开他的个人剧本:21:50,”你把船从码头开去了背风湾藏好”;23:00,”偷偷回码头,睡在船上”。他的船整夜都在岛上,船能开,人也在。五个人根本不是走投无路,坐船就能报警,七天等不来警察的封闭前提当场作废。

连日期都对不上:阿潮的公开身份是”每周三来,周五走”。若船周五早晨离港,下一班周三就到,间隔五天,跟”下一班要等七天”也合不拢。

修复方案是重写阿潮的世界设定:大船归航运队,今晨正常离港,封闭前提保住;阿潮是岛籍小船夫,跑黑活儿,他那条私人小船后半夜在背风湾搁浅呛水,发动机打不着火。船在,人赖在岛上,船开不了。案件读本、公开身份、剧本、补丁台词、投票提示,五处口径同步改齐。

这是典型的 P0:单独看每段文本都没毛病,合在一起,世界的地基就塌了。审计里把这类叫封闭前提与个体设定冲突,机器很难自动发现,只能人审,但它是上线 checklist 的必查项。

十七分钟还是七十七分钟

《守灯人之死》里有一桩二十年前的旧案,是动机线的关键:守灯人某晚迟点灯,死了十一条人命。剧本里几乎所有地方都写”迟了十七分钟”,唯独一封档案局回函的线索卡写”应于 18:00 点灯,实际点亮 19:17”,描述文字还自己算出了”迟了七十七分钟”。

真相是底层时刻漂移了:一处写应点灯时刻 18:00,其他所有地方写 19:00。19:00 到 19:17 是十七分钟,18:00 到 19:17 是七十七分钟。两条口径各自自洽,合在一起就露馅。玩家要是拿这条线索卡质问到底迟了多少分钟,动机线的可信度直接打折。

修复方式:回函与真相统一为”应于 19:00 点灯,实际 19:17,迟了十七分钟”。

这类数字实体漂移(时刻、时长、金额、人数)是 AI 生成内容的高发缺陷,也是最能机器化的一类:把”数字 + 分钟/时刻/金额”做实体抽取,同一事件的数值做唯一性扫描,互斥就报警。这次审计后,时间线已经回填为结构化字段(15 席 × 70 条),一致性断言可以直接建在结构上。

物证张冠李戴

第三类高发缺陷是线索指向与事实链脱节,审计里叫 points_to 张冠李戴:

  • 《长夜列车》的烟蒂:抽烟的是沈万川,他剧本和白微澜的说谎指南都以此为据,线索指向却标了铁寒生。
  • 《雾锁画馆》的地上拖痕:拖画的是阮青,指向标了陆小棠。陆小棠的嫌疑路径反而因此断了,还得改由别的线索承担。
  • 还是《长夜列车》,”床缝里的汇款存根”三方打架:林霜的剧本说她拿走了,线索描述说它还在床缝里,补丁台词又说”桌上纸夹”。一件东西三个位置,玩家想质问都不知道从哪问起。

物件归属必须唯一:一个实物在某一时刻只能在一个地方,谁的剧本说了”拿走”,线索描述和真相就必须承认它不在原处。这类问题机器可以半自动(实体在场性互斥检查),但这个指向在叙事上是否成立,还是得人眼把关。

还有一类反方向的错:多写了一张没人认领的伪证。”备用钥匙挂环上的发绳纤维、两道勾痕”,听起来很像关键证据,翻遍五个人的剧本没有任何人动过钥匙,真相也明写钥匙没被动过。没有事实支撑的伪证会误导玩家白追一条线。删掉,改成”没人动过钥匙,但也没人看着它”,既有氛围又不撒谎。

数字盘点

剧本 P0 P1 P2 状态
守灯人之死 1 6 6 全部已修复
长夜列车 0 7 6 全部已修复
雾锁画馆 0 4 9 全部已修复
雨夜旅馆(单机) 0 5 2 全部已修复
雾岛疗养院(单机) 0 0 3 2 修复 1 遗留
汤题 70 道 0 0 9 8 修复 1 遗留
合计 1 22 35 56 已修复

修复不是改完了事。门禁测试(剧本一致性全量、结构校验、汤题一致性、泄露矩阵)93 个用例全绿,另有脚本模拟验证:三本剧本全部触发组在独玩家搜证限额内可达,每席线索池收入达标。

搜证与行动:每条线索都进自己的口袋

终局复盘:完整调查回放,谁的每一步都有据可查

哪些能交给机器,哪些必须人审

这次审计最大的产出,是把内容质量从一次性行动变成了可持续的防线。按可机器化程度,检查面分三档。

机器能直接守的,进推理门测试:

  • 触发组可达性:按线索池顺序模拟独玩家领取,断言崩溃和补丁的触发条件在限额内可集齐
  • 数字实体一致性:”数字 + 分钟/时刻/金额”抽取后做同事件值唯一性扫描,建在结构化时间线上
  • 泄底扫描:角色秘密关键词集合,与案件读本、简介做交集检查
  • 文本格式断言:玩家可见文本里的中英文混入、半角标点

要启发式加人审兜底的:

  • points_to 语义正确性:关键词交集启发式过一遍,人审清单兜底
  • 物件归属唯一性:动词方向与在场性互斥检查

只能人审的:

  • 汤面尾句是否泄露推理方向:”他的冰柜前”这种一句话泄底,机器判不了
  • 封闭前提的世界一致性:孤岛困局被船夫的船打破,要理解世界才能发现

这份清单的好处是实的:知道哪些质量门能自动化,哪些永远需要人,内容生产才敢放量。

写在最后

回到标题。AI 写剧本杀,生成文本这一步几乎零成本,难的是让五份视角不同、各自带谎的文本在事实层严丝合缝:同一个人不能同时出现在两个地方,一件物证不能有两个主人,一个数字不能有两套口径。

这次审计给出的答案是:创作负责戏剧性和信息差,审计负责把事实链焊死,机器守能自动化的门,人守需要理解世界的门。

顺带说一个有意思的发现:被审出问题最多的《雾锁画馆》(13 处)和最少的《长夜列车》(也是 13 处)数量打平,说明缺陷数量跟剧本写得好不好关系不大,跟文本量、交叉引用密度才有关系。写得越多,越需要审计。

平台地址:海龟汤,三本剧本都在线可开。


本系列:(一)从一锅海龟汤到会撒谎的剧本杀 | (二)本文 · 剧本一致性审计