Prompt 自动优化:DSPy 与自动提示词工程(2026 年版)
AI 导读
Prompt 自动优化:DSPy 与自动提示词工程(2026 年版) 1. 引言 手工编写 Prompt 是一门"炼金术":凭经验调整措辞、添加示例、调整格式,通过反复试错达到满意的效果。这种方式存在三个根本问题: 不可复现:好的 Prompt 高度依赖编写者的经验和直觉 不可扩展:每换一个任务或模型,就要重新调整 不可评估:难以量化 Prompt A 比 Prompt B 好多少...
Prompt 自动优化:DSPy 与自动提示词工程(2026 年版)
1. 引言
手工编写 Prompt 是一门"炼金术":凭经验调整措辞、添加示例、调整格式,通过反复试错达到满意的效果。这种方式存在三个根本问题:
- 不可复现:好的 Prompt 高度依赖编写者的经验和直觉
- 不可扩展:每换一个任务或模型,就要重新调整
- 不可评估:难以量化 Prompt A 比 Prompt B 好多少
自动提示词工程(Automatic Prompt Engineering, APE)旨在用算法替代人工试错,让 Prompt 优化变成一个可量化、可复现、可自动化的工程过程。其中最具代表性的框架是斯坦福大学的 DSPy。
2. 自动 Prompt 优化的谱系
手工 Prompt Engineering
|
v
模板化 Prompt(固定格式 + 变量填充)
|
v
Prompt 搜索(枚举/采样多种表述)
|
v
Prompt 优化(基于评估反馈自动迭代)
|
v
程序化 Prompt(DSPy:声明式 + 编译式)
2.1 各层级的技术代表
| 层级 | 技术 | 代表工具 | 自动化程度 |
|---|---|---|---|
| 手工 | 人工编写 | ChatGPT/Claude | 0% |
| 模板化 | Jinja/f-string 模板 | LangChain PromptTemplate | 10% |
| Prompt 搜索 | 穷举/采样 | APE (Zhou et al. 2022) | 50% |
| Prompt 优化 | 梯度/反馈迭代 | OPRO, PromptBreeder | 70% |
| 程序化 | 声明式编程 + 编译 | DSPy | 90% |
3. DSPy 框架详解
3.1 什么是 DSPy
DSPy(Declarative Self-improving Language Programs, Pythonically)是斯坦福 NLP 组开发的框架。其核心思想是:
不要写 Prompt,写程序。让编译器为你生成最优 Prompt。
传统方式:
人类 → 手写 Prompt → LLM → 输出 → 人类评估 → 修改 Prompt → 循环
DSPy 方式:
人类 → 定义签名(输入→输出) → 定义模块(推理结构) → 编译(自动优化) → 最优 Prompt
3.2 DSPy 的三大核心概念
3.2.1 签名(Signature)
签名定义了任务的输入和输出,类似于函数签名。
import dspy
# 简单签名(字符串语法)
classify = dspy.Predict("sentence -> sentiment")
# 完整签名(类语法)
class SentimentClassification(dspy.Signature):
"""对给定句子进行情感分类。"""
sentence: str = dspy.InputField(desc="待分析的中文句子")
sentiment: str = dspy.OutputField(desc="情感类别:积极/消极/中性")
confidence: float = dspy.OutputField(desc="置信度,0-1 之间")
签名的作用是将 Prompt 工程从"怎么说"转变为"要什么"。你只需声明任务的语义,DSPy 负责生成实际的 Prompt。
3.2.2 模块(Module)
模块定义了推理的结构,类似于 PyTorch 中的 nn.Module。
class RAGAnswer(dspy.Module):
def __init__(self, num_passages=3):
super().__init__()
self.retrieve = dspy.Retrieve(k=num_passages)
self.generate = dspy.ChainOfThought("context, question -> answer")
def forward(self, question):
context = self.retrieve(question).passages
answer = self.generate(context=context, question=question)
return answer
DSPy 提供了多种内置模块:
| 模块 | 说明 | 对应的 Prompt 技术 |
|---|---|---|
dspy.Predict |
基础预测 | 直接 Prompt |
dspy.ChainOfThought |
链式思维 | CoT |
dspy.ProgramOfThought |
程序化思维 | 生成代码后执行 |
dspy.ReAct |
推理+行动 | ReAct Agent |
dspy.MultiChainComparison |
多路径比较 | Self-Consistency |
dspy.Retrieve |
检索 | RAG |
3.2.3 优化器(Optimizer / Teleprompter)
优化器是 DSPy 的核心创新:基于训练数据和评估指标,自动搜索最优的 Prompt。
from dspy.teleprompt import BootstrapFewShot
# 定义评估指标
def accuracy_metric(example, prediction, trace=None):
return example.answer == prediction.answer
# 创建优化器
optimizer = BootstrapFewShot(
metric=accuracy_metric,
max_bootstrapped_demos=4,
max_labeled_demos=16
)
# 编译(优化)
optimized_rag = optimizer.compile(
RAGAnswer(),
trainset=train_examples
)
3.3 DSPy 的优化器全览
| 优化器 | 原理 | 适用场景 | 数据需求 |
|---|---|---|---|
BootstrapFewShot |
从训练集中自动挑选最优 Few-shot 示例 | 通用 | 少量标注数据 |
BootstrapFewShotWithRandomSearch |
随机搜索 + Few-shot | 通用(更稳定) | 少量标注数据 |
MIPRO |
多指令优化 | 复杂任务 | 中等数据 |
MIPROv2 |
MIPRO 改进版 | 复杂任务(推荐) | 中等数据 |
BootstrapFinetune |
生成训练数据后微调模型 | 大规模部署 | 较多数据 |
COPRO |
坐标提升优化指令 | 指令优化 | 中等数据 |
SignatureOptimizer |
直接优化签名描述 | 签名调优 | 少量数据 |
3.4 DSPy 实战示例
示例 1:情感分析
import dspy
# 1. 配置 LLM
lm = dspy.LM("openai/gpt-4o-mini")
dspy.configure(lm=lm)
# 2. 定义签名
class SentimentAnalysis(dspy.Signature):
"""分析中文电商评论的情感倾向。"""
review: str = dspy.InputField(desc="中文商品评论")
sentiment: str = dspy.OutputField(
desc="情感分类:positive/negative/neutral"
)
reason: str = dspy.OutputField(desc="判断依据,一句话")
# 3. 定义模块
class SentimentClassifier(dspy.Module):
def __init__(self):
super().__init__()
self.classify = dspy.ChainOfThought(SentimentAnalysis)
def forward(self, review):
return self.classify(review=review)
# 4. 准备训练数据
train_examples = [
dspy.Example(
review="这个手机壳质量很好,手感也不错",
sentiment="positive"
).with_inputs("review"),
dspy.Example(
review="收到货发现有划痕,很失望",
sentiment="negative"
).with_inputs("review"),
# ... 更多示例
]
# 5. 编译优化
from dspy.teleprompt import BootstrapFewShot
optimizer = BootstrapFewShot(
metric=lambda ex, pred, _: ex.sentiment == pred.sentiment,
max_bootstrapped_demos=4
)
optimized_classifier = optimizer.compile(
SentimentClassifier(),
trainset=train_examples
)
# 6. 使用
result = optimized_classifier(review="发货速度很快,包装也很用心")
print(f"情感: {result.sentiment}")
print(f"原因: {result.reason}")
示例 2:多步 RAG 问答
class MultiStepRAG(dspy.Module):
def __init__(self):
super().__init__()
self.decompose = dspy.ChainOfThought(
"question -> sub_questions: list[str]"
)
self.retrieve = dspy.Retrieve(k=3)
self.answer_sub = dspy.ChainOfThought(
"context, sub_question -> sub_answer"
)
self.synthesize = dspy.ChainOfThought(
"question, sub_answers: list[str] -> final_answer"
)
def forward(self, question):
# 步骤 1:分解问题
decomposition = self.decompose(question=question)
# 步骤 2:逐一检索和回答子问题
sub_answers = []
for sub_q in decomposition.sub_questions:
context = self.retrieve(sub_q).passages
sub_answer = self.answer_sub(
context=context, sub_question=sub_q
)
sub_answers.append(sub_answer.sub_answer)
# 步骤 3:综合最终答案
final = self.synthesize(
question=question, sub_answers=sub_answers
)
return final
3.5 DSPy 的优势与局限
优势:
| 优势 | 说明 |
|---|---|
| 声明式编程 | 关注"做什么"而非"怎么写 Prompt" |
| 自动优化 | 基于数据和指标自动找最优 Prompt |
| 模型无关 | 换模型后重新编译即可,无需重写 Prompt |
| 可组合 | 模块可以嵌套组合,构建复杂管道 |
| 可评估 | 内置评估框架,量化 Prompt 效果 |
| 可复现 | 相同的代码 + 数据 + 编译 = 相同的结果 |
局限:
| 局限 | 说明 |
|---|---|
| 学习曲线 | 需要理解新的编程范式 |
| 调试难度 | 编译后的 Prompt 是黑盒 |
| 数据依赖 | 需要一定量的标注数据 |
| 编译成本 | 优化过程需要大量 LLM 调用 |
| 社区规模 | 相比 LangChain 社区较小 |
4. 其他自动 Prompt 优化方法
4.1 OPRO(Optimization by PROmpting)
Google DeepMind 提出的方法,核心思想是用 LLM 本身来优化 Prompt。
流程:
1. 初始化一组 Prompt 候选
2. 在评估集上测试每个 Prompt 的得分
3. 将 Prompt + 得分作为上下文,让 LLM 生成新的 Prompt
4. 重复 2-3 直到收敛
Meta-Prompt 示例:
"以下是一些提示词及其在任务上的得分:
提示词 1: '请分类以下文本的情感' - 得分: 72%
提示词 2: '判断这段话是积极还是消极的' - 得分: 78%
提示词 3: '作为情感分析专家,请...' - 得分: 85%
请生成一个新的提示词,目标是获得更高的得分。"
4.2 PromptBreeder
DeepMind 的另一个方法,借鉴了遗传算法的思想。
初始种群:N 个 Prompt
|
v
变异操作:LLM 生成 Prompt 的变体
|
v
交叉操作:组合两个 Prompt 的优势
|
v
选择操作:保留得分最高的 Prompt
|
v
重复直到收敛
4.3 TextGrad
利用 LLM 提供的"文本梯度"来优化 Prompt。
# TextGrad 的核心思想
# 1. 前向传播
prompt = "请将以下英文翻译为中文"
output = llm(prompt + input_text)
# 2. 评估
loss = evaluate(output, ground_truth)
# 3. 文本梯度(LLM 生成的改进建议)
gradient = llm(f"""
当前 Prompt: {prompt}
当前输出: {output}
期望输出: {ground_truth}
评估得分: {loss}
请分析 Prompt 的问题,并建议如何修改以获得更好的输出。
""")
# 4. 更新
new_prompt = llm(f"""
当前 Prompt: {prompt}
改进建议: {gradient}
请生成改进后的 Prompt。
""")
4.4 方法对比
| 方法 | 优化对象 | 搜索策略 | 需要标注数据 | 实现复杂度 |
|---|---|---|---|---|
| OPRO | Prompt 文本 | 元提示迭代 | 是 | 低 |
| PromptBreeder | Prompt 文本 | 遗传算法 | 是 | 中 |
| TextGrad | Prompt + 中间变量 | 文本梯度下降 | 是 | 中 |
| DSPy | 示例 + 指令 + 结构 | 多种优化器 | 是 | 高 |
5. 企业落地实践
5.1 什么时候需要自动 Prompt 优化
| 信号 | 说明 |
|---|---|
| Prompt 迭代超过 10 次 | 人工调优效率太低 |
| 需要适配多个模型 | 手工为每个模型写 Prompt 不现实 |
| 有量化评估指标 | 可以定义明确的优化目标 |
| 有标注数据 | 至少 50-100 条标注样本 |
| 需要生产级可靠性 | 不能容忍 Prompt 脆弱性 |
5.2 企业 Prompt 优化管线
数据准备 优化阶段 部署阶段
────────── ────────── ──────────
1. 收集真实输入 3. 选择优化方法 6. A/B 测试
2. 标注黄金答案 - DSPy (推荐) 7. 监控指标
- OPRO (轻量) 8. 持续优化
4. 配置评估指标
5. 运行优化
- 编译/搜索
- 验证集评估
- 选择最优
5.3 评估指标设计
| 任务类型 | 推荐指标 | 说明 |
|---|---|---|
| 分类 | 准确率 / F1 | 标准分类指标 |
| 生成 | BLEU / ROUGE / BERTScore | 自动评估 |
| 抽取 | 精确匹配 / 部分匹配 | 信息抽取标准 |
| 对话 | 人工评分 / GPT-4 评分 | 开放式任务 |
| RAG | 忠实度 + 相关性 + 完整性 | RAG 三维评估 |
5.4 成本估算
以 DSPy BootstrapFewShot 为例,优化 100 个训练样本:
| 阶段 | API 调用次数 | 预估成本(GPT-4o) |
|---|---|---|
| Bootstrap 生成示例 | ~100-200 | $0.50-1.00 |
| 候选评估 | ~500-1000 | $2.50-5.00 |
| 验证集评估 | ~100-200 | $0.50-1.00 |
| 总计 | ~700-1400 | $3.50-7.00 |
对比人工优化 Prompt 可能需要的数小时工作量和数百次试错调用,自动优化在成本上通常更优。
6. DSPy 与 LangChain 的关系
| 维度 | DSPy | LangChain |
|---|---|---|
| 核心理念 | 编译式:声明任务 → 自动生成 Prompt | 组合式:手写 Prompt → 组装管道 |
| Prompt 来源 | 自动生成/优化 | 人工编写 |
| 优化能力 | 内置(核心特性) | 无(需外部工具) |
| 编排能力 | 有(Module 组合) | 强(LCEL/LangGraph) |
| 学习曲线 | 较陡(新范式) | 中等(概念多) |
| 生态规模 | 小但增长中 | 大(最广泛的 LLM 框架) |
| 最佳场景 | 需要系统化优化 Prompt | 需要快速搭建 LLM 应用 |
互补使用:DSPy 优化出最优 Prompt 后,可以导出为纯文本 Prompt,嵌入 LangChain 管道中使用。
7. 前沿研究方向
7.1 Prompt 优化的理论化
研究者正在尝试建立 Prompt 优化的理论基础:
- Prompt 空间的几何结构
- 优化的收敛性保证
- 泛化能力的量化
7.2 多任务/多模型联合优化
一个 Prompt 同时在多个任务和多个模型上优化,找到"鲁棒"的 Prompt。
7.3 强化学习驱动的 Prompt 优化
将 Prompt 优化建模为强化学习问题:
- 状态:当前 Prompt
- 动作:修改操作
- 奖励:评估指标
7.4 与推理模型的结合
o1/o3 等推理模型内置了隐式 CoT。如何优化与这些模型交互的 Prompt(简化而非复杂化)是一个新方向。
8. 最佳实践总结
| 实践 | 说明 |
|---|---|
| 先手工后自动 | 先用手工 Prompt 建立 baseline,再用自动优化提升 |
| 投资评估数据 | 好的标注数据是自动优化的基础 |
| 从 DSPy 开始 | DSPy 是目前最成熟的自动 Prompt 优化框架 |
| 监控生产效果 | 自动优化的 Prompt 在生产中可能退化 |
| 版本管理 | 对优化后的 Prompt 进行版本控制 |
| 保留可解释性 | 理解优化器为什么选择了这个 Prompt |
9. 结论
自动 Prompt 优化代表了 Prompt 工程从"手艺"到"工程"的进化。DSPy 是这一领域最重要的框架,它将 Prompt 编写从一次性的文本创作转变为可编译、可优化、可复现的程序化过程。
对于认真对待 LLM 应用质量的团队,建议:
- 短期:学习并使用 DSPy,将核心 Prompt 转化为可优化的程序
- 中期:建立 Prompt 评估和持续优化的管线
- 长期:关注 Prompt 优化的理论进展和新方法
记住:最好的 Prompt 不是人写的,是数据和算法找到的。
Maurice | [email protected]
深度加工(NotebookLM 生成)
基于本文内容生成的 PPT 大纲、博客摘要、短视频脚本与 Deep Dive 播客,用于多场景复用
PPT 大纲(5-8 张幻灯片) 点击展开
Prompt 自动优化:DSPy 与自动提示词工程(2026 年版) — ppt
这是一份为您基于提供的文章生成的 PPT 大纲,采用 Markdown 格式输出,共包含 7 张幻灯片,重点梳理了 Prompt 自动优化与 DSPy 的核心内容:
幻灯片 1:引言 - 告别手工“炼金术”
- 手工编写的痛点:传统的手工 Prompt 高度依赖经验,面临不可复现、不可扩展、不可评估等三大根本问题 [1]。
- 自动提示词工程 (APE):旨在用算法替代人工反复试错,将 Prompt 优化转变为可量化、可复现、可自动化的工程过程 [1]。
- 核心范式转变:“不要写 Prompt,写程序”,让编译器为你生成最优的 Prompt,这是斯坦福大学 DSPy 框架提出的核心思想 [1]。
幻灯片 2:Prompt 优化的演进谱系
- 手工与模板化(自动化 0-10%):从人工凭借直觉编写,到使用 Jinja / LangChain 模板进行变量填充 [1]。
- Prompt 搜索(自动化 50%):通过穷举或采样多种表述(如 APE)来寻找更合适的提示词 [1]。
- Prompt 优化(自动化 70%):利用梯度或评估反馈进行自动迭代更新(如 OPRO 等技术) [1]。
- 程序化 Prompt(自动化 90%):以 DSPy 为代表,采用声明式编程结合编译的方式,实现了极高的自动化程度 [1]。
幻灯片 3:DSPy 框架三大核心概念
- 签名(Signature):定义任务的输入和输出格式,将工程师的工作从思考“怎么说”转变为声明任务的语义“要什么” [1]。
- 模块(Module):定义推理结构(类似 PyTorch 的 nn.Module),框架内置了链式思维 (CoT)、检索 (RAG)、推理与行动 (ReAct) 等多种模块 [1, 2]。
- 优化器(Optimizer):框架的核心创新,能够基于提供的训练数据和评估指标,自动搜索并编译出最优的 Prompt 示例与指令 [2]。
- 主要优势:实现了声明式编程、模型无关(更换模型后只需重新编译)、支持嵌套组合且结果完全可复现 [3]。
幻灯片 4:其他主流自动优化方法
- OPRO:由 Google DeepMind 提出,将已有 Prompt 及其在评估集上的得分作为上下文,让 LLM 自身进行“元提示”迭代以生成更优解 [4]。
- PromptBreeder:借鉴遗传算法思想,在多个候选 Prompt 的种群中执行变异、交叉和选择操作,直到性能收敛 [4]。
- TextGrad:利用 LLM 提供“文本梯度”,通过分析当前输出与期望输出之间的差异并生成改进建议,以此来指导 Prompt 更新 [4, 5]。
幻灯片 5:企业级落地与实践指北
- 引入时机:当遇到需适配多个模型、人工迭代超过 10 次效率低下、拥有量化评估指标及 50-100 条标注数据时,应启动自动优化 [5]。
- 标准优化管线:涵盖收集真实输入、标注黄金答案、配置评估指标(如准确率、BLEU 等),再到运行编译验证及最终的 A/B 测试 [5]。
- 成本效益优势:通过 API 自动优化 100 个样本的成本仅需数美元,相比人工数小时的工作和数百次试错,性价比具备绝对优势 [5]。
幻灯片 6:DSPy 与 LangChain 对比
- 核心理念对比:DSPy 强调“编译式”(声明任务后自动生成),而 LangChain 强调“组合式”(手工编写提示词后组装成管道) [6]。
- 能力与生态:DSPy 内置了强大的核心优化能力但学习曲线较陡峭;LangChain 则拥有最广泛的编排生态但缺乏内置的优化工具 [6]。
- 互补使用策略:可以先利用 DSPy 的强大算法优化出最优 Prompt,将其导出为纯文本后,再无缝嵌入到 LangChain 的工程管道中部署使用 [6]。
幻灯片 7:总结与未来展望
- 工程化进化:Prompt 工程正式从一门考验手感的“手艺”,演化为数据与算法驱动的可量化工程 [7]。
- 最佳实践建议:应当先用手工写 Prompt 建立评估基线,随后重点投资获取高质量标注数据,最后依靠 DSPy 等框架进行自动化提升 [6]。
- 前沿研究方向:业界正致力于探索 Prompt 优化的理论化(空间结构与收敛性)、多任务联合鲁棒性优化,以及强化学习驱动的新机制 [6, 7]。
博客摘要 + 核心看点 点击展开
Prompt 自动优化:DSPy 与自动提示词工程(2026 年版) — summary
SEO 友好博客摘要
提示词工程正从人工试错迈向自动化!本文深度解析2026版自动提示词工程(APE),核心聚焦斯坦福大学开发的DSPy框架[1]。通过声明式编程与内置优化器,DSPy能基于数据自动搜索并生成最优Prompt,彻底解决手工调优难复现、难扩展的痛点[1, 2]。此外,文章还横向对比了OPRO、TextGrad等前沿算法,并提供了完整的企业级落地管线与API成本估算[3, 4]。一文助您掌握大模型系统优化法则,让算法为您写出最佳提示词!
3 条核心看点
- 范式颠覆:告别手工试错,DSPy利用声明式编程和优化器,将Prompt转化为可编译优化的程序[1, 5]。
- 核心机制:详解DSPy签名、模块与优化器,基于数据与评估指标,让大模型自动迭代寻找最优提示词[1, 6]。
- 企业落地:横评OPRO等前沿算法,提供涵盖数据准备、指标设计到A/B测试的完整自动优化管线[3, 4]。
60 秒短视频脚本 点击展开
Prompt 自动优化:DSPy 与自动提示词工程(2026 年版) — video
这是一份为您量身定制的 60 秒短视频脚本,严格按照您的字数与结构要求编写:
【钩子开场】(12 字)
别再手工写 Prompt 了![1]
【核心解说 1】(25 字)
手工写 Prompt 如炼金术,全凭经验试错,不可复现且难扩展。[1]
【核心解说 2】(25 字)
DSPy 提出:不要手写 Prompt,写程序让编译器自动生成。[1]
【核心解说 3】(25 字)
优化器利用训练数据和指标,自动搜索迭代出最佳的提示词。[2]
【收束】
记住,最好的 Prompt 不是人写的,是数据和算法找到的![3]
课后巩固
与本文内容匹配的闪卡与测验,帮助巩固所学知识
延伸阅读
根据本文主题,为你推荐相关的学习资料