本系列第一篇文章 提示词必备要素与基本技巧 详细为大家介绍了提示词的四大要素:指令、上下文、输入和输出 。文章最后还给大家分享了万能的提示词模板 。普通用户根据该模板进行提问可以覆盖日常生活中绝大多数使用场景,这时候的大模型已经是"满分文科生" 了。
但当我们在使用大模型求解一些需要逻辑能力的问题,尤其是理科推理问题时,发现上篇文章所学的技巧还是不能让模型输出我们想要的结果。相信大家都看过这样的例子:【9.11和9.8哪个大?】这么简单的数学问题竟使得一众号称"超强"的大模型集体翻车, 包括ChatGPT和Kimi(目前随着大模型能力的进步这一简单问题已经可以得到正确回复,以下截图是我在chatgpt和kimi大模型刚发布后提问大模型得到的错误回复)。
难道我们的大模型是偏科严重的"文科学神,理科学渣",根本解决不了逻辑推理问题?结果显然不是,虽然大模型的原理是通过对大量文本的学习,并结合用户所提问题,给出概率最大的词语组合形成回答(直观理解就是它们只是对所学字词的重复组合,逻辑推理能力要弱一些)。但是通过我们提示词的引导,还是可以开发出大模型的"逻辑思维能力",接下来大家就跟我学习一下提示词的进阶玩法------增强大模型的逻辑思维能力
一、优先使用深度思考功能,提问推理模型
1.1 DeepSeek 网站提问本质
随着大模型技术的不断发展,越来越多的模型具备一定的逻辑能力,典型代表是深度求索公司的DeepSeek-R1和OpenAI公司GPT-O1。我们这里拿DeepSeek举例。打开DeepSeek提问页面 chat.deepseek.com/, 我们发现在提问时可以勾选深度思考(R1) 按钮。
部分使用者对DeepSeek了解不多,经常产生【勾选这个按钮DeepSeek就会生成思考过程,反之不会,但它们的性能是没有差别的,甚至思考过程的生成降低了获得答案的速度】这个观点。显然这个观点是错误的,DeepSeek网站实际上集成了两个大模型 DeepSeek-V3 和DeepSeek-R1。
- DeepSeek-V3是没有推理能力的大模型,也是我们不点击深度思考模式访问的模型。它没有采用带有推理思维链(我们下面会提到)的数据进行训练,因此它的推理能力较弱。
- DeepSeek-R1采用了包含推理思维链的数据进行训练,思维链数据不只会包含结果,还包括得到该结果的推理步骤。
1.2 推理模型和非推理模型的训练数据差异
我们提到了DeepSeek-R1和DeepSeek-V3的差别在于是否使用了COT数据集进行训练【当然除了数据集不同,训练方法也不同,我们这里只讲简单差异方便理解】,下面直观了解一下COT数据集和普通问答数据集差异:
DeepSeek-V3训练使用的是普通问答数据集,它的格式如下, instruction
代表给大模型的指令,input
代表我们的输入, output
代表模型的输出,DeepSeek-V3通过对大量类似数据的学习获得知识,从而回答用户的问题。但在这种数据中,DeepSeek-V3学习的更多是词组的组成规律,缺乏逻辑推理能力。
DeepSeek-R1训练使用的是CoT(思维链)数据集 ,直观来说就是除了instruction
, input
和output
部分,数据集还带了思考过程think
, 使得模型不但可以学习到output
, 更能学习到得到该output
需要进行的思考步骤。下面以一个COT 医学数据集为例:
通过COT数据集的学习,DeepSeek---R1模型获得了一定推理能力,因此是我们在提问逻辑推理问题的首选。
二、少样本提示
2.1 样本提示的概念
我们目前讲到的提示词必备四要素:指令、上下文、输入和输出 可以覆盖大部分的问题,但对于一些复杂的文科问题,大模型能力也稍显不足。我们仍可以对其进行拓展,比如可以加入示例供大模型参考,看下面这个请求,我们不但告诉了大模型我们想让它对文本进行分类(指示),更提供了分类示例,这些提供的示例官方称为样本。
根据大模型提示词的内容和形式,我们可以将其分为:
- 零样本提示:用户仅提供了一个任务描述
- 少样本提示:用户提供部分如何完成任务的示例
添加样本的实质是增强了我们提示词的上下文,上下文内容越多,得到的回答越准确。
2.2 样本提示的示例
我们通过与ChatGPT对话,让它完成一个文本翻译的任务,任务提示词如下:
但ChatGPT的结果显然不尽人意,它把我们全部的内容都翻译成了英文:
我们优化我们的提示词,在其中加入一个例子 "例如,第一段的开头是生成文本,我们就输出generate text", 仅仅加入这一个例子,ChatGPT就识别了我们的意图并成功生成了正确答案。
因此大家在提问中如果遇到模型回复效果一般的情况,可以尝试给模型输入一些示例,会得到不错的结果~
三、思维链
3.1 样本提示的困境
然而有些进阶场景下,比如求解某些数学题,少样本提示也并不足以让大模型推理出正确结果。下面是提问chatgpt一道简单的数学题:【我去市场买了10个苹果,我给了邻居2个苹果和修理工2个苹果,然后我去买了5个苹果并吃了1个,我还剩下多少苹果?】
正确答案:10-2-2+5-1 = 10个。然而chatGPT给我们的回复是5个苹果,答案显然是错误的。
我们尝试继续增加样本的数量,把样本数量增加到3个,结果仍然错误,事实上我们可以尝试不管增加多少个样本,得到正确答案的概率很低。
这种复杂逻辑推理问题根本的解决办法还是优化我们的提示词,需要我们采用一种新的提示词模式------思维链。
3.2 思维链概念及样例
什么是思维链?我们上面提到了思维链数据集,细细观察上述医学COT数据集中think 的内容,我们发现它是将输入的问题一步一步拆解,比如发现"积块坚硬"症状,可能是因为什么病,再结合"面色蜡黄",有可能是因为什么引起的。像这种将一个复杂问题分解为一步一步的子问题,让大模型逐步参与并求解的过程我们叫大模型的推理。而这一系列推理中我们梳理的中间步骤就叫做思维链。
以上概念出自Google 2022年的论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》,大公司提出的概念总是过分绕口,我们直接通过例子来解释,还是上面的数学问题,我们换一种提示词:
这次在我们给的样本中不只包括输入和输出,在输出中还包括了问题的求解过程,这次我们来看一下结果,大模型回答正确~
综上所述,思维链提示词其实就是在输入示例中加入推理过程,让大模型能学到类似问题的推理能力并将其扩展到其它问题上,是不是豁然开朗!
四、增强零样本提示(超简单)
4.1 零样本思维链概念
特别巧妙的一个现象是,思维链模式不只可以作用于少样本提示中,对于零样本提示同样适用。有些同学可能会问零样本提示我怎么能输入求解过程呢?你不需要输入具体过程,你只需要输入一句魔法提示:"让我们逐步思考"。
我们同样使用上面计算苹果数的案例测试一下,发现大模型果然逐步思考且回答正确,是不是很神奇!
4.2 零样本思维链的原理
零样本思维链简单高效的能力引起众多学者探究其背后原因,目前普遍的认识是: 大模型是逐词产生回答的,下一个词的生成依赖于上一个词,"让我们逐步思考"这句话让大模型逐步推理,先产生了一部分推理过程,而这一部分推理过程就像是我们在思维链模式中输入的中间过程一样,大模型依据上一步的推理再进行下一步的调整从而得出准确结果,原理示意图如下:
五、万能模板
我们上面分享了DeepSeek-R1推理模型
,少样本提示
, 思维链
, 零样本思维链
四种方法,在我们解决日常比较复杂的推理问题时,我们可以采取如下顺序模板:
先提问推理模型获得结果(这一步可以多重复几次,选取出现次数最多的结果作为大模型的回答)
上述方法无效,加入样本提示,尝试1-5个样本
样本方式无效,尝试零样本思维链
零样本思维链无效,尝试加入思维链中间过程
相信大家采取该顺序模板,更深层次的问题大模型也可以迎刃而解!
六、总结
以上就是我们今天的提示词分享内容啦,在第一篇提示词必备要素与基本技巧的基础上,我们通过学习DeepSeek-R1推理模型
,少样本提示
, 思维链
, 零样本思维链
四种方法对提示词的逻辑能力进行提升,如果大家平时习惯使用聊天框与大模型对话,这两篇的技能已经足够覆盖大家的日常工作需求。
对于大模型应用AI Agent的开发者来说,以上的提示词还有进一步扩展的空间,具体内容我们下期提示词构建AI Agent应用进行分享,感兴趣大家点个关注吧(下篇内容也会尽快完成编写)。
感谢自写文章以来大家的支持,随着人工智能大模型的火热,pytorch作为人工智能大模型开发必备的基础工具成为每个AI研究者必学内容, 各位看官感兴趣也可以关注我的微信公众号: 大模型真好玩 并回复pytorch分享, 即可免费获得我读研期间学习过最好的pytroch教程pdf~