掘金 人工智能 11月12日 13:35
提示工程指南,提升大模型输出质量
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

提示工程是通过设计高质量的提示词来引导大语言模型(LLM)精准输出的过程。它涉及选择合适的模型、优化模型配置(如输出长度、采样控制、频率/存在惩罚等)、运用提示技巧(如zero-shot、one-shot、few-shot、系统提示、角色提示、上下文提示、Step-back prompting、思维链CoT、自我一致性Self-Consistency、思维树ToT、ReAct等)以及遵循最佳实践(如提供示例、设计简洁、明确输出要求、使用指令而非限制、控制最大token长度、使用变量、尝试不同输入格式和风格、适应模型更新等)。本文详细介绍了这些关键概念和技术,帮助开发者有效提升LLM的输出质量和效率。

💡 提示工程是通过设计高质量的提示词来引导大语言模型(LLM)精准输出的过程,涉及选择合适的模型、优化模型配置、运用多种提示技巧以及遵循最佳实践,旨在提升LLM的输出质量和效率。

🔧 LLM的输出配置优化至关重要,包括调整输出长度(Max tokens)、采样控制(温度Temperature、Top-K、Top-P)、频率惩罚(Frequency Penalty)、存在惩罚(Presence Penalty)、停止序列(Stop Sequences)和上下文窗口(Context Window)等参数,以满足不同任务的需求。

✍️ 提示词技巧多种多样,如通用提示词/zero-shot(不提供示例)、one-shot & few-shot(提供单/多个示例)、系统提示词(System prompting,设定宏观任务和背景)、角色提示词(Role prompting,分配特定角色或身份)、上下文提示词(Contextual prompting,提供具体细节或背景)、Step-back prompting(后退一步提示,先思考通用性问题再处理具体任务)、思维链(CoT,生成中间推理步骤)、自我一致性(Self-Consistency,结合采样与多数投票)、思维树(ToT,探索多条推理路径)和ReAct(推理和行动,形成思考-行动循环)等,每种技巧都有其独特的应用场景和优势。

📈 自动提示工程(APE)通过提示词生成提示词,减少人工输入负担并提升模型表现,其核心流程包括让模型生成多个提示候选、评估并筛选、选择最优提示,可实现持续优化。

🔍 提示工程最佳实践包括提供示例、设计简洁、明确输出要求、优先使用指令而非限制、控制最大token长度、在提示词中使用变量、尝试不同的输入格式和写作风格、分类任务建议、适应模型更新、尝试不同的输出格式、JSON修复、使用JSON模式、与其他提示工程师共同实验以及详细记录各类提示尝试等,这些实践有助于开发者更有效地利用LLM并获取高质量的输出结果。

引入

随着大模型的快速发展,作为一名程序员,切身感受到了日常工作方式正在发生巨大变化。拥抱 AI 已经成为不可逆转的趋势,然而学习RAG、Agent这类技术,不能及时反馈到日常工作中,有一定的滞后性。

在应用侧,有一个更直接、有效的切入点 -- 提示词(prompt)。提示词的质量直接决定了大模型输出的质量,对于开发人员来说,学习完成后就能够快速上手、即时获益,是开启大模型学习之路性价比之选。

然而,编写提示词并不是一件容易的事情,以下方面可能会影响prompt的效果:

以上诸多因素都会影响最终的输出,因此编写提示词不能仅仅看作是简单的提问技巧,而应该当作一个系统工程来看待。提示工程应运而生,本文主要介绍提示工程、提示词的编写技巧等。

1. 什么是提示工程?

LLM本质上是一个预测引擎,基于训练的数据,获取序列化的文本作为输入,然后预测接下来的token(分词)应该是什么。而下一个 token 是基于前一个 token 和训练时 LLM 看到了什么决定的。

当编写 prompt ,实际上在为 LLM 设置预测 token 序列的参数。

