跳到主要内容

Prompt Engineering 深度解析:从基础到高级技术

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数工程师将提示词(prompts)视为咒语——稍微修改一下措辞,寄希望于它能奏效,然后就此作罢。这在演示阶段(demos)没问题。但在生产环境中,这会导致系统表现不稳定:没人知道为什么模型在周二的表现与周一不同,一次常规的模型更新可能会悄无声息地破坏掉三个功能。正确的提示工程是一门学科,而不是一种仪式。本文涵盖了全栈内容:何时使用每种技术、基准测试(benchmarks)实际显示了什么,以及陷阱在哪里。

零样本与少样本:选择并非显而易见

零样本提示(Zero-shot prompting)——只需描述任务并让模型开始工作——的效果往往比大多数工程师预期的要好,而且其运作方式并不总是直观的。对于理解良好的任务(总结、翻译、事实性问答),零样本通常是正确的选择。通过示例增加复杂性并不总是有帮助。

经典的“零样本思维链”(zero-shot chain-of-thought)技巧——在末尾添加“让我们一步步思考”——在逻辑推理任务上经常优于少样本提示。这一简单的短语能将模型从模式匹配转向程序性推理。

当你需要一致的输出格式、特定领域的语气,或者仅靠描述过于模糊的细微分类时,少样本提示(Few-shot prompting)就大放异彩了。系统研究中一个令人惊讶的发现是:示例的正确性并没有你想象的那么重要。推动少样本性能的关键是标签空间(有哪些可能的类别)、输入分布(看起来像真实数据的现实示例)以及输出格式。一个包含稍微错误示例但格式正确的少样本提示,往往优于一组完美准确但格式不一致的示例。

决策树大致如下:

  • 简单、通用的任务 → 首先尝试零样本
  • 复杂的输出格式或 Schema → 少样本
  • 推理或数学问题 → 零样本 CoT(“一步步思考”)
  • 需要一致的语气/语调 → 带有 3–5 个锚点的少样本
  • 推理模型(o3, o4-mini, Claude 3.5+)→ 两者都测试,不要假设少样本必胜

高级推理模型的一个注意事项:少样本示例可能会产生负面影响。这些模型具有强大的内部推理能力,少样本示例有时会使它们偏向于表面层面的模式匹配,而不是深层推理。务必进行基准测试,不要凭空假设。

思维链:基准测试实际显示了什么

在 Wei 等人(2022 年)展示了数学基准测试中的巨大收益后,思维链提示(Chain-of-thought prompting)成为了标配。但 2025 年的研究描绘了一个更微妙的图景,从业者应当对此有所了解。

沃顿商学院 GAIL 的一项研究在 25 次重复实验中,使用 8 个模型测试了 198 个博士级问题。结果如下:

  • 非推理模型(如 Gemini Flash 2.0):+13.5% 的准确率提升 —— 这很有意义,但伴随着 35–600% 的额外 Token 消耗
  • 非推理模型(GPT-4o-mini):+4.4% 的收益,在统计学上不显著
  • 推理模型(o3-mini, o4-mini):+3% 的收益,微乎其微
  • 推理模型(Gemini Flash 2.5):−3.3% —— 使用 CoT 比不使用效果更差

规律是:CoT 对非推理模型有显著帮助。对于推理模型,模型已经在进行内部思维链——要求它显式地执行通常只会增加 Token 浪费,有时甚至会因为强迫采用不同的思考路径而降低性能。

成本影响加剧了这一点。CoT 会增加 Token。在大规模应用中,处处使用 CoT 的提示词可能比有选择性使用的提示词贵 3–5 倍。在每日 100,000 次调用的情况下,差价可能达到每天 2,000–3,000 美元。

何时使用 CoT:多步骤数学、逻辑演绎、代码调试,以及任何需要中间推理过程可审计的地方。对于分类、查询、提取以及任何答案直接的任务,请跳过它。对于推理模型,在投入使用前进行基准测试——它可能会在没有帮助的情况下增加成本。

结构化输出:生产环境的可靠性问题

