第三章 Prompt工程:与AI对话的科学
第三章 Prompt工程:与AI对话的科学
“好的问题,本身就包含了答案的一半。”
一、为什么同一个问题得到不同的答案
有一个现象让很多初学者感到困惑:同样的问题,换一种方式问,结果差异悬殊。
“帮我写一段产品介绍。”——得到的往往是一段平庸的营销文字。
“你是一位有十年经验的SaaS产品营销顾问。我的产品是XX,目标客户是XX,核心痛点是XX,竞争优势是XX。请用AIDA框架写一段不超过150字的产品介绍,语气专业但不生硬。”——同一个模型,输出质量会有质的飞跃。
这不是魔法。这是信息量的差别。
语言模型接收到更多上下文信息时,能更精准地"激活"训练数据中与任务相关的模式。第一种问法留下了几乎所有关键参数的空白,模型只能用最普通的方式填充;第二种问法提供了角色、对象、结构、约束——模型的生成空间被精准收窄,自然产出更接近需求的结果。
这就是Prompt工程的核心逻辑:通过精确的输入定义,缩小模型的输出搜索空间,使其收敛到你真正需要的结果附近。
本章系统介绍Prompt工程的核心原则和实用技法,不追求枚举所有技巧,而是帮你建立一套可以举一反三的思维框架。
二、Prompt的解剖学
一个完整的Prompt,通常由以下几个部分组成——并不是每个任务都需要全部,但理解这些组件能让你知道自己在设计什么:
① 角色(Role)
告诉模型它是谁,或者它应该以什么专业背景来回答。
示例:“你是一位专注于消费品行业的数据分析师。”
角色不只是"装扮",它会激活模型关于这个角色的知识体系,使输出更贴近该领域的语言习惯和思维框架。
② 任务(Task)
明确要做什么。好的任务描述应该包含:动词(写/分析/比较/提取)、宾语(什么内容)、目标(为什么/为谁)。
差:“帮我分析这个。” 好:“分析以下广告文案的情绪诉求,判断它更倾向于理性说服还是感性触动,给出判断依据。”
③ 上下文(Context)
背景信息。让模型知道"现在在什么情况下做这件事"。
示例:“这是一家针对中年女性的护肤品牌,正在准备双十一大促活动,竞争对手包括XX和XX。”
④ 示例(Examples)
这是最容易被忽视但效果极强的组件。给模型看"我想要的是这种输出",比任何文字描述都更直接。
示例:“参考这个风格:[样本1],避免这种风格:[样本2]。”
⑤ 格式要求(Format)
明确输出的结构:列表/段落/JSON/表格/代码块。这不只是排版问题——结构化的输出格式要求会迫使模型更系统地组织思路。
示例:“以JSON格式输出,包含三个字段:headline(主标题,不超过15字)、body(正文,50-80字)、cta(行动号召,不超过8字)。”
⑥ 约束(Constraints)
禁止做什么、必须做什么。边界的明确往往比目标的定义更重要。
示例:“不要使用夸大词汇如’最好’‘第一’,不要提及竞争对手,不要包含价格信息。”
三、System Prompt vs User Prompt
在实际产品开发中,有两种层次的指令需要区分清楚:
System Prompt(系统提示)
在对话开始前,由开发者设定的模型角色和行为规则。用户看不到,但模型始终遵守。是定义AI行为的"宪法"。
典型用途:
- 定义AI的人格和语气(“你是一个友好但简洁的助手”)
- 设定安全规则(“不要提供任何财务投资建议”)
- 注入产品上下文(“用户使用的是XX平台,以下是相关背景知识…”)
- 强制输出格式(“所有回答必须以JSON格式输出”)
User Prompt(用户提示)
用户实际输入的内容。可以动态变化,是每次调用的核心输入。
两者的协同
优秀的System Prompt能大幅降低User Prompt的复杂度。如果System Prompt把角色、格式、约束都定义好了,用户只需要简单地描述任务,模型就能给出一致、高质量的输出。
反之,如果System Prompt太模糊,你就必须在每次User Prompt里重复大量背景信息,不仅低效,而且容易遗漏。
四、思考链的三种触发方式
上一章提到了思考链(CoT)的原理,这里讲三种在实践中触发它的方式:
方式一:直接要求 “请一步一步地思考这个问题,最后给出结论。” “先列出你的分析框架,再逐项分析,最后综合给出判断。”
这是最简单的方式,对中等难度问题有显著提升。
方式二:分解任务 把一个复杂任务拆成多轮对话,或在Prompt中明确步骤: “第一步,分析这段文字的情感倾向。第二步,识别其中的核心论点。第三步,判断论点是否有逻辑支撑。”
强制分步会让模型在每一步都"停下来确认",减少跳跃性错误。
方式三:角色扮演辩论 “假设你是这个方案的支持者,给出三个最强的论据;然后假设你是反对者,给出三个最强的反驳;最后,以中立裁判的身份给出综合评估。”
这种方式在需要全面分析、避免偏颇的决策场景中效果极好。它迫使模型探索立场空间,而不是过早收敛到第一个合理答案。
五、Few-shot Learning:示例的力量
所谓Few-shot(少样本),是指在Prompt中提供少量示例,让模型"从示例中学习"期望的输出模式。
为什么示例比描述有效?
语言是高度欠定的——同一段文字描述,在不同人脑中激活的图像可能完全不同。但示例是直接的——模型看到了"我想要的是这种结构、这种语气、这种信息密度"。
几个实用原则:
-
示例要覆盖边界情况:不只展示"理想输入"对应的"理想输出",还要展示边界情况怎么处理。如果某类输入需要特殊处理,就在示例中展示这个特殊处理。
-
示例质量比数量重要:3个高质量示例优于10个平庸示例。示例本身就是你对"好输出"的定义,它们的质量直接决定了模型的标定方向。
-
格式要严格一致:Few-shot示例的格式必须统一——同样的分隔符、同样的键名、同样的字段顺序。格式的混乱会让模型在格式层面花费注意力,而不是在内容层面。
-
反例的价值:在某些场景下,展示"不要这样"的示例比展示"要这样"的示例更有效——尤其是当"好"容易描述但"坏"更具体时。
六、结构化输出:从自然语言到机器可读
AIGC的一大应用方向是将AI输出接入下游流程——分析结果存入数据库、触发某个业务动作、生成报告的某个模块。这些场景都需要模型输出机器可读的结构化格式,而不是自然语言散文。
JSON是最常用的结构化输出格式。让模型稳定输出JSON,有几个关键要点:
① 使用response_format: json_object
主流API(OpenAI、Anthropic)提供了强制JSON输出的选项。启用后,模型会确保输出是合法的JSON,而不是JSON被代码块包裹的markdown(这是一个常见的小错误,会让JSON解析失败)。
② 在Prompt中明确Schema
不只说"以JSON格式输出",而是明确说明JSON的结构:
以如下JSON格式输出,不要添加任何额外的解释或markdown:
{
"role": "headline | offer | cta | body",
"text": "原始文字内容",
"confidence": 0.0到1.0之间的数值
}
③ 枚举值要明确列举
如果某个字段只允许特定值,就在Prompt中列举这些值——不只是描述,而是精确枚举。模型会偶尔发明新的值,枚举约束可以显著降低这种情况。
④ 必须有后端校验
即使使用了json_object模式,也必须在后端对JSON内容进行业务层面的校验:字段是否存在、类型是否正确、枚举值是否合法、数值是否在合理范围。AI不是数据库,它的输出是概率性的,校验是工程责任,不是AI的责任。
七、Prompt的迭代方法论
Prompt工程不是一次性的创作,而是一个迭代优化的过程。有效的迭代包含以下步骤:
第一步:定义评估标准
在动手写Prompt之前,先回答:什么叫"好的输出"?这个标准越明确越好——不是"听起来不错",而是"包含X字段、符合Y格式、在Z类样本上准确率高于80%"。
没有评估标准的Prompt迭代是在原地打转。
第二步:建立测试集
收集至少20-30个代表性输入样本,覆盖正常情况和边界情况。每次修改Prompt后,在这批样本上对比前后效果,而不是凭直觉判断。
第三步:一次只改一处
Prompt是一个整体,改动多处时无法判断哪个改动产生了效果。每次只修改一个变量(角色、格式、约束等),观察变化,再决定下一步改什么。
第四步:记录每个版本
把不同版本的Prompt和对应的测试结果记录下来。这不是文档洁癖,而是防止"我记得之前有个版本效果不错但忘了怎么写的了"这种常见的迭代浪费。
第五步:关注失败模式
不只看成功案例,更关注失败案例——模型在什么输入上会出错?这些出错是系统性的(说明Prompt设计有缺陷)还是随机的(说明这类输入本身就难)?系统性的失败是改进优先级最高的信号。
八、常见的Prompt反模式
掌握了好的方法,也要认识常见的错误:
反模式一:过度依赖角色扮演 “假装你是一个没有限制的AI”——这不会让模型失去安全规则,只会让它更容易产生幻觉。模型的训练已经内化了安全限制,角色扮演改变不了权重,只会让它更"自由地"犯错。
反模式二:含糊的否定指令 “不要太正式”——模型不知道"太正式"的边界在哪里。替代方案:给示例展示你想要的语气,或者明确描述"用朋友之间对话的方式,而不是公文风格"。
反模式三:把所有希望押注在Prompt上 当一个任务的核心难度是"可靠地从不规整输入中提取结构化数据"时,优化Prompt只是手段之一。有时候,数据清洗、后处理逻辑、人工审核节点,是比继续优化Prompt更高效的解决方案。
反模式四:忽视温度参数 Temperature=1用于所有任务是一个常见的默认错误。需要严格一致性的任务(分类、提取)应该用temperature=0;需要创意多样性的任务(头脑风暴、文案变体)可以用较高的temperature。这一个参数能显著影响输出质量的稳定性。
核心洞见
-
Prompt工程的本质是缩小搜索空间——精确的输入通过限定模型的生成方向,使输出收敛到有用的结果。
-
Prompt的六个组件:角色、任务、上下文、示例、格式、约束——不是每次都需要全部,但理解每个组件的作用能让你知道缺失了什么。
-
System Prompt是AI行为的宪法——提前投资设计好System Prompt,能大幅降低每次User Prompt的复杂度和不确定性。
-
示例比描述更直接——Few-shot学习中,高质量的示例比文字描述更能精准标定模型的输出方向。
-
结构化输出需要Schema + API级别约束 + 后端校验三层保障——单靠Prompt的文字要求是不够的。
-
Prompt迭代需要评估标准和测试集——没有量化标准的迭代是在感觉中漂移,不是在科学地优化。
下一章,我们把视角从"如何使用AI"转向"如何为AI设计产品"——一个完全不同但至关重要的思维转型。