Prompt Engineering提示工程):通过设计高质量的提示词来引导 LLM 精准输出的过程,包括:反复调试找到最佳的 prompt ,优化 prompt 长度,评估 prompt 的写作风格和结构是否符合任务要求。

在自然语言处理和LLM的情境下,prompt 就是提供给模型的输入,用来产生预测的回答

提示词能用来实现不同种类的理解和生成任务,如:

提示工程第一步,就是先选择模型。针对具体的模型需要做优化,无关通过什么方式调用模型。除了prompt,同样需要调整LLM的配置。

2. LLM输出配置

选择模型后,需要确定模型的配置。大多数LLM都提供多种输出配置选项。有效的提示工程需要根据任务对配置设置进行优化。

2.1 输出长度

2.1.1 什么是Token?

TokenLLM处理文本的基本单位,可以是单个单词、单词的一部分(例如子词)、字符或标点符号。LLM在训练和推理时,不是直接处理整段文字,而是将文本拆分成一系列的 Token,再进行分析和生成。

2.1.2 如何设置输出长度?

Max tokens:决定模型在一次生成中最多可以输出的token数量

【注】缩短 LLM 的输出长度并不会使其在生成文本时风格或表达上更简洁,只是让模型在达到长度限制后停止继续预测 token。

2.1.3 为什么需要设置输出长度?

生成更多的 token 要 LLM 进行更多计算,这会导致更高的能耗更慢的响应速度以及更高的成本

对于 LLM 的某些提示技术(如:ReAct)来说,模型在生成出所需响应后仍会持续输出无用的 token,针对这种情况,限制输出长度尤为重要。

2.1.4 如何根据场景设置参数?

较小的 token 数值适用于聊天机器人对话和摘要生成等快速任务

较大的 token 数值则更适合需要较长输出的场景,例如使用大语言模型进行氛围式编程(vibe coding)时。

原则:够用即可,宁短勿长

2.2 采样控制配置

LLM 并不会直接预测单个 token。相反,它们会为下一个可能的 token 预测概率词汇表中的每个 token 都会被赋予一个相应的概率。然后通过对这些 token 概率进行采样,来确定下一个实际输出的 token。

温度(temperature)、top-Ktop-P 是最常见的采样配置参数,用于决定如何处理预测出的token概率,从而选择一个单一的输出token

2.2.1 温度(Temperature)

温度Temperature):控制token选择的随机程度

温度为 0(贪心解码)是完全确定的:总是选择概率最高的 token。温度值越接近最大值,生成的输出越随机

【注】温度为 0 时也可能不总是得到完全相同的输出。如果两个 token 的预测概率相同,则根据具体实现中的平局处理机制tiebreaking)处理。

2.2.2 Top-P

Top-P(核采样):从概率最高的候选词开始筛选,直到所选词条的累积概率超过设定阈值P

P的取值范围:0-1。

P值越高,候选的单词就越多,可以提高多样性和创意。

2.2.3 Top-K

Top-K:从模型预测的概率分布中选择概率最高的前K个token。

Top-K为1等同于贪心编码

2.2.4 如何根据场景合理设置采样参数值?

2.2.4.1 参数协同工作机制
2.2.4.2 极端设置影响
参数设置影响
温度设为0top-K和top-P失效,始终选择最高概率标记
温度设得极高(>1,通常达到几十)温度失效,从通过top-K/P筛选的标记中随机选择
top-K设为1温度和top-P失效,仅选择最高概率标记
top-K设得极高(如:词汇表大小)所有非零概率标记均符合条件
top-P设为0仅考虑最高概率标记,使温度和top-K失效
top-P设为1所有非零概率标记均符合条件
2.2.4.3 实践推荐配置
场景温度Top-PTop-K效果
平衡输出0.20.9530相对连贯且适度创意
高创造性0.90.9940增强创意表现
保守输出0.10.920减少随机性
确定性任务(如:数学解题)0----确保结果一致

【注】

2.3 频率惩罚(Frequency Penalty)

