开发日志12: 给AI做个错题本
人会犯错,可能是因为技能不熟练,或者对这件事投入的注意力并不匹配它本身的难度要求。同样的,AI也会犯错,甚至不需要探究为什么,这本就是我们每个用AI的人都可以观察到的客观事实。 就像人的注意力有限一样,AI在面对一些冗长的文本的时候,难免会因为算法的设计,有意丢弃一些边缘信息。它在带来整体能力提升的同时,也强化了一些Edge case(边缘场景)的风险度。 我们知道,人总会犯错,所以除了刻意避…
人会犯错,可能是因为技能不熟练,或者对这件事投入的注意力并不匹配它本身的难度要求。同样的,AI也会犯错,甚至不需要探究为什么,这本就是我们每个用AI的人都可以观察到的客观事实。
就像人的注意力有限一样,AI在面对一些冗长的文本的时候,难免会因为算法的设计,有意丢弃一些边缘信息。它在带来整体能力提升的同时,也强化了一些Edge case(边缘场景)的风险度。
我们知道,人总会犯错,所以除了刻意避免自己犯错之外,还会准备一些犯错之后能够挽回的措施,或是犯过一次错之后,以后就会吸取教训的举措。不论怎么讲,我们常把"吃一堑,长一智"挂在嘴边,这并非是提醒我们不要犯错,而是在说,既然犯错在所难免,我们就把犯错当成一次尝试,当成一次排除不可能选项的经验。就像《福尔摩斯》里说的,当排除掉所有不可能,唯一剩下的那个,即使看似毫无道理可言,也是唯一的解释。
那我们便回头想想,我们在面对犯错这个问题的时候,都给自己准备了哪些补救方法呢?
第一个我想起来的便是错题本。尤其是对于还在读书阶段的青少年,错题本的重要性,对于一个志在拿高分的学生来讲,是必不可少的工具。而在职场中,它可能就变成了一些不断更新的文档,变成了管理里的规矩和守则。比如高空作业的时候,我们发现不带安全绳会放大坠落的风险,所以就在守则里写上,必须戴安全帽、系安全绳。再比如,打电话、看手机会分散注意力,所以我们就强制要求开车的时候不能接听电话。这些成文的规则,就是我们犯过错之后总结出来的经验教训。
另外像一些访问量比较大的网站,都会有FAQ,也就是frequently asked questions,顾名思义就是经常被问到的一些问题。比如会员各个等级都有什么样的权益?怎么样充值?怎么样销户?或者在操作的过程中有哪些容易引发误解的地方?而这份清单也是根据用户不断的反馈,把越来越多频繁出现的问题,以这种问答的方式,展示给还没有遇到过这些问题的用户,让他们可以顺利一次通关。
所以你看,不管是在工作中、学习中,还是生活中,我们的一些流程,其实要面对的是能力层次各不相同的群体。但他们有一个共同的特征:我们不强求每个人都有同样高度的注意力,不强求每个人都有超过角色所需能力范围之上的能力匹配,也不需要每个人每时每刻都保持百分之百的热情和百分之百的注意力,我们只是从客观上把一些犯过的错写下来,做成规范,从源头上避免二次涉险,另一方面也把它做成提醒,让我们学会在没有足够能力储备的情况下,也能以最少犯错的代价开始某件事。
那么我们是不是也可以照着这样的范式,让AI的每一次尝试都从穷举的状态,细化到有限的选择当中,而且在它选择之前,就先把那些容易犯错,或者说已经犯过错的选项砍掉。就像给它做了一个错题本,它在做这件事情的时候,就会首先知道哪些规则不能碰,哪些思考方式是错误的,哪些尝试已经被证明是有问题的。
但是和生活中的情况一样,随着我们不断推进自己的工作流,那些老的规则可能逐渐已经不适应新的工作场景,我们就需要适时更新。就像学生的错题本,这些错题我看了十遍二十遍之后,相关的知识点已经内化成我的能力,对我就不再有什么价值了,再去看它只是浪费精力,所以我需要实时根据自己新犯的错,把那些老的错题清理掉,再把新的错题放上去,保证这个错题本是一个实时更新的、动态的工具。
所以我们在和AI交流或者使用AI工具的时候,一方面需要有这样一个错题本,而且能让AI在合适的时机读取这个错题本,另一方面,也需要有一个机制来不断更新这个错题本。一来对它进行勘误、检验,看它本身是不是也有纰漏,二来也对它实时更新,让它保持最新状态,适配最新的工作流。
所以我做了两个skill(技能),一个是KB,也就是knowledge base(知识库)的缩写,另一个是collect lesson(收集教训)。前一个负责查询,后一个负责收集错题。我之前也说过,这些skill的使用机制,分为主动和被动两种方式。对于错题本的这两个技能,KB应该更多地被被动触发,也就是在对话中,模型要去探索、调研的时候,除了调研网上的资料,除了调研code base(代码库)里的代码,除了代码库里面的文档体系,还要补充上我们给它的错题本这一集合。所以我一般的调用场景,是在写计划之前自动触发它,这时候它已经读取完被设计要读取的那几个部分,再加上我们的错题本,就可以进行查漏补缺。
但是有个需要注意的问题是,模型被设计来开展它能力范围内的任务时,比如说网上查询、code base查询,它都有自己优化过的格式或者规则,能够既高效又完整地完成任务。所以对于我们这个错题本,我们也需要有意设计一下格式。首先它应该有一个表意明确的文件名,让模型一看就知道这段文本讲的是什么,能做出初步判断。其次,它还需要在开头部分对整个文档做第二层摘要,让模型再一次确认这个片段是不是需要读取的内容,再给它打上一些标签,附上一些关键词,就能在整个任务启动之前做到精确匹配。然后第三层是文本主体,讲述这个错题的来龙去脉,正确的做法是什么,为什么会犯错,以及当时犯错的场景或者例子是什么样的。最后再给它做一个类似Obsidian(黑曜石笔记,一款支持双链的笔记软件)的双链,把相关的错题关联过来,这样就能做到举一反三。有些错误可能比较类同,但犯错的场景不一样,或者触发错误的方式不一样,这样就可以互相关联。或者这个错题有一个非常类似、处理方法却大相径庭的特例,那么关联过来之后,模型顺藤摸瓜去读一下,就能顺便排除掉另外一种容易混淆的极端情况。
说完了错题本怎么检索以及它的格式之外,我们还需要来讲讲怎么收集错题。对于我们人来讲,最难的不是知错就改,其实是"知错"本身,好多时候你根本不知道自己犯错了,所以才会循着错误的路线一直往前走。而且自己给自己改错,在逻辑上也存在局限,因为你所有的认知都是指向那个错误的观点,那些证明它有问题的证据和事实,在你脑子里的权重占比非常小。这和大模型的情况也比较类似,如果它做出了一个错误的决定,就会出现一种类似思维滑坡的现象,它所有现有的证据都会进一步证明它所做的这个决定是正确的,而那些证明它有问题的论据材料反而会被降低权重,因为选择已经做出了。这样越往前走就像滚雪球一样,错误会逐渐累积,那些反方的证据会一再被降权,最后变得微不足道,便驶上了持续犯错的单车道。
我们一般说能让人快速停止犯错的方式,便是找一个朋友或找一个导师,所谓旁观者清,他作为局外人,能一眼就看出你哪些地方有问题,因为他所处的视角在你的场景之外,所以能看到全局的状态。所以当模型犯错的时候,我们作为使用者和监督者,就需要及时发现。即使我们不能够准确地说出来错误是什么,也可以通过点出错误的现象,或是保持对错误的怀疑态度,让那些被降权的证据的权重得到加强。你再让大模型重新复盘一遍的时候,它就会重新强化这些边缘材料,从而做出和之前不一样的判断,用这些对每个证据新的权重得出新的结论。如果符合我们对它的预期,也就是找到了错误的根源。这时候我们需要主动调用collect lesson这个skill把这条错误记下来,按照之前固定的格式整理好之后,再去手动搜索现有的错题本,看是不是之前有类似的问题,或者稍微有点关联的内容,然后把它们做成双链,形成一个交叉的因果链条。甚至可以把本次对话做过的一些计划或者实时文档,也链接到这些错题本里面作为引用,这样便能够有更多的上下文来还原当时犯错的场景。
做完了错题的收集和错题的调用,我们便能够逐渐通过这两步的循环,让AI自己给自己建立一个错题本。甚至也可以进一步扩展,不需要等到真的犯错才去记录,碰到某些有价值的想法、比较罕见的Edge case,也把它记下来,避免以后碰到的时候再花精力、花时间去调研、去核实。
评论Comments
加载中…Loading…
留下评论Leave a comment