用好大模型-提示词工程

提示词工程

小模型时代开发范式 :框架选择+算法选型+模型训练+部署推理+评估。需要深度学习算法知识+大量的算力数据 大模型时代开发范式:有手就行的提示词工程 + Embedding外接大脑 + 微调。

基本概念

Q&A

Q:什么是提示词(Prompt)?

提示词可以简单理解为给大模型下发的一段文本或指令。提示词的形式多样化,可以是一个问题、一段描述、一个任务要求或者一组复杂参数或条件。提示词就是AGI(通用人工智能)时代下的编程语言。 科普维度理解: (1)记忆唤醒:Prompt的目的是为了帮助大模型回忆起之前训练的过程。 (2)不是我不懂:就像小时候做题目,不是没学过也不是不会,而是一时间没有想起来,因此需要"提示"它来唤醒它的记忆。 (3)是你不会问:近年来的研究发现,很多问题不是大模型不知道,而是问题没问好。

Q:什么是提示词工程(Prompt Engineering)?

PE是一种AI技术,它通过设计和改进AI的Prompt来提高AI的表现。PE的目标是创建高度有效和可控的AI系统,使其能够准确、可靠地执行特定的任务。 提示词工程是AGI时代的软件工程,是一种方法论。 提示词工程师就可以说是AGI时代的程序员,也可以说是AGI时代的魔法师,Prompt就是咒语,好的咒语往往会释放出十分强大的魔法。

Q:所有大模型的需求都需要用到PE吗?

如果你只想AI给你一个简单的答案,并且不要求很高的准确性,可能不需要使用PE。或者说随着技术的发展,大模型的不断优化,可能对于大模型来说大部分场景的问题都是简单问题,那可能我们也不需要使用PE。但是如果某些场景我们觉得大模型并不能很好的给出我们答案,那么这个时候PE的作用就可以体现出来了。

Q:PE能解决所有大模型准确性的问题吗?

不能,PE也不是无所不能的,也会受到模型质量的影响。可能会遇到有些问题我们再怎么优化,模型回答还是不好或者说压根不正确,这个时候可能就需要对模型进行微调,换个更高级模型来解决这个问题。 Q:目前大模型发展速度这么快,很多时候可能并不需要PE,那我们还有必要学习PE吗? 当前AI的发展还是处于早期阶段,学习PE还是非常有必要的,具有很大的价值。虽然从长远来看,随着模型的发展,产品的不断易用,PE可能会被淘汰。但是这些模型的使用思维一定是百益而无一害的,对于目前来说我们要想用好大模型,PE是一定绕不开的。 Q:学习了提示词工程,我们能做什么事情? ● 我们能极大程度提高通过大模型获得满意答案的概率。 ● 我们可以固化一套到Prompt程序中,成为系统功能的一部分。 ● 作为程序员,我能知道什么问题大模型能帮我很好的解决,什么问题不能依靠大模型来解决。

术语

零样本提示(Zero-Shot)

在提示词中,没有向模型提供任何示例,模型通过利用先前学习到的知识来完成该任务。

问题: 中秋节是农历的几月几日? 回答: 中秋节是中国的传统节日之一,定在农历的八月十五日。这一天人们通常会赏月、吃月饼,以庆祝这一佳节。

少样本提示(Few-Shot)

大模型目前已经具备比较好的零样本能力,但是零样本提示在复杂任务上仍然表现不佳。少样本技术可以通过提供少量的示例,引导模型实现更好的回答(举一返三)。

问题: 这太棒了!// Positive 这太糟糕了!// Negative 哇,那部电影太棒了!// Positive 多么可怕的节目!// 回答: 这段话的情感倾向是Negative(负面的)。"多么可怕的节目!" 这句话表达了对某个节目的不满或不喜欢。 System Prompt和User Prompt User Prompt:用户User输入的提示,即用户在使用的时候写的提示词。模型需要基于用户提示来生成回答。 System Prompt:是大模型使用的系统提示,通常用于设定对话的背景、提供指导和规定规则。目前大模型API都已经支持了。

