Tools

FAPO 评测:全自动多步骤 LLM 流水线提示优化,告别手写 Prompt 调参

6 min read ·

一句话总结:FAPO 做的事情是:把「调 Prompt」这个本来需要工程师手动反复试错的过程,变成一个 LLM 自动执行的闭环系统——但它需要你先有一个能自动评分的评估集。

背景:Prompt 调优的规模化难题

在多步骤 LLM 应用中,提示优化是一个被低估的工程问题。

一个 RAG 系统通常包含:查询改写提示 + 检索策略 + 答案生成提示 + 事实核查提示。每个步骤的提示都会影响最终输出,而且步骤之间存在交互效应:改写提示的改变会影响检索结果,进而影响答案生成的质量。

在这种级联结构中,手动优化提示面临三个困难:

观测难:你看到的是最终输出质量,很难知道是哪个步骤的提示导致了问题。

耦合难:一个步骤的提示改变会影响下游步骤,改一处可能引发连锁反应。

规模难:如果应用有 10 个步骤,每个步骤有 3 个候选提示,组合空间是 3^10 = 59049,人工穷举不现实。

现有工具(DSPy、TextGrad、PromptBreeder)主要面向单步骤或结构固定的流水线。FAPO(Fully Autonomous Prompt Optimization)尝试解决的是:对已有的任意多步骤 LLM 流水线,自动地找到更好的提示组合

FAPO 的工作原理

核心概念:把流水线当系统调试

FAPO 的设计哲学借鉴了软件调试:当一个复杂系统输出不对时,调试过程是「观察行为 → 推断故障位置 → 局部修改 → 验证效果」的循环。

FAPO 用一个**元 LLM(Meta-LLM)**来扮演调试者的角色:

初始状态:
  流水线 P = [Step₁(prompt₁), Step₂(prompt₂), ..., Stepₙ(promptₙ)]
  评估集 D = {(input₁, expected₁), ..., (inputₘ, expectedₘ)}
  当前得分 = eval(P, D)

FAPO 优化循环:
  repeat:
    1. 采样评估集子集,对每条数据记录每个步骤的中间输出
    2. 元 LLM 分析:中间输出中哪些是错误传播的来源?
    3. 元 LLM 生成:对高影响步骤生成新的提示候选
    4. 评估新提示候选:在评估集上运行,记录得分
    5. 接受得分更高的提示修改,更新流水线
  until 得分收敛 or 达到最大轮次

关键设计决策:FAPO 不修改流水线的结构(步骤数量和顺序),只修改每个步骤的提示内容。这让它可以应用于任意已有的流水线,无需重新设计。

错误归因:如何找到问题步骤

多步骤流水线的难点在于错误归因(Fault Localization)——最终答案错了,但错误可能在第 1、第 3 或第 7 步产生。

FAPO 的归因策略是因果链分析

  1. 对一批失败案例,提取每个步骤的输入和输出
  2. 元 LLM 分析:「在步骤 k,输入是 X,输出是 Y。如果正确输出应该是 Z,那步骤 k 是错误来源吗?」
  3. 重复对每个步骤做这个分析,输出「故障概率分布」
  4. 优先修改故障概率高的步骤

这个过程依赖元 LLM 的推理能力,因此论文建议使用能力较强的模型(如 GPT-5.4、Claude Opus)作为元 LLM,被优化的流水线可以用较弱的模型运行。

提示候选生成

找到问题步骤后,元 LLM 生成新的提示候选。论文的提示生成策略包含三类:

精化(Refinement):在原提示基础上修改措辞、增加约束、调整格式要求。

反例驱动(Failure-Guided):把几个典型失败案例喂给元 LLM,让它生成「不会在这些输入上犯相同错误」的新提示。

角色设定(Persona Injection):为提示添加特定角色设定,引导模型从不同视角处理问题(如「你是一位严格的事实核查员」)。

每轮通常生成 3-5 个候选,全部在评估集上运行,保留得分最高的。

与主流工具的对比

FAPO vs DSPy

维度FAPODSPy
流水线理解黑箱(不需要内部结构)白箱(需要定义 Signature)
使用门槛低(只需可调用接口)中(需要重写为 DSPy 模块)
优化范围整条流水线协同每个模块独立 + 协调
最佳场景优化已有流水线新建流水线并优化
解释性低(修改原因来自元 LLM)中(Signature 有语义结构)

DSPy 的优势是成熟度(社区更大、工具更完善)和解释性(你知道每个模块在做什么)。FAPO 的优势是接入成本低——对已有的 RAG 系统或 Agent 流水线,FAPO 理论上可以直接接入,不需要重写代码。

FAPO vs TextGrad

TextGrad 用自动微分的隐喻来做提示优化:把 LLM 的输出当作「前向传播」,把评估结果当作「损失」,用 LLM 生成「文本梯度」来指导提示修改。

FAPO 和 TextGrad 在机制上有重叠,主要差异在于:

TextGrad 面向单变量优化:优化一个或少数几个 Prompt,对多步骤协同优化的支持有限。