结构化输出提示是大多数生产环境 AI 漏洞(bugs)的所在地。各供应商提供的 JSON 模式(JSON Mode)保证了语法有效的 JSON —— 它不保证字段匹配你的 Schema、类型正确或值符合你的预期。在测试中运行良好的提示词可能会在模型更新后悄然失效。

三类故障始终存在:

字段不一致:字段名称在不同响应中的大小写、下划线或命名约定各不相同。userId vs user_id vs UserID —— 全是有效的 JSON,但在你的解析器中都会导致程序崩溃。

类型不匹配:数字被写成字符串,应为默认值处返回 null,布尔值被写成 "true"/"false" 字符串而不是实际的布尔类型。这些会导致强类型语言中的下游故障,调试起来令人抓狂。

格式泄漏:模型尽管被告知不要这样做,却还是将 JSON 包裹在 Markdown 代码块中。在起始符号 { 前有前导文本,在结束符号 } 后有结尾说明。这在基础模型和系统提示词更改后很常见。

行之有效的生产可靠性模式:

  1. 使用紧凑的 JSON 骨架进行提示,显示字段名称、类型和预期值 —— 而不是描述要生成什么
  2. 包含一个完整、正确的示例,演示包括边缘情况在内的每条规则
  3. 对于结构化任务,将 Temperature 设置为 0.0–0.1 —— 这是 LLM 行为中最明确的相关性之一。较高的温度会直接导致格式偏差
  4. 在消费输出前,根据你的 Schema 进行程序化验证
  5. 利用模型进行修复 —— 将验证失败的信息作为针对性的修复请求传回模型,而不是重新运行整个流水线

实现基于 Schema 的结构化提示的从业者报告称,JSON 提取 success rates 从约 60% 跃升至 95% 以上。Schema 强制的结构化输出(可通过 OpenAI 的 Structured Outputs API 获取)可以达到 >99% 的 Schema 依从性,并减少高达 60% 的解析/集成代码。

使用正确的工具:对于 OpenAI,优先选择原生 Structured Outputs(Schema 强制)而非 JSON Mode(仅语法)。对于 Claude,在提示词中使用明确的 Schema 和格式指令即可可靠工作,无需单独的模式切换。像 Instructor 和 Pydantic AI 这样的库可以处理超过 15 个供应商的重试/验证循环。

提示词敏感性问题(以及为什么它在生产环境中至关重要)

关于提示词敏感性的研究表明,在少样本(few-shot)场景下,仅格式变化就可能导致高达 76 个百分点的准确率差异。这不是因为模型改变了,也不是因为任务不同,仅仅是相同内容的不同格式化方式导致的。

这有两个实际意义:

首先,看似模型的能力限制,往往其实是提示词设计的问题。在断定 LLM 无法完成某项任务之前,请尝试系统化的调整:不同的指令措辞、显式 vs 隐式的格式要求、添加或删除示例、改变上下文区块的顺序。答案空间非常大。

其次,今天有效的提示词可能会在模型更新后失效。随着微调更新,模型的行为会发生细微变化。针对 GPT-4-0613 编写的系统提示词在处理特定输入时,可能会在 GPT-4-1106 上出现退化。这使得提示词回归测试成为了生产环境的必需品,而非可有可无的选项。

实际的缓解措施:

  • 在版本控制系统中管理你的提示词版本 —— 将它们视为代码,而非配置
  • 维护一套用于回归测试的输入/输出对“黄金数据集”(golden set)
  • 每当你更新提示词或模型端点发生变化时,运行该数据集进行测试
  • 在发布变更之前,将提示词测试覆盖集成到你的 CI 流水线中

值得了解的高级技术

**Self-consistency(自我一致性)**通过生成多条独立的推理路径并通过多数投票选择答案,来提高 CoT(思维链)的准确率。在困难的推理任务中,它能带来 5%–10% 的准确率提升,代价是 N 倍的推理调用。当准确率比延迟更重要时(如错误敏感的分类、法律分析、医疗数据提取),可以使用此技术。

**Tree-of-Thought(思维树)**对此进行了扩展,它使用 BFS 或 DFS 将推理探索为树状结构,并在路径失败时进行回溯。其计算成本很高。请将其保留给真正的多步规划难题,因为在这些问题中,线性推理链是不够的。

