提示工程
本页介绍 LLM 应用生态中最基础也最实用的技术——提示工程(Prompt Engineering):通过精心设计输入文本(prompt)来引导 LLM 产生更好的输出。它是 LLM 应用生态概览中的”驾驶技巧”层,和 RAG、Agent 等技术配合使用效果倍增。
Prompt = 给 AI 下指令的艺术。 好的 Prompt 就像好的需求文档——需求写得清楚,程序员(LLM)就做得好;需求模糊,结果就跑偏。
从技术角度理解:LLM 的本质是一个条件概率模型——给定前面的文本(Prompt),预测下一个最可能出现的词(Token)。因此,你写的每一个字都在影响模型”走向”哪个方向。Prompt 工程就是通过组织输入文本的结构、上下文和指令,让模型的概率分布向”你想要的输出”倾斜。
为什么 Prompt 如此重要
Section titled “为什么 Prompt 如此重要”LLM 内部使用自注意力机制(Self-Attention):模型在生成每个词时,会”关注”(attend to)输入中所有之前的词,并赋予不同的注意力权重。这意味着:
- Prompt 中每个词都会影响输出——不仅是你想说的内容,还包括措辞、格式、语气。
- 输入的结构(分段、列表、标记)会影响注意力分配,从而影响输出质量。
- 相同意思、不同表述的 Prompt 可能产生截然不同的输出——这不是”玄学”,而是注意力权重分布的差异。
四大策略由浅入深
Section titled “四大策略由浅入深”- Zero-shot(零样本):直接问,不给例子。“帮我写封请假邮件。“——简单直接,但 LLM 不知道你要什么风格。
- Few-shot(少样本):给几个例子再问。先展示 2-3 个”输入→输出”范例,LLM 就能模仿格式和风格。其原理是上下文学习(In-Context Learning, ICL)——模型利用注意力机制从示例中提取模式(格式、推理路径、语言风格),并在生成时”复制”这些模式到新问题上,全程不需要更新模型参数。
- Chain-of-Thought(思维链 / CoT):让 LLM “想一想再答”。加一句”请一步步推理”,复杂问题(数学、逻辑)准确率大幅提升。技术原理:中间推理步骤为模型提供了更多的”计算 Token”——每个 Token 都是一次前向传播,多生成几个 Token 就意味着模型有更多”思考步骤”来处理复杂逻辑。
- ReAct(推理+行动):让 LLM 边推理边调用工具。“思考 → 行动 → 观察 → 再思考”,是 AI Agent 的核心模式。
四种 Prompt 策略对比
Section titled “四种 Prompt 策略对比”Zero-shot 和 Few-shot 决定输出的格式;CoT 决定输出的质量(让模型多想一步);ReAct 决定 LLM 能调用外部工具。实际产品通常组合使用。
高级 Prompt 技术演进
Section titled “高级 Prompt 技术演进”同一问题用不同 Prompt 策略对比
Section titled “同一问题用不同 Prompt 策略对比”from openai import OpenAI
client = OpenAI()
question = "一个商店有 15 个苹果,卖了 8 个,又进了 12 个,现在有几个?"
# 策略 1: Zero-shot — 直接问,容易算错zero_shot = f"{question}"
# 策略 2: Chain-of-Thought — 加一句"逐步推理"cot = f"{question}\n请一步一步推理,最后给出答案。"
# 策略 3: Few-shot — 先给例子,再问few_shot = ( "问:3 个梨吃了 1 个剩几个?\n" "答:3 - 1 = 2,剩 2 个。\n\n" f"问:{question}\n答:")
for name, prompt in [("Zero-shot", zero_shot), ("CoT", cot), ("Few-shot", few_shot)]: resp = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], temperature=0, ) print(f"[{name}] {resp.choices[0].message.content}\n")Self-Consistency(自我一致性)—— 多次采样投票
Section titled “Self-Consistency(自我一致性)—— 多次采样投票”CoT 的进阶版:同一个问题让模型用高 Temperature(如 0.7)生成多条推理链,取出现频率最高的答案。这对数学和逻辑题尤其有效——正确答案往往在多条路径中都被推出来,而错误答案各不相同。
from collections import Counter
question = "一个三位数,各位数字之和为 15,百位是十位的 2 倍,求这个数。"
# 用高 Temperature 生成 5 条推理链answers = []for _ in range(5): resp = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": f"{question}\n请一步步推理后给出答案。最终答案用 ###X### 格式标记。"}], temperature=0.7, # 较高温度 → 多样化推理路径 ) text = resp.choices[0].message.content # 提取标记的答案 import re match = re.search(r'###(\d+)###', text) if match: answers.append(match.group(1))
# 多数投票final = Counter(answers).most_common(1)[0]print(f"投票结果:{final[0]}({final[1]}/5 条推理链得出此答案)")结构化输出与 Function Calling
Section titled “结构化输出与 Function Calling”2024-2025 年,主流 LLM API 普遍支持结构化输出(Structured Output):通过 JSON Schema 约束 LLM 的输出格式,从概率模型”强制”产出可被程序解析的结构化数据。这让 LLM 可以直接对接下游系统(数据库写入、API 调用、流水线处理)。
from pydantic import BaseModel
class Task(BaseModel): name: str priority: str # "high" | "medium" | "low" estimated_hours: int
# 通过 response_format 参数强制模型输出符合 Schema 的 JSONresp = client.beta.chat.completions.parse( model="gpt-4o-mini", messages=[{"role": "user", "content": "帮我规划:明天要写周报、修两个 bug、准备周五的演示。输出 JSON。"}], response_format=Task, # Pydantic 模型自动转为 JSON Schema 约束)task = resp.choices[0].message.parsedprint(f"任务:{task.name},优先级:{task.priority},预估 {task.estimated_hours} 小时")高级 Prompt 技术
Section titled “高级 Prompt 技术”角色扮演(Persona / Role-Playing)
Section titled “角色扮演(Persona / Role-Playing)”在 System Prompt 中给 LLM 赋予一个专业角色(“你是一位资深 Python 安全审计员”),模型会激活训练数据中与该角色相关的知识和推理模式,输出质量和专业度显著提升。这是利用了注意力机制对角色关键词的”锚定效应”。
XML 标签分段(XML Tagging)
Section titled “XML 标签分段(XML Tagging)”Anthropic 推广的技巧:用 XML 标签(如 <context>、<instructions>、<output_format>)清晰地分隔 Prompt 的不同部分。模型(尤其 Claude 系列)对 XML 标签有特殊优化,能更准确地将注意力分配到正确区域。
<context>你正在审查一个电商后端系统的 Python 代码。</context>
<instructions>找出以下代码中的安全漏洞,按严重程度排序。</instructions>
<code>{code_here}</code>
<output_format>- 漏洞名称- 严重程度(高/中/低)- 修复建议</output_format>Prompt 链(Prompt Chaining)
Section titled “Prompt 链(Prompt Chaining)”复杂任务拆解为多步 Prompt 链:第一步的输出作为第二步的输入。每一步只让 LLM 做一件简单的事,整体准确率远超单次复杂 Prompt。
[用户输入] → [Prompt 1: 理解意图] → [Prompt 2: 检索相关知识] → [Prompt 3: 草拟回答] → [Prompt 4: 审校修正] → [最终输出]思维树(Tree-of-Thought, ToT)
Section titled “思维树(Tree-of-Thought, ToT)”CoT 是线性推理(一条链走到底),ToT 则是树形搜索:模型在每个推理节点生成多个分支想法,评估每个想法的前景,剪掉差的分支,保留并展开好的分支——类似下棋时的搜索树。适合创意写作、数学竞赛、策略规划等需要在多个方向上探索的问题。
自我反思与修正(Reflection / Self-Refine)
Section titled “自我反思与修正(Reflection / Self-Refine)”让模型先回答,再批判自己的回答,然后给出修正版。简单但出奇地有效:模型在”批判者”视角下往往能发现自己”生成者”视角下的错误。
# 第一步:生成初稿draft = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": "写一个 Python 快速排序函数。"}],).choices[0].message.content
# 第二步:自我批判 + 修正refined = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "user", "content": f"审查以下代码的问题并给出改进版本:\n{draft}"}, ],).choices[0].message.contentPrompt 缓存(Prompt Caching)
Section titled “Prompt 缓存(Prompt Caching)”2024 年下半年起,OpenAI、Anthropic 等厂商推出 Prompt 缓存功能:将频繁使用的长 System Prompt、知识库上下文等缓存到服务端,后续请求命中缓存时费用降低 50%-90%,延迟降低数倍。这对 RAG(每次拼接长文档)和 Agent(系统提示词很长)场景意义重大。
- ChatGPT 系统提示词:OpenAI 在产品里用精心设计的 system prompt 设定 AI 角色、边界和行为规范——这是 ChatGPT”好用又不乱说话”的关键。2025 年泄露的 GPT 系统提示词长达数千字,包含详细的行为规则、安全策略和输出格式约束。
- GitHub Copilot 注释生成:开发者写一行注释
// 排序数组,Copilot 的 Prompt 模板将注释 + 上下文代码拼接送入 LLM,生成对应函数。 - 文案生成模板:营销团队用固定 Prompt 模板批量生成产品描述、广告文案——模板里预设品牌调性、字数、关键词,保证风格统一。
- 多语言翻译流水线:先让 LLM 检测源语言,再翻译,最后由另一个 Prompt 做本地化审校——Prompt 链拆分让每一步更可控。
2025-2026 趋势
Section titled “2025-2026 趋势”- Prompt 工程向”系统工程”演进:随着 LLM 能力增强,手写精巧 Prompt 的边际收益在递减,而提示管理(版本控制、A/B 测试、评估管线) 的价值在上升。团队需要像管理代码一样管理 Prompt。
- 自动 Prompt 优化(Automatic Prompt Optimization):DSPy 等框架把 Prompt 当作可优化参数,用梯度-free 的搜索算法自动找到最优 Prompt,减少人工试错。
- 指令层级(Instruction Hierarchy):2025 年 OpenAI 提出 System > User > Tool 的指令优先级模型,系统指令始终凌驾于用户输入之上,从根本上防御提示注入(Prompt Injection) 攻击。
- 多模态 Prompt:随着 GPT-4o、Gemini 等原生多模态模型普及,Prompt 不再限于文字——可以用截图、手绘图、语音片段作为指令的一部分,Prompt 工程扩展为”多模态交互设计”。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| LangChain PromptTemplate | Python / TS | 模板化 Prompt 管理,支持变量插值与动态拼装 |
| DSPy | Python | 斯坦福出品,把 Prompt 当可优化参数自动调优,告别手写 |
| Promptfoo | TypeScript | Prompt 的测试评估框架,批量对比不同 Prompt 的效果 |
| Anthropic Prompt Generator | Web | Anthropic 提供的在线 Prompt 生成与优化工具,自动分析并改进 Prompt |
| Promptfoo / OpenAI Evals | TS / Python | 评估框架,跑测试集量化 Prompt 变更对输出质量的影响 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 零样本 | Zero-shot | 不给任何示例,直接让 LLM 完成任务 |
| 少样本 | Few-shot | 在 Prompt 中提供少量”输入→输出”范例引导 LLM |
| 上下文学习 | In-Context Learning (ICL) | 模型从 Prompt 中的示例学习模式并应用到新问题,无需更新参数 |
| 思维链 | Chain-of-Thought (CoT) | 引导 LLM 分步推理后再给答案的技术 |
| 自我一致性 | Self-Consistency | 多次采样推理链取多数投票,提升答案可靠性 |
| 思维树 | Tree-of-Thought (ToT) | 将推理过程组织为搜索树,支持分支探索与回溯 |
| 推理与行动 | ReAct (Reason + Act) | LLM 交替推理与调用工具的范式,Agent 的基础 |
| 自注意力机制 | Self-Attention | Transformer 的核心机制,生成每个词时对所有输入词分配注意力权重 |
| Token | Token | LLM 处理文本的基本单位,约等于 0.75 个英文单词或 1-2 个汉字 |
| 系统提示词 | System Prompt | 设定 LLM 角色、规则和边界的顶层指令,优先级最高 |
| 温度 | Temperature | 控制输出随机性,0 最确定,1 更有创意 |
| 核采样 | Top-P | 从概率累积前 P 的候选词中采样,控制输出多样性 |
| 提示注入 | Prompt Injection | 攻击者在输入中嵌入恶意指令,劫持 LLM 行为的安全漏洞 |
| 结构化输出 | Structured Output | 通过 JSON Schema 等约束 LLM 输出为可解析的结构化格式 |
| Prompt 缓存 | Prompt Caching | 将常用长 Prompt 缓存到服务端,降低重复请求的成本和延迟 |
- Chain-of-Thought:Wei et al., “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models”(2022),发现加一句”Let’s think step by step”就能大幅提升数学推理准确率。
- Self-Consistency:Wang et al., “Self-Consistency Improves Chain of Thought Reasoning in Language Models”(2022),多次采样投票显著提升 CoT 的鲁棒性。
- Tree-of-Thought:Yao et al., “Tree of Thoughts: Deliberate Problem Solving with Large Language Models”(2023),将推理过程建模为搜索树,支持探索与回溯。
- ReAct:Yao et al., “ReAct: Synergizing Reasoning and Acting in Language Models”(2022),提出推理 + 行动交替模式,成为 Agent 的标准范式。详见 AI Agent 与多智能体。
- Prompt 工程指南:OpenAI / Anthropic 官方文档均提供详尽的 Prompt 最佳实践,是入门首选参考。
- DSPy:Khattab et al., “DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines”(2023),将 Prompt 工程变为可编程、可优化的系统。