Prompt调优

当我们明确任务开始设计提示词时,我们需要从简单明确的提示词开始,并逐渐的添加更多元素的上下文来获得更好的结果,所以不断迭代提示词是至关重要的,提示词也不是越复杂越好,能满足我们的需求即可。也不要一开始添加过多的复杂因素,导致优化无从下手。

通用技巧

Prompt黄金准则

  • 无需对大模型礼貌,直接提问。
  • 融入目标受众,调整回答专业性。如果目标受众是孩子,则回答就比较通俗易懂,如果是某领域专家,则会提供更加专业和深入的解释。
  • 在交互式对话中将复杂的任务分解为一系列更为简单的提示。
  • 使用肯定指令,避免否定性语言。
  • 当需要简单清晰或更深入地了解某个问题时,可以用"像我是领域初学者解释这个问题"这类提示。
  • 添加我要给多少小费已获得更好的解决方案。在Prompt中加上奖励,回答的往往会更加准确细致。
  • 示例驱动,使用少样本提示。
  • 格式化提示,明确指令和示例。
  • 使用"你的任务是"和"你必须"等短语明确任务。
  • 在提示词里加入"你会受到惩罚"。
  • 使用"以自然、类似人类的方式回答问题"这句话。
  • 使用引导性词语,如"请一步步思考"等。
  • 使用"确保公正回答,避免刻板印象"这句话。
  • 让模型通过向你提问来引出精确的细节和要求,直到它得到足够的信息来提供所需的输出。
  • 为大模型分配角色。
  • 使用分隔符。
  • 多次重复特定单词以强调。
  • 结合思维链和少量样本提示。
  • 使用输出引导,包括用所需输出的开头结束提示。利用输出引导,以预期响应的开头结束提示。
  • 明确模型生成内容时必须遵循的要求。
  • 编写文本时,要求与提供的示例相似,或者限制输出格式。

上图是每个不同大小模型使用Prompt准则后相对提升幅度,可以看到类似的现象,模型越大,对于提示词的响应和回复也会更加敏锐,准确性提升也相对较大。 参考Principled Instructions Are All You Need for Questioning LLaMA-1/2, GPT-3.5/4

避免不明确

例如,我们让大模型解释PE的概念。

问题: 解释提示工程的概念。保持解释简短,只有几句话,不要过于描述。 回答: 提示工程是指通过设计和优化输入提示来改进AI系统输出质量的过程,常见于自然语言处理领域,以获得更准确、相关的结果。 在上面提示词中,模型知识解释了PE的概念,但是模型并不清楚使用多少句子和风格。

尽管你可能仍会从上诉提示中得到较好的响应,但是更好的提示应该是具体、简洁并且切中要点的。

问题: 使用 2-3 句话向程序员解释提示工程的概念。 回答: 提示工程是指通过设计和优化输入提示来引导AI模型生成更高质量输出的过程,它在自然语言处理任务中尤为重要,帮助提升结果的相关性和准确性。对于程序员来说,掌握提示工程技术意味着能够更有效地利用如ChatGPT等大型语言模型的能力,以满足特定应用需求或解决复杂问题。

做什么不做什么

论文版: 使用肯定词,比"做",避免使用否定词,比如"不要"。 在与大模型交流时,明确告诉模型你希望它做什么,而不是告诉它不要做什么。简单、直接的肯定指令可以帮助模型更准确地理解和执行你的需求,减少误解的可能性。 如果你说"列出健康饮食的建议",模型会直接提供相关的建议。 如果你说"不要给我垃圾食品的建议",模型需要先理解什么是"垃圾食品",然后避免提及它们,这使得任务变得更加复杂。 个人实践版: 在与大模型交流时,如果条件允许,明确告诉模型你希望它做什么并且不要做什么。 当我们只告诉大模型做什么的时候,可能会因为描述不准确或者是大模型理解偏差而导致大模型输出不是我们想要的答案。

