返回博客
当模型编造时:LIA 如何防范
安全与隐私4 分钟阅读

当模型编造时:LIA 如何防范

问题

语言模型不是故意说谎。它预测最可能的下文;缺少某个信息时,就用看似可信的东西来代替。在普通对话里,这只会造成一个细节错误。在一个会行动的助手里,后果就具体得多:一条路线直接把「张伟」这个名字本身当成了目的地,或者编出一个解释,比如「你的日历没有配置」,让你去找一个根本不存在的故障。这样的错误一旦说得满怀自信,就比一句简单的「我不知道」更危险,因为你会据此行动。

我想要的

我想要一条简单的规则:LIA 只把她从工具那里收到的、在对话中读到的或计算出来的东西,作为事实告诉你。能在不猜测你意图的情况下修复的,就修复。其余的会被拒绝,并附上一条帮助模型自我纠正的消息。

行动之前

  • 编造的选项会被去掉。如果模型给工具加了一个不存在的选项,比如工具不认识的一种排序方式,它会在调用前被删掉,计划照常进行。
  • 数字会被拉回边界之内。向一个只接受二十条的工具要一百条结果,得到的就是二十条。一个不靠编造就无法纠正的值,比如格式无法识别的日期,仍然会作为错误报告出来。
  • 名字不是地址。需要地址或电子邮件的参数会在调用前一刻被检查。如果其中包含对话中提到的某个人的名字,调用会在产生任何花费之前被拦下,并附上一条清楚的指示:先取得这个联系人的地址。有疑问时,检查会放行,以免妨碍正当的请求。
  • 缺失的值就保持缺失。当一个步骤在列表上重复某个操作,而某一项没有预期的字段时,这个参数会留空:工具不会收到一个写出来的「null」字样,而是使用它自己的默认值。
  • 计划会被重读,看缺了什么。审阅者很容易看出计划里有什么,却很难看出它漏掉了什么。所以 LIA 的审阅者会先列出你的请求所要求的每一件事,再检查是否每一件都有对应的步骤,然后才给出意见。

回答之中

当 LIA 告诉你一个时间、日期、数字、名字或地址时,这个值必须出现在本轮的数据里、最近查阅过的内容里,或者一字不差地出现在之前的某条消息里。否则,她会告诉你缺少这个信息,并提议去查。她刚刚读过的内容会在接下来几轮里保持可用:像「那它几点开始?」这样的追问,就会以数据本身为依据。

需要精确的东西会被计算出来。模型预测的是文字,它不做算术。百分比、距离某个日期还有多少天、货币换算,都交给专门的工具:用精确的十进制计算,并在不得不四舍五入时说明;在两个真实时刻之间计算时长,包括夏令时切换;以及欧洲中央银行的参考汇率,并注明日期。

出现失败时

一个工具失败时,LIA 会通过唯一的一个渠道告诉模型,这个渠道会指出是哪个工具,并给出失败步骤的确切数量。所以模型不必去猜发生了什么。一个成功了一半的计划,会把成功的部分交给你,并说明哪些没有成功。

另外两条规则也朝着同一个方向。仅凭审阅者的意见,不足以宣布某个操作被阻止:只有一项能力根本没有启动过,才能说它被阻止了。而一个已准备好的请求、一个等待中的确认和一项已保存的更改,是三种不同的状态,LIA 在汇报时不会混为一谈。

当 LIA 在 ReAct 模式下自己连续调用工具时,她出发去找的每一项信息,最终要么拿到了,要么被声明为缺失,并附上她尝试过的做法。一个看不懂某个值的工具会拒绝它,并说明期望的格式。

局限

  • 这些保护措施减少编造,但不能消除编造。模型仍可能把一条它正确收到的数据转述错。
  • 对名字的检查只认识本轮中识别出的人。重要的操作无论如何都要经过你的确认。
  • 如果你的管理员启用了它们,你邮件上的标签(类别、紧急程度、疑似诈骗)仍然只是提示:没有警告并不证明一封邮件是安全的。

延伸阅读:掌握主动,又不被打扰:LIA 如何征求你的同意;LIA 的指令,像代码一样编写和审阅。

#hallucination#defense#parameter-stripping#hitl#robustness#planner