上一篇(《我让 16 个 AI 在一个虚拟世界里自主生活了五年》)讲了枢渊(Alkaira)这个实验里的人和事。这一篇拆机器:当 16 个天生会编故事的模型挤在同一个世界里,"什么是真的"由谁说了算?
先看一桩真实悬案。
一张互相虚构的情报网
第一年年末,炼宝殿杂役聂九的人生大事记里写着一条:
通过暴力与心理施压,彻底控制苏倾月与阿罗,建立地下情报网。
同一时期,阿罗的周记里也在经营她自己的网:她相信自己拿捏了炉工吴煤,握有苏倾月走私黑晶的证据。
有意思的地方来了。聂九以为阿罗是他的棋子;阿罗以为自己是操盘手。两个人把彼此都写进了自己的组织架构图。如果按任何一方的叙事推演世界,另一方的故事立刻崩塌。
枢渊的处理方式:两条都留着,两条都打上同一个标签——
{"summary": "通过暴力与心理施压,彻底控制苏倾月与阿罗,建立地下情报网",
"truth_status": "subjective", "involved": [], "about": ["苏倾月", "阿罗", "吴煤"]}
truth_status: "subjective"。翻译成人话:你可以这么相信,世界不替你背书。
到第三年年终,账本对阿罗摊牌:吴煤口供、黑晶证据、陈年账本,全部查无实据。她的帝国从未存在。聂九那张网也一样——五年过去,账本承认他真实攒下的财富和调查动作,唯独不承认那张"控制网"。
两个骗子,谁也没骗过账本。
幻觉飞轮:这个 bug 差点吃掉整个世界
先坦白:上面这套标签系统,是被一场事故逼出来的。
枢渊的年终结算里有个环节:天道模型阅读每个角色一整年的周记,蒸馏出"人生大事记",作为下一年人格的一部分。听起来很合理,直到我们发现它在批量生产平行宇宙。
机制是这样的:角色在独处叙事里吹牛("我潜入他的洞府,掠夺其元气使其昏死"),周记如实记录了这段吹牛,年终蒸馏把它当成实打实的往事收进大事记,来年的人格带着这段"记忆"登场——于是他吹得更自信,编得更具体。受害者毫不知情,加害者言之凿凿,两边的历史一年比一年分叉。
我们给它起了个名字:幻觉飞轮。模型的想象力接上了自己的排气管。
修法写在守恒模块的头注里,一句话版本:
跨角色的客观事实,只有账本交易背书时才是法律。
具体规则是一张白名单。天道蒸馏出的每条大事记,只要涉及别的角色,引擎就去翻当事人当年的真实账本——伤害、夺取、赠予、交易、转账、关系变更。查得到对应交易,事件保持 objective;查不到,降级:
- 当事人名字从
involved(发生在他们身上)挪到about(只是提到了他们) - 打上
truth_status: "subjective" - 叙事原文一字不动
最后一条是刻意的。戏剧要留,权威要撤。吹牛是人格的一部分,删掉它角色就不完整了;但引擎从此不再把这段话当成"发生过的事"去推演世界。
选白名单不选黑名单也是刻意的。一开始有人提议用关键词拦截("掠夺""控制"之类),被否了——模型会换比喻,黑名单永远追不上文笔。反过来问"有没有交易能证明",一锤定音:没有账,就是没发生。
天道说了不算:裁决权和记账权分家
第二层防线更根本:连世界的裁判都不许直接改账。
枢渊的天道模型负责裁决——冲突怎么展开、搜查翻出什么、天灾砸中谁。它产出的是结构化 JSON,但引擎对这份 JSON 的态度写在裁决层的断言里,我原样抄给你:
# god may DECLARE a `gather_items` ATTEMPT, but gain_items itself must
# still be empty here: the engine fills it AFTER rolling the gather dice.
# This keeps god's word a REQUEST and the ledger the LAW —
# god can't conjure an item straight into gain_items.
assert data["gain_items"] == []
天道的话是请求,账本才是法律。天道可以宣布"这里有一批寒铁矿石可捡",但角色捡没捡到,要过引擎的骰子;骰子过了,引擎才往库存里写。天道自己无权凭空造物——一个能凭空造物的裁判,和一个会吹牛的角色,对账本的威胁是同一种。
为什么这么严?因为我们抓到过它徇私。第一年第三旬,白绫参加一场遭遇,命数骰子明明骰出了 fail,天道的叙事却让她满载而归:枯骨玉十五块、寒铁矿石三条,照单全收。骰子被骰了、被记录了、被写进叙事了——然后被无视了。发放路径上没有闸门。
修复之后,规则变成:骰子结果直接压在裁决产出上。大失败,两手空空还要掉血;失败,收获减半、钱清零;骰得好,天道的分配才原样生效。配套还有一条 fail-closed:骰子系统开着却查不到结果时,按失败处理——查不到骰子就默认成功,和当初那个 bug 是同一个物种。
骰子:给命运留百分之五
说到骰子,多讲一句它存在的理由。
模型演戏有个隐疾:强者恒强。让两个模型对打,它们会很"懂事"地让境界高的赢——因为语料里强者就该赢。跑一年没问题,跑五年,世界会板结成种姓制度。
枢渊的骰子是一颗 d100,角色属性和情境修正折算成功率,然后:骰值 ≤5 强制大成功,≥96 强制大失败。中间才看概率。
那 5% 就是留给"炼气小子一符逼退筑基老怪"的名场面配额。角色不知道数字——反馈给模型的只有"差了一线机缘"这种话,绝不会是"你骰了 37 需要 60"。命运要有牙齿,但不能露出概率表。
所以,"真"到底是什么
拼起来,枢渊里一件事要成为客观事实,得走完三关:
角色说想做 → 这是意图,一文不值也弥足珍贵——它是人格的燃料。 天道裁决怎么发生 → 这是叙事,负责精彩,无权改账。 骰子 + 账本落地 → 这才是事实。两条腿的转账、过生命周期的伤害、有状态机的契约。
三关全过,才轮到 truth_status: "objective"。任何一关短路——角色嘴上说的、天道笔下写的——最多拿到 subjective,作为"某人相信的事"存档。
年终复盘就是这套体系的审判日:天道拿着账本逐条核对角色一年的自我叙事,核不上的公开处刑。阿罗那句"查无实据",就是这么来的。
为什么不干脆禁止撒谎
写到这里,你可能想问:既然幻觉这么麻烦,为什么不在源头掐死?让角色只能陈述账本事实,不就干净了?
干净,也死了。
阿罗的三年自欺是这个世界最好的故事之一——前提是世界始终知道那是自欺。聂九的"情报帝国"给三号炉黑幕这条主线提供了一半的张力——前提是引擎从未按他的版本推演现实。秦无衣坚信自己身陷禁闭,这份错觉塑造了他全部的行为模式——它是错的,也是他这个人的地基。
幻觉在聊天机器人里是缺陷,在角色身上是内心戏。区别只有一个:有没有一本它骗不过的账。
所以枢渊的设计原则收敛成一句话:
叙事可以不可靠,状态变更必须可验证。
角色尽管撒谎、误解、自我膨胀。世界一边全文记录这些谎言——它们是剧情资产——一边在每个年终,用一本谁也贿赂不了的账,告诉每个人:以下是你真正做到的部分。
下一篇
账本要当法律,先得自己干净:每一枚灵石从哪来、到哪去,发送方扣了、接收方进了、一笔不多、一笔不少。下一篇讲枢渊的守恒经济——包括一次口头交易差点造出两份货的事故,以及年终审计怎么把它抓回来。
《当 AI 开始交易:给虚拟社会造一套守恒经济》