助手直接引用文档,而不再转述

钱包内置的助手可以用英语、俄语和乌克兰语回答关于网络和钱包本身的问题。它的构建方式与大多数同类助手不同,而这种差异在第一个刁钻问题上就会显现出来。

问题出在转述

常见做法是把检索到的段落交给模型,让它来解释。我们一开始也是这样做的。一个 17 亿参数的模型转述得干脆又自信:它把 .agent 说成多签金库的付费名称——那其实是 .vault;还把地址分成了根本不存在的「开放」和「封闭」两类。

没有任何指标发现这些问题。我们设置的检查标准只核对某些禁用词是否缺席,而不核对句子是否属实——一个自信、流畅却错误的句子,本来就不含任何禁用词。

于是模型不再撰写答案。它现在只做一件不可能错得对我们有利的事:指出哪一段检索结果回答了这个问题,或者说明没有任何一段能回答。选择不是创作。你只能在已经写下的内容中做选择;凭空编造的东西则无从核对。

数字从不经过模型

余额、手续费、最低质押额、你发送和收到了多少——每一项都由节点计算完毕后传来,填入固定的句子中。模型看不到这个数字,也不会写出它。

我们刻意不在助手内部汇总转账。在链自身的账目之外再养一套资金算术,迟早会与链上的结果产生偏差,而偏差出现的那一天,不会有任何提示。因此,总额有了专属的节点端点,它排除记账标记的方式与交易列表完全一致——数字和列表由同一个人阅读,所以二者必须吻合。

拒绝由规则决定,而不取决于模型的情绪。签署转账的请求每一次都会被拒绝,而不是几乎每一次。

它逐个界面地了解钱包

问「发送」按钮是做什么的、「恢复」标签页有什么用、为什么一笔转账处于 held 状态,或者是否任何人都能注册 AI 模型——答案都来自为该界面专门撰写的条目,并以你提问所用的语言给出。

对按钮的描述最先过时。按钮被改名、挪位或删除,而文字却留了下来,自信地错着。因此,每个条目都标明它所描述的路由,并由两项测试把两端绑在一起:条目必须指向应用中确实存在的路由,而每个界面都必须至少有一个条目。标签页一改名,构建就会失败;新标签页没有描述就无法上线。

这有多必要,在我们自己的代码仓库里就看得到。一个知识库文件夹在那里放了好几个月,描述的是我们在春天就已替换掉的共识机制,没有任何代码读取它,也没有人注意到,因为没有任何东西可以与之对照。

被测量否决的功能

原计划是:当排名靠前的候选项得分接近时,助手会反问你指的是哪一种理解。我们做了测量,然后放弃了这个想法。

一个正确的选择,其分差可能只有 0.014;一个错误的选择,分差却可能达到 0.093。两种分布完全重叠,没有任何阈值能把它们区分开。更糟的是,最自信的错误恰恰出现在根本不存在合适工具的地方——任何分差都永远无法捕捉到这种情况。实际效果是,这个功能把正确答案变成了反问。

测量工具本身需要的修补,不比被测对象少。在简短的模板中,乌克兰语与俄语逐字相同,它却因此扣分,而同一个字符串根本不可能只属于两种语言中的一种。它在评判知识库答案时,仿佛本该给出一个模板答案。而且每当所需的某个导入失败时,它就悄悄退化为猜测,因为失败被吞掉了。一个偏向于你的测量工具,比没有工具更糟。

现状

在一个实时节点上,用三种语言测试了四十五个问题:规则拒绝 100%,模板数字 100%,三种语言各自的回答语言正确率均为 100%,捏造为零,路由 100%。

大多数回答只需不到一秒,因为在大多数情况下,模型根本不会运行。

全部新闻