问题: 我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?回答数字 回答: 10 - 2 - 2 + 5 - 1 = 10 你最后还剩10个苹果。

但是如果我们告诉大模型做什么,并且不要做什么,能让大模型的回答范围进一步缩小,而达到我们想要的效果。

问题: 我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?回答数字,不要任何其他信息 回答: 10

角色真的有用吗

● 模型训练者最开始并没想到过这样,完全是大家完全【把AI当人看】玩出来的一个优化点。 ● 后续由于传的太广,导致现在的大模型训练数据里面也会充满角色定义,所以后续定义角色会更有效。 ● 论文证明大模型对提示词最前面和最后面的信息对结果的影响最大,所以定义角色,在开头把问题域收窄,减少二义性。

参考Lost in the Middle: How Language Models Use Long Contexts

学会结构化

沟通过程是有损耗的,怎么能够清晰简单的把自己想要传达的信息传达出来?就要掌握结构化表达,用以构建结构化的Prompt。学会结构化表达,就是学会怎么汇报,AI也是一个人,不同AI就是不同的人。

结构化Prompt范式是为了引导模型产生更准确、相关性更高的输出而设计的一种系统化的提示词构建方法,应该包括概述、过程、依赖和控制4大部分。

Prompt典型构成: 角色、背景 :给AI定义一个最匹配任务的角色。 输入 :任务的输入信息;在提示词中明确的标识出输入 指示以及限制 :对任务进行描述 上下文依赖 :给出任务相关的背景信息 例子 :必要时给出举例,one-shot learning,few-shot learning 输出:输出的格式描述,一遍后续模块自动解析模型的输出结果。

进阶技巧

少样本提示的限制:

问题: 这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1,只回答True或者False,不要输出任何其他内容。 示例: 这组数字中的奇数加起来是一个偶数:4、8、9、15、12、2、1。 A:答案是False。 这组数字中的奇数加起来是一个偶数:17、10、19、4、8、12、24。 A:答案是True。 回答: True

可以看到,当一些复杂的推理问题模型不能解决的时候,零样本和少样本并不能很好的解决这个问题,我们还需要更高级的提示词。 总的来说,使用少样本提示对解决某些任务很有用。当零样本提示和少样本提示不能解决时,这可能意味着模型学到的东西不足以回答这个问题,这个时候我们就需要更高级的提示词技术。

思维链(COT-Chain-Of-Thought)

COT简单来说就是让模型展示出自己的推理过程,或者人为引导模型推理,从而得到正确答案。同时在推理的过程中也可以和少量样本进行结合,以获得更好的结果。

零样本COT

对于一些步骤不是那么复杂的推理问题,就可以使用零样本COT技术,简单来说就是在提示词中增加"让我们逐步思考"或者"输出推理过程"等。

问题: 这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1,输出推理过程。 示例: 这组数字中的奇数加起来是一个偶数:4、8、9、15、12、2、1。 A:False。 这组数字中的奇数加起来是一个偶数:17、10、19、4、8、12、24。 A:True。 回答: 首先,我们找出给定数字序列中的所有奇数,并将它们相加。 给定的数字是:15、32、5、13、82、7、1 其中的奇数有:15、5、13、7、1 接下来计算这些奇数之和: [ 15 + 5 + 13 + 7 + 1 = 41 ] 由于41是一个奇数,而不是一个偶数,所以根据题目要求判断"这组数字中的奇数加起来是一个偶数"这一陈述为假(False)。 因此,答案是:False。 可以看到,我们仅仅是让模型推理结果这么简单的一小句,得到的结果却是正确的。所以说对于一部分零样本和少样本无法解决的问题,在基本提示词上加上简单推理过程,可能就会获得不一样的效果。

少样本COT

少样本COT的意思就是在提示词中给出详细的解题步骤和示例,让模型举一反三得到推理的能力。与少样本提示的区别就是一个小学生,现在不足以解初中阶段的题目,但是它的学习能力是很强的,现在我们在提示词中告诉它解题方式,他就能比较好的解决这个问题。