频率惩罚frequency penalty):用于防止模型在单次输出过度使用某些词语。

惩罚高频出现的 token,减轻重复用词问题,比存在惩罚关注频次。当 token 每次出现时施加惩罚,降低重复出现的概率,提高多样性,作用于高频token

2.4 存在惩罚(Presence Penalty)

存在惩罚presence penalty):抑制已出现过的 token 再次出现,鼓励引入新话题或词汇,作用于已出现token

例如:如果词语bear在输出中出现了10次,而词语fox只出现了一次,那么bear的频率惩罚会高于fox。但是,bear和fox的存在惩罚却是相同的。

在不确定的情况下,“存在惩罚”和“频率惩罚”建议都设置为 0,这是一个最安全的选择。如果发现模型的输出内容乏味,缺乏创意和多样性,再适当调整。

2.5 停止序列(Stop Sequences)

停止序列stop sequence):定义一个或多个字符串,当模型生成到该序列时立即停止输出。例如,如果一个模型被设计为一次只输出一个句子,那么停止序列可能就是一个句号。

停止序列能够在不影响模型在停止前生成内容方式的前提下,保持回复的简洁性。由于它们会截断模型的响应,因此在通过 API 调用大语言模型时,使用停止序列还有助于节省 token 的消耗成本

2.6 上下文窗口(Context Window)

上下文窗口Context Window): 模型在生成回答时考虑的 Token 数量,决定了模型能够捕捉信息的范围。上下文窗口越大,模型能够考虑的信息就越多,生成的回答也就越相关和连贯。

更大的上下文窗口能带来更高的准确性、更少的幻觉现象,并具备处理更长文档或进行更长对话的能力。然而,较大的上下文窗口也需要更多的计算资源,并可能导致生成回复所需的处理时间延长。

上下文窗口通常是模型的固有属性,由训练决定,无法由用户直接配置。

3. 提示词技巧

LLM经过基于海量数据的训练,能够理解和遵循prompt,从而理解prompt并生成相应的回答。但是,LLM并不完美。prompt越清晰、具体,模型就越能准确预测出符合预期的下一个词或句子。

除此之外,如果能够运用一些专门的技术,充分利用LLM的训练机制和工作原理,能够更有效地引导模型输出相关、准确且高质量的结果。

接下来介绍最重要、最实用的提示技术及其实际示例。

3.1 通用提示词/zero-shot

3.1.1 什么是zero-shot ?

zero-shot(零样本):不提供示例

zero-shot prompt:仅提供一项任务的描述,以及一段供LLM开始处理的文本。这种输入可以是任何形式:一个问题、一个故事的开头,或一组指令。

3.1.2 Prompt示例

zero-shot提示效果不佳时,可以在prompt中提供示范或示例,这就引出了one-shot(单样本)和few-shot(少样本)提示方法。

3.2 one-shot & few-shot

3.2.1 什么是one-shot、few-shot?

3.2.2 如何确定few-shot的示例数量?

示例的数量取决于多个因素,包括任务的复杂程度、示例的质量,以及使用的生成式AI(gen AI)模型的能力。

通常来说,进行few-shot时应至少提供三到五个示例。然而,对于更复杂的任务,可能需要更多示例;或者由于模型输入长度的限制,也可能不得不减少示例的数量。

3.2.3 Prompt 示例

3.2.4 选择示例注意事项

选择示例时,要遵循以下原则:

边缘情况:不常见或出乎意料的输入,但模型仍然应该能够正确处理它们。

请将以下评论分类为 positive、negative 或 neutral。示例 1: 评论: 这部电影太棒了!演员演技出色,剧情扣人心弦。 分类: positive 示例 2: 评论: 浪费时间,特效差,故事无聊。分类: negative 示例 3(边缘情况 - 模糊表达): 评论: 挺一般吧,没什么特别的。分类: neutral 现在请分类: 评论: 嗯...说不上好,也说不上坏,还行。分类:

