Skip to content

提示工程

本页介绍 LLM 应用生态中最基础也最实用的技术——提示工程(Prompt Engineering):通过精心设计输入文本(prompt)来引导 LLM 产生更好的输出。它是 LLM 应用生态概览中的”驾驶技巧”层,和 RAG、Agent 等技术配合使用效果倍增。

Prompt = 给 AI 下指令的艺术。 好的 Prompt 就像好的需求文档——需求写得清楚,程序员(LLM)就做得好;需求模糊,结果就跑偏。

从技术角度理解:LLM 的本质是一个条件概率模型——给定前面的文本(Prompt),预测下一个最可能出现的词(Token)。因此,你写的每一个字都在影响模型”走向”哪个方向。Prompt 工程就是通过组织输入文本的结构、上下文和指令,让模型的概率分布向”你想要的输出”倾斜。

LLM 内部使用自注意力机制(Self-Attention):模型在生成每个词时,会”关注”(attend to)输入中所有之前的词,并赋予不同的注意力权重。这意味着:

  • Prompt 中每个词都会影响输出——不仅是你想说的内容,还包括措辞、格式、语气。
  • 输入的结构(分段、列表、标记)会影响注意力分配,从而影响输出质量。
  • 相同意思、不同表述的 Prompt 可能产生截然不同的输出——这不是”玄学”,而是注意力权重分布的差异。
  • Zero-shot(零样本):直接问,不给例子。“帮我写封请假邮件。“——简单直接,但 LLM 不知道你要什么风格。
  • Few-shot(少样本):给几个例子再问。先展示 2-3 个”输入→输出”范例,LLM 就能模仿格式和风格。其原理是上下文学习(In-Context Learning, ICL)——模型利用注意力机制从示例中提取模式(格式、推理路径、语言风格),并在生成时”复制”这些模式到新问题上,全程不需要更新模型参数。
  • Chain-of-Thought(思维链 / CoT):让 LLM “想一想再答”。加一句”请一步步推理”,复杂问题(数学、逻辑)准确率大幅提升。技术原理:中间推理步骤为模型提供了更多的”计算 Token”——每个 Token 都是一次前向传播,多生成几个 Token 就意味着模型有更多”思考步骤”来处理复杂逻辑。
  • ReAct(推理+行动):让 LLM 边推理边调用工具。“思考 → 行动 → 观察 → 再思考”,是 AI Agent 的核心模式。

Zero-shot 和 Few-shot 决定输出的格式;CoT 决定输出的质量(让模型多想一步);ReAct 决定 LLM 能调用外部工具。实际产品通常组合使用。

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 条推理链得出此答案)")

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 的 JSON
resp = 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.parsed
print(f"任务:{task.name},优先级:{task.priority},预估 {task.estimated_hours} 小时")

在 System Prompt 中给 LLM 赋予一个专业角色(“你是一位资深 Python 安全审计员”),模型会激活训练数据中与该角色相关的知识和推理模式,输出质量和专业度显著提升。这是利用了注意力机制对角色关键词的”锚定效应”。

Anthropic 推广的技巧:用 XML 标签(如 <context>、<instructions>、<output_format>)清晰地分隔 Prompt 的不同部分。模型(尤其 Claude 系列)对 XML 标签有特殊优化,能更准确地将注意力分配到正确区域。

<context>
你正在审查一个电商后端系统的 Python 代码。
</context>
<instructions>
找出以下代码中的安全漏洞,按严重程度排序。
</instructions>
<code>
{code_here}
</code>
<output_format>
- 漏洞名称
- 严重程度(高/中/低)
- 修复建议
</output_format>

复杂任务拆解为多步 Prompt 链:第一步的输出作为第二步的输入。每一步只让 LLM 做一件简单的事,整体准确率远超单次复杂 Prompt。

[用户输入] → [Prompt 1: 理解意图] → [Prompt 2: 检索相关知识]
→ [Prompt 3: 草拟回答] → [Prompt 4: 审校修正] → [最终输出]

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.content

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 链拆分让每一步更可控。
  • 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 工程扩展为”多模态交互设计”。
类库语言说明
LangChain PromptTemplatePython / TS模板化 Prompt 管理,支持变量插值与动态拼装
DSPyPython斯坦福出品,把 Prompt 当可优化参数自动调优,告别手写
PromptfooTypeScriptPrompt 的测试评估框架,批量对比不同 Prompt 的效果
Anthropic Prompt GeneratorWebAnthropic 提供的在线 Prompt 生成与优化工具,自动分析并改进 Prompt
Promptfoo / OpenAI EvalsTS / 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-AttentionTransformer 的核心机制,生成每个词时对所有输入词分配注意力权重
TokenTokenLLM 处理文本的基本单位,约等于 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 工程变为可编程、可优化的系统。