Jevchat 是一项开源实验,它让 Jev 像聊天机器人一样运行,却不把它包装成传统的语言模型。该项目的核心循环反复提出同一个问题:根据用户的提示以及目前生成的回复,下一个符号应该是什么?Jev 会为所有可用选项分配概率,采样器从中选择一个,而一旦抽到特殊的 STOP 选项,生成过程就会停止。

Jevchat 开源项目卡片,展示如何将 Jev 改造成聊天机器人
Jevchat 项目卡片标明了本文所讨论的开源实验。github.com

在解释完 Jevchat 反复生成下一个符号的循环后使用这张项目图片。

这种设计揭示出“生成文本”与“在可能的续写中进行选择”之间的一个有益区别。在默认的“符号”呈现方式下,Jev 评估的是字母或单词片段等未经包装的选项。较新的“假设”呈现方式则会显示每个选项将生成的完整文本。作者称,对于字符字母表,这种方式大约使 top-1 准确率提高到原来的三倍,并使正确符号获得的概率质量翻倍,同时需要更少的输入 token。这些数字来自项目作者自己的基准测试,并非独立测量结果。

该代码库提供了多种构建 Jev 所需选择的方式。“Choice”围绕整个字母表提出一个问题;“bisect”通过反复询问目标位于较早还是较晚的部分,逐步缩小有序字母表的范围;“buckets”把大型选项集拆分成较小的组;“refine”则重新评估领先的候选项。字母表范围很广,从仅含小写字母和 ASCII 的集合,到包含数千个条目的 token 列表和词汇表。由于某些策略一次无法呈现超过 255 个选项,大型字母表必须使用分桶处理。

这些控制项之所以重要,是因为它们会同时改变模型的任务以及回答该任务的成本。集成方法可以对多个经过重新排序的问题所得结果取平均值,而 beam search 则会同时保留多个候选回复,而不是每生成一个符号就立即确定下来。文档警告说,beam search 在每一步都要为每个存活的候选项消耗一次评分。文档还指出,一旦 beam 宽度超过 1,temperature、top-p 和 top-k 就不再生效,因为此时候选项是按排名选择,而不是通过采样产生。

因此,实际关注点不仅是回答质量,还包括延迟和 API 使用量。Jevchat 会显示每秒生成的符号数、每秒字符数、每次 API 调用的毫秒数、已用时间,以及最新一步中的领先选项。作者明确把这个实验形容为有趣、有些不实用、挺好玩,而不是已准备好投入生产。所提供的代码库没有提供它与普通聊天模型之间的全面成本比较,因此读者不能仅凭这些界面指标推断普遍存在的价格或速度损失。

在应用必须限制模型输出内容时,受限词汇仍可能派上用场。该代码库通过可选字母表和分桶策略支持这种用途,但并未证明这种方法胜过普通模型与验证或 linting 相结合。这一界限很重要:限制选项集可以影响输出形态,但仅靠限制并不能保证正确性、安全性或语法有效性。

该项目还将离线软件测试与实时模型评估明确区分开来。它的 158 项测试使用脚本化的模拟客户端和模拟 HTTP 传输,因此无需 API 密钥或网络访问,就能测试生成循环。真正调用 API 的是基准测试命令。因此,通过整套测试只能证明本地代码符合这些测试的规定,并不能证明 Jev 能生成可靠的聊天回复,也不能证明所报告的质量提升可推广到文档所述实验之外的场景。

对于评估类似系统的读者而言,Jevchat 最有价值的地方在于它透明地展示了系统如何构建,而不是把它当作可以直接替换现有方案的助手。它让采样决策清晰可见,提供了多种搜索策略,并记录了 beam search 在哪些方面改变了解码行为。它没有证明的是广泛的对话可靠性、经济上的实用性,或相对于标准生成方式的优越性。最有依据的结论更为有限:在该项目的字符字母表测试中,把选项从符号改为完整候选文本带来了显著提升,而整个系统仍然有意保持实验性质。