3.3 系统,上下文与角色提示

系统、上下文、角色提示词都是用来指导LLM如何生成文本,但是关注的点不同:

这三种提示之间可能存在显著的重叠。例如,一个为系统分配角色的提示,也可能包含具体的上下文信息。

但是,每种提示类型的主要目的略有不同:

3.3.1 系统提示词(System prompting

系统提示词实际上意味为系统赋予一个额外的任务,对生成满足特定需求的输出很有用。如:

从用于提取数据的prompt中返回JSON对象有很多好处:

系统提示对于控制模型输出的安全性和避免有害内容也很有用。要控制输出,只需要在prompt添加一行:你的回答应该保持尊重You should be respectful in your answer)。

Prompt 示例

3.3.2 角色提示词(Role prompting

模型可以根据所分配的角色来调整其回应方式,为模型指定一个特定的角色。有助于模型生成更相关更具信息量的输出。

给模型指定一个特定的角色,相当于约束了模型回答的语气、风格和专业侧重,从而提升输出内容的质量、相关性和有效性。

以下是一些有效的表达风格,可以应用到prompt的编写中。如:对抗(Confrontational)、描述(Descriptive)、直接(Direct)、正式(Formal)、幽默(Humorous)、影响(Influential)、非正式(Informal)、启发(Inspirational)、说服(Persuasive)。

## Prompt请以幽默风格写一段关于气候变化对极地影响的文字,适合发布在社交媒体上,字数控制在100字以内## 模型输出北极熊最近上线了新副业:冰屋短租转卖,生意惨淡——因为“房源”全化了。  以前是“冰雪霸主”,现在是“泳坛健将”。  科学家说北极可能2035年无冰?  别慌,那是给企鹅腾地方——它们正考虑北上创业!  ## Prompt请以正式的风格写一段关于气候变化对极地影响的文字,适合书面文章,字数控制在100字以内## 模型输出气候变化正加速影响极地地区,北极变暖速率达全球平均水平的两倍以上。海冰持续消退、冰川融化、冻土解冻,不仅威胁生态系统,更通过反馈机制加剧全球变暖。极地变化已成为全球气候危机的重要标志,亟需采取协同行动应对。
Prompt示例

3.3.3 上下文提示词(Contextual prompting

通过提供上下文提示,可以确保与AI的交互更加顺畅高效。模型能够更快地理解你的需求,并生成更准确、更相关的回应。

Prompt 示例

3.4 Step-back prompting

3.4.1 什么是Step-back prompting?

Step-back prompting(后退一步提示):先引导模型思考一个与当前具体任务相关的通用性问题,然后将该通用问题的答案作为上下文,输入到后续处理具体任务的prompt中,从而提升模型表现。

就像考试时先复习概念,再做题,而不是直接瞎猜。

3.4.2 好处

3.4.3 Prompt 示例

3.5 思维链(CoT)

3.5.1 什么是CoT?

Chain of Thought(CoT思维链):通过生成中间推理步骤来提升大语言模型推理能力。可以将其与少样本提示结合使用,对于先推理再作答的复杂任务效果较好。

3.5.2 CoT优势有哪些?

3.5.3 CoT劣势是什么?

LLM的响应包含CoT推理过程,意味着需要输出更多token,导致预测成本更高、耗时更长。

3.5.4 Prompt示例

零样本CoT

可在prompt后面加上 让我们逐步思考 / Let's think step by step

单样本CoT

给定的样本Q/A,样本回答Answer中写明推理过程。

3.5.5 应用场景

任何可以通过逐步分析来解决的任务,都能使用CoT,只要能解释出解决问题的各个步骤,就可以尝试使用CoT

3.6 自我一致性(Self-Consistency)

3.6.1什么是Self-Consistency?

Self-Consistency(自我一致性):结合了采样多数投票机制,生成多样的推理路径,并使用生成结选择最一致的答案作为最终结果。

3.6.2 为什么需要Self-Consistency?

LLM本质上是一个语言预测模型,推理能力是通过模仿训练数据中的模式实现的,和人基于理解的深层逻辑推理有本质区别,因此在复杂推理任务中可能不稳定。

CoT可以通过prompt让模型像人类解题一样生成推理步骤,但采用贪婪解码greedy decoding)策略限制了有效性,如:

贪婪解码:模型在生成每一个词(token)时,都会计算出所有可能的下一个词的概率分布,选择概率最高的词作为输出。

3.6.3 Self-Consistency执行步骤

3.6.4 优、劣势

3.6.5 Prompt示例

通过对temperature参数设置不同的值,LLM的回答结果可能为 IMPORTANT or NOT IMPORTANT,基于上述例子,投票选择出现次数最多的结果 IMPORTANT 作为最终输出。

3.7 思维树(ToT)

3.7.1 什么是ToT?

Tree of Thoughts(思维树,ToT):允许LLM同时探索多条不同的推理路径,而不仅仅是沿着单一的线性思维链条前进。适合处理那些需要广泛探索的复杂任务

工作原理:维护一棵思维树,其中每个思维(thought)代表一个连贯的语言序列,作为解决问题的中间步骤。模型随后可以通过从树中的不同节点进行分支,来探索不同的推理路径。

3.7.2 Prompt示例

假设三位不同的专家来回答这个问题。所有专家都写下他们思考这个问题的第一个步骤,然后与大家分享。然后,所有专家都写下他们思考的下一个步骤并分享。以此类推,直到所有专家写完他们思考的所有步骤。只要大家发现有专家的步骤出错了,就让这位专家离开。请问...

3.8 ReAct(reason & act)

3.8.1 什么是ReAct?

Reason and act推理和行动ReAct):让LLM不再仅根据已有的知识直接生成答案,而是像人一样,通过语言进行推理、通过行动获取信息。

