提示工程概述
提示工程(Prompt Engineering)是一门新兴学科,类似于为大语言模型(LLM)设计的'语言游戏'。通过掌握这个游戏的规则,我们可以更有效地引导 LLM 处理问题,理解其能力与局限。有效的提示工程不仅能提升模型处理复杂问题的能力(如数学推理),还能增强其扩展性(如结合专业领域知识和外部工具)。
本文总结了大语言模型(LLM)提示工程的六大核心策略,包括清晰表达指令、提供参考文本、任务分解、给予思考时间、使用外部工具及系统测试。深入探讨了进阶技巧如零/少样本提示、思维链(CoT)、自一致性、从易至难(LtM)及思维树(ToT)。此外,详细介绍了结构化 Prompt 的写作方法、优势及实施建议,并结合常见误区提供了优化方案,旨在帮助开发者构建更可靠的 AI 应用系统。

提示工程(Prompt Engineering)是一门新兴学科,类似于为大语言模型(LLM)设计的'语言游戏'。通过掌握这个游戏的规则,我们可以更有效地引导 LLM 处理问题,理解其能力与局限。有效的提示工程不仅能提升模型处理复杂问题的能力(如数学推理),还能增强其扩展性(如结合专业领域知识和外部工具)。
这些技巧旨在提供思路,您应随意尝试创造性方案。
为了获得高度相关的回复,查询需要提供重要的细节或上下文信息,否则模型需要猜测意图。
| 劣质示例 | 优质示例 |
|---|---|
| Excel 中如何相加数字? | 在 Excel 中如何对一行金额自动相加?我想对整个工作表的行进行求和,总和显示在右边一列'总计'中。 |
| 谁是总统? | 2021 年墨西哥总统是谁,选举频率是多久一次? |
| 编写代码计算斐波那契数列。 | 用 TypeScript 编写一个函数来有效地计算斐波那契数列。对代码添加详细注释以解释每个部分的作用及编写方式。 |
| 摘要会议记录。 | 用一段话摘要会议记录。然后用 markdown 列表罗列发言人及每个人的要点。最后,列出会议记录中发言者提出的后续步骤或行动事项 (若有)。 |
系统消息可用于指定模型在回复时采用的角色。
三引号、XML 标签、标题等分隔符可以帮助标记需不同对待的文本片段。任务越复杂,明确任务细节就越重要。
有些任务最好用一系列步骤来表达。明确写出步骤可以让模型更容易遵循。
在所有示例上演示任务的各种变化通常比仅给出说明更高效。这被称为'few-shot'提示。
您可以要求模型生成特定目标长度的输出。目标输出长度可以以单词数、句子数、段落数、项目符号数等来指定。但是,指示模型生成特定数量的单词不能高精度实现。模型可以更可靠地生成特定段落数或项目符号数的输出。
如果我们能为模型提供与当前查询相关的可信信息,那么我们可以指示模型使用提供的信息来组成其回答。鉴于 GPT 模型具有有限的上下文窗口,我们需要某种方法根据问题动态查找相关信息并添加到模型输入中。嵌入可用于实现高效的知识检索。
如果输入补充了相关知识,则可以轻松要求模型在答案中添加引文,引用提供文档的相关段落。输出中的引文然后可以通过与提供文档的字符串匹配来程序化验证。
对于需要大量独立指令集来处理不同情况的任务,首先对查询进行分类以确定所需指令会很有益。该过程也可以递归应用以将任务分解成一系列阶段。这种方法的优点是每个查询只包含执行任务下一阶段所需的指令,这可以与使用单个查询执行整个任务相比降低错误率。
例如,对于客户服务应用,查询可以划分为以下类别:
根据客户查询的分类,可以为 GPT 模型提供更具体的指令来处理后续步骤。注意,模型被指示在对话状态发生变化时输出特殊字符串。这使我们可以将系统转化为状态机。
由于 GPT 模型具有固定的上下文长度,因此将整个对话包含在上下文窗口内的用户与助手之间的对话无法无限期地继续。 一种解决方法是在输入大小达到预定阈值长度时,使用一个查询来总结对话的一部分,并将之前对话的摘要包含在系统消息中。或者,可以在整个对话的过程中异步地在后台总结之前的对话。 另一种解决方案是动态选择与当前查询最相关的之前对话部分。
要摘要像书籍这样的非常长文档,我们可以使用一系列查询逐部分摘要文档。部分摘要可以连接在一起生成摘要的摘要。该过程可以递归进行,直到整个文档被摘要。
有时候明确地让模型先自行推理出答案再回复用户,可以获得更好的效果。
SYSTEM: 首先自己解出这道题并生成答案。然后再比较你的答案和学生的答案,判断学生的答案是否正确。在比较之前,不要依赖学生的答案来决定其是否正确。
USER: <插入题目>
<插入学生答案>
ASSISTANT: <模型先生成自己的答案>
<模型比较两个答案并作出评价>
有时我们不想让用户看到模型的全部推理过程,只需要展示最后的回复。这时可以使用'内心独白'把需要隐藏的部分放入特定格式中,在展示给用户前把这些部分删除。
#隐藏查询 1: 仅提供问题描述,让模型解出答案
#隐藏查询 2: 提供问题描述、模型解答和学生解答,让模型判断学生解答的正确性
#可见查询:假设模型是一个有帮助的导师,如果学生错误,给出提示;如果正确,给予鼓励
当我们要求模型列举某文本中的所有相关摘录时,模型常会过早停止而未罗列全部。这时可以在前几轮查询后,再询问模型是否还遗漏了相关内容,以获取更完整的结果。
我们可以在模型的输入中加入相关的外部信息,帮助其生成更准确的回复。通过使用文本嵌入可以实现高效的知识检索,从而动态地在运行时将相关信息加入模型输入中。
GPT 模型自己进行算术运算或长时间计算时误差很大。这时可以让其编写代码进行运算并运行。代码执行也可以用来调用外部 API。需要注意,运行模型生成的代码有安全风险,需要采取防护措施。
适当的评估流程对优化系统设计非常有用。好的评估应该具有代表性、包含足够多的测试用例。评估可以由计算机、人工或两者混合来进行。OpenAI Evals 提供了用于构建自动评估的开源工具。
如果问题的正确答案需要包含某些已知的事实,我们可以用模型查询来统计答案中包含了多少需要的事实。
{
"count": <yes 的个数>
}
如果答案满足所有要点,count 将为要点的总数。这样可以构建不同的模型评估变体来统计答案与标准答案的重合情况。
评估程序(或'测评')对优化系统设计很有用。好的测评应该具有以下特点:
| 需检测的差异 | 需样本量 (95% 置信度) |
|---|---|
| 30% | ~10 |
| 10% | ~100 |
| 3% | ~1000 |
| 1% | ~10000 |
模型输出的评估可以由计算机、人类或两者的组合来完成。对于输出范围广泛且同等高质量的问题,基于模型的测评可发挥作用。
Zero-Shot Prompting:模型接收到的提示没有包含任何特定任务的示例。这意味着模型需要基于给定的提示,而没有任何相关任务的先前示例,来推断出应该执行的任务。
Few-Shot Prompting:模型接收到的提示包含了一些(通常是几个)特定任务的示例。这些示例作为上下文,提供了关于期望输出的线索。
English: 'Cat'
French: 'Chat'
French: 'Oiseau'
English: 'Elephant'
在这个例子中,模型通过前三个英法翻译对的示例,理解了我们希望它将'Elephant'从英文翻译成法文。
CoT 的核心思想是,在 Prompt 中加入一些示例,来引导 LLM 展现出更好的推理能力。关键是在 Prompt 中加入的示例中,用自然语言描述一系列的推理过程,并最终引导出示例问题的正确结果。
少样本思维链:用户提供一些'解题步骤',通过在 prompt 中告诉模型解答步骤,最终给出的答案就是准确的。
零样本思维链:通过一句 magic prompt 实现了这一目标——'Let's think step by step'。
自动化思维链:通过采用不同的问题得到一些推理过程让 LLM 参考。核心思想分两步:首先进行问题聚类,把给定数据集的问题分为几个类型;采样参考案例,每个类型问题选择一个代表性问题,然后用零样本思维链来生成推理的中间过程。
Self-Consistency 技术是在 CoT 技术的基础之上进行的进一步优化,目的是为了让 LLM 的推理能力能够更进一步提升。
大致原理如下:
这是《Least-to-Most Prompting Enables Complex Reasoning in Large Language Models》这篇论文中介绍的方法。LtM 是为了解决 CoT 这种从易到难的迁移能力不足而诞生的。
LtM 的核心思想是:教 LLM 把复杂问题,拆解成一系列的简单问题,通过解决这一系列的简单问题,来最终得到复杂问题的结果。
LtM 的过程包含两个阶段:
ToT 是思维链的进一步拓展,主要想解决 LM 推理过程存在如下两个问题:不会探索不同的可能选择分支;无法在节点进行前后向的探索。 ToT 将问题建模为树状搜索过程,包括四个步骤:问题分解、想法生成,状态评价以及搜索算法的选择。
主要考虑的是代码生成方向,不过思想还是可以用在各种领域的提问的。核心思想分为三步:
结构化的思想很普遍,结构化内容也很普遍。结构化 Prompt 的思想通俗点来说就是像写文章一样写 Prompt。为了阅读、表达的方便,我们日常有各种写作的模板。所以结构化编写 Prompt 自然也有各种各样优质的模板帮助你把 Prompt 写的更轻松、性能更好。
知名的 CRISPE 框架分别代表以下含义:
而我们所提倡的结构化、模板化 Prompt,通常采用 Markdown 语法或 YAML/JSON 数据结构。
#Role: 诗人
##Profile
- Author: YZFly
- Version: 0.1
- Language: 中文
- Description: 诗人是创作诗歌的艺术家...
###擅长写现代诗
1. 现代诗形式自由...
##Rules
1. 内容健康,积极向上
##Workflow
1. 让用户以'形式:[], 主题:[]'的方式指定诗歌形式,主题。
2. 针对用户给定的主题,创作诗歌...
##Initialization
作为角色<Role>, 严格遵守<Rules>...
基于上述 诗人 prompt 例子,说明结构化 prompt 的几个概念:
#, <> 等符号,依次标识标题、变量,控制内容层级。Role, Profile, Initialization 等等,属性词包含语义,是对模块下内容的总结和提示。结构清晰,可读性好。Role 作为 Prompt 标题统摄全局内容。Profile、Rules 作为二级标题统摄相应的局部内容。
结构化表达同时降低了人和 GPT 模型的认知负担。对人来说,Prompt 内容一目了然。对 GPT 模型来说,标识符标识的层级结构实现了聚拢相同语义,梳理语义的作用。
使用特定的属性词能够确保定向唤醒模型的深层能力。例如一级标题设置的就是 Role(角色)属性词,直接将 Prompt 固定为角色。再比如 Rules,规定了模型必须尽力去遵守的规则。
Prompt 越来越像新时代的编程语言。在生产级 AIGC 应用的开发中,结构化 prompt 使得 prompt 的开发也像代码开发一样有规范。结构化 Prompt 的这些规范,这些模块化设计,能够大大便利于 prompt 后续的维护升级,便利于多人协同开发设计。
一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。如 LangGPT 中展示的模板设计时就考虑了如下思维链:
Role (角色) -> Profile(角色简介)—> Profile 下的 skill (角色技能) -> Rules (角色要遵守的规则) -> Workflow (满足上述条件的角色的工作流程) -> Initialization (进行正式开始工作的初始化准备) -> 开始实际使用
包含两个方面,一个是格式语义一致性,一个是内容语义一致性。格式语义一致性是指标识符的标识功能前后一致。内容语义一致性是指思维链路上的属性词语义合适。
结构化 Prompt 编写思想是一种方法,与其他例如 CoT, ToT, Think step by step 等技巧和方法并不冲突。从 prompting 的角度有哪些方法可以提高大模型在复杂任务上的性能表现呢?
上面这些方法最好结合使用,以实现在复杂任务中实现使用不可靠工具(LLMs)构建可靠系统的目标。
在实际应用中,除了掌握上述策略,还需要注意以下几点以避免常见误区:
提示工程是连接人类意图与大模型能力的桥梁。通过清晰指令、参考文本、任务分解、思维链、外部工具以及结构化设计,我们可以显著提升 LLM 的表现。随着技术的演进,Prompt 工程正逐渐向工程化、标准化方向发展,成为 AI 应用开发中的核心技能之一。开发者应持续学习新的策略与工具,以适应快速变化的技术环境。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online