
Prompt 工程是什么
Prompt 工程是什么
Prompt 工程依赖于大语言模型本身的泛化能力。通过设计更清晰的提示词,可以让模型在不进行下游任务训练的情况下,更准确地理解任务要求并提升输出质量。
换句话说,Prompt 工程的目标不是重新训练模型,而是把任务描述得足够清楚,让模型知道“要做什么、依据什么做、怎么回答”。
一个基础的 Prompt 通常包含四个核心元素:
- 任务说明
- 上下文
- 问题
- 输出格式
例如:
任务说明:请判断下面这段评论的情感倾向。
上下文:情感倾向只分为“正面”“负面”“中性”三类。
问题:这家店的服务还行,但上菜太慢了。
输出格式:只输出分类结果和一句简短理由。
任务说明
明确告诉模型要做什么
任务说明是 Prompt 中最直接的部分,用来向模型提出明确要求。
如果希望模型完成分类任务,就应该在提示词里直接说明“请完成分类”。这类任务不一定需要专门训练一个分类模型,因为大语言模型本身具有较强的泛化能力,并且在大规模数据上训练过,所以能够理解和完成多种不同类型的任务。
例如:
请将下面的文本分为“技术问题”“产品建议”或“其他反馈”三类。
文本:登录页面有时候会卡住,刷新后才能进入。
这里的“请将下面的文本分为……”就是任务说明。它让模型知道当前任务不是续写、总结或翻译,而是分类。
分词方式与 Token 消耗
Prompt 太长会占用较多 Token,因此理解分词方式也很重要。
大语言模型不会直接按照人类理解的“字”或“词”来处理文本,而是先通过分词器把文本切分成 Token。不同模型使用的分词器不同,切分方式也可能不同。
例如,“你”和“好”单独看是两个字,但“你好”组合后形成了新的常用表达。分词器可能会把“你好”视为一个整体 Token,也可能根据具体规则拆分。这样做有两个作用:
- 帮助模型更好地区分单字、词语和固定表达。
- 在推理时减少 Token 数量,从而降低消耗。
所以,写 Prompt 时不一定越长越好。更好的方式是用清晰、紧凑的语言表达任务要求,避免无关背景占用上下文空间。
上下文学习
通过上下文帮助模型理解任务
上下文学习指的是:通过给模型提供背景、规则或示例,让模型更好地理解任务范式和回答范式。
根据示例数量的不同,可以分为:
- 零样本学习:不给示例,直接让模型完成任务。
- 单样本学习:给一个示例,让模型模仿格式。
- 少样本学习:给多个示例,让模型从中归纳规律。
如果只是普通问答,且不需要固定格式,通常可以使用零样本提示。
如果希望模型按照指定格式输出,或者希望增强模型对任务的理解,可以使用单样本或少样本提示。
例如,零样本提示:
请总结下面这段话的核心观点。
单样本提示:
示例:
输入:今天下雨,但我还是按时到公司了。
输出:事件:下雨;结果:按时到公司。
请按照上面的格式处理:
输入:电脑突然蓝屏,我重启后恢复正常。
少样本提示则可以给出多个类似示例,让模型更稳定地理解输出格式。
示例选择
示例选择的关键在于相似性和多样性。
如果示例和当前任务差异太大,模型就难以理解真正需要模仿的范式。
如果示例过于单一,模型也可能只学到很窄的模式,无法应对稍有变化的问题。
常见的示例检索方法包括:
- 直接检索:根据当前问题查找最相似的示例。
- 聚类检索:先把示例按类型分组,再从相关分组中选择代表性示例。
- 迭代检索:先用初步结果检索示例,再根据反馈继续调整和补充。
实际使用中,Prompt 为什么有效,很多时候也是通过不断试验总结出来的。理论可以提供方向,但具体效果仍然需要结合模型和任务进行测试。
思维链
什么是思维链
思维链提示(Chain-of-Thought,CoT)是一种让模型模仿人类解题过程的提示方法。它不是只要求模型给出答案,而是引导模型按步骤进行推理。
以数学题为例,老师通常会要求写出解题过程,而不是只写最后答案。对大模型来说,推理过程也能帮助它更稳定地完成复杂任务。
不过,现在很多模型的内部推理过程会被隐藏或压缩,不一定完整展示给用户。这有点像人做题时会在草稿纸或脑子里思考,但最后写在答题纸上的只是必要步骤和答案。
按部就班
“按部就班”的思维链方式,是把问题拆成多个步骤,让模型沿着给定思路继续推理。
如果把一段思考过程和问题一起交给模型,模型通常会沿着前面的推理继续生成结果,或者根据这个思路处理类似问题。
这是因为大语言模型本质上是在预测下一个 Token 的概率。清晰的思考步骤可以减少模型随意发散的空间,让它更容易按照用户预期的方向继续推理。
例如:
请按以下步骤回答:
1. 先列出已知条件。
2. 再判断需要求什么。
3. 最后给出计算过程和答案。
三思后行
“三思后行”的方式不一定要求用户提前提供完整推理过程,而是让模型在回答前先检查自己的思路,删除不必要或不可靠的部分,保留更可能正确的路径。
这种方法的难点在于:模型是否真的能判断哪些思路正确,哪些思路错误。人类有时也难以完全理解自己的思考过程,更不用说模型。因此,这类方法有一定帮助,但不能完全依赖。
更稳妥的做法是让模型给出可验证的中间结论,例如:
请先列出可能的原因,再逐条排除,最后给出最可能的结论。
集思广益
“集思广益”的方式是让模型从多个角度并行思考,再选择其中更合适的答案。
它类似于让模型提出多个解法、多个假设或多个判断标准,然后再进行比较。这个过程有点像多头注意力机制中从不同角度捕捉信息,但在 Prompt 层面上,它体现为“多方案生成 + 选择最优解”。
例如:
请分别从性能、可维护性和用户体验三个角度分析这个方案,然后给出综合建议。
这种方式适合开放性问题、方案评估和复杂决策。
规范 Prompt 编写
按结构组织提示词
规范的 Prompt 可以按照“四个基本元素”来组织:
- 任务说明:告诉模型要做什么。
- 上下文:提供背景、规则、限制条件或示例。
- 问题:给出需要模型处理的具体输入。
- 输出格式:说明希望模型如何回答。
例如:
任务说明:请帮我把下面的会议记录整理成待办事项。
上下文:
- 待办事项需要包含负责人、任务内容和截止时间。
- 如果没有明确截止时间,写“未说明”。
问题:
小王负责整理用户反馈,下周三前完成。小李需要检查新版登录页,但没有说具体时间。
输出格式:
| 负责人 | 任务内容 | 截止时间 |
| --- | --- | --- |
复用优秀 Prompt
如果觉得从零编写 Prompt 比较麻烦,可以直接参考别人写得好的 Prompt,再根据自己的任务稍作修改。
但复用时不要只复制表面格式,而要看清楚它解决了什么问题:
- 是否明确说明任务?
- 是否提供了足够上下文?
- 是否给出了具体输入?
- 是否规定了输出格式?
只要这四部分清楚,Prompt 通常就会更稳定、更容易复用。
小结
Prompt 工程的核心不是写得越复杂越好,而是让模型更准确地理解任务。
一个有效的 Prompt 通常需要明确任务、提供上下文、提出具体问题,并规定输出格式。对于复杂任务,可以通过示例、思维链和多角度分析来提升模型的回答质量。不过,这些方法都会增加一定的 Token 消耗;有时给模型更多思考模式,可以减少模型无效发散,但也会增加人脑设计 Prompt 的成本。简单来说,就是用脑力换 Token 和稳定性。