3.8.2 核心机制 & 工作流程

ReAct 提示的核心机制是将推理Reasoning)与行动Action)结合起来,形成一个思考-行动循环。其工作流程如下:

    思考LLM 首先对问题进行推理,并生成一个行动计划。行动:执行该计划中的操作。观察:观察执行结果,LLM 利用观察到的结果更新其推理,并生成新的行动计划。重复循环:这个过程循环往复,直到 LLM 找到问题的解决方案。

3.8.3 示例

3.9 自动提示工程(APE)

3.9.1 什么是APE?

Automatic Prompt Engineering(自动提示工程,APE):用提示词来生成提示词。不仅能够减少人工输入的负担,还能提升模型在不同任务中的表现。

3.9.2 APE 核心流程

3.9.3 Prompt示例

4. 最佳实践

4.1 提供示例

prompt中加入少量示例是提升大模型输出质量的核心方法,如:单样本学习(one-shot)或少样本学习(few-shot)。通过提供参考范例来引导模型生成更符合预期的准确且风格匹配的内容。

4.2 设计要简洁

设计prompt应遵循简洁原则,使用清晰、直接的语言和明确的动词指令,避免冗余信息,以确保模型能准确理解并执行任务。

一个简单的判断标准是:如果连你自己都觉得prompt混乱,那么模型很可能也会感到困惑。尽量避免使用复杂的语言,也不要提供不必要的信息。

## 修改前:我正在纽约旅游,想了解一下有哪些很棒的地方可以去。我带着两个3岁的孩子,我们在度假期间应该去哪里玩呢?## 修改后:扮演一名旅游向导,为游客推荐纽约曼哈顿适合3岁儿童游玩的景点。

4.3 明确输出要求

prompt中明确指定输出的格式、长度、风格等具体要求,避免模糊指令,以引导模型生成更精确、更符合需求的内容。

## 推荐做法(DO):生成一篇关于五大热门游戏主机的博客文章,共3段。文章应具有信息性且引人入胜,并以对话式的风格撰写。## 不推荐做法(DO NOT):  生成一篇关于游戏主机的博客文章。

