新一代提示词工程 · 知识全景图面向有工程基础、提示词工程尚未系统化的工程师
显示设置

文本梯度与反思式进化

Textual Gradient and Reflective Evolution

PE-E-07内容已写满G05评测与自动优化第 19 层

文本梯度反思进化优化回路

一句话结论

先建执行轨迹记录与可自动计算的评分函数,再引入文本梯度或反思式的优化回路;候选必须留档并跨过增益阈值才采纳,判定权始终在评分函数与人工复核手里。

本页结构(可跳转)

Q 共同前提 ① 能拿到完整执行轨迹 ② 有可用的评分函数 A1 路线一 文本梯度 把每个可变部分(提示、代码片段、输出) 表示为变量 Q->A1 B1 路线二 反思式进化 让模型看到自己的推理轨迹 与评分 Q->B1 A2 模型给出自然语言评价 评价作为「梯度」回传到变量 ⇒ 逐组件更新 A1->A2 N 边界 无轨迹 ⇒ 反思失去依据 无评分函数 ⇒ 无法判断改进方向、优化不可收敛 部分实现的收益还依赖底座模型规模与任务可分解性 A2->N B2 模型生成改进规则并更新提示 报告称在多任务上优于强化学习基线 且所需采样次数大幅减少 B1->B2 B2->N
两条优化路线对照图:文本梯度把自然语言评价当梯度回传到各组件,反思式进化由执行轨迹生成改进规则;共同前提是轨迹与评分函数。 (本站自制)

01为什么需要它

手工调提示词的瓶颈是反馈留不下来:改一句、跑一遍、凭印象判断,下一次改动无法与前一次严格比较。

适用边界

这套方法不能被当成「无脑自动调优」:当任务无法自动评分、执行轨迹被截断或读不到、或者改动效果只能靠主观感受判断时,反思与搜索都会退化成随机改写——它们自动化的只是候选生成,判定权始终在使用者手里。另一条限制来自成本与收益结构:每次反思与每轮搜索都要额外调用模型,若任务本身调用量极小、或提示词很少改动,优化开销会超过收益;此外部分实现的增益依赖任务类型与底座模型规模,换个任务或换小模型未必复现。

02机制说明

文本梯度的做法是:把系统的每个可变部分(提示、代码片段、输出)表示为变量,用模型对结果给出自然语言评价,再把评价作为「梯度」回传到变量上做更新;这条路线在问答与代码优化任务上给出了可测的改进,并已发表于同行评议期刊。

03何时该用 / 何时不该用

按场景对照:先看条件,再看该怎么做。
类别场景 / 条件(总结)具体做法(细节)
该用已能自动计算评分函数时候选之间有了可判定的比较口径,优化回路才谈得上收敛。
该用能取到完整执行轨迹时模型读得到失败过程,生成的改进规则才指向真正的原因。
该用系统由多个可分别评价的组件构成时文本梯度可逐组件回传评价,而不必整体重写提示。
该用候选需求远大于人工审阅能力时让模型批量提出候选、由评分函数筛选,比逐条手改更划算。
不该用没有评分函数的任务没有判据就没有改进方向,搜索无法收敛,往往只把提示词越改越长。
不该用轨迹缺失或调用预算极小的场景反思失去依据,额外调用还会推高成本。