FAPO 面向系统优化:显式地对多个 Prompt 建模依赖关系,避免「修了 A 坏了 B」的问题。

性能数据

论文报告的主要结果(IFBench 基准,指令跟随任务):

配置初始得分FAPO 优化后提升
GPT-4.1-mini 流水线54.76%93.71%+38.95%
Gemma 3-12B 流水线54.00%86.67%+32.67%
GPT-5.4-mini 流水线48.36%+高

提升幅度之大令人印象深刻,但需要注意:IFBench 是指令跟随基准,正好是对提示质量高度敏感的任务类型。在其他类型的任务上,提升幅度可能显著不同。

实际使用场景分析

适合用 FAPO 的场景

RAG 问答系统:一个典型的 RAG 流水线包含查询改写、检索、重排序、答案生成 4-5 个步骤,每个步骤有提示,且有明确的回答质量评估指标(RAGAS、人工标注等)。FAPO 可以在这个场景直接发挥作用。

结构化数据提取:从文档中提取结构化信息(合同条款提取、医疗记录解析等),有明确的字段级准确率评估,步骤通常包含分类、提取、验证等。

Agent 工作流:当 Agent 的决策链性能不达预期,且能够定义明确的任务完成率指标时,FAPO 可以帮助定位哪个环节的提示在拖累性能。

不适合的场景

没有评估数据集:FAPO 的核心依赖是自动评估能力。如果无法定量地衡量「提示修改是否带来了改进」,整个优化循环就无法运转。

单步骤应用:单个 Prompt 的优化用 DSPy 的 BootstrapFewShot 或直接人工迭代就够了,FAPO 的额外复杂度不值得。

创意写作类任务:当「质量」是主观的、无法用自动化指标衡量时,FAPO 的评估环节缺乏锚点。

局限与注意事项

API 成本:FAPO 的每轮优化需要大量 API 调用(在评估集上运行整条流水线 + 元 LLM 分析),对于 50 条评估数据的 5 步流水线,每轮优化消耗约 500+ API 调用。10 轮优化总计 5000+ 调用,在当前 API 定价下成本可观。

元 LLM 能力依赖:错误归因的质量取决于元 LLM 的推理能力。如果元 LLM 无法正确理解中间步骤的输出是否合理,归因会出错,优化方向会偏差。

过拟合风险:FAPO 在评估集上优化,存在过拟合该评估集的风险。评估集的覆盖度和多样性会显著影响优化后的泛化性能。

代码可用性:截至撰稿,官方实现尚未完整发布,社区实现未经原作者验证。生产使用建议等待官方代码发布。

值得关注的方向

FAPO 提出的「把多步骤流水线当作系统来调试」的框架,是当前提示工程领域最值得关注的思路之一。

随着 LLM 应用从单一对话向复杂多步骤系统演进,提示优化的复杂度会急剧上升。手动调参变得不可持续,自动化优化工具的需求是真实的。FAPO 在方向上走在了正确的路上,接下来需要的是更成熟的实现、更广泛的基准测试和更完善的工程化支持。

对于已经在运行多步骤 LLM 应用、且在提示质量上有提升空间的工程团队,这篇论文值得仔细读一遍。即使不直接使用 FAPO,它提出的「错误归因 + 候选生成 + 自动评估」框架也可以用来指导手动优化流程。

Frequently asked questions

FAPO 和 DSPy 最大的区别是什么?
DSPy 要求用户定义「模块」结构(通过 Signature 声明输入输出),然后在这个结构内优化提示。FAPO 把整条流水线当作黑箱,不需要提前定义模块边界,元 LLM 会通过观察流水线行为来判断哪里出了问题、哪个 Prompt 需要修改。DSPy 更适合有清晰模块化设计的流水线,FAPO 更适合端到端地优化已有的流水线
使用 FAPO 需要什么前置条件?
主要需要两样东西:一是带标注的评估数据集(至少 50-100 条,用于自动评估提示修改的效果);二是流水线的可调用接口(FAPO 通过调用流水线并观察输出来学习)。无需修改流水线代码,无需了解流水线内部结构
FAPO 的优化过程需要多少 API 调用?
每轮优化包含:对评估集的全量推理(N 条数据 × 流水线步数)+ 元 LLM 的分析与生成(约 10-20 次调用)。总 API 消耗与评估集大小和优化轮次成正比,论文中标准配置(50 条评估数据、10 轮优化)约消耗 3000-5000 次 API 调用
FAPO 适合什么类型的 LLM 应用?
最适合:有明确评估指标的多步骤应用(如 RAG 流水线、Agent 决策链、结构化提取);提示质量对最终指标影响大的场景;已有可用版本但性能未达预期的场景。不适合:创意写作等难以量化评估的任务;单步骤简单应用(单 Prompt 用 DSPy 或 TextGrad 更简单);没有评估数据集的场景
FAPO 开源了吗?可以直接使用?
论文(2026-06-17)已公开,但截至发布时官方实现尚未完整开源。论文描述的算法已有社区实现版本(如 fdtn-ai 在 HuggingFace 上的实现),但未经论文作者官方验证。建议关注原作者的 GitHub 后续发布
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.