4.4 优先使用指令而非限制

设计prompt时应优先使用明确的正面指令来引导模型该做什么,而非罗列不该做什么的限制;指令更高效、灵活且不易冲突,限制仅应在必要时作为补充,如:安全控制或严格格式。

## 正确做法生成一篇关于五大热门游戏主机的博客文章(一段)。仅讨论主机名称、制造商公司、发布年份和总销量。 ## 错误做法:生成一篇关于五大热门游戏主机的博客文章(一段)。不要列出具体的游戏名称。

4.5 控制最大 token 长度

通过设置Max tokens(最大令牌数)或在prompt中指定长度来控制模型输出的篇幅,确保回复简洁且符合预期。

用一条推文的长度来解释量子物理。

4.6 在提示词中使用变量

prompt中使用变量可实现动态输入和高效复用,便于在不同场景或应用程序中灵活替换内容,提升开发效率。

4.7 尝试不同的输入格式和写作风格

prompt的效果受格式、风格和措辞影响,应通过实验比较问题、陈述、指令等不同形式,以找到能为目标模型和任务生成最佳输出的表达方式。

不同的模型、模型配置、提示格式、用词选择以及提交方式都可能产生不同的结果。因此,有必要对提示词的属性进行实验,例如风格、用词以及提示类型(零样本、少样本、系统提示)。

4.8 分类任务建议

在分类任务的少样本提示中,应打乱示例的类别顺序,防止模型记忆顺序而忽略特征学习,从而提升其泛化能力;建议从6个示例起步进行测试和优化。

4.9 适应模型更新

应持续跟踪模型更新,及时调整提示策略,从而发挥新版本的优势,可以借助工具管理prompt的迭代与测试。

4.10 尝试不同的输出格式

对于结构化任务,优先尝试JSONXML等标准化输出格式,不仅能提升输出一致性、减少幻觉,还能保留数据类型和关系,便于后续处理与集成。

4.11 JSON 修复

虽然JSON格式的输出结构清晰、利于程序处理,但大量token的消耗易被截断导致无效的问题不容忽视;可以结合自动修复工具(如:json-repair ),从而提升可用性。

4.12 使用JSON模式

JSON Schema:可以理解为一份说明书或模板,用来规定一个JSON数据应该长什么样,定义了所提供的JSON输入所应具备的结构和数据类型。

使用JSON Schema结构化输入数据,可为LLM提供清晰的数据蓝图,提升其对关键信息的理解与关注度,减少歧义,并支持时间感知和数据关系建模。在大规模数据处理和复杂系统集成中效果显著。

4.13 和其他提示工程师共同实验

如果需要设计一个高质量的prompt,可以邀请多人共同尝试。当每位参与者都遵循本章所述的最佳实践时,仍会发现不同提示方案在性能上存在差异。这种多样性有助于识别更有效的提示策略,并通过比较和协作持续优化结果。

4.14 思维链(CoT)提示的最佳实践

使用思维链(CoT)提示时,必须将答案放在推理过程之后,,因为推理内容的生成会影响模型在预测最终答案时所接收到的tokens。

当结合CoTself-consistency方法时,需要能够从模型输出中明确提取出最终答案,并将其与推理过程分离开来。

对于CoT提示,应将温度(temperature)参数设为 0。

4.15 详细记录各类提示尝试

务必完整、详细地记录每一次的提示尝试,以便长期积累经验,明确哪些做法有效、哪些无效。

提示工程是一个迭代过程:不断设计和测试不同提示,分析并记录结果,根据模型表现优化提示,持续实验直至获得理想输出。当更换模型或调整模型配置时,也应回到之前使用的提示,继续进行实验和调优。

参考资料

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Prompt Engineering LLM 大语言模型 Natural Language Processing 人工智能 提示词 大模型学习
相关文章