04实验台

  1. shellpython

    查看代码
    # 最小反思式优化回路:轨迹 → 评分 → 反思规则 → 新候选 → 留档
    TRACE, CAND, K, MIN_GAIN = [], [], 3, 0.05
    
    def metric(output, expect):          # 前提 1:可自动计算的评分函数(没有它就没有改进方向)
        return 1.0 if expect.strip() in output else 0.0
    
    def run(prompt, batch, call_lm):     # call_lm(prompt, x) 返回 (output, steps)
        rows = []
        for x in batch:
            output, steps = call_lm(prompt, x['input'])
            rows.append({'input': x['input'], 'output': output, 'steps': steps,   # 前提 2:完整轨迹
                         'score': metric(output, x['expect'])})
        TRACE.extend(rows)               # 轨迹必须先落盘,再谈反思
        return rows
    
    def reflect(rows, call_reflect):     # 反思只产出「改进规则」,不直接重写答案
        bad = [r for r in rows if r['score'] == 0]
        return call_reflect(bad)         # 输入里要含中间步骤,否则模型只能对着结果猜原因
    
    def step(prompt, batch, call_lm, call_reflect):
        rows = run(prompt, batch, call_lm)               # 基线:同一评测窗口上的得分
        rule = reflect(rows, call_reflect)               # 读失败轨迹 → 改进规则
        cand = call_lm.rewrite(prompt, rule)             # 只按规则改,其余原文不动
        base = sum(r['score'] for r in rows) / len(batch)
        scores = [sum(r['score'] for r in run(cand, batch, call_lm)) / len(batch) for _ in range(K)]
        mean = sum(scores) / K
        CAND.append({'rule': rule, 'base': base, 'mean': mean,
                     'spread': max(scores) - min(scores),
                     'adopted': mean - base >= MIN_GAIN})
        return cand if CAND[-1]['adopted'] else prompt    # 未过阈值 ⇒ 保留原提示词,候选只留档

    预期观察:每次迭代都留下「基线分 / 候选分 / 波动幅度 / 是否采纳」四列;只有均值增益跨过阈值且波动没有恶化才采纳候选,否则保留原提示词进入下一轮。去掉重复次数 K 与 spread 就会把一次幸运运行当成真实增益(把 call_lm / call_reflect 换成你所用的框架调用即可,例如 DSPy 程序加 LM)。

  2. filemarkdown

    查看代码
    # 反思式优化台账(三个文件,缺一不可)
    1. `trace.jsonl` —— 每次运行一行:run_id / prompt_version / input / 中间步骤(工具调用、检索结果)/ output / score / failure_mode
       规则:只存最终答案的轨迹撑不起反思——模型看不到「为什么错」,改进规则就会指错原因。
    2. `candidates.md` —— 候选表:候选号 / 改动摘要 / 反思规则原文 / 评测窗口 / 重复次数 K / 均值 / 波动 / 采纳或拒绝
       规则:被拒绝的候选也要留档,否则同一改动会被下一轮反复提出。
    3. `baseline.md` —— 基线表:prompt_version / eval_set_version / 均值 / 结论 / 回滚条件
       回滚条件示例:线上指标连续 3 次低于基线即回滚,并把该失败模式补进评测集再重跑。

    预期观察:打开台账即可回答三件事:这次候选相对基线涨了多少、涨得稳不稳、上次被拒绝的改动是什么;三个文件缺任何一个,优化回路都会退化成「凭印象换提示词」。

05证据

主张文本梯度路线在问答与代码优化任务上都拿到了可测的准确率提升,说明「把自然语言反馈当梯度逐层回传」是可评测的工程方法而非修辞。

分级official

来源S-0049 https://api.crossref.org/works/10.1038/s41586-025-08661-4

原文

展开原文关键句
TextGrad improves the zero-shot accuracy of GPT-4o in Google-Proof Question Answering from 51% to 55%, yields 20% relative performance gain in optimizing LeetCode-Hard coding problem solutions

主张同一族优化器的收益依赖任务类型与模型规模(MiPROv2 对 CoT 更稳、SIMBA 对 ReAct 与更大模型更有利),因此不能假设换任务后增益照搬。

分级official

来源S-0052 https://aclanthology.org/2026.findings-eacl.161/

原文

展开原文关键句
MiPROv2 yielding the most stable gains for CoT, and SIMBA providing the largest benefits for ReAct agents, particularly at larger model scales.

06术语

术语文本梯度与反思式进化 Textual Gradient and Reflective Evolution

界定以自然语言反馈作为「梯度」逐层改进系统组件(TextGrad),或让模型基于自身执行轨迹反思并生成改进规则(GEPA、SIMBA)。

相关节点—

术语反思与自评回路 Reflection and Self-Critique Loop

界定让模型对自己的输出给出评价并据此改写,形成闭环改进;本节点的反思式进化把它从「改这一次的输出」扩展到「改产生输出的提示与规则」。

相关节点—

术语自动提示词工程 APE

界定由模型自动生成候选指令并按评测指标筛选的优化路线;其候选生成与筛选都需要评测集支撑,是文本梯度与反思式进化的共同祖先。

相关节点—

07失效模式

08在本站知识结构中的位置

所属分组
G05评测与自动优化
依赖深度
第 19 层(同层节点彼此无先后约束)
前置PE-E-06→PE-E-07 本节点→后继PE-E-08

在 交互全景图 中定位本节点。