跳到主要内容

系统提示词提供的人格,模型每次都会以同样的方式选择

· 阅读需 11 分钟
Tian Pan
Software Engineer

我最近接触的一个产品团队针对回复人格设定(简洁、详尽、对话式)进行了一项为期三周的 A/B 测试,覆盖了所有用户群组。系统提示词描述了这三种设定,并要求模型选择最匹配用户的那一种。当他们打开数据集编写分析报告时,一个数字让他们愣住了:“详尽”组占据了 91% 的流量。另外两组的比例小到几乎可以忽略不计。

他们的实验平台没有标记任何异常。没有触发任何警报。流水线完全按照他们的指令运行。三周所谓的“多人格测试”产生了一个只能告诉他们关于“详尽”信息的数据集。另外两组样本太少,根本无法进行任何统计推断。

房间里的第一直觉是提示词需要改进——更好的指令、更清晰的人格区分、为对话式场景提供更刻意的示例。如果是在十年前基于规则的路由器中,这个诊断是正确的。但对于模型来说,它是错误的。提示词不是变量,路由器才是。

当模型充当随机分配器时,它并不随机

如果你读过关于因果推断的论文,你就会知道 A/B 测试的金科玉律:实验组分配必须独立于实验单元。你必须在你正在衡量的系统之外掷硬币。一旦你让你正在衡量的系统参与掷硬币,硬币就不再公平了,你认为你正在进行的对比实验就不是你实际进行的对比。

要求语言模型选择一个人格设定正是违反了这一规则。模型不是硬币。它是一个高维函数,其对自己行为的先验是由数以 TB 计的训练数据塑造的。当你写下“根据用户选择简洁、详尽或对话式”时,你并不是在委托一个随机过程。你是在顺从一个在你的产品诞生前几个月就已经定型的学习偏好。

关于这一点的文献研究并不晦涩。LLM 输出中的冗长偏差(Verbosity bias)在不同模型家族和训练方案中都有记录——RLHF、DPO 以及对长思维链(chain-of-thought)轨迹的监督微调都强化了模型趋向于更长、更详尽回复的倾向,通常不考虑增加的长度是否真的提高了质量。根据任务和提示词的不同,冗长补偿(Verbosity compensation)的频率在 13.6% 到 74% 之间,即使提示词明确要求简洁,这种模式依然存在。模型对输出长度的先验并不弱。在许多生产环境中,它是房间里最强烈的信号。

因此,当你的系统提示词提供三个设定作为自由选择时,模型并没有在运行你的实验。它是在对自己的训练偏好进行一项观察性研究,并像这是用户要求的反馈一样汇报结果。

为什么你的实验平台没有察觉

故事中最令人不安的部分不是不平衡的发生,而是在一个理论上配备了检测手段的平台中,这种不平衡竟然连续三周未被发现。

样本比例失调(Sample Ratio Mismatch,简称 SRM)检测是防止这种失效模式的标准护栏。针对预期分配进行的卡方检验(chi-squared test)会在累积流量上持续运行,并拒绝为分配偏差超过合理阈值的实验评分。SRM 检测器并不罕见;它们内置在每一个现代实验平台中,建议的显著性阈值通常设定在 p < 0.01 左右。

检测器没有触发的原因很简单。平台监控的是用户被分配到的组别,而不是模型选择的组别。从平台的角度来看,进入实验的每个用户都被分配到了一个单一的“人格路由”处理中,而最终产生的设定被视为模型回复的一个属性,而不是实验分配的一个属性。真正起作用的随机分配器(模型)位于平台监控的随机分配器的下游。

这就是结构性的教训。只有当 SRM 检测正在检查的分配正是驱动对比的分配时,它才有效。如果实验的有效组别是在平台随机分配器下游的一个不透明函数内部确定的,那么从结构上讲,SRM 是无法察觉的。平台没有坏。它只是对一个从未被问及的问题保持了正确的沉默。

架构修复:在模型外部进行路由

最干净的修复方案也是最乏味的。人格设定分配应该由你的应用程序在调用模型之前,使用平台的随机分配器来执行。选定的人格设定随后作为模型必须服从的参数传递到系统提示词中,而不是作为一个供其选择的菜单。

在实践中,区别如下。错误的写法是系统提示词说:“根据用户的明显偏好,选择简洁、详尽或对话式。” 正确的写法是系统提示词说:“请以 {persona} 人格进行回复。定义:{definition}。” 人格变量由负责分配产品中所有其他实验组的同一个路由器填充。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates