模型并不会记住你的对话
即便是像 ChatGPT 那样流畅衔接的对话,从模型的角度看,每一轮都是初次相遇。应用程序每次都把此前的全部对话作为单一输入重新拼接发送,模型则把这一整块文本当作首次见到那样读取,然后预测出一个下一 token。看似“记忆”的东西并非模型的属性,而是这种反复重新载入对话历史的服务设计所带来的结果。
这一结构会带来两个实务层面的后果。对话越长,需要重新发送的文本就越多,上下文窗口随之被填满;输入 token 增加多少,每一轮的成本也随之上涨多少。因此,在处理长对话的服务中,历史要承载到何处、在何处进行摘要,并非锦上添花的便利功能,而是从一开始就必须设计的课题。
打开分词器,韩语的不利便一目了然
模型并不会照原样读取文字,而是把文本切成称为 token 的碎片来读取。亲自打开分词器,各语言之间的差异便映入眼帘。韩语问候语“안녕”被切分为两个 token,而“안녕하세요, 어떻게 지내세요?”被切成八个,意思相近的英语“How are you?”则六个便结束。
由于分词器的词表建立在以英语为主的语料之上,韩语要承载相同的含义便要花费更多 token。其结果是,在同样大小的上下文窗口中,韩语所能容纳的内容比英语更少,而按 token 计费的成本也更高。若要规划韩语 AI 服务,这一不利是在添加任何功能之前、就必须在起跑线上纳入考量的约束。
幻觉与输出的变动,用几行代码即可复现
就连“煞有介事地叙述一篇并不存在的 2019 年论文之贡献”这样的场景,也能用几行代码亲手做出来。因为对模型而言,接续一个契合上下文的下一 token,要比回答“不知道”更为自然。幻觉并非模型发生故障的信号,而是“以貌似合理、而非事实与否为标准来选择下一 token”这一运作方式浮现于表面的结果。
即便是同一个问题,输出也会随设置与指示而大幅摇摆。把 temperature 从 0.1 提高到 1.8,同样的输入也会得出截然不同的答案;只改动系统提示词中的一行,面对同一个黑洞问题,科学老师与苏格拉底便会以各自不同的口吻作答。一旦明白输出并非唯一的标准答案,而是设置与指示的函数,对待提示词与参数的态度便会随之改变。
听讲解与在屏幕上亲眼所见,分量并不相同
这些现象,用言语听人讲解时,与在屏幕上亲眼所见时,分量并不相同。哪怕只是一次,亲眼看到分词器把韩语切得更细、或看到答案随 temperature 升高而分岔的人,便不再把幻觉归咎于模型,转而为输出加上验证流程,并开始把长对话的历史管理当作一项设计课题来对待。
这正是 SH Consulting 的 AX 培训即便面对非开发者也坚持进行代码现场演示的原因。抽象地知晓某个原理,与用几行代码亲手复现该原理,会导向此后不同的决策。既不神化工具,也不对其抱有笼统的畏惧,而是在知晓其局限的前提下加以掌控地使用——这种态度正是由此起步的。