概念回顾
有了上一篇,我们对大模型一些相关的概念理解,大模型02-大模型的一些基本概念和知识。
我们了解到,现在的大模型,基本都是基于transformer的GPT模型,以ChatGPT为例,之前我们提到了,它是一种基于GPT模型的对话生成模型,它可以让计算机自动学习对话语料库中的模式,并生成连贯、自然的对话回复。
对于我们普通用户来说,使用ChatGPT也好,还是文心一言、通义千问,等等这些大模型,就是通过一轮一轮的对话来实现我们的诉求。
像这样:
前言
关于ChatGPT等的账号如何注册,这里不再说描述,网上教程一搜一大把。
好多人有这样一种感觉,拿到ChatGPT的账号,一顿尝试操作,当你过了新鲜的阶段,发现不好用,ChatGPT 回答的好空,没有太多参考价值;或者说,发现自己好像并没有什么好问的,不知道可以用 GPT 怎么来使用,于是过了这阵风,可能好久也想不起来再登录一次了。
然而实际情况是,不管是相关技术从业者还是其他行业的从业者,越来越多的人正把它变为自己的生产力工具。
ChatGPT(以下我们就以ChatGPT为例来介绍),基于GPT模型的对话生成模型都一样,可能跟各自的训练情况,在回答上有差异,但是逻辑都是一样的。由于目前人类的技术对自然语言(人说的话)处理的技术还不完美,所以导致目前 AI 生成内容的质量,非常依赖于--提示工程(Prompt),来引导语言模型更好地响应。
提示工程(Prompt)
所谓提示词,就是如何让ChatGPT更精准的理解你的意图,输出你想要的答案。找到与ChatGPT对话的技巧。
学会写提示词
先让大家感受下不同的发问方式,ChatGPT的回答效果:
写提示词的一些原则
-
清晰的指令:足够清晰明确地说明你希望模型为你返回什么,最后更加细致地说明需求,避免模糊表达。
-
提供上下文和例子:给出较为充分的上下文信息,让模型更好地理解相关背景。如果能够提供示例,模型能表现更好(类似传统LLM中的in-context learning)。
-
善用符号和语法:使用清晰的标点符号,标题,标记有助于转达意图,并使输出更加容易被解析
-
让模型一步一步地思考:在这种方法中,模型逐步进行思考,并呈现出涉及的步骤,这样做可以降低结果的不准确的可能性,并对模型响应的可解释性有很大的帮助。
-
激励模型反思和给出思路:可以在prompt中用一些措辞激励模型给出理由,这样有助于我们更好地分析模型生成结果,同时,思维过程的生成,也有助于其生成更高质量的结果。
-
给容错空间:如模型无法完成指定的任务,给模型提供一个备用路径,比如针对文本提问,可以加入如果答案不存在,则回复"无答案"
-
让模型给出信息来源:在模型结合搜索或者外部知识库时,要求模型提供他的答案的信息来源,可以帮助LLM的答案减少捏造,并获取到最新的信息。
善于总结自己的提示词模板
一个Prompt 可能包含的6个要素:任务,上下文,示例,角色,格式和语气,而且这些要素是按重要性降序排列的。
【角色】-- 选填 角色明确指定ChatGPT和Bard(如果涉及到虚构的角色)所扮演的角色或身份。这可以是具体的人,也可以是虚构的角色,有助于调整语气和内容以适应特定角色的需求。
【任务】-- 必填 明确表达你希望ChatGPT完成的任务或目标。
这里可以具体拆分:
1.你的问题或者任务描述
2.你的目标
3.你的要求
【上下文】--选填 上下文提供了与任务相关的背景信息,以确保模型可以理解问题的背景和约束条件。这包括用户的背景信息、成功标准、所处环境等。上下文对于任务的明确性和有效性至关重要。
【示例】--选填 提供示例可以明确示范所需的内容和格式,从而提高输出质量。
【输出格式】--选填 格式部分可视化了你期望输出的外观和结构,如表格、列表、段落等。明确指定输出的格式可以确保ChatGPT生成的内容符合你的预期。
【语气】--选填 语气定义了输出文本的语气或风格,如正式、非正式、幽默等。指定语气有助于确保ChatGPT的回应符合所需的情感和风格要求。
我们再来根据模板进行提问,看下效果:
带示例与不带示例的区别:
以上,我们如果能够用好提示词模板,符合提示词的一些原则,在一些基本的场景中,我们能够准确的获得我们想要的答案。
基于ChatGPT可以多轮对话,我们可以通过追问、奖惩指令来,来进一步提升模型的推理能力。
找到自己使用的场景
1.可以利用ChatGPT成为你的知识助手和百科全书。
2.让ChatGPT成为你的工作助理:
帮你写文章,优化文章,帮你做数据分析,帮你做各类场景的指导,比如健身教练,比如营养师。
3.你可以逐渐沉淀你各类场景的prompt,来形成你自己的多维度工具库
如何更深层次的激发大模型的涌现能力(学习一点点原理)
激发大型语言模型的涌现能力有两种方法:提示工程(prompt engineering)和微调(fine-tuning) 。
了解以下这些原理,对于理解和应用LLM模型来说,这些知识都具有重要的参考价值。
作为非技术人员的日常应用,我们要关注的是:
经典小样本提示(Few-shot)
最简单的提示工程的方法就是通过输入一些类似问题和问题答案,让模型参考学习,并在同一个prompt的末尾提出新的问题,以此来提升模型的推理能力。这种方法也被称为One-shot或者Few-shot提示方法。
zero-shot
zero-shot可以理解为:不给大模型任何的提示,直接提问,让大模型自己做决策。
当大模型遇到它未知的知识时,使用Zero-shot提示是无法得到比较好的回复,但并不意味着它不具备学习的能力,"照猫画虎" 它还是非常优秀的,所以进阶的提示法叫做Few-shot。
Few-shot提示法
Few-shot提示法可以简单理解为:在提问之前,先给大模型一个示例和解释让它学习和模仿,从而在一定程度上赋予它泛化能力。就像上述,我们提炼招标方的例子。
这里,从一个大佬从论文中总结的结论,我觉得我们也需要知道一点:
- 在zero-shot、one-shot、few-shot 上,规模越大,效果越好
- few-shot只要参数够不比fine-tuned差
从这些理论上,再回顾上述我们的提示词原则和实验,就能感受到,这些理论都有实际在指导我们如何写更好的prompt
CoT+Few-shot 提示
STaR Fine-Tune提示法
代码提示工程(Code Prompting)
代码提示工程是指通过设计特殊的代码提示来激发模型的涌现能力。这种方法不需要对模型进行额外的训练,只需要通过设计合适的代码提示来引导模型完成特定任务,代码提示工程通常用于解决那些无法通过语言提示工程解决的问题。这个不在这里描述,也是后续需要学习的一个重点专题。
更复杂的场景
对应的,我们在更复杂的应用场景: 思维链(CoT)提示、CoT+Few-shot 提示、STaR Fine-Tune提示法,由于篇幅限制,我们在下一篇文章中再重点讲解。