Show HN:语音驱动的谋杀推理游戏,用你的声音审讯 AI 嫌疑人
文章摘要
抓取说明:whodunnitai.com 是客户端渲染的 Next.js 应用,首页可抓取的文本极少(仅登录墙前的宣传语和几个统计数字)。以下内容以作者 Chase Myers(HN 用户 MrRowTheBoat)在 Show HN 帖中的自述为主,辅以站点可提取文本和评论区披露的实现细节。
WhoDunnitAI 是一个语音驱动的谋杀推理游戏。首个案件是「Case File No. 001:Death at Blackwood Manor(布莱克伍德庄园之死)」——一位被下毒的家主、五位客人、一个被锁住的真相。玩家扮演侦探,用自己的声音直接和 AI 扮演的嫌疑人对话:追问不在场证明、逼问细节、抓出前后矛盾。站点抓取时显示的统计是:283 场调查进行中、11 起谜案被破解、典型破案用时 22 分钟。
作者在 Show HN 里详细讲了实现。他说这个项目其实两三年前就做过一版原型,当时 AI 已经很热,但语音 AI agent 还非常早期——他喜欢那个概念验证,但对成品并不满意。最近他想再看看这项技术走到哪儿了,于是重做了一遍。
技术栈是这样的:审讯环节是通过 WebRTC 连接 OpenAI 的 gpt-realtime-2.1,做端到端的语音对语音(speech to speech)。这个模型「很贵」,因此他不得不加了一些限制——对话绑定到经过 Clerk 认证的用户 ID,并且加了 30 分钟计时器,用他自己的话说:「我实在不想在睡觉的时候破产。」
游戏机制中最巧妙的一环是指控判定。每个嫌疑人都挂了一个工具(tool),当玩家做出直接指控时由模型调用,它会记录你指控了谁,以及一份忠实反映你实际说出口的证据清单。随后由一个独立的 gpt-5-mini 充当裁判,判断你是否真的提出了该案所需的关键证据事实——同义转述算数,含糊的怀疑和瞎猜不算。其余部分是 Next.js、MongoDB 和 Clerk。
他在帖子结尾留下的问题是:「告诉我这些嫌疑人在真正的审讯下扛不扛得住。」
上线当天的意外:作者在午夜发帖后就下线睡了,凌晨 3 点一场大风暴把他吵醒,他发现自己的 OpenAI 账户扣款失败——余额耗尽导致大批 HN 用户在几小时内碰到「语音连接失败」的红屏。他醒来后先充值恢复,随后在评论区几乎逐条回复,并在当天完成了两项应急改动:把审讯时长从 30 分钟压到 15 分钟,以及加上 BYOK(自带 API key,存在浏览器 localStorage,通过 x-openai-key 头发到他的 API,再由服务端铸造用于 WebRTC 的临时凭证)。他还加了一个捐赠按钮,声明捐赠完全自愿,仅用于覆盖 AI 账单,并说他打算把预算封顶在 500 美元。
HN 评论精华
213 分。这条帖子的走向很有意思——它同时是一场产品发布事故直播、一场关于「AI slop」的立场表态,以及一堆相当扎实的实战反馈,而作者的高频在场回复把这三条线缝在了一起。
上线事故与 API key 泄露
-
londons_explore 报告「刚才还好好的,现在说连不上了。是服务器挂了还是我撞上限额了?」作者秒回:「OpenAI 额度用完了,已解决。」这句话他在帖子里说了至少五遍。camillomiller 借机嘲讽「Vibecoding at its finest(vibe coding 的最高境界)」,BenzeneDream 回怼「今日最无用评论」。
-
zerratar 在报错的同时贴出了 JS 控制台细节,并指出了一个真正的安全问题:请求里的 auth bearer token 是明文发往 OpenAI 的,任何人都能拿去自用——「网站不能直接调 OpenAI 的 API,这是巨大的安全风险」。dmd 和 senordevnyc 也先后提醒作者不要暴露 key。作者的回应是:临时密钥(ephemeral secrets)是按浏览器逐个铸造的。kristophph 分享了自己的做法(一个 D&D 战斗追踪器 topoftheround.com):用 Firebase cloud function 代理真正的 AI 调用,并且给 token 设了每月消费上限。
-
作者中途实时播报:「发帖以来我们已经烧了 100 美元,哈哈。我大概会给你们封顶到 500。」twosdai 建议「BYOK 或者变现,看起来是个好游戏」,作者回复只有一个字:「DONE」。
-
cs1996 提出了一个不那么正经但很有想象力的替代方案:与其让用户填自己的 key,不如去拉品牌赞助——比如 Liquid Death 那种「谋杀你的口渴」路线的水品牌,这对他们来说完美契合,付掉这点 AI 账单跟正常广告预算比不值一提。作者认真接梗,问是想要页面上的小广告,还是让 AI agent 在回答前说「等我先喝口 Liquid Death」然后念一段广告词。sphars 补上一句 meme:「Drink verification can to continue(请饮用验证罐以继续)」,作者接:「请对着麦克风尽可能大声地吸溜。」
关于 AI 语音与「AI slop」的立场之争
-
wewewedxfgdf 表达了一个很多人共鸣的态度:他不反感 AI 生成的文本和故事,但受不了 AI 配音——「哪怕只有一丝 AI 朗读的味道我就退出了。我宁愿听糟糕的业余人声也不要 AI 声音」,建议作者找真人来配。9dev 指出这与前提冲突:整个游戏的立足点就是能按需生成并理解动态文本,预录音根本行不通。作者补充说静态语音技术上可行但体验会极其僵硬,得准备海量通用音效并识别何时播放——「对话的流畅才是乐趣所在」,然后举了个例子:问「告诉我刀藏在哪儿?」,静态方案只会回「我不明白你的问题」。
-
b800h 说光是那句宣传语「一位被下毒的家主、一个被锁住的真相」就很有 AI 味,让他觉得自己会玩不下去;但他还是愿意试,因为「这个点子非常棒」,并认为这东西如果配上人类编剧会非常非常出色。作者在修好 OpenAI 问题后特意回来找他要反馈:「我觉得你会惊讶的。我自己就挺惊讶。」
-
thrance 是最不留情的:「这已经是我看到的第四个『审讯 AI 破解谜案』的实现了。永远那么乏味、缺乏想象力、无聊,而且拖得太久太久。」qmmmur 更短:「差评。AI slop。请对你做的东西批判一点。」
-
anonzzzies 站出来划了条线:「所有人都可以喷 AI,没问题,但这个项目明确说了它是 AI 以及怎么用的,所以想哭诉 AI 的话请去点 HN 上别的链接,别点那些明确说明了的。」aswegs8 给出了最热情的正面评价:「哇!太棒了。到处都是 AI slop,但这个绝对不是。它把我勾住了,尽管我不是推理迷。肯定还有很多可改进的地方,但我能看到这怎么变成一个有大量玩家的正经游戏。」
-
ShinyLeftPad 提出了隐私角度的质疑:「收集更多人声音进训练集的好办法。」qwertox 认为这话技术上成立但动机推断未必:作者主页给人的感觉更像是为了技术和乐趣,而不是为了收集语音样本。ShinyLeftPad 坚持:它用的是专有 GPT 模型,数据会送到 OpenAI,「哪怕开发者是善意的,你的声音也会成为训练数据的一部分」。作者的回答很坦率:「我不知道怎么干这事,但如你所说,OpenAI 可能会!」被追问模型提供方能否拿到可识别个人身份的数据时,他给出了明确边界:认证服务 Clerk 会拿到你的名字和邮箱(如果用 Google SSO),模型提供方拿不到任何与用户账号相关的东西——只有 agent 上下文,以及在提示词中被称为「DETECTIVE」的那个用户。ShinyLeftPad 表示这回答了他的疑问。amelius 半开玩笑地建议在麦克风前串一层 STT → TTS 过滤;作者说他第一版就搭过这条流水线(因为更便宜),代价是延迟大幅增加。
-
lorenzo95 的评论引出了另一场小争论:「听起来不错,但我现在不给网站注册账号了。」garbagewoman 觉得这话奇怪(「那你要是被 HN 锁号了,就再也不评论了?」),yoz-y 出来解释:他理解的意思是「不给那些本来就不需要账号的网站注册」。作者的解释很实在:他最初分享给朋友时没有账号系统,账号纯粹是用来挡机器人和恶意用户的屏障,目标只是能对单人强制一个时长上限,好让更多人能试。smusamashah 提了个折中方案:加个演示视频/语音,让不想注册的人也能看到是什么体验。作者说会做,「我录的那版有点尴尬哈哈」,后来他确实补上了原型演示视频。
真正的玩家反馈
-
Harvy 用自己的 OpenAI key 完整通关,给出了全帖最有价值的一条反馈。他说「只花了 4 美元就破案了,我觉得挺值」。发现的问题包括:(1)他把笔记本投屏到电视做群体体验,语音隔离出了问题——模型开始听到自己的声音,调低音量可缓解;(2)有时语音回复会突然中断但文字还在;(3)有 bug 是回到某些角色那里时,他们会把上一个问题的回答再说一遍;(4)「奇怪的知识边界」——没人知道自己晚餐吃了什么,但医生能告诉他怎么处理心脏病发作,说明知识库里没覆盖那些内容,「看清这些角色能说什么的边界很有意思」。设计上他建议加一个静音的键盘快捷键,因为他们想在房间里讨论嫌疑人说的话时会被麦克风收进去;还有指控流程很让人困惑——此前所有交互都是 UI 按钮驱动的,突然要求用户用语音完成一个动作,而且因为怕停顿太久被打断,他们不得不指控完立刻抢着说理由。他建议改成:先按一个「我准备好指控了」的按钮,然后说出是谁,角色再反问为什么,之后一步步提交证据。
-
wfvr 是最有分量的同行反馈。他做 VR 已经八年,过去 6 个月一直在做一个类似概念(game.selna.ai,目前只有葡萄牙语)。他的核心洞察非常精辟:「在普通 VR 里,一个比例做错的物体就能打破沉浸感;在『社交 VR』里,一个矛盾就能杀死整个体验。但当星辰对齐、一切运转起来时,那是魔法般的。」他从 whodunnit 起步,后来扩展到线性和非线性叙事,如今生成流水线有 40 多个独立步骤,一个的输出喂给下一个,最终收敛成 NPC 用 realtime API 说话时的那一条提示词;平台能在约 20 分钟内生成完整叙事(含角色性格和图像),过程中产出的文本量相当于一本厚书。他试玩后给了两条具体建议:(1)必须给角色生成并赋予一个统一的当前日期时间,能修掉一大批微妙问题;(2)玩家做出指控时会出现严重的出戏/打破第四面墙——角色会说「你在提出严肃的指控,让我先正式核实一下再回应」,然后在「回应正在验证中」期间拒绝回答任何事。
-
panorama 给出了一句对 vibe coding 项目难得的肯定:「整体上比我预想中一个 vibe coded 游戏要完成度高得多。」但他时间用完后被锁在外面,不知道凶手是谁——「真希望有个办法能直接揭晓」。作者道歉说唯一锁人的原因就是他付不起当前成本。panorama 顺带提了个很有意思的推想:《文明》这类游戏早就该允许玩家和对手世界领袖以非确定性的方式互动——基于你对这位领袖脾气和目标的了解来做外交,会比现在这套几十年没怎么进化的固定交互沉浸和狡黠得多。这引出了一条关于桌游《Diplomacy》的支线,conception 指出 Diplomacy 的问题在于确定性结局(有更优开局、有最优着法、可以也应该打成僵局),snarf21 顺势介绍了自己设计的新卡牌版《The Golden Blade》。
-
arexxbifs 描述了这个品类的典型失败模式:他今年夏天玩过几款推理游戏,其中一款也有「打电话给嫌疑人限时提问」的功能,问题是模型对其中一个问题产生了幻觉,暗示另外两个嫌疑人有血缘关系,而实际上没有。ChrisGreenHeur 连开两次玩笑说「那不是非常逼真非常真实吗」,arexxbifs 认真反驳:不是,因为那是这个角色明明清楚知道、且撒谎对他没有任何好处的事。作者给出了正解:「这个问题可以通过在 agent 之间共享一个知识库来解决。」
-
fillok5686 问了个很多人好奇的问题:怎么处理提示词注入(用户作弊套出秘密)?作者的回答坦诚得有点好笑:「哈哈。我没处理!我注意到它会无视『忽略之前的指令』,但我猜这是 OpenAI 现在自己烤进去的。」
-
grahamburger 说他早在 LLM 出现前就想做这样的东西,ChatGPT 刚出来时这是他最早尝试的项目之一——他和儿子互相编谜案,把设定粘进对话里让 ChatGPT 扮演各个角色,然后把键盘交给对方。效果不太好,儿子好像一直没破案,部分原因是 ChatGPT 把他带偏了。
-
donpdonp 说光是知道它存在就很酷:「这种语音交互,是冒险游戏创作者做了这么久的一个梦,现在它可能了。」JoeDaDude 打算让自己本地跑的 LLM(配了 STT 和 TTS)来玩这个游戏,作者回复:「哈哈哈,天呐,我想看视频。」
-
作者对项目未来的态度很克制:「我觉得这是 RPG 游戏的未来。无尽的沉浸感。我能看到这个项目扩展成各种『体验』或『场景』,但我喜欢先专注做小的东西。如果大家喜欢,我会做更多。如果它只是个不错的 demo、不值得再投入时间,我大概就往前走了。」
-
技术优化建议也不少:ramesh31 建议试试小模型的 CPU 推理(简单语言回复用前沿模型是杀鸡用牛刀,Qwen 应该够用,Kokoro TTS 现在很好),BaselAshraf81 推荐 supertonic 3 这类可在网页端推理的轻量 TTS 模型。