AI 手记AI 手记

让模型说「我不知道」,比让它假装知道有用一万倍

3 分钟1 阅读

我做一个知识问答功能的时候,卡在一个两难上。

模型答错,我能接受——没人是全知的。让我受不了的是它答错时的样子:它编。它用一种笃定的、自信的语气,把一个根本不存在的事实讲得有鼻子有眼。比无知更糟的,是自信地误导。

用户信了这种回答,比用户得到「不知道」三个字,危害大十倍。

加一句「可以认怂」

我在提示词里加了一句话:「如果你对答案不确定,请明确说明你不确定,或直接说不知道,不要编造。」

就这一句。结果很有意思——

我跑了一批测试题,发现模型的「正确率」几乎没变。这有点出乎我意料,我本来指望加了这句它会答得更好。但仔细想想也对:加这句不会让它突然学会本来不会的东西。

真正变化的是「自信的错误」大幅减少了。它开始把不确定的地方标出来,甚至直接拒答。它没变聪明,但它变诚实了。

为什么诚实比正确更值钱

这事儿想通了就一通百通。

一个模型的正确率是固定的(在它能力范围内)。你能改变的,是它怎么处理「超出能力」的那部分。这部分它要么编,要么认怂。

  • :给用户一个看起来对其实错的答案,用户照做,踩坑,损失,还以为是自己理解错了。
  • 认怂:给用户一个「我不确定」,用户知道要自己再查,至少不会被带沟里。

对一个真实使用场景,后者的危害远小于前者。一个会喊「我不确定」的助手,是个可纠偏的助手;一个嘴硬的助手,是个埋雷的助手。

让它敢认怂的三个写法

光加一句「不确定就说」还不够,它有时候还是会硬撑。我调了几版,发现要让模型真的敢说不知道,得满足三个条件:

  1. 明确允许:直接写「不知道是可以接受的答案」,消除它「必须回答」的压力。模型被训练得爱回答,你要主动解除这个压力。
  2. 给认怂的格式:别光说「可以拒答」,给它一个拒答的模板,比如「我对这部分不确定,建议查 XX 资料」。有格式它就敢用。
  3. 不要惩罚语气:如果你写「请尽量回答,不要轻易说不知道」,它就又回去硬编了。要让它知道,认怂不是失败。

一个反直觉的结论

很多人调提示词,目标是让模型「答得更对」。但我这次的体感是:在能力边界附近,你调不出更高的正确率,那是模型的天花板。

你能调出来的,是让它在不会的时候选择诚实。这个选择,比硬挤出来的几分正确率有用得多。

一个敢说不知道的模型,是个你可以逐渐信任的模型。一个嘴硬的模型,永远是个你要提防的模型。信任,比正确率值钱。

相关阅读