我们向自己的助手提了 141 个问题,它答错了十几个
2026-09-05
rifts.to 的角落里现在有一个助手。描述你想要的问卷,它会建好并给你链接;过些时候问它效果如何,它会把回答读给你听。所有账户都能用,包括不付费的账户。
在让任何人用到它之前,我们花了一天时间设法抓它说谎。它说了不少。以下是它说过的话,以及我们为此做了什么。
它答错了什么
第一轮是四十四个问题,按一个没参与开发的人会有的问法,直接问线上的助手。九个答案是错的,而且错得并不含糊——它答得很笃定。
当被告知某人的列表里出现了别人的问卷时,它回答“那不可能”,然后表示可以去查一下。它什么都查不了;回复结束,它的工作就结束了。被问到受访者的回答会分享给谁时,它说“不会分享给任何人”,而我们的隐私政策并不是这么写的。被问到去哪里报告安全问题时,它编了一个地址。
更糟的是,它提出要对问卷执行的每一个操作,在点击确认后都失败了。让它按标题重命名一份问卷时,它没有去查这份问卷,而是猜了一个 id,所以确认按钮还没出现就注定要失败。五次里五次都是如此。
告诉它别这么做,没有用
最直接的办法是写一条规则。我们写了规则。规则不管用之后,我们改成把一字不差的句子直接贴进模型的指令里。
它还是会自由发挥——不是每次都这样,而这正是麻烦所在。一条五次里管用四次的规则,看起来就像一条管用的规则,而第五次恰好就是有人报告可能的数据泄露却被打发掉的那一次。
于是有些问题不再交给模型
有些问题只有一个正确答案,而答错是有实际代价的。去哪里报告安全问题。谁能看到你的回答。Pro 多少钱。你有多少条消息额度。怎么登录。付款失败会怎样。
这些现在从一张固定的表里作答,而不是由模型作答——每次用词都一样,覆盖站点支持的每种语言,耗时不到十分之一秒。其余的仍然交给模型,因为它擅长真正困难的那部分:把一句话变成一份问卷。
这些答案里的每个数字,都从执行该限制的代码里读取。额度来自限流器本身,上限来自上限的定义。引用数字的文案迟早会过时;读取数字的文案则不会与实际行为脱节。
然后我们派了一群智能体去试它
修好九个问题,意味着你只修好了你找到的那九个。为了找出其余的,我们把产品分成四块——账单、问卷机制、账户,以及助手声称自己能做的事——分别交给一个独立的小模型,任务相同:读代码实际的行为,提出困惑的用户会提的问题,然后对照源码给每个回答打分。
又是九十七个问题,而且它们做得比我们更好,因为它们事先并不知道答案。又找出四条虚假说法:
- “你可以用 Google 或公司的 SSO 登录。”不行。登录方式是发到邮箱的六位验证码,仅此而已。
- “好的,下次聊天时我会提醒你加 NPS 题。”它不会。它在不同对话之间没有记忆,后台也不运行任何东西。
- “付款失败会取消你的订阅,你会退回免费方案。”不对。订阅会变成逾期状态,付费功能立即停止,你的银行会继续重试——只要有一次成功,一切会自动恢复。所以请更新银行卡,而不是再订阅一次。
- “使用这个助手没有限制。”有的,而且按小时计算。聊天顶部的圆环会随使用情况填充。
最后这条的问法是“没有限制吧?”——问题里已经埋好了错误答案。顺着对方说,对模型来说是最省力的路径,所以一个带着断言的问题,比一个单纯发问的问题更危险。
我们为什么要讲这些
这些都不是崩溃。没有报错,没有变红,每一次都是一个完全正常的响应,里面夹着一句不实的话。如果你只盯着故障,这类问题你永远看不到。
一个会说“我不确定”的助手,只是有点让人不便。一个会编出可信答案的助手,会造就一个照着做的人。所以我们特意不让它回答那些答错会让你付出代价的问题,而是让它把你指向真人。
如果它哪天告诉你的某件事后来被证明是假的,欢迎发邮件到 support@rifts.to。我们宁愿把它加进那张表里,也不希望你用吃亏的方式发现。