Prompt Engineering —— 意图的精确表达

本文是Agent四大工程支柱的首篇:Prompt Engineering,旨在帮助读者系统性地理解提示工程的核心思想与技术体系。


一、什么是 Prompt Engineering?

Prompt Engineering(提示工程)是 AI 工程化中最基础也最核心的环节。它回答的是所有 AI 交互中的第一个问题:"怎么问?"

从技术本质上看,Prompt 是用户意图与模型能力之间的翻译层。大语言模型(LLM)本质上是一个基于概率的文本续写器,它不会"理解"用户的真实需求------它只会根据输入的上下文,预测下一个最可能的 token。Prompt Engineering 的目标,就是通过精心设计的输入文本,最大化模型输出符合预期的概率。

这个定义看似简单,但背后蕴含着一个深刻的工程化命题:如何将模糊的人类意图,转化为机器可精确执行的指令?

在实际应用中,Prompt Engineering 远不止"写一段话问 AI"。它涵盖了角色设定、任务分解、格式约束、示例引导(Few-shot)、思维链引导(Chain-of-Thought)、输出校验等多个维度,是一门融合了语言学、认知心理学和软件工程的交叉学科。


二、Prompt 的基本结构

一个完整的 Prompt 通常由以下组件构成:

2.1 系统指令(System Prompt)

系统指令是整个对话的"宪法",定义了模型的行为边界、角色身份和回答风格。它通常位于对话的最开始,对模型的全局行为产生持续影响。

markdown 复制代码
你是一个资深的后端架构师,擅长分布式系统设计。
回答问题时请遵循以下原则:
1. 先给出结论,再展开解释
2. 涉及代码时,标注语言和关键行号
3. 不确定的地方明确说明,不要编造

系统指令的质量直接决定了后续所有交互的上限。一个模糊的系统指令(如"你是一个编程助手")会导致模型在后续交互中频繁越界、风格不一致。

2.2 任务描述(Task Description)

任务描述是单次交互的核心,明确告诉模型"这一次要做什么"。好的任务描述应满足 3C 原则

  • Clear(清晰):无歧义,无二义性
  • Complete(完整):包含所有必要信息
  • Constrained(约束):明确输出边界和限制

差的示例

帮我写个排序函数

好的示例

用 TypeScript 实现一个泛型快速排序函数 quickSort<T>(arr: T[], compareFn: (a: T, b: T) => number): T[]。要求:

  • 原地排序(in-place),不使用额外数组
  • 包含完整的 JSDoc 注释
  • 附上 3 个不同数据类型的测试用例

2.3 Few-shot 示例(示例引导)

Few-shot 是提示工程中性价比最高的技巧之一。通过在 Prompt 中提供 2-5 个输入-输出示例,模型可以快速理解期望的输出格式和推理模式。

markdown 复制代码
将以下中文句子翻译成英文,要求:
- 保留原文的语气
- 专业术语使用行业标准译法

示例1:
输入:请尽快完成代码审查
输出:Please complete the code review as soon as possible.

示例2:
输入:这个接口的 QPS 上限是多少?
输出:What is the QPS limit for this API?

现在请翻译:
输入:我们需要在下一轮迭代中引入熔断机制

2.4 输出格式约束

明确的格式约束能大幅降低后处理的复杂度。常见做法包括:

  • 结构化输出:要求 JSON、YAML、Markdown 表格等格式
  • Schema 定义:给出字段名、类型、描述
  • 正反例说明:告诉模型什么是对的,什么是错的
markdown 复制代码
请分析以下代码的性能瓶颈,输出 JSON 格式:

{
  "bottlenecks": [
    {
      "location": "文件和行号",
      "severity": "critical | major | minor",
      "description": "问题描述",
      "suggestion": "优化建议"
    }
  ],
  "overall_score": "1-10 的整体评分"
}

三、进阶 Prompt 技巧

3.1 Chain-of-Thought(思维链,CoT)

思维链提示是 2022 年由 Google 研究团队提出的重要技术,核心思想是:让模型在给出最终答案之前,先展示推理过程

最简单的触发器是加入一句:"Let's think step by step"(让我们一步一步思考)。但更有效的做法是设计结构化的推理框架:

