提示词工程:从对话到可复用的指令
一句话定位:提示词工程把「跟模型的一次对话」变成「可复用、可测试、可交付的指令」——五件套搭结构,示例与分步思考提效果,版本管理保质量。背景阅读:Scaling Law 与算力预算——模型能力是算力换来的,提示词是你驾驶它的方式。
聊天随口问,干活要写说明书
跟聊天机器人对话,随口一句它就能答,感觉模型「什么都懂」。
可一旦想让模型干活——每天总结工单、按固定格式写报告——同一个任务换个问法,质量天差地别;你在聊天框里试出来的「神奇句子」,自己用着灵,交给同事就失灵,跑进产品更是没法复现。
差别在哪?聊天是即兴发挥,干活需要说明书。模型没有记忆、也没有对你这次任务的预设偏好,它每一步都只看你给的那段文字——文字里没写的,它就自由发挥。
怎么把「会聊天」变成「会写指令」?
这就是提示词工程:一套把指令写清楚的结构件,加上几个被反复验证的进阶手段。
图:指令解剖——先看三层各放什么,①–⑤ 依次填空;右侧三个手段是让每层更好使的添加剂
渐进拆解:给模型写一份入职说明书
五件套与三层
类比:提示词工程的核心动作,是给一个「能力极强但没有常识的新员工」写入职说明书。五件套分三层放——①角色、④格式写在系统层(入职就定好),②任务、③背景随单更新(用户层),⑤示例攒成案例库(资产层)。每件都有职场对应:
- ①角色定义 = 职位头衔。「你是三甲医院的分诊护士」比「你是助手」稳得多——角色一词带出一整套行为预期。
- ②任务定义 = 岗位职责。做什么、不做什么、拿不准怎么办,写成动词开头的短句。
- ③背景信息 = 入职培训资料。本次要用的材料、数据、术语表——模型不知道你公司的事,你不给它就猜。
- ④输出格式约定 = 报告模板。字段名、结构、长度上限,越具体越省事。最有效的一招是给空骨架——把目标 JSON 的字段列出来、值留空,让模型照着填:比「结构化一点」这类形容词管用得多。
- ⑤示例库 = 标杆案例。老员工怎么处理的,照着学——这就是 few-shot。
三版本例子
例子:同一个「总结客户投诉」任务的三个版本,效果阶梯分明——
图:效果阶梯——V0 靠运气,V1 靠结构,V2 靠示范;每上一级,「稳定性」都多一分
V0 的典型表现:这次的输出分五点、下次变三段,有时还反问一句「需要重点关注哪些方面吗」——单次看都不算差,连起来看没法用:没人敢把「每次长得不一样」的输出接进任何流程。
一句话收拢:提示词工程的本质,是把你对任务的隐性预期全部显式化——写出来的每一句,都是在堵住模型「自由发挥」的口子。
大白话:模型不会读心。你觉得「理所当然」的事,它一概不知道——所以角色要说、格式要定、材料要给、标杆要放。哪次输出不满意,先问自己:这条预期,我写进指令了吗?
技术定义:提示词(prompt)是发给模型的全部输入文本,提示词工程是通过结构化编写与迭代测试,稳定获得目标输出的方法。业界通行的组件化写法把指令拆为系统提示词(system prompt,承载角色与全局约定)与用户消息(承载单次任务与材料)两层——图里的资产层是管理意义上的第三层,落库时可挂进系统提示、也可随消息注入。
经验权威教程把它进一步拆为清晰直接、角色分配、数据与指令分离、输出格式化、逐步思考、示例使用等可单独训练的技能点。进阶方向上,少数人的「雕花技巧」正让位于系统性方法:把指令当作随上下文迭代的工程资产来管理。
进阶:三个用得最多的手段
| 手段 | 怎么用 | 适用场景 | 代价 |
|---|---|---|---|
| few-shot(示例) | 附 3–5 个「输入 → 标准输出」的对子,随任务复杂度增减 | 格式敏感任务(抽取、改写、分类) | 多了挤占上下文 |
| 思维链 | 指令里加一句「先分步分析,再给结论」 | 数学、逻辑、多条件判断类任务 | 对简单任务纯属浪费 token |
| 正负面引导 | 「要什么」写成正面指令,负面清单只留真正的高危项 | 需要约定要什么、忌什么时 | 负面禁止的遵循更不稳,别写成禁止大全 |
few-shot(示例)
给模型看几个「输入 → 标准输出」的对子让它照着学——一条示例都不附叫 zero-shot,附 3–5 个就叫 few-shot。用对场景收益立竿见影——格式敏感任务(抽取、改写、分类)尤其明显。
选示例的标准比数量重要:
- 覆盖典型情况。
- 包含一两个边界情况——比如「这条不该归类」的反例。
- 风格与目标输出完全一致。
摆放也有讲究:示例与正式任务之间用清晰的分隔(标记或空行加说明),避免模型把示例当成待处理的输入。经验值三到五个,随任务复杂度调整——多了挤占上下文。
few-shot 为什么不用重新训练就有效?模型权重不动,示例在上下文里临时塑造行为——这个现象业界叫上下文学习(in-context learning)。它也划出了技巧的边界:示例只对当前对话生效,新会话要重新给;示例教的是「这类任务的输入输出长这样」,不是把能力写进参数。
思维链
在指令里加一句「先分步分析,再给结论」,让模型把中间步骤写出来。对数学、逻辑、多条件判断类任务收益明显;对简单任务纯属浪费 token。举个具体的:问「这个折扣规则下,满 300 减 60 且会员再打九折,288 元的订单会员实付多少」——不加思维链,模型常一步给出错误数字;加了思维链,它会先判断 288 是否满 300(不满,不减)、再算 288×0.9=259.2——中间步骤让错误无处藏身。它还有一个隐藏用途:中间步骤写出来后,你可以检查「它到底怎么想的」——错在哪一步一目了然。
正负面引导
「要什么」写成正面指令(「用中性语气」),比负面禁止(「不要太主观」)更有效——经验上,模型对正向描述的遵循明显更稳。负面清单留给真正的高危项,别把指令写成禁止大全。
动手:把指令变成带版本号的模板
五件套一旦定型,就该从聊天框搬进代码——就像说明书改版要有版本号,每个槽位做成变量,每次修改升一版,同一批测试题回归对比(下面是伪代码,五个槽位依次对应①–⑤:角色①、任务②——处理范围并进任务变量不单开槽、背景③、输出格式④、示例⑤):
PROMPT = {
"v3": """你是{role}。
任务:{task}。只处理与{scope}相关的内容。
背景材料:{context}。
输出 JSON:{schema}。
标杆案例:{example}。
语气中性,不确定就标注「存疑」。""",
}
def run(version, **kw):
return model.chat(PROMPT[version].format(**kw))
# 版本管理铁律:改 prompt = 改代码。
# v3 与 v2 跑同一批 30 道测试题,对比通过率——好了才合入,退化就回滚。
模板化之后,提示词才第一次拥有「工程质量」:可测试、可回滚、可多人协作——这也是它与「聊天框神奇句子」的分水岭。
测试题集从哪来?三个来源按优先级:
- 真实用户问过的问题(最值钱)。
- 上线前你手工试出的边界情况(次之)。
- 按需求编造的典型场景(兜底)。
每条测试题记两样:输入与期望要点——不必写标准答案全文,写「答案必须包含的关键点」就够机器比对。
边界与取舍:雕花有尽头,工程无止境
四件事值得提前知道,分别关于:会失效、有风险、要验证、会演进。
别过拟合到某个模型
在旧模型上磨出来的「神奇短语」,换一代模型常常失效甚至反效果——指令的可移植性来自结构清晰,不来自玄学措辞。好比说明书是为「这个岗位」写的,不是为「这位员工」写的:换人(模型升级)时,五件套结构不动、措辞重测。
材料会变成攻击面
指令写在系统层,但你喂给模型的网页、文档、用户输入里,可能藏着另一道指令。看一遍攻击是怎么发生的:
图:注入路径——材料与指令在上下文里混成一锅,模型分不清谁是主人;防御靠隔开、降权、留痕
这就是提示词注入:材料与指令在上下文里混在一起,模型分不清谁是主人。基础防护三条:数据与指令明确分隔(用标记把材料框起来)、输出当数据不当命令(尤其别把模型输出直接拿去执行)、给模型的最小权限原则。注入的完整攻防(间接注入、工具滥用、纵深防御)值得单独一篇展开(见 Agent 安全边界)。
改一句要跑一遍回归
提示词是概率系统的旋钮:这一处变好、另一处常常悄悄变坏。所以「版本号 + 固定测试题集 + 对比通过率」不是仪式感,是唯一能证明「这次修改是净收益」的手段。测试题集怎么建、通过率怎么定,正是Agent 评估那篇的主题——两篇是一对。
雕花的尽头是换赛道
2025 年起,Anthropic 把单条指令的雕琢,升级为对整个上下文的编排——系统提示、工具返回、历史消息、检索材料统一规划取舍。他们的说法是:这是提示词工程的自然演进,名字叫Context 工程。五件套是它的地基——地基不牢,编排无从谈起。
自测
合上文章先自己答,再展开对照:
同一任务 zero-shot 和 few-shot 差距多大?什么信号说明该上 few-shot?
差距与任务强相关:常识问答类几乎无差距(zero-shot 已够),格式敏感类差距显著——不给示例时输出的字段、风格、粒度会随机漂移,给 3–5 个标杆示例后可复现性大幅提升。该上 few-shot 的信号有三个:输出格式反复跑偏(你反复在对话里纠正同一类问题)、风格需要对齐某个标杆、存在「说起来含糊、看例子就懂」的分类边界。反过来说,任务描述能写清楚的就别堆示例——示例占上下文,还有带偏模型的风险。
Prompt 版本管理和 Eval 怎么配合?
提示词当代码管理:每个版本有编号,任何修改都升版本号而不是原地覆盖。配合方式是一个闭环——固定一批测试题集(覆盖典型与边界情况),每次修改后新版本与现役版本跑同一批题,对比通过率:净提升才合入,退化即回滚。关键纪律是「改一句、跑一遍」:提示词对概率系统的影响是全局的,一处措辞变化可能在 A 任务变好、B 任务变坏,没有回归集就无法发现。这套测试题集与指标设计,就是 Agent Eval 的雏形。
参考与延伸
- 视频版:动画拆解(约 5 分钟)——本篇的交互式演示版,逐节拍推进、可点击回看,支持竖屏模式。
- Anthropic《Effective Context Engineering for AI Agents》(2025-09-29):「上下文工程是提示词工程的自然演进」的出处,讲系统提示校准与上下文取舍 — anthropic.com/engineering/effective-context-engineering-for-ai-agents
- Anthropic 官方交互式提示词教程(GitHub 开源,9 章 + 练习):清晰直接、角色分配、数据与指令分离、输出格式化、逐步思考、示例使用等技能点即其课程目录 — github.com/anthropics/prompt-eng-interactive-tutorial
下一站:Agent:循环、工具调用与 harness——单次指令的天花板,靠循环来突破。