2287 字

三缺一

想来我还是看过不少肥皂剧跟连载漫画的,总结一下这类作品的核心就是固定几个角色与每个角色的人物小传与长线目标,然后单元剧里引入临时角色与特殊场景来丰富内容。这个模式极其俗套但又极其好用,主要是观众看起来没有心理负担,错过几集也不影响对人物的认识。只有一点我不太满意,那就是得按编剧意思来。

再好的编剧也编不出1818里的沙雕新闻,那么解决方案也就放台面了,引入现实背景,然后让写好人物小传的角色与观众互动不就有了永不完结的肥皂剧或漫画了?这其实就是一个类平行世界的游戏,我们可以把自己的人物小传放到主角上,然后用旁观者角度看你在一个场景里与其他人物的互动可能性。更进一步,可以做成一种参加自己葬礼的喜剧效果,当然葬礼不吉利,就用失踪,人物也别太多,就四个外带游戏参与者,游戏开始让其中一个失踪,其余人要通过对话来推测可能性。这样我们就可以模拟很多好玩的事了。

跟传统游戏不同,这里我们不能设定编剧与结局。而要是让结局不唯一,也就是让不同角色按人物小传自然互动,然后结算时先让角色评判玩家的推理,但最后让失踪的人跳出来二次评判,一切都在20轮对话里发生与结算。但是,这应该可以反复连续进行,为此我们要根据每一轮对话生成一本世界书,这本世界书就是每轮找人游戏沉淀下的设定,让历史自然形成。所有这些自然都需要大语言模型,我们只需要设计一个前端界面与相关配置,当然也得让大语言模型来设计。

但总要进行角色限制,这里我设计了四个中年男人。据我观察,虽然普遍意义上的戏剧喜欢刻画男人打架女人八卦,但生活里比较有趣的场景是反的,也就是看女人打架男人八卦,前者虽然不常见但后者其实很有意思,毕竟我就是个中登。有我在的群里经常见到很多搞笑的对话,更搞笑的是很多人没意识到自己是个笑话,例如我看我过去发言就有种观察人类物种多样性的体验。

据此,我的核心设定就是四个人在群里七嘴八舌,互相抬杠、跑题、各怀鬼胎。你混进去,不是审问谁,而是旁观他们的对话,偶尔插一嘴。真正的线索不在犯罪现场,藏在每个角色的偏见里。这就是"三缺一"的核心机制:每个角色掌握一条私人线索,但他会顺着自己的性格去解读。爱算账的大B从钱的角度看线索,丧的老A往坏处想,感性的阿D往情感上靠。三个人的偏见碰撞在一起,真相才浮现——而且浮出来的不是一个唯一答案,是两三种都说得通的解释。真相不唯一很重要。它让游戏从"我猜对了/猜错了"的考试,变成了"其实怎样都说得通"的荒诞体验。每集结尾,失踪者上线,他不揭晓标准答案,而是用 meta 视角点破一件事:你们每个人推理的,其实都是在说你们自己。

我的初始设定如下:

老A,42岁,国足死忠。从米卢时代入坑,2002 世界杯预选赛是他人生的巅峰记忆。现在边看球边骂边下注,输了发"国足毁我青春"。国企行政混了十五年,自嘲"当教练的命干了后勤的活"。离过婚,有个8岁的女儿隔周见一次,总想补偿但经常忘事。

大B,41岁,土木人转股民。炒股二十年稳赔不赚,从2015年牛市站岗站到现在,账面亏损绝口不提,天天雷打不动看K线。极度抠门——午饭带饭盒,爬楼当锻炼。完美错过了买房窗口(“算了一下不划算”),父母急得在老家给他买了套房。

C君,40岁,后端程序员,存在感平均的隐形人。群里聊半天别人才发现他没说话。经历过一段十年的恋爱,对方最后说"我等不到你了"然后嫁了别人。那之后他话更少了,朋友圈停更三年。

阿D,39岁,四人里唯一的理想主义者。打零工维生——书店店员、婚礼策划、短视频文案、民宿管家都干过。单亲长大,父亲在他六岁时离开,每年父亲节那天一定失联。会写诗,有洁癖,作息日夜颠倒。

每个人我都写了"执念"——那是剧情能自然发展的钩子。导演 AI 生成案件时,失踪原因会自然挂到这些执念上:老A赌球输了躲债、阿D父亲节去找从没见过的异母弟妹、大B某只股票爆仓。线索的偏见投射也有了性格依据。当然你改掉每个人设定也都没问题。同时,我允许AI接入搜索API自己找时事作为开局背景,当然也可以自己输入。

整个项目是一个 42KB 的单文件 index.html,零依赖、零构建、零框架。python3 -m http.server 就能跑。同类开源项目(Holmes、MurderMysteryAI 等)全是 Next.js + LangChain + ChromaDB 重栈,要装一堆依赖、配向量数据库、写 agent 编排。它们很强大,但门槛也高。我把复杂度全压在 prompt 上,工程上保持极简。没有 agent 框架,每次角色发言都是一次无状态 LLM 调用——把完整群聊记录拼进 prompt,让 AI 看到上下文自然接话。没有向量数据库,跨集记忆用一个世界书文本块累积,每集结束自动归档。没有状态管理,游戏进度存在浏览器 localStorage,刷新不丢。多 LLM 后端是必须的。前端抽象了一个统一的 llm() 函数,支持 Ollama 本地、OpenAI 兼容(DeepSeek/Kimi)、Anthropic、以及可选的 Cloudflare 后端代理。你用什么模型都能玩。但想要黑色幽默味道正,还是得用 DeepSeek 或 Claude,别用太弱的本地小模型,小模型太想强调自己知道什么,没有活人的沉淀感。

项目已经开源:github.com/yufree/sanqueyi,MIT 协议。带了一个 Cloudflare Pages 微型后端,给想做零配置线上 demo 的人用——内置了每日预算限流,防止你的额度被刷爆。但大多数情况下,自带 key 本地玩就够了。我也在 Cloudflare Pages 做了个演示页面,当然你得接本地模型或在线模型API才能玩。

高明的作家写好人设与背景,然后一个意外就可以让故事自然发生,就像当年设计地球一样。