markdown 复制代码
请解决以下问题。在回答时,请按以下步骤思考:

问题:一个水箱有两个进水管,A管单独充满需要3小时,B管单独充满需要6小时,
     同时还有一个出水管C,单独排空需要4小时。如果三个管子同时打开,水箱
     需要多久才能充满?

步骤1:分析题目,列出已知条件
步骤2:计算每个管子的工作速率
步骤3:建立方程
步骤4:求解并验证
步骤5:给出最终答案

CoT 的变体还包括:

  • Zero-shot CoT:仅用"Let's think step by step"触发,无需示例
  • Auto-CoT:自动生成多样化的推理链作为示例
  • Tree of Thoughts(ToT):在每一步探索多个推理分支,选择最优路径
  • Graph of Thoughts(GoT):将推理过程建模为有向图,支持分支合并和回溯

3.2 ReAct(Reasoning + Acting)

ReAct 范式将推理(Reasoning)和行动(Acting)交织在一起,是 Agent 系统的核心 Prompt 模式。模型在推理过程中可以调用外部工具获取信息,然后基于新信息继续推理。

markdown 复制代码
你可以使用以下工具:
- search(query: string): 搜索互联网信息
- calculator(expression: string): 执行数学计算

请使用"思考→行动→观察→思考→..."的循环模式回答问题。

问:2024年诺贝尔物理学奖得主的年龄之和是多少?

思考:我需要先知道2024年诺贝尔物理学奖得主是谁,以及他们的年龄。
行动:search("2024 Nobel Prize in Physics winners")
观察:[搜索结果...]
思考:根据搜索结果,得主是John Hopfield和Geoffrey Hinton。我需要查他们的年龄。
行动:search("John Hopfield age")
观察:[搜索结果...]
...

3.3 Self-Consistency(自洽性)

自洽性是一种通过多次采样+投票来提升推理准确率的技术。对于同一个问题,让模型生成多条推理路径(temperature > 0),然后取出现频率最高的答案。

这种方法特别适合数学推理、逻辑推理等有明确正确答案的任务。研究表明,在 GSM8K 等数学推理基准上,Self-Consistency 可以将准确率提升 5-10 个百分点。

3.4 角色扮演与情绪注入

看似"花哨"的技巧,实际上有研究支撑。论文《Large Language Models Understand and Can Be Enhanced by Emotional Stimuli》表明,在 Prompt 中加入情绪暗示(如"这对我的职业生涯非常重要")可以提升模型输出质量。角色设定则可以帮助模型建立更稳定的行为模式。


四、Prompt Engineering 的工程化实践

4.1 Prompt 版本管理