原文:月光照在路上,像是撒满了盐,我坐在台阶上望着儿子的背影,渐渐地消失在这条路上,这条路上飘满了广玉兰的花香。 问题: 你是一个擅长中文和英文的AI 工程师和数据科学家,擅长中文和英文相关的 AI 技术文章编写和翻译。 请将下面的英文翻译成中文,要求语言具有文学意蕴,优雅深邃。 你需要两个步骤来执行这个任务:

  1. 将英文直接翻译为中文,主要考虑意思表达的准确性,请给出1个结果
  2. 将步骤1直译的1个中文翻译成更文学更优雅的中文,主要考虑中文的语言表达习惯 英文: The moonlight shone on the road, as if it was covered with salt. I sat on the steps and looked at my son's back, gradually disappearing on this road, which was filled with the fragrance of magnolia flowers. 回答:

第一步:准确直译

月光洒在道路上,仿佛覆盖了一层盐。我坐在台阶上,看着儿子的背影,在这条充满玉兰花香的路上逐渐消失。

第二步:文学化翻译

月色如霜,轻覆于道,仿若细盐铺陈其上。我独坐阶前,目送儿郎渐行渐远,那背影融进玉兰幽幽之香,直至消逝无踪。

COT+SC

SC为自我一致性(Self-consistency),是对COT方法的改进。COT只进行一次采用回答,而SC采用了多次采用的思想,最终选择最优的回答最为最终答案。其思想为一个复杂的推理问题可以采用不同方式进行解决,可能最终都可以得到正确的答案,SC在COT的基础上能进一步提高大模型回答的准确性。

问题: 你是一个擅长中文和英文的AI 工程师和数据科学家,擅长中文和英文相关的 AI 技术文章编写和翻译。 请将下面的英文翻译成中文,要求语言具有文学意蕴,优雅深邃。 你需要两个步骤来执行这个任务:

  1. 将英文直接翻译为中文,主要考虑意思表达的准确性,请给出3个结果
  2. 将步骤1直译的3个中文翻译成更文学更优雅的中文,主要考虑中文的语言表达习惯
  3. 审视步骤2提供的3个结果,整合出一个最好的结果,作为最终结果输出英文: The moonlight shone on the road, as if it was covered with salt. I sat on the steps and looked at my son's back, gradually disappearing on this road, which was filled with the fragrance of magnolia flowers. 回答:

步骤1:直接翻译

  1. 月光洒在道路上,仿佛覆盖了一层盐。我坐在台阶上,看着儿子的背影,在这条充满玉兰花香的路上逐渐消失。
  2. 道路被月光照耀着,如同铺满了盐粒。我在台阶上坐着,注视着我的儿子,他的身影在这条弥漫着玉兰香气的小路上渐渐远去。
  3. 月亮的光芒照在了路上,就像撒上了盐一样。我坐在台阶上,望着儿子的身影,在这条散发着玉兰花香味的路上慢慢消失。

步骤2:文学化翻译

  1. 月色如霜,轻覆于道,我静坐阶前,目送儿郎渐行渐远,直至融入那满溢玉兰幽香之径。
  2. 皎洁月华倾泻而下,似细盐均匀散布其上,我独坐石阶,凝望爱子背影,缓缓消逝于这馥郁的玉兰香氛之中。
  3. 月光如盐般细腻地铺展在小径之上,我端坐于阶梯,遥望儿子的身影,随着玉兰花的淡雅气息,一点点隐没不见。

最终结果

皎洁月华倾泻而下,似细盐均匀散布其上,我独坐石阶,凝望爱子背影,缓缓消逝于这馥郁的玉兰香氛之中。

TOT

TOT的全称为Tree Of Thought,是以树的形式来写Prompt。简单理解来说和COT+SC类似,也是先分步骤,然后每个步骤多个结果,不同的是,COT+SC是并列输出的多个结果,而在TOT是在每一步的过个结果中进行选择,然后在进行下一步,输出多个结果。

