赞
踩
提示工程(Prompt Engineering)不仅仅是关于设计和研发提示词。它包含了与大语言模型交互和研发的各种技能和技术。提示工程在实现和大语言模型交互、对接,以及理解大语言模型能力方面都起着重要作用。
如何让AI语言大模型输出的结果更符合预期,更好服务于AI解题业务场景,理解LLM的基本原理以及提示词设计很重要,下面主要关于写Prompt的一些技巧以及实践,以及一些模型参数的介绍说明。
通过此系列学习如何结合业务场景更好的设计提示词模板,旨在提高AI解题正确率。
参考:
Prompt基本原则
使用技巧
1、Basic Prompt Framework应该包含4个部分
在写Prompt的时候,并不一定要包含所有4个元素,可以根据情景进行元素排列组合
2、CRISPE Prompt Framework应该包含6个部分,完备性更高
举例
Capacity and Role | Act as an expert on software development on the topic of machine learning frameworks, and an expert blog writer. | 把你想象成机器学习框架主题的软件开发专家,以及专业博客作者。 |
Insight | The audience for this blog is technical professionals who are interested in learning about the latest advancements in machine learning. | 这个博客的读者主要是有兴趣了解机器学习最新进展技术的专业人士。 |
Statement | Provide a comprehensive overview of the most popular machine learning frameworks, including their strengths and weaknesses. Include real-life examples and case studies to illustrate how these frameworks have been successfully used in various industries. | 提供最流行的机器学习框架的全面概述,包括它们的优点和缺点。包括现实生活中的例子,和研究案例,以说明这些框架如何在各个行业中成功地被使用。 |
Personality | When responding, use a mix of the writing styles of Andrej Karpathy, Francois Chollet, Jeremy Howard, and Yann LeCun. | 在回应时,混合使用 Andrej Karpathy、Francois Chollet、Jeremy Howard 和 Yann LeCun 的写作风格。 |
Experiment | Give me multiple different examples. | 给我多个不同的例子。 |
LLM技术原理参考:https://sspai.com/post/80316,简单理解就是大量的文本特征语义训练,只要数量级别足够大,就能具有一定上下文的规律。
通俗来讲就是一个大的Map,然后大模型训练就是给Map放数据的过程(实际上是个算法训练token选取概率的函数),训练的数据量直接影响大模型的效果,训练的成本很高,一方面是训练的配置,另一方面就是数据,自然语言还好,对于那些CLIP等多模态模型需要图片和文本,而且质量也影响模型最终的效果。
自监督学习,就是不需要固定的数据标注,生成回答是具有上下文含义的,每次回答的字都是根据概率选取的。
举个例子,比如 “我很” 后面可以很多种场景回答,“我很好”、“我很坏”、“我很高兴”、“我很难过” 等,具体的回答需要根据提问的场景来选择概率,比如问 “你心情怎摸样?” 那么选取 “我很高兴”、“我很难过” 作为回答结果的概率就会更大,至于具体回答哪个是有模型数据训练的规模以及上下文场景概率选取。
再举个例子,如多模态CLIP大模型就是采用社交网络上的海量数据进行大模型训练,相比之前给图片手动打标签模式,图片和文本联系的语义是真实的,也就是这个文本、图片联系是更有意义的,而不是靠着标签维护的。比如ins会有用户发的朋友圈,比如 “我这个猫真好看” 配了一个猫的照片,那么这个图片猫的特征就会和 自然语言特征产生语义联系,少量数据的时候这个联系不一定准确,但是当数据量足够大,这种联系性越来越强。区别之前的手动标注的文本、图片特征联系,CLIP大模型这种联系是具有上下文的。
因此能进行Zero-shot的原理就是基于此,我们问一个问题,就会根据问题进行回答,但是Zero-shot的效果还是跟训练的数据量、测试的数据等相关的。
如今,经过大量数据训练并调整指令的LLM能够执行零样本任务。即使有时我们没有向模型提供任何示例,模型对于简单的任务仍能处理——这就是零样本能力的作用。
Zero-shot有时在复杂性的任务上表现不佳,因此针对此特性需要优化提示词。当零样本提示和少样本提示(少量样本提示:格式、标签提示,上下文随机少样本提示)不足时,这可能意味着模型学到的东西不足以在任务上表现良好。从这里开始,建议开始考虑微调您的模型或尝试更高级的提示技术。
举例具体可以在上下文增加少量样本样例,并给出样例答案,进行一个链式的思考步骤说明
具体可以以用户消息进行配置
// 题型描述举例
if (StringUtils.isNotEmpty(questionTypeDesc) && JSON.isValid(questionTypeDesc)) {
JSONObject questionTypeDescJson = JSON.parseObject(questionTypeDesc);
messages.add(new ChatMessage(ChatMessageRole.USER.value(), questionTypeDescJson.getString("stem")));
String answerExp = String.format("答案:%s。解析:%s", questionTypeDescJson.getString("answer"), questionTypeDescJson.getString("exp"));
log.debug("题型管理配置的 answerExp 格式:{}",answerExp);
messages.add(new ChatMessage(ChatMessageRole.ASSISTANT.value(), answerExp));
}
Zero-Shot Chain of Thought意思是模型的输出结果是一步步链式形成的,这个技巧使用起来非常简单,只需要在问题的结尾里放一句** Let‘s think step by step (让我们一步步地思考)**,模型输出的答案会更加准确。
这个技巧来自于 Kojima 等人 2022 年的论文 Large Language Models are Zero-Shot Reasoners。在论文里提到,当我们向模型提一个逻辑推理问题时,模型返回了一个错误的答案,但如果我们在问题最后加入 Let‘s think step by step 这句话之后,模型就生成了正确的答案。
ling waAPE发现了一个比人工设计的“让我们一步一步地思考”提示更好的零样本CoT提示(Kojima等人,2022(opens in a new tab))。
提示“让我们一步一步地解决这个问题,以确保我们有正确的答案。”引发了思维链的推理,并提高了MultiArith和GSM8K基准测试的性能:
大致思路就是将问题首先进行拆分使LLM生成知识,然后根据知识再解答问题。
LLM回答的过程是概率选取词条token的过程,对于需要探索预判战略复杂的业务,传统或者简单的提示词技巧是不够的。
最近,Yao et el. (2023)(opens in a new tab) 提出了思维树(Tree of Thoughts,ToT)框架,该框架基于思维链提示进行了总结,引导语言模型探索把思维作为中间步骤来解决通用问题。
ToT 维护着一棵思维树,思维由连贯的语言序列表示,这个序列就是解决问题的中间步骤。使用这种方法,LM 能够自己对严谨推理过程的中间思维进行评估。LM 将生成及评估思维的能力与搜索算法(如广度优先搜索和深度优先搜索)相结合,在系统性探索思维的时候可以向前验证和回溯
两种方法都是以多轮对话搜索树的形式来增强 LLM 解决复杂问题的能力。主要区别在于 Yao et el. (2023)(opens in a new tab) 采用了深度优先(DFS)/广度优先(BFS)/集束(beam)搜索,而 Long (2023)(opens in a new tab) 则提出由强化学习(Reinforcement Learning)训练出的 “ToT 控制器”(ToT Controller)来驱动树的搜索策略(宝库什么时候回退和搜索到哪一级回退等等)。
Hulbert (2023)(opens in a new tab) 提出了思维树(ToT)提示法,将 ToT 框架的主要概念概括成了一段简短的提示词,指导 LLM 在一次提示中对中间思维做出评估。ToT 提示词的例子如下:
假设三位不同的专家来回答这个问题。
所有专家都写下他们思考这个问题的第一个步骤,然后与大家分享。
然后,所有专家都写下他们思考的下一个步骤并分享。
以此类推,直到所有专家写完他们思考的所有步骤。
只要大家发现有专家的步骤出错了,就让这位专家离开。
请问...
如目前提示词模板,结合以上规则对其进行优化
作为 `%s` 学科的教师,你正在准备一道考试题目,你要做的是:理解并解答这到题,
将这道题的答案和解析正确的写出来,一定要保证答案正确性!
题目为:`%s`, 题型为:`%s`。
要求:
(1)回答请使用简洁的中文。
(2)答案和解析内容之间加一个分号保持格式整洁。
(3)如果是选择题请正确给出正确答案对应的选项。
参考CRISPE Prompt Framework
Capacity and Role | 把你想象成一位 %s 学科的教师以及义教育界知识储备丰富的学者。 |
---|---|
Insight | 这个教师、学者的工作主要分析并理解在校学生提出的试题,然后给出该试题的答案与解析。 |
Statement | 根据试题场景正确解答试题 %s,让我们一步步思考,并给出解析论证答案的正确性质。 |
Personality | 在回应时,使用简洁的中文参照%s格式。 |
Experiment | 如果是试题是选择题需要给出正确的选项。 |
把你想象成一位 ${courseName} 学科的教师以及义教育界知识储备丰富的学者。
这个教师、学者的工作主要分析并理解在校学生提出的试题,让我们一步步思考然后给出该试题的答案与解析,
回应使用简洁的中文,根据试题场景正确解答题目类型为 ${questionTypeName}的试题 ${questionStem}。
ps:历史提示词模板
1、角色:\"%s出题人\" %s 目的:\"%s 1. 直接写出题目答案;2.做题目进行解析,分析并写出解答思路, 请使用中文解析;3. 对难度进行预测,难度等级分为:easy、medium、difficult三个等级;4. 写出该题 目考查的知识点\" 要求:将以上四个目的,按照固定顺序以json格式的形式返回,尽量简洁 2、作为我K12的${courseName}的教师,你正在做一道考试题,请给出正确的答案和解析,不仅要告诉我们正 确答案,还要告诉我们其他选项为什么错了。下面是一道${questionType},请根据题意选择最合适的选项, 选择题往往会考察语法,单词释义。 ${questionStem} 3、作为 `%s` 学科的教师,你正在准备一道考试题目,你要做的是:理解并解答这到题,将这道题的答案和解 析正确的写出来,一定要保证答案正确性!题目为:`%s`, 题型为:`%s`。要求:(1)回答请使用简洁的中 文。(2)答案和解析内容之间加一个分号保持格式整洁。(3)如果是选择题请正确给出正确答案对应的选项。 4、把你想象成一位 `%s` 学科的教师以及义教育界知识储备丰富的学者。这个教师、学者的工作主要分析并理 解在校学生提出的试题,然后给出该试题的答案与解析。根据试题场景正确解答试题 `%s`,让我们一步步思考 ,并给出解析论证答案的正确性质。在回应时,使用简洁的中文参照 `%s` 格式。如果是试题是选择题需要给 出正确的选项。 5、把你想象成一位 `${courseName} `学科的教师以及义教育界知识储备丰富的学者。这个教师、学者的工 作主要分析并理解在校学生提出的试题,然后给出该试题的答案与解析,根据试题场景正确解答题目类型为 `${questionTypeName}`的试题 `${questionStem}`,让我们一步步思考,在回应时,使用简洁的中文 ,如果是试题是选择题需要给出正确的选项。 加上``有时会有干扰。 6、把你想象成一位 ${courseName} 学科的教师以及义教育界知识储备丰富的学者。这个教师、学者的工作 主要分析并理解在校学生提出的试题,让我们一步步思考然后给出该试题的答案与解析,回应使用简洁的中文, 根据试题场景正确解答题目类型为 ${questionTypeName}的试题 ${questionStem}。 7、假设现在有三位${courseName} 学科的不同的教师来解答在校学生提问的试题,所有教师都写下他们思考这个试题的第一个步骤,然后与大家分享, 然后,所有教师都写下他们思考的下一个步骤并分享,以此类推,直到所有教师写完他们思考的所有步骤,只要大家发现有教师的步骤出错了, 就让这位教师离开 。下面请解答类型为`${questionTypeName} `的试题 `${questionStem}` , 确保答案正确,输出最终的答案与解析,输出格式按照"【答案】:xxx;【解析】:xxx",语言需要简洁
ps:题型描述,用于规定ChatGPT给出答案的格式以及一些样本提示词
{ "stem":"(1)_is your favourite teacher? ( ) 。A.Who B.What C.When D.Why(2)The driver stopped his car because he ( ) 。A.didn’t know the timeB.saw his friendC.was very tired", "answer":"A;B;", "exp":"(1)最喜欢的老师是谁,因此正确答案Who,选项A正确。(2)司机停止了他的汽车是因为他_,结合文章上下文,因此正确答案为他看到了他朋友,选项B正确。" }
OpenAI ChatGPT可调整的参数
目前AI写答案解析具体的业务场景为例,目前的参数
.model(GPT_3_5_TURBO)
.topP(1.0)
.n(1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。