Prompt 应该像代码一样纳入版本管理。推荐实践:

  • 将 Prompt 模板存储在独立的文件中(如 .prompt.yaml
  • 使用 Git 管理 Prompt 的变更历史
  • 为每个 Prompt 版本建立对应的评估基准
  • 在 CI/CD 流程中集成 Prompt 回归测试
yaml 复制代码
# prompts/code_review.yaml
version: "2.3.0"
name: code_review
system: |
  You are a senior code reviewer...
template: |
  Review the following {language} code:
  {code}
  
  Focus on:
  {focus_areas}
  
  Output format: {format}

4.2 A/B 测试与效果评估

Prompt 的优化需要数据驱动。建立评估体系,包括:

  • 自动评估:使用另一个 LLM 对输出打分(LLM-as-Judge)
  • 人工评估:定期抽样人工评审
  • 业务指标:任务完成率、用户满意度、重试率
  • 回归测试集:维护一组标准测试用例,确保修改不引入退化

4.3 动态 Prompt 组装

在生产环境中,Prompt 通常不是固定的,而是根据上下文动态组装:

ini 复制代码
最终 Prompt = 系统指令 + 角色设定 + 任务描述 + 检索到的参考文档 + 对话历史 + 用户输入 + 输出格式约束

组装时需要注意:

  • 优先级:关键约束放在最前面或最后面("首因效应"和"近因效应")
  • 长度控制:避免超出模型的上下文窗口
  • 冲突处理:当多个来源的信息冲突时,明确优先级规则

五、Prompt Engineering 的局限性与边界

5.1 无法超越模型能力上限

Prompt Engineering 本质上是在模型已有的能力空间中寻找最优解,而不是创造新的能力。如果模型本身不具备某个领域的知识或推理能力,再精巧的 Prompt 也无法弥补。

例如,一个未经过代码训练的模型,即使给出最完美的编程 Prompt,也无法写出正确的代码。

5.2 指令冲突

当 Prompt 中存在多个指令时,模型可能无法同时满足所有约束。例如同时要求"回答尽可能详细"和"控制在 200 字以内",模型可能顾此失彼。

5.3 上下文窗口限制

随着 Prompt 越来越复杂(包含系统指令、Few-shot 示例、检索文档、对话历史),很容易超出模型的上下文窗口限制。即使技术上将窗口扩展到 128K 甚至 1M tokens,信息密度和注意力分配仍然是核心挑战。

5.4 鲁棒性不足

同一个 Prompt 在不同的模型、不同的模型版本、甚至不同的采样温度下,可能产生截然不同的输出。这种不稳定性使得 Prompt Engineering 很难像传统软件工程那样做到"一次编写,处处运行"。

5.5 工程重心的迁移

正是因为上述局限性,AI 工程的重心正在从单一的 Prompt 优化,向更系统的工程化方向迁移:

  • Context Engineering:解决"让模型看到什么"的问题
  • Harness Engineering:解决"模型在什么环境中运行"的问题
  • Loop Engineering:解决"模型做完一步后怎么办"的问题

六、从 Prompt 到 Agent:提示工程的演进方向

随着 AI 应用从单轮问答向多步自主执行演进,Prompt Engineering 的角色也在发生变化:

阶段 核心 Prompt 模式 典型场景
单轮交互 指令 + 约束 + 格式 翻译、摘要、分类
多轮对话 系统指令 + 上下文管理 客服、辅导、咨询
工具调用 ReAct / Function Calling 搜索、计算、API 调用
自主 Agent 规划 + 执行 + 反思 + 重规划 代码生成、数据分析、自动化运维

在 Agent 系统中,Prompt 不再是一次性的输入,而是循环中的一个环节。它需要与工具调用结果、执行反馈、中间状态等信息协同工作,形成完整的感知-推理-行动闭环。


七、总结

Prompt Engineering 是 AI 工程化的起点,但不是终点。它的核心价值在于:

  1. 精确性:将模糊的人类意图转化为机器可执行的指令
  2. 可控性:通过约束和示例引导模型行为
  3. 可复用性:将有效的交互模式沉淀为模板

但 Prompt Engineering 的能力边界也很清晰:它无法突破模型本身的能力上限,面对复杂任务时,需要与 Context Engineering、Harness Engineering 和 Loop Engineering 协同,才能构建真正可靠、可扩展的 AI 应用系统。


下一篇:Context Engineering ------ 知识与记忆的窗口

相关推荐
易连EDI—EasyLink9 小时前
电动汽车供应链协同新范式:蔚来(NIO)企业级EDI平台建设实践
网络·人工智能·edi·nio·as2
AI星桥小王子9 小时前
分清原生音画同步!主流 AI 视频生成平台横向对比
人工智能
xqqxqxxq9 小时前
技术笔记:上下文工程(Context Engineering)心得总结(李博杰《深入理解 AI Agent》2.1,2.2观后总结)
人工智能·笔记
成都被卷死的程序员9 小时前
生活与工作AI高效使用指南
人工智能·生活
万岳科技系统开发9 小时前
智慧医院小程序开发推动医疗服务流程全面线上化
大数据·开发语言·人工智能
用户8181870627469 小时前
第5章 核心对象与配置系统
人工智能
Litluecat9 小时前
2026年7月24日科技热点新闻
人工智能·科技·新闻·每日·速览
用户8181870627469 小时前
第6章 thinkingLevel 思维层级体系
人工智能
熙丫 133814823869 小时前
人工智能训练工程师考试报名2026:报考条件、报名入口及注意事项
人工智能
凡情9 小时前
dify 图片提取文字
人工智能