怎么调教出一个聪明的AI聊天助手?
在调教 AI 之前,我们先要了解 ChatGPT 存在的局限性。它们背后的大语言模型,是用海量文本训练出来的,因此擅长模仿人类语言表达,也从那些内容里学到了不少知识。
但回应都是根据提示,以及前面已生成的内容,通过持续预测下一个词的概率来实现的,同时对于不了解的领域,它们并不知道自己缺乏那方面的知识,仍然在瞎逼逼的同时,还在猜后面应该说什么,加上生成过程中也没有反思能力,所以会经常看到胡说八道的同时还充满着自信。
1、提示工程(Prompt)
「提示工程」就是研究如何提高和AI的沟通质量及效率的核心,关注提示的开发和优化,提示就是我们给AI聊天助手输入的问题或指令,AI会根据提示内容给予回应。
为了调教 AI 给出想要的回答,第一个办法是用小样本提示。
我们很多时候都是直接丢问题或指令给 AI,这种属于零样本提示,就是没有给 AI 任何示范,不一定和我们想要的效果相符,但如果我们让 AI 回答前给他几个对话作为示例,用样本对他进行引导,AI 模型就会利用上下文学习能力
一方面记忆那些内容作为知识,另一方面像示范那样模仿着进行回应,有了小样本提示后,再问 AI 类似的问题,他就能给出和提示示范相似的回答了。
小样本提示的另一个好处是,由于 AI 回应的内容风格,会大概率遵循我们给的示范,我们也就不用多费口舌给 AI 提要求,可以让他自行从前面的示范回答里领悟。
例如想让 AI 帮我们看书,提示词如下:
角色:
报告写作专家,擅长深入理解文献,写作读书报告
技能:
根据用户输入的报告主题&内容,用markdown语法,用尽可能详尽的方式,生成一篇读书报告。报告格式如下:
用户的报告主题: {{zhuti}}
用户的文献内容:{{content}}
注意:
不要生成无关内容。
上面是一个比较简单的提示词,还可以复杂点:
角色:资深学术研究者
技能
熟练阅读和理解学术论文的结构和内容。
总结和梳理论文主旨、关键思路和待解决问题的能力。
细致入微地分析论文细节的能力。
任务
深入理解论文的主旨、关键思路和待解决问题。
为你的读者提炼出最重要的关键信息。
输出阅读的总结文字。
要求(步骤)
1.列出本文有哪些明确的方法论
2.列出本文有哪些经过验证的结论
3.列出关键信息,基于「二八原则」列出本文的关键信息。「二八原则」是指:本文有20%的内容是关键信息,这部分信息可以让我理解其他80%的内容。请将这部分关键信息整理成有序的文字,这部分内容包括但不限于:论文主旨、论文有效解决了什么问题、论文有哪些待验证的问题等。//补充背景知识
4.论文中提到的优化、解决方案、提升等数据要着重为我列出,例如“提升了某方面的性能高达10%”等等。//提供示例
要求(限制)
1、基于你的学术严谨性做出理解和总结,我不希望看到幻觉
2、总结的文字要注意排版易于阅读,每句话必须用大小多层级标题,序号,缩进,分隔线和换行符等来显著优化信息呈现方式,每句话用关键词+专业描述来呈现信息
3、禁止引用任何非本文内容进行总结
需要你阅读的论文请参见链接或附件。
在某些情况下,通过提供具体示例来说明可能更加直观。例如,想让模型以一致的风格(如类比)回答问题,则可以提供示例告诉模型以该风格回答接下来的问题。通过单样本或少样本(2-3个)学习,可以有效避免模型猜测该如何操作。
2、思维链
当小样本提示有时也起不到很大的作用,比如 AI 非常不擅长做数学相关问题,即使我们用样本示范一些正确的结果,到他做的时候依然掉链子
问题在于 AI 生成每个词所用的时长是差不多的,不会因为某个词需要涉及更多的思考,而花费更多时间生成这个词,所以计算结果就被他乱哈拉过去了,前面有正确的示范答案也没有什么帮助。这种时候可以借助思维链。
思维链最早是谷歌在 2022 年一篇论文里提出的,思维链可以显著提升大语言模型,进行复杂推理的能力,特别是在算术常识和符号推理等任务上运用。
思维链的方法是给 AI 的小样本,提示里不仅包含正确的结果,也展示中间的推理步骤,那AI在生成回答时,也会模仿着去生成一些中间步骤,把过程进行分解,这样做的好处是步子小点,不容易扯着裆。
就像被老师点名回答问题时,站起来瞬间就给出正确答案的难度系数很高,但如果多说些废话,把思考步骤也讲出来,一方面可以拖时间,有更多思考机会;另一方面也有助于我们分步骤,想更有机会得到正确答案。
思维链也可以用在数学计算之外的很多方面,借助思维链,AI可以在每一步里把注意力集中在当前思考步骤上,减少上下文的过多干扰,因此针对复杂的任务,有更大概率得到准确的结果。
在思维链的相关论文里,作者还提到即使我们不用小样本提示,只是在问题后面加一句,Let's think step by step,让我们来分步骤思考,也能提升 AI 得到正确答案的概率,这是一种成本非常低的方法,用思维链还需要我们想样本示范,而这种方法只需要加上简单一句话,AI就会自行生成中间步骤进行推理。
好消息是目前有些大语言模型已经考虑到了这点,所以会自动生成中间步骤,分步骤思考,并把中间过程展现出来。
可以看到当提出问题时,会先解释问题中的专业名词,并且分步骤分析每个选项,甚至还会反思、检查、换一种思路思考。当看到【我有点卡住了】,我都怀疑能不能分析出正确答案。
3、增强生成
AI 模型所拥有的知识受到训练数据的影响,如果训练数据里对某个领域的文本覆盖不多,AI学到的也不多,就没法很好的帮我们回答相关问题,因此在小众细分领域上,AI 的表现有可能不尽人意,而且像公司内部数据,个人私密文件等,也都不可能作为公开大语言模型的训练数据,我们没法指望 ChatGPT 能帮我们回答相关问题,怎么办呢
一个应对方法就是我们可以提供外部文档,让模型访问外部知识库,获得实时且正确的数据生成,更可靠和准确的回答,这种架构叫做检索增强生成,Retrieval Augmented Generation,简称RAG。
例如上传一份 txt 文档,限定 AI 回答范围,只能从文档中找答案,这样就能缩小、锁定我们所需要的答案。
4、程序辅助语言模型
还有一个问题是,没法把 AI 用作计算器,当我们问他一个数学计算后,他没有真正帮忙做计算,只是在猜下一个最可能出现的词来生成回答。
如果我们想让AI充当网店客服,他虽能巧舌如簧的介绍产品,却也会告诉客户错误的订单总额,这很危险啊。
PAL: Program-aided Language Models,程序辅助语言模型,简称 PAL,可以帮助我们应对此类问题,其最早在 2022 年一篇论文里被提出,其核心在于,不让 AI 直接生成计算结果,当给 AI 的要求变成了在涉及计算步骤时,生成得到计算结果所需的代码。
例如,让AI生成代码,接下来把AI返回的回答给到Python解释器,让Python解释器执行并返回计算的结果,这个结果可以再给回到AI,让AI带着计算答案对用户的问题进行妥善回复。
5、ReAct
AI 还有一个局限性,那就是他所了解的知识,天然受到训练数据日期的影响,比如说模型是去年训练完成的,训练数据里必然不包含今年的新闻,模型也无从得知训练完成后发生的事情,这被称为知识截断。
如果 AI 能对不了解的知识上网搜索,把找到的答案告诉我们就好了,但他怎么知道要去浏览什么网站,浏览时应该关注什么关键词去找相关信息呢
2022年一篇标题为 ReAct: Synergizing Reasoning and Acting in Language Models 的论文提出了 ReAct 框架。它不是热门前端框架那个 react,而是 reason 和 action,推理与行动结合的意思。ReAct 的核心在于让模型进行动态推理,并采取行动与外界环境互动。
举个例子,如果问 AI 知识截断后发生的事情,它是无法回答上来的,但如果把搜索引擎作为 AI 可交互的工具,结合 ReAct 框架,他得到答案的过程可能会是这样:
首先针对问题他会思考要回答这个问题,需要去查找的信息,这个AI能借助搜索引擎,进行关键字搜索
接下来他开始观察行动带来的结果,也就是得到了一系列包含关键词信息的网页
针对上一步行动的结果,他开始了新一轮推理,某个新闻网站的链接标题提到了关键词,所以可能包含需要的信息,因此对应这一步的行动就是点进那个链接
进入网页后,对网页内容进行分析。
因此最后一步行动就是把查到的信息进行总结,告知用户最终答案。
通过 ReAct 可以看到模型一步步接近答案的任务,解决轨迹与人类很相似了,通过分步推理的思维链模型,不仅可以获得更准确的答案,而且我们也可以通过这些轨迹进行验证,
增加了与外界环境的交互,能够帮助模型突破一些固有限制,可以减少知识阶段带来的影响,而且 ReAct 框架的action行动不专指搜索和浏览网页,而是AI模型所支持的任何行动,比如如果模型可以和代码解释器交互,那运行代码可以被作为行动选项
如果模型可以访问外部文档,但从文档里查找关键字可以被作为行动选项
如果模型可以调用某个应用的API,那和那个应用交互也可以被作为行动选项
要把不同外部数据和工具为模型所用。