**Chain-of-Table(表格链)**对于结构化数据推理非常有价值。它不使用文本推理,而是将表格操作(添加列、选择行、分组、排序)作为中间步骤。在 TabFact 上比标准方法提升了 8.7%,在 WikiTQ 上提升了 6.7%。如果你正在构建财务分析、数据转换或任何处理表格的 LLM 流水线,这项技术目前被严重低估了。

**Meta prompting(元提示)**关注的是推理结构而非内容示例。你不是向模型展示正确的输出是什么样的,而是告诉它如何思考 —— 推理步骤的顺序、首先考虑什么、何时拒绝。这越来越多地应用于生产环境的系统提示词中,以在各种输入中强制执行一致的推理风格。

破坏生产环境提示词的五个常见错误

1. 容易引发幻觉的模糊指令。 “使其专业化”或“清晰地总结”不是指令,它们只是某种“感觉”。请定义你的具体含义:指定受众、格式、语气标记、包含什么、排除什么。模糊性是模型即兴发挥的机会。

2. 假设存在隐含的上下文。 除非你告诉模型,否则它不会保留关于你的产品、用户群或领域的知识。生成平庸、无用输出最常见的原因是提示词中没有包含相关的背景信息。每次都要明确说明上下文。

3. 缺失输出格式规范。 如果你的流水线以编程方式处理模型输出,请准确指定格式 —— 不仅仅是“返回 JSON”,而是“返回一个包含字段 X、Y、Z 的 JSON 对象,其中 X 是字符串,Z 是字符串数组”。模型不会猜测你的 Schema。

4. 复杂的格式要求缺乏示例。 对你想要的内容进行描述,不如给出一个你想要的内容示例有效。对于复杂的格式要求,一个正确的示例比三段文字指令更有用。

5. 过度调优导致的提示词脆弱性。 当你针对一个狭窄的测试集调优提示词时,它在真实输入面前会变得脆弱。通过在广泛的分布上进行测试来构建鲁棒性。如果你的提示词只在看起来像示例的输入上有效,那么它就不是一个生产就绪的提示词。

工程师忽视的成本与质量权衡

一个真实的对比:一个 2,500 token 的详细系统提示词与一个 212 token 的结构化提示词在同一任务上实现了同等质量。在每日 100,000 次调用下:

  • 详细提示词:约 3,000 美元/天
  • 结构化提示词:约 706 美元/天

这 76% 的成本降低来自于提示词优化,而非模型降级。大多数团队会首先优化质量(这是对的),但从未回头优化成本(这也是对的,但不够完整)。

从业者的启发式方法:先进行质量“爬坡”,再进行成本“下坡”。先用任何有效的提示词把输出做对。然后系统地缩短提示词长度,简化指令,并测试质量是否保持稳定。通常情况下是可以维持的 —— 因为许多提示词携带了模型并不需要的冗余上下文。

提示词工程在大局中的位置

在你需要求助于 RAG、微调或多智能体架构等更昂贵的解决方案之前,提示词工程可以交付大约 85% 的可实现改进。这个比例来自高营收 AI 公司的从业者 —— 这不是一个理论假设。

团队的成熟度曲线如下:

  1. 随机实验(大多数团队从这里开始)
  2. 模板标准化 —— 提示词之间保持一致的结构
  3. 系统化评估 —— 黄金测试集、回归跟踪
  4. 生产可观测性 —— 记录提示词和输出,监控漂移
  5. 持续优化 —— 降低成本、改进格式、调优行为

大多数团队处于第 1 阶段和第 2 阶段之间。达到第 3 阶段 —— 在 CI 中建立黄金测试集和回归测试 —— 是提升 AI 质量最高杠杆的组织投入。工具是轻量级的,难点在于纪律。

提示词工程不是一次性活动。它是一项持续的工程实践。那些以此为准则的团队 —— 对提示词进行版本控制、系统化测试、跟踪成本 —— 始终优于那些将提示词视为“咒语”的团队。

References:Let's stay in touch and Follow me for more thoughts and updates