Agent的成败,70%取决于提示词质量。当手动调参走向尽头,六套自动优化引擎用编译器思维、梯度下降、进化算法重写了游戏规则。Databricks用GEPA将推理成本砍掉90倍,DSPy以3.4万Star构建了提示词的"LLVM"——提示词自动优化正在从学术 curiosities 变成Agent工程的必修课。
2026年,提示词自动优化(Automated Prompt Optimization)完成了从实验室到生产线的关键一跃。核心信号有三:
第一,ROI已经明确。 Databricks最新研究证明,通过对开源模型(如Llama 3)的提示词进行GEPA自动优化,可以在信息抽取任务上达到甚至超越GPT-4o的水平,而推理成本降低90倍。这不是边际改进,而是数量级差异。
第二,技术路线收敛为三大范式。 六大引擎分别代表了三种根本不同的优化哲学:(1)编译器范式——DSPy/SAMMO将提示词视为可编译的程序;(2)梯度范式——TextGrad/AdalFlow将文本优化映射为梯度下降;(3)进化范式——GEPA/OPRO用种群进化搜索最优提示词。三条路线正在交叉融合。
第三,Agent场景是最大受益者。 传统提示词优化只解决单一任务,但Agent系统中的提示词是嵌套的、多层的、动态的——系统提示词、工具描述、推理链模板、输出格式约束相互耦合。手工优化这种多提示词联合空间几乎不可能,自动化成为刚需。
| 维度 | DSPy | TextGrad | GEPA | OPRO | SAMMO | AdalFlow |
|---|---|---|---|---|---|---|
| 来源 | Stanford NLP | Stanford Zou Group | Databricks/GEPA AI | Google DeepMind | Microsoft Research | SylphAI |
| GitHub Stars | 34,557 | 3,557 | 4,551 | 745 | 756 | 4,148 |
| 最近更新 | 2026-05-19 | 2025-07-25 | 2026-05-18 | 2024-12-04 | 2025-06-23 | 2026-04-28 |
| 核心范式 | 声明式编译器 | 文本梯度下降 | 反射式进化 | LLM即优化器 | 符号程序搜索 | PyTorch式训练 |
| 优化对象 | 整个LLM程序 | 单个/多个提示词 | 提示词+代码+配置 | 提示词 | 结构化提示词程序 | LLM工作流 |
| 需要训练集 | 是 | 是 | 是(轨迹采样) | 是 | 是 | 是 |
| 多提示词联合优化 | 原生支持 | 支持 | 原生支持 | 间接支持 | 原生支持 | 原生支持 |
| Agent场景适配 | 强(Module体系) | 中等 | 强(轨迹驱动) | 弱 | 中等 | 强(Agent SDK) |
| 上手门槛 | 中高 | 中 | 中 | 低 | 高 | 中 |
| 推理成本优化 | 模型无关 | 模型无关 | 核心卖点 | 需大模型 | 需大模型 | 模型无关 |
| 生产就绪度 | ★★★★☆ | ★★★☆☆ | ★★★★☆ | ★★☆☆☆ | ★★★☆☆ | ★★★☆☆ |
DSPy的核心洞察极具颠覆性:提示词不应该由人写,而应该由编译器生成。 就像你不会手写汇编代码一样,你不应该手写提示词。
DSPy的架构借鉴了编译器设计的三段式:
前端(Signature/Module定义)
↓
中端(Optimizer/Teleprompter)
↓
后端(编译后的提示词 + LM调用)
开发者用声明式的Signature定义输入输出语义(如"question -> answer"),用Module组合多个步骤(类似PyTorch的nn.Module),然后交给Optimizer自动搜索最优提示词和few-shot示例。
DSPy 3.0版本的优化器家族已非常丰富:
import dspy
# 定义签名——只需说明"做什么"
class ExtractInfo(dspy.Signature):
"""从文本中提取结构化信息"""
text: str = dspy.InputField()
entities: list = dspy.OutputField(desc="提取的实体列表")
summary: str = dspy.OutputField(desc="一句话摘要")
# 组合为模块
class InfoPipeline(dspy.Module):
def __init__(self):
self.extract = dspy.ChainOfThought(ExtractInfo)
def forward(self, text):
return self.extract(text=text)
# 编译——自动优化提示词
optimizer = dspy.MIPROv2(metric=accuracy_metric, num_threads=4)
compiled = optimizer.compile(InfoPipeline(), trainset=train_examples)
# 编译后的模块使用了自动生成的最优提示词和few-shot示例
关键优势: DSPy最大的价值不在于单条提示词的优化,而在于整个LLM程序的联合编译。当你的Agent有5个步骤,每个步骤都有独立的提示词时,DSPy能同时优化所有5条提示词,找到全局最优组合。
短板: 学习曲线陡峭。Signature、Module、Optimizer三层抽象需要时间消化,且编译过程本身的LLM调用成本不低(通常需要数百次优化迭代)。
TextGrad的核心思想优雅到极致:如果把提示词看作参数,把LLM调用看作前向传播,那我们能不能对文本做"反向传播"?
答案是肯定的。TextGrad定义了文本变量的"梯度"——即对当前文本的改进建议。这个梯度由另一个LLM调用生成(通常是同一模型的反思能力),然后沿梯度方向"更新"文本。
import textgrad as tg
# 定义可优化的文本变量
system_prompt = tg.Variable(
"你是一个有用的助手", # 初始值
requires_grad=True,
role_description="系统提示词"
)
# 定义损失函数(由LLM评估)
loss_fn = tg.TextLoss(
tg.Variable("评估回答的准确性和完整性", role_description="评估标准")
)
# 优化循环
optimizer = tg.TextualGradientDescent(engine="gpt-4o")
for example in train_data:
response = llm_call(system_prompt, example.question)
loss = loss_fn(response)
loss.backward() # 生成文本梯度
optimizer.step() # 更新提示词
TextGrad的架构精髓在于Variable对象图。每个文本变量都维护一个计算图,backward()调用时沿图传播文本梯度。这让多提示词联合优化变得自然——你可以在同一个优化循环中同时更新系统提示词、工具描述和输出格式指令。
短板: 文本梯度本质上是LLM生成的改进建议,质量高度依赖梯度生成模型的能力。实践中经常出现"梯度震荡"——两次迭代的改进建议相互矛盾,导致提示词在最优点附近震荡而无法收敛。更新频率偏低(最后更新2025年7月),社区活跃度不及DSPy。
GEPA是2026年提示词优化领域最亮眼的黑马。由Databricks开源,GEPA(Genetic-Pareto Prompt Evolution)用进化算法搜索提示词空间,在多项基准上超越DSPy的MIPROv2超过10%。
GEPA的工作流程:
种子提示词
↓ 反思(Reflection):LLM分析当前提示词的失败案例
↓ 变异(Mutation):基于反思生成新候选
↓ Pareto选择:多目标权衡(准确率 vs 长度 vs 成本)
↓ 精英保留:保留帕累托前沿
↑ 迭代
GEPA的关键创新是轨迹驱动的反思。它不只优化提示词文本本身,而是采样Agent的完整执行轨迹(推理链+工具调用+输出),分析失败轨迹中的系统性缺陷,然后有针对性地变异提示词。
Databricks的实测数据震撼业界:在复杂的信息抽取Agent任务上,用GEPA优化后的Llama 3 70B模型,性能超过未优化的GPT-4o,而推理成本降低90倍。这意味着提示词优化可以替代模型升级——一个改变经济学的结论。
from gepa import GEPAOptimizer
optimizer = GEPAOptimizer(
model="databricks/dbrx-instruct",
metric=extraction_f1,
train_data=training_set,
num_candidates=20, # 种群大小
num_iterations=50, # 进化代数
reflection_model="gpt-4o", # 用强模型做反思
pareto_objectives=["accuracy", "prompt_length"] # 多目标
)
# 自动进化最优提示词
best_prompt = optimizer.optimize(initial_prompt)
变现潜力: GEPA是目前提示词优化领域商业化前景最明确的技术。Databricks已将其集成到Agent Bricks产品中,企业客户按优化后的推理量付费。训练营场景也天然适配——"用GEPA让你的Agent成本降低90%"是一个极具吸引力的课程卖点。
短板: 进化过程的LLM调用成本较高(50代×20候选=1000次LLM调用),且需要质量尚可的训练集。对零样本场景不友好。
OPRO(Optimization by PROmpting)是Google DeepMind在2023年提出的奠基性工作。它的思想简洁得令人拍案:让LLM自己当优化器。
OPRO的优化循环:
1. 维护一个"提示词-得分"历史
2. 将历史喂给LLM,要求它生成更好的提示词
3. 用新提示词在验证集上评分
4. 将结果追加到历史,回到步骤2
没有任何外部算法——梯度、进化、搜索都是LLM自己在做。OPRO的论文证明,LLM在看到足够多的"提示词→得分"对后,能够识别出提示词的改进模式,并生成越来越好的变体。
# OPRO核心逻辑(简化)
prompt_history = [
("请回答以下问题", 0.65),
("逐步思考并回答", 0.72),
# ...
]
for step in range(num_steps):
# LLM作为优化器生成新提示词
new_prompt = optimizer_llm.call(
f"以下是一些提示词及其得分:{prompt_history}\n"
f"请生成一条得分更高的提示词。"
)
# 评估新提示词
score = evaluate(new_prompt, val_set)
prompt_history.append((new_prompt, score))
# 保留top-k
prompt_history = sorted(prompt_history, key=lambda x: -x[1])[:k]
优势: 极简实现,无需任何优化框架。几行代码就能启动自动优化。
致命短板: 优化效率极低。每一步都需要完整的LLM调用做优化,而且缺乏结构化的搜索策略,容易陷入局部最优。Google DeepMind自身也没有持续迭代OPRO代码库(最后更新2024年12月)。但OPRO的思想影响了后来所有提示词优化框架——GEPA的反思机制、DSPy的提示词提议,都可以追溯到OPRO。
SAMMO(Symbolic Prompt Program Search)来自微软研究院,它的核心理念是:提示词不是字符串,而是结构化程序。
传统优化把提示词当作一个整体字符串来变异,SAMMO则把提示词解析为结构化的AST(抽象语法树),然后在AST的粒度上做搜索——可以单独改写指令部分、添加/删除示例、调整格式约束、压缩冗余文本。
原始提示词(字符串)
↓ 解析
AST表示:
├── 指令层:"请从以下文本中..."
├── 示例层:[示例1, 示例2]
├── 约束层:"输出JSON格式"
└── 格式层:"用逗号分隔"
↓ 突变算子
├── 改写指令(paraphrase)
├── 替换示例
├── 添加约束
└── 压缩文本
↓ 搜索最优组合
编译后提示词
SAMMO的突变算子库极其丰富:paraphrasing(改写)、instruction rewriting(指令重写)、example selection(示例选择)、prompt compression(提示词压缩)等。它像编译器的pass一样,逐个应用这些变换,用beam search找到最优组合。
优势: 对RAG场景特别有效——SAMMO可以优化检索指令、重排序提示词、答案生成模板等结构化组件。微软内部已在多个产品线使用。
短板: 学习曲线高,API设计偏向研究用途而非生产。756 Star的社区规模也限制了生态发展。
AdalFlow的目标用户最明确:熟悉PyTorch的深度学习工程师。 它完整复刻了PyTorch的训练循环范式,让提示词优化看起来和模型训练一模一样。
from adalflow.adal import AdalComponent, Trainer
class PromptTrainer(AdalComponent):
def __init__(self):
super().__init__()
self.task_pipeline = TaskPipeline() # 你的LLM工作流
def train_step(self, batch):
# 前向传播
output = self.task_pipeline(batch)
# 计算损失
loss = self.compute_loss(output, batch.labels)
# 文本梯度 + 参数更新
loss.backward()
self.optimizer.step()
trainer = Trainer(PromptTrainer())
trainer.fit(train_dataset, val_dataset, num_epochs=5)
AdalFlow的架构核心是Generator(等价于nn.Module)和Parameter(可优化的文本参数)。它支持梯度下降(TextGrad风格)和教师强制(TeacherForcing)两种优化策略,并内置了Agent SDK——从提示词优化到Agent部署一条龙。
优势: 对有ML背景的开发者极其友好,概念迁移成本几乎为零。Agent SDK集成度高。
短板: PyTorch式抽象虽然降低了认知门槛,但也限制了灵活性——当你的优化需求超出"训练循环"的范式时(比如GEPA的Pareto多目标优化),AdalFlow的框架反而成为约束。
graph TB
subgraph "编译器范式"
D[DSPy] --> D1[Signature声明]
D --> D2[Module组合]
D --> D3[Optimizer编译]
D3 --> D4[编译后提示词+示例]
S[SAMMO] --> S1[AST解析]
S --> S2[突变算子]
S --> S3[Beam Search]
S3 --> S4[结构优化后提示词]
end
subgraph "梯度范式"
T[TextGrad] --> T1[计算图构建]
T --> T2[文本梯度生成]
T --> T3[梯度下降更新]
T3 --> T4[优化后提示词]
A[AdalFlow] --> A1[Parameter定义]
A --> A2[训练循环]
A --> A3[反向传播]
A3 --> A4[优化后参数]
end
subgraph "进化范式"
G[GEPA] --> G1[轨迹采样]
G --> G2[反射分析]
G --> G3[变异+Pareto选择]
G3 --> G4[进化后提示词]
O[OPRO] --> O1[历史维护]
O --> O2[LLM元优化]
O --> O3[评分筛选]
O3 --> O4[最优提示词]
end
三种范式代表了根本不同的搜索策略:
编译器范式(DSPy/SAMMO) 的本质是程序综合(Program Synthesis)。把提示词生成问题转化为程序搜索问题,利用领域知识(提示词的结构特征)缩小搜索空间。优势是搜索效率高,劣势是灵活性受限于预定义的搜索策略。
梯度范式(TextGrad/AdalFlow) 的本质是局部优化。在提示词空间中沿着"改进方向"迭代。优势是每一步都有明确的改进信号,劣势是容易陷入局部最优——一个措辞的微小变化可能让性能突变,而梯度方法无法捕捉这种不连续性。
进化范式(GEPA/OPRO) 的本质是全局搜索。维护一个种群,通过变异和选择在提示词空间中进行广域探索。GEPA的Pareto前沿选择让它天然支持多目标优化(准确率 vs 成本 vs 延迟),这是其他范式难以企及的。
graph TD
A[需要提示词自动优化] --> B{优化目标?}
B -->|单任务单一提示词| C{有GPU/训练能力?}
B -->|Agent多步骤联合优化| D{成本敏感?}
B -->|RAG流水线优化| S[SAMMO]
C -->|是| A2[AdalFlow]
C -->|否| O[OPRO快速验证]
D -->|极度敏感: 追求降本| G[GEPA + 小模型]
D -->|中度敏感: 追求性能| DS[DSPy MIPROv2]
D -->|不敏感: 追求可控性| T[TextGrad]
G --> G1[90x降本路径]
DS --> DS1[联合编译路径]
T --> T1[精细调优路径]
提示词优化不是免费的——优化过程本身需要LLM调用。以下是不同引擎的优化成本估算(以GPT-4o为优化模型,100条训练数据为例):
| 引擎 | 优化调用次数 | 优化成本估算 | 预期性能提升 | 单次推理成本变化 |
|---|---|---|---|---|
| DSPy MIPROv2 | 300-800次 | $15-50 | +5-15% | 不变 |
| TextGrad | 100-300次 | $8-25 | +3-10% | 不变 |
| GEPA | 500-1500次 | $30-100 | +10-25% | 可降90% |
| OPRO | 200-500次 | $10-40 | +3-8% | 不变 |
| SAMMO | 100-400次 | $5-30 | +5-12% | 不变 |
关键洞察:GEPA是唯一能通过优化降低推理成本的引擎。 它的做法是:用强模型(GPT-4o)做提示词优化,然后将优化后的提示词部署到便宜的开源模型(Llama 3)上。优化本身花了$50-100,但每百万次推理可以省下数千美元。
其他引擎的ROI来自性能提升而非成本降低——如果你的Agent准确率从80%提升到92%,人工纠错成本的大幅下降远超优化开销。
2026年最值得关注的趋势是三大范式的交叉融合:
DSPy × GEPA: DSPy 3.0已将GEPA集成为可选后端优化器。开发者可以用DSPy的声明式API定义Agent结构,然后用GEPA的进化搜索做编译。这是目前最强的组合——DSPy的模块化能力 + GEPA的优化能力。
TextGrad × Agent系统: 最新论文(arxiv 2602.21670)提出在分层多Agent系统中,每个Agent的提示词用TextGrad风格的反向传播联合优化。失败传播从输出端回溯到每个Agent的系统提示词,实现端到端优化。
SAMMO × RAG优化: 微软正在将SAMMO的结构化搜索应用于RAG流水线,同时优化检索指令、重排序提示词和生成模板。
| 引擎 | 训练营适配度 | 最佳课程角度 | 潜在产品方向 |
|---|---|---|---|
| DSPy | ★★★★★ | "提示词编译器:从炼丹到工程化" | IDE插件(自动编译) |
| GEPA | ★★★★★ | "Agent成本暴降90倍实战" | SaaS平台(一键优化) |
| AdalFlow | ★★★★☆ | "PyTorch老兵的提示词优化课" | MLOps集成 |
| TextGrad | ★★★☆☆ | "文本梯度的数学与工程" | 研究工具 |
| OPRO | ★★★☆☆ | "LLM元优化入门" | 教学Demo |
| SAMMO | ★★☆☆☆ | "结构化提示词搜索" | 企业咨询 |
DSPy和GEPA是训练营场景的最佳选择。DSPy的生态最大、社区最活跃、概念最完整;GEPA的ROI最夸张、故事最吸引人。两者结合的课程("用DSPy定义Agent + 用GEPA优化到极致")在2026年有明确的付费意愿。
| 场景 | 首选 | 理由 |
|---|---|---|
| 个人开发者/学习 | DSPy | 社区最大、文档最全、3.4万Star有大量参考 |
| 企业Agent成本优化 | GEPA | 唯一能实现90倍推理降本的方案 |
| 多Agent系统联合优化 | DSPy + GEPA | DSPy定义结构 + GEPA进化搜索 |
| 深度学习团队迁移 | AdalFlow | PyTorch范式,迁移成本最低 |
| RAG流水线优化 | SAMMO | 结构化搜索天然适配RAG组件 |
| 快速原型/实验 | OPRO | 几行代码即可启动,零框架依赖 |
避坑指南: 不要用OPRO做生产部署——它的搜索效率太低,且Google DeepMind已停止维护。不要用TextGrad做成本敏感场景——它的优势在精度而非经济性。如果你只有5条以内的训练数据,任何引擎都不会有好效果——先积累数据再优化。
终极建议: 2026年最聪明的做法是先用DSPy定义Agent结构,再用GEPA做提示词编译。DSPy的声明式API保证你的Agent可维护,GEPA的进化搜索保证你的提示词接近最优。两者都是积极维护的开源项目(2026年5月仍在更新),有明确的社区支持。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
