提示词工程
提示词工程
提示词(Prompt)是产品经理与模型「沟通」的方式,也是 AI 产品最核心的「代码」。模型本身的能力是底座,但同一模型、同一任务,提示词写得好不好,输出质量可以差出一个量级——这不是玄学,而是有机制、有方法、可评测的工程。本文覆盖提示词为什么有效、基本结构、常用技巧、编写流程与产品化管理;更进阶的推理技巧与上下文工程见 高级提示词技巧,对抗攻击与防护见 提示词安全。模型的底层能力从哪来,见 大模型基础。
提示词为什么有效
要理解提示词为什么有效,先要理解模型在做什么。现代大语言模型的底层是 Transformer,它在训练时学会的任务本质上只有一个:给定前面已有的 token,预测下一个最可能的 token(Transformer 架构)。到了推理阶段,模型做的仍然是这件事——把你输入的所有内容当作「已有的 token 序列」,然后一个接一个地补全后续内容。
从这个角度看,提示词的作用就清楚了:
- 上下文 = 条件:模型生成的每一步,都以你给的上下文为条件。上下文里有什么、怎么组织,直接决定补全的方向。
- 模型在补全「你最可能想听的下一个 token」:它没有「理解你的意图」之外的额外通道,所有意图都必须写进上下文。
- 提示词质量 = 条件质量:条件清晰,概率分布就集中在正确输出的区域;条件模糊、互相矛盾,模型只能在开放空间里猜,输出自然不稳定、不可控。
一个直观的例子:问「解释一下 Transformer」,模型只能泛泛而谈;换成「面向 AI 产品经理,用『注意力机制解决了什么问题、位置编码解决了什么问题、为什么需要多层』三个角度解释 Transformer,每个角度不超过 100 字」,模型的知识组织方式会完全不同——因为你的提示词把「受众、角度、长度」这些条件都显式化了。
为什么「换一种说法」会激活不同的知识组织方式?模型在预训练时见过海量形态的文本:教材、论文、客服对话、技术博客……不同形态对应不同的「条件模式」。你的提示词越接近某个形态,模型就越倾向于按那个形态的知识组织方式补全。所以提示词工程本质上是在选择与任务最匹配的条件模式,而不是发明新的能力。
提示词与程序指令有相似之处(都用于控制系统行为、都需要明确目标与约束),但本质不同:程序指令是确定性语义,提示词是概率性控制——同样的提示词,会因采样参数、上下文变化、模型版本不同而输出不同结果。所以提示词不能替代工程约束:高风险场景必须配合结构化校验、权限控制、检索证据与监控(见 提示词安全),而不是只依赖一句「请严格遵守要求」。
提示词工程不是「把问题写得更礼貌」,而是把隐含需求显式化。模型的每一次「想当然」,都是你没有写清楚的条件。
基本结构
一个高质量的提示词通常包含六个要素。每一项都有它存在的理由,缺了哪一个,输出就会在对应维度上失去控制。
- 角色设定:告诉模型以什么身份、站在什么视角回答。
- 为什么:角色会激活模型在对应领域的知识组织方式和语言风格,「资深客服」和「技术专家」对同一个问题的处理方式完全不同。
- 示例:
你是一名经验丰富的售后客服,语气耐心、表达简洁,不承诺任何政策外权益。 - 任务描述:明确要做什么、怎么做、输出什么。
- 为什么:任务越具体,模型越不容易跑偏;「总结一下」和「用 5 条要点总结,每条不超过 30 字」是两种任务。
- 示例:
请判断用户留言的情感倾向,输出为正面/负面/中性之一。 - 上下文:提供完成任务所需的背景信息。
- 为什么:模型只依赖参数记忆时容易出错或过时;把业务背景、字段含义、参考资料放进上下文,回答才可追溯。
- 示例:
以下是产品 A 的退款政策原文(引用自 2026-08-01 更新版本):…… - 约束条件:说明不能做什么、必须满足什么。
- 为什么:约束把输出的「可能性空间」收窄,比如禁止编造、只基于给定材料、不得输出敏感信息。
- 示例:
只基于上文政策回答;政策未覆盖的情况回答「需要人工核实」,不得自行推断。 - 输出格式:指定结构化的产出形式。
- 为什么:应用系统需要可解析、可校验、可存储的结果,明确的格式能大幅降低后处理成本。
- 示例:
输出 JSON:{"label": "positive|negative|neutral", "evidence": "原文摘录", "confidence": 0-1}。 - 评价标准:说明什么样的答案算好答案。
- 为什么:模型并不知道你的「好」是什么;把「准确、完整、可引用、简洁」拆成可检查的标准,模型才知道往哪个方向收敛。
- 示例:
答案必须逐条引用上文来源,引用不到的内容不得出现。
把这六项拼起来,就是一份完整可用的提示词:
1 2 3 4 5 6 | |
几个常见的「结构失败」:
- 要素齐全但互相打架:角色说「简洁」,约束里又要求「详细展开」——优先级冲突会让模型无所适从;
- 上下文堆砌:把整个知识库、整段聊天记录都塞进去,关键信息被噪声淹没(如何管理上下文见 高级提示词技巧 的「上下文工程」);
- 格式要求自相矛盾:既要 JSON 又要「用 Markdown 排版」,模型只能二选一,输出必然不稳。
| 要素 | 写不好会怎样 | 反例 → 正例 |
|---|---|---|
| 角色 | 视角游移,时而客服时而律师 | 「回答我」→「你是资深售后客服」 |
| 任务 | 不知道到底要做什么 | 「帮忙看看」→「判断情感倾向并输出标签」 |
| 上下文 | 靠模型猜背景,容易出错 | 「总结这份文档」→「总结 2026-Q2 产品周报,重点是上线数据」 |
| 约束 | 越界承诺、编造事实 | 「回答吧」→「只基于资料回答,资料没有就说不知道」 |
| 格式 | 输出无法被程序消费 | 「输出结论」→「输出 JSON:{结论, 依据, 置信度}」 |
| 标准 | 不知道什么叫好 | 「好好写」→「每条结论必须引用来源,篇幅 200 字以内」 |
常用技巧
不同的任务类型,提示词的侧重点完全不同——先认任务,再选技巧,比套用「万能模板」有效得多:
| 任务类型 | 提示词侧重点 | 关键技巧 |
|---|---|---|
| 分类/打标 | 枚举定义 + 边界样本 | 少样本(含易混样本)、低温 |
| 信息抽取 | 字段 schema + 缺失值规则 | 结构化输出、验证器校验 |
| 摘要/改写 | 长度与保留重点 | 输出约束、检查清单 |
| 事实问答(RAG) | 引用约束 + 拒答策略 | 只基于资料、无答案拒答 |
| 数学/逻辑推理 | 步骤结构 | 思维链、自洽性 |
| 创意生成 | 风格 + 约束的平衡 | 高温、角色设定、禁止事项 |
注意:上表是「侧重点」,不是「只能这样」。真实任务几乎都是混合形态(客服既要做意图分类又要生成话术),按主任务选侧重点,再叠加次要技巧即可。
少样本(Few-shot)
少样本是在提示词里给模型若干「输入 → 正确输出」的示例,让模型从示例中理解任务的隐含标准(分类边界、输出风格、格式细节)。它的核心价值不是「教会模型新知识」,而是示范任务模式——模型能力本来就有,示例负责把「你要的判断标准」具象化。不给示例直接干叫 zero-shot,给一个叫 one-shot,给多个叫 few-shot;大多数复杂任务从 few-shot 起步最稳。
示例选择的原则:
- 与任务同分布:示例必须来自真实任务形态,而不是随手编的完美样例;
- 覆盖边界:除了典型样本,还要放难分、易错、边界情况的样本(如情感分类里的讽刺句、中性句);
- 格式完全符合目标 schema:示例本身就是「输出格式」的活标准;
- 互相不矛盾:示例之间标准不一致会让模型无所适从;
- 顺序稳定:最典型的示例放前面,线上示例顺序不要随意变。
示例数量与效果的关系是典型的边际递减:0 个示例在复杂任务上往往不稳;给 2-5 个高质量示例通常就能建立明显基线;继续增加示例收益越来越小,却会占用上下文、推高成本、稀释当前问题信息,甚至引入冲突模式。实践上先用 2-5 个示例打底,再用评测集对比不同示例组合,而不是盲目堆数量。
1 2 3 4 5 6 | |
注意少样本与微调的区别:少样本通过上下文临时示范,不改变模型参数,适合快速迭代、规则常变的场景;微调把行为标准写进参数,适合高频固定任务,但成本高、迭代慢。能用少样本解决的,不急着上微调。三种「教模型做事」的方式可以放在一起看:
| 方式 | 是否改参数 | 成本 | 适用 |
|---|---|---|---|
| 提示工程(含少样本) | 否 | 低,按 token 计费 | 快速迭代、规则常变、应用开发 |
| 微调 | 是 | 高(数据 + 算力) | 固定任务、稳定风格、高频调用 |
| 预训练 | 是 | 极高 | 基础能力构建,非应用层选择 |
思维链(Chain-of-Thought)
思维链(CoT) 是引导模型在给出结论前先进行逐步分析的提示方法。复杂的数学、逻辑、多步任务中,模型直接给答案容易跳步漏条件;把中间推理步骤展开,模型更可能逐项处理输入条件。
两种常见用法:
- 零样本思维链:在任务后追加一句「让我们一步一步想」,不需要示例即可触发分步推理;
- 显式步骤指令:在提示词里写死步骤结构,如「先列出已知条件 → 判断问题类型 → 分步解决 → 检查是否满足所有约束 → 给出最终答案」。
1 2 3 4 5 6 7 | |
什么时候有效:数学应用题、多步计算、逻辑推理、多条件业务规则判断、代码调试。什么时候不要用:简单事实问答(直接回答更高效)、固定格式抽取(分步只会增加输出长度)、低延迟高并发场景(成本与延迟都会上升)。
注意
模型生成的「推理过程」不等于可靠证明——它可能先编出答案,再生成看似合理的推理来「合理化」。推理文本只是辅助手段,关键结论仍需工具(计算器、检索、规则校验)或人工把关。对内部链路,可以让模型「内部分析、只输出结论与关键依据」,避免把冗长甚至错误的推理直接暴露给用户。
输出约束
输出约束是让模型输出「可被程序处理」的关键手段:
- 指定格式:JSON、表格、固定模板、要点列表,并给出字段、类型、枚举值与缺失时的占位值;
- 分隔符包裹:用明确的标记把用户内容、检索内容与指令区隔开,如
<user_input>...</user_input>; - 禁止事项:明确「不要输出额外解释」「不要用 Markdown 代码块包裹 JSON」「不确定时填 null」。
要 JSON 就不要只写「请输出 JSON」——给出字段、类型、枚举和失败值,模型才知道边界在哪:
1 2 | |
稳定的 JSON 输出不能只靠一句「请输出 JSON」,生产系统通常需要「提示词约束 + API 结构化输出能力 + schema 校验 + 失败重试」四层配合(详见 高级提示词技巧 的「结构化输出」一节)。
温度与采样参数
temperature 控制采样的随机性:温度越低,模型越倾向选高概率 token,输出稳定、可重复;温度越高,输出越发散、越有创造性,但格式错误与事实错误的风险也越高。top-p(核采样)只在累计概率达到 p 的 token 集合里采样,同样影响多样性。二者解决的是同一类问题(输出随机性),一般不要同时大幅调整,否则很难归因。
| 任务类型 | 温度建议 | 原因 |
|---|---|---|
| 分类、抽取、JSON 输出 | 0-0.3 | 要求稳定、可复现 |
| RAG 问答、客服回复 | 0.2-0.5 | 事实优先,适度自然表达 |
| 创意写作、头脑风暴 | 0.7-1.0 | 需要多样性 |
| 代码生成 | 0-0.3 | 正确性优先 |
另外注意 max tokens:设置过小会导致答案截断、JSON 不完整;设置过大会增加成本与延迟。让 max tokens 与任务匹配,抽取任务给短上限,长文生成给足余量。提示词与采样参数解决的是不同问题:模糊的提示词不会因为调低温度而变清晰,清晰的提示词也可能因为温度过高而格式崩坏——生产系统应把「提示词版本 + 模型版本 + 采样参数」作为同一套配置管理,任何一项变更都走同样的评测回归。
一个实践场景:分类任务把温度从 0.2 提到 0.8,你会发现同样输入时而分对时而分错;这不是提示词的问题,是采样参数的方差被放大了。反过来,创意任务把温度压到 0.1,输出会干巴重复——参数必须与任务类型匹配,且变更后要用评测集验证,而不是凭「感觉差不多」。
迭代式优化
提示词工程是工程,不是咒语——不存在一次写成的完美提示词,只有「写初版 → 测试 → 看失败案例 → 修改 → 再测试」的循环。迭代的两个纪律:
- 一次只改一个变量:同时改角色、改格式、改温度,失败了你不知道是哪个改坏的;
- 用测试集而不是凭感觉:单个案例的「感觉变好了」不可靠,必须在固定评测集上对比前后效果(流程见下节)。
一个典型的迭代记录长这样:v1 测试集通过率 70% → 失败案例集中在「政策外承诺」→ v2 增加约束「不得承诺政策外权益」→ 通过率 85% → 新失败集中在格式(JSON 偶尔带解释)→ v3 增加「不要输出额外文本」并接入 schema 校验 → 通过率 95%。每一步都有证据、可回退。
反问澄清与检查清单
两个容易被忽略但很实用的技巧:
- 反问澄清:当用户需求信息不足时,让模型先问清楚再回答,而不是直接猜。适用于需求分析、技术咨询、故障排查等场景。但要规定触发条件,避免滥用:「只有当缺少会改变答案的关键条件时才提问;否则基于合理假设直接回答,并标注假设。」客服场景中,先确认订单号再查问题,比猜着回答准确得多。
- 检查清单(Checklist):在提示词末尾要求模型按清单自检,强化完整性与格式遵循:「回答前检查:① 是否覆盖所有用户问题要点;② 每个结论是否有依据;③ 输出是否符合指定格式。」检查清单与思维链的区别:思维链解决「怎么推理」,检查清单解决「有没有漏」。
这两个技巧单独用效果一般,但组合进生产提示词(澄清条件 + 自检清单)时,能明显降低漏答与答非所问的比例。
系统提示词与角色
系统提示词(system prompt) 是应用开发者设置的、定义模型全局行为边界的指令层,优先级高于用户消息中的普通指令。为什么需要单独一层:用户输入是不可信数据,它只是「待处理的内容」;系统提示才是「应用策略」。把二者混在一起,模型就无法区分「规则」与「材料」,这正是提示词注入(见 提示词安全)的根源。
对话场景的三层输入,信任级别完全不同:
| 层级 | 来源 | 作用 | 信任级别 |
|---|---|---|---|
| 系统提示 | 应用开发者 | 全局行为边界、安全要求、身份设定 | 可信(应用策略) |
| 开发者提示 | 应用开发者 | 具体任务流程、工具规则、输出结构 | 可信(应用策略) |
| 用户输入 | 最终用户 | 真实问题、材料、偏好 | 不可信(数据) |
系统提示词在推理模型时代还有一个特殊用途:与思考模式配合,控制模型的思考深度与输出形态(如「先分析再回答」「只输出结论」),相关内容见 模型能力与边界 的推理模型部分。
一份企业级系统提示词的常见组成:
- 身份:产品定位与品牌人格(如「你是 XX 银行信用卡客服助手」);
- 任务:核心职责与边界内的工作范围(能做什么);
- 流程:处理问题的步骤、转人工的触发条件(怎么做);
- 边界:安全红线、权限边界、不得承诺的事(不能做什么);
- 兜底:无法回答、低置信、检测到攻击时的降级话术。
1 2 3 4 5 6 | |
写系统提示词的两个纪律:
- 长度与可维护性:系统提示不是越长越好——规则过多会把每条规则的注意力摊薄,且维护成本随长度上升。把高频、稳定的规则放系统提示;低频、易变的内容放开发者提示或动态上下文,避免「大而全」的系统提示越积越长。
- 与思考模式的配合:推理模型默认会先思考再回答(思考深度可调,见 模型能力与边界)。对低延迟场景(客服首答、分类路由),系统提示应明确「直接回答,不需要展示推理过程」;对复杂任务则提示「先分析再给结论」。思考档位变更会影响提示词缓存前缀,成本评估时一并考虑。
角色设定还有一个进阶形态:情境模拟——不只是设定身份,还定义完整场景流程与交互规则(如「你是后端校招面试官,围绕 RAG 项目经历追问 3 轮,每轮先提问、等回答后再评分」)。它适合面试模拟、客服话术训练、教学辅导等多轮交互场景;注意必须限定角色边界与流程边界,否则模型可能过度表演、虚构场景事实(见 提示词安全 的角色扮演逃逸)。
提示词编写流程
- 写初版:按「基本结构」六要素起草,先求完整,再求精简。初版不必完美,关键是要素齐全、可以开始测试。
- 建测试集:收集 10-20 条代表性输入,必须包含三类:
- 典型场景:覆盖任务的主要形态(如客服的咨询、投诉、表扬);
- 边界情况:长输入、模糊表达、多意图、资料中找不到答案的情况;
- 对抗用例:试图诱导模型越界的内容(要求泄露系统提示、承诺政策外权益)。 为每条输入标注期望行为——不只是期望答案,还包括禁止行为(如「不得承诺退款」)。
一个最小测试集的样例结构:
1 2 3 4 5 6 | |
提示词评审时可以对照这份检查清单:
- 六个要素是否齐全、有无互相矛盾?
- 关键约束是否放在提示词前部?
- 示例是否与任务同分布、覆盖边界?
- 输出格式是否有 schema、缺失值规则、校验与重试?
- 是否包含对抗用例对应的约束(不泄露系统提示、不越界承诺)?
- 评测集是否覆盖典型/边界/对抗三类?改动后跑分对比了吗?
提示词即代码:提示词应该像代码一样被对待——进 Git、有版本号、过评审、可回滚、有测试。把它写死在用户可见层(如前端文案里)不仅无法管理,还会直接暴露给攻击者。
产品中的提示词管理
- 版本管理:提示词与代码同仓存储,每次改动有 diff、有提交记录;线上运行中的提示词版本要能精确回溯——「这次回答变了」往往不是模型变了,而是提示词或配置变了,没有版本记录就无法归因。一个可落地的版本记录长这样:
| 版本 | 改动 | 评测集得分 | 上线时间 | 备注 |
|---|---|---|---|---|
| v1.0 | 初版 | 70% | 2026-06-01 | 基线 |
| v1.1 | 增加「不得承诺政策外权益」约束 | 85% | 2026-06-10 | 修复政策外承诺 |
| v1.2 | 输出格式加 schema + 校验重试 | 95% | 2026-07-02 | 修复格式不稳 |
| v1.3(已回滚) | 换用更口语化语气 | 88% | 2026-07-15 | 准确率下降,回滚到 v1.2 |
- A/B 测试:提示词改动通常不宜全量直接上线——按用户或流量切片 A/B,用任务完成率、采纳率、投诉率等线上指标对比新旧版本。提示词的 A/B 与功能 A/B 的差别在于:输出是概率性的,样本量要够大、观察窗口要够长,才能把「提示词差异」和「随机波动」分开。
- 线上回归:模型更新、提示词改动都会带来行为漂移,评测集要常跑常新;线上失败案例定期回流评测集,形成「线上 → 测试集 → 优化」的闭环(方法论见 评估与评测)。
- 提示词与模型版本的关系:提示词是相对模型版本而生效的——同一个提示词在旧模型上 95 分,换新模型可能只有 85 分。所以版本记录里要同时记「提示词版本 + 模型版本 + 采样参数」,三者是一组配置;模型升级前先在同一评测集上跑新旧对照,再决定是直接换、还是先调提示词。
- 提示词资产与知识产权:高质量的提示词(尤其是系统提示词与评测集)是团队的核心资产,应沉淀为可复用的模板库;同时注意,对外宣称的「提示词专利」目前法律认定有限,真正的护城河是评测集、数据与产品流程,而不是一句咒语。提示词工具的生态概览见 提示词与评测工具。
常见失败模式
| 失败模式 | 表现 | 对策 |
|---|---|---|
| 提示词太长被稀释 | 规则一多,模型对每条规则的注意力被摊薄,关键约束失效 | 精简规则、最重要的规则放前面、用分隔符组织 |
| 指令冲突 | 系统提示说「简洁」,任务又说「详细展开」,模型在矛盾中摇摆 | 明确优先级,一次只立一个标准 |
| 输出格式不稳定 | 只写「输出 JSON」却没有 schema,模型自由发挥 | 给完整 schema + 应用层校验重试 |
| 模型版本漂移 | 同一提示词,厂商更新后行为悄悄变化(更啰嗦、格式不同、拒答变多) | 固定模型版本、定期重跑评测集、上线前新旧对照 |
| 多轮上下文污染 | 前几轮的噪声、旧信息进入当前轮,答案被带偏 | 历史摘要化、按需引用、声明「以最新信息为准」 |
| 与检索配合失效 | 检索片段没进上下文、被无关片段淹没、资料冲突时强行合并 | 检查检索链路、加引用约束、冲突时明说而不是硬拼(见 RAG 基础) |
其中模型版本漂移最容易被忽视:你上线时验证过的提示词,三个月后可能因为模型更新而失效。对策是把评测集跑起来——每次模型升级或提示词改动,都在同一评测集上对比(见 评估与评测),让「感觉」让位于「数据」。记住一条经验法则:线上行为异常时,先查配置(提示词/模型/参数版本组合),再怀疑模型——多数「模型变笨了」的抱怨,最后都定位到某个没记录的配置变更。
练习
给「为产品周报生成摘要」写一份完整提示词:包含角色、任务、上下文、约束、输出格式与评价标准,再补 5 条测试集输入(含 1 条边界:空周报;1 条对抗:要求泄露系统提示)。用你常用的模型实测一轮,记录失败案例并迭代一版。
来源说明
以下来源访问验证日期 2026-08-23,结论以官方页面为准;本文为原创转述,未大段照抄原文。
- Anthropic Prompt Engineering Overview:提示词六要素、思维链、少样本与迭代优化方法。
- OpenAI Prompt Engineering Guide:提示词编写策略、示例设计、温度与采样参数建议。
- OpenAI Structured Outputs:JSON 结构化输出的服务端能力与约束(配合输出约束一节)。
- AIGC-Interview-Book 第 34-36 章(提示工程):预取参考材料,用于系统提示/开发者提示/用户输入分层、少样本、思维链、采样参数等考点的交叉验证(材料为本地预取文件,非公开链接)。
- 模型能力与边界:推理模型思考模式与系统提示词的配合。
- 评估与评测:评测集与回归方法(站内)。
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:AI-PM Wiki Team
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用