问题: 你是一个擅长中文和英文的AI 工程师和数据科学家,擅长中文和英文相关的 AI 技术文章编写和翻译。 请将下面的英文翻译成中文,要求语言具有文学意蕴,优雅深邃。

  1. 将英文直接翻译为中文,主要考虑意思表达的准确性,请给出 3个结果。
  2. 从步骤 1 的结果中选择一个意思表达更恰当的给出 1 个结果
  3. 将步骤 2 的结果润色为更简洁优雅通顺的中文,主要考虑中文的语言表达习惯,输出 3 个结果。
  4. 审视步骤 3 提供的 3 个结果,整合出一个最好的结果,作为最终结果输出 英文: The moonlight shone on the road, as if it was covered with salt. I sat on the steps and looked at my son's back, gradually disappearing on this road, which was filled with the fragrance of magnolia flowers. 回答:

步骤 1:直译

  1. 月光洒在道路上,仿佛覆盖了一层盐。我坐在台阶上,看着儿子的背影,在这条充满玉兰花香的路上逐渐消失。
  2. 月亮的光芒照耀着道路,好像铺满了盐粒。我在台阶上坐着,注视着我的儿子的身影在这条弥漫着玉兰香气的小路上渐渐远去。
  3. 道路被月光照亮,如同撒上了盐。我坐于阶梯之上,凝望着儿子的背影,在这满是玉兰花香的路上慢慢隐去。

步骤 2:选择最恰当的结果

  • 我选择了第一个句子:"月光洒在道路上,仿佛覆盖了一层盐。我坐在台阶上,看着儿子的背影,在这条充满玉兰花香的路上逐渐消失。"

步骤 3:润色

  1. 月光如盐般洒落路面,我静坐阶前,目送儿子渐行渐远,那条飘荡着玉兰花香的小径尽头。
  2. 在月光似盐般铺展的道路旁,我静静坐在台阶上,目睹儿子的背影在散发着玉兰花香的小道上缓缓消逝。
  3. 月光如盐般倾泻而下,照亮了小路,我坐在台阶上,眼见儿子的背影在玉兰花香中渐渐淡出视线。

最终结果

结合以上三个版本的优点,最终润色如下: 月光如盐般倾泻而下,照亮了小路,我静静地坐在台阶上,眼见儿子的背影在玉兰花香中渐渐淡出视线。 这一句不仅保留了原句的意思,还增添了诗意与情感深度,符合中文的表达习惯。

总结

可以从上图看到,随着Prompt的不断优化,大模型返回结果的综合得分指数一直在提高。但是并不是所有场景都适合这样的优化路径,PE不是银弹,不能一劳永逸,需要不断尝试,不断优化。

相关推荐
董厂长1 小时前
langchain :记忆组件混淆概念澄清 & 创建Conversational ReAct后显示指定 记忆组件
人工智能·深度学习·langchain·llm
G皮T4 小时前
【人工智能】ChatGPT、DeepSeek-R1、DeepSeek-V3 辨析
人工智能·chatgpt·llm·大语言模型·deepseek·deepseek-v3·deepseek-r1
雷羿 LexChien6 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
堆栈future6 小时前
上下文工程(Context-Engineering): AI应用核心技术剖析
llm·ai编程·mcp
亚里随笔7 小时前
L0:让大模型成为通用智能体的强化学习新范式
人工智能·llm·大语言模型·rlhf
吴佳浩8 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩9 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm
Spider_Man11 小时前
🚀 从阻塞到丝滑:React中DeepSeek LLM流式输出的实现秘籍
前端·react.js·llm
大模型开发11 小时前
Java开发者LLM实战——使用LangChain4j构建本地RAG系统
程序员·langchain·llm
用户307429716715811 小时前
LLM-as-a-Judge :构建可扩展的自动化 AI 评估体系
llm·aigc