DSpy GEPA:反射式提示词进化优化器详解
通过自然语言反思实现提示进化的新型优化器
info 基本概念与背景
GEPA(Genetic-Pareto)是一个反射式优化器,由UC Berkeley、Stanford等机构联合提出,论文为《GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning》(arxiv:2507.19457)。它能够自适应地进化任意系统的文本组件(如提示词),通过自然语言反思机制从试错中学习高级规则。
传统大型语言模型(LLMs)的下游任务优化长期依赖强化学习(RL)方法(如Group Relative Policy Optimization,GRPO),这些方法通常需要数千次rollout来学习新任务,计算成本高昂。GEPA的革命性在于将LLM执行轨迹转化为诊断信号,用语言反馈替代标量奖励,在HotpotQA等4个复杂任务上,仅用传统方法1/35的计算量实现最高19%的性能提升。
lightbulb GEPA的三重创新机制
1. 自然语言反思机制
核心突破:将传统RL的数值奖励信号,升级为可解释的语言反馈流。当复合AI系统(含多LLM模块)运行时,GEPA采集三类关键轨迹:
- 执行轨迹(推理链、工具调用)
- 评估轨迹(编译错误等中间信号)
- 结构化反馈(模块级责任归属)
# 伪代码简化说明 for rollout in minibatch: trace = execute_system(Φ) # 执行系统 feedback = μ_f(trace) # 生成语言反馈 new_prompt = LLM_reflect(feedback, current_prompt) # 反思生成新指令 if improves_local_score: # 本地验证有效 add_to_candidate_pool() # 加入候选池
案例示范:在多跳问答系统的第二跳查询模块优化中,GEPA通过反思总结出关键规则:”第一跳文档常覆盖单一实体,第二跳应检索其关联的高阶概念(如 parish人口→整个archipelago人口)”。这种语言化知识沉淀使单次提示更新即可获得显著提升。
2. Pareto前沿候选选择
传统RL的致命伤:仅优化全局最佳候选,陷入局部最优。GEPA的创新方案:
- 构建Pareto前沿:保留在每个训练实例上表现最优的候选提示
- 剔除严格支配解(如候选A在任务1最优,但候选B在任务1,2均最优,则剔除A. ✅
- 概率化抽样:对覆盖更多任务的最优候选赋予更高选择概率
# GEPA迭代流程:Pareto前沿维护多样性策略 # 数学本质: Pareto_frontier = {c | ¬∃c' : c' ≻ c} # 其中c为候选在各任务得分的向量,≻表示支配关系
该策略使搜索效率提升6.4%(表2)。
3. 系统感知交叉优化
创新点:从独立进化分支中提取互补模块:
# 交叉合并伪代码 def merge_candidates(parent, child1, child2): for module in system: if parent.prompt == child1.prompt and child2.prompt ≠ child1.prompt: adopt child2.prompt # 选择变异模块 ... # 其他合并规则 return hybrid_system
在GPT-4.1 Mini上,该策略带来额外5%增益,但需注意:分支独立性是合并有效的先决条件。
architecture GEPA的工作原理与架构设计
GEPA是一个进化优化器,它使用反射来进化复杂系统的文本组件。GEPA捕获DSPy模块执行的完整跟踪,识别与特定预测器对应的跟踪部分,并反思预测器的行为以提出新的预测器指令。
GEPA的核心架构包括:
- 跟踪捕获系统:捕获完整执行轨迹,包括推理链、工具调用和中间输出
- 反思引擎:基于执行轨迹和反馈生成自然语言反思,识别问题并提出改进
- 提示词变异器:根据反思结果生成新的提示词变体
- Pareto选择器:维护多样化的候选集,避免局部最优
- 交叉优化器:合并不同分支的优秀特性,进一步提升性能
# GEPA基本使用示例 gepa = GEPA(metric=metric, track_stats=True) batch_of_tasks = [dspy.Example(...) for task in tasks] new_prog = gepa.compile(student, trainset=trainset, valset=batch_of_tasks) pareto_frontier = new_prog.detailed_results.val_aggregate_scores # pareto_frontier是批处理中每个任务的分数列表
compare GEPA与传统强化学习方法的比较优势
特性 | 传统RL方法(如GRPO) | GEPA |
---|---|---|
学习信号 | 稀疏的标量奖励 | 丰富的自然语言反馈 |
计算效率 | 需要数千次rollout | 仅需传统方法1/35的计算量 |
候选选择 | 全局最优候选,易陷入局部最优 | Pareto前沿多样性选择 |
知识积累 | 隐式在模型参数中 | 显式自然语言规则 |
可解释性 | 低 | 高,反思过程可追踪 |
GEPA的核心优势在于利用语言的可解释性作为学习媒介,相比从稀疏的标量奖励导出的策略梯度,为LLMs提供了更丰富的学习信号。这种方法特别适合资源受限场景的AI系统优化。
assessment 实际应用中的性能表现和案例
GEPA在四大任务上进行了验证,表现出色:
- HotpotQA:多跳推理任务,识别未检索到的关键文档
- IFBench:复杂指令约束遵循,约束满足情况分解说明
- PUPA:隐私保护与质量平衡,质量分 vs 隐私泄漏分
- HoVer:多源事实验证,正确/缺失文档集标识
核心实验结果:
- 35倍效率提升:在IFBench任务中,GEPA仅用678次rollout(GRPO需24,000次)实现更高性能
- 训练信号极致压缩:实际学习所用rollout低至79次(IFBench),因大部分计算用于候选验证
- 全面超越现有方法:在所有四个任务上,GEPA均优于GRPO和MIPROv2等基线方法
实际应用案例:在NPUEval硬件优化中,GEPA用编译错误触发检索相关技术手册,使向量利用率从4.25%提升至30.52%。
code 实现细节与API参考
# GEPA的主要参数 dspy.GEPA( metric: GEPAFeedbackMetric, # 用于反馈和评估的指标函数 auto: Literal['light', 'medium', 'heavy'] | None = None, # 自动预算设置 max_full_evals: int | None = None, # 最大完整评估次数 max_metric_calls: int | None = None, # 最大指标调用次数 reflection_minibatch_size: int = 3, # 单个GEPA步骤中用于反思的示例数 candidate_selection_strategy: Literal['pareto', 'current_best'] = 'pareto', # 候选选择策略 reflection_lm: LM | None = None, # 用于反思的语言模型 skip_perfect_score: bool = True, # 是否跳过完美分数的示例 add_format_failure_as_feedback: bool = False, # 是否将格式失败添加为反馈 instruction_proposer: ProposalFn | None = None, # 自定义指令提议器 component_selector: ReflectionComponentSelector | str = 'round_robin', # 组件选择器 use_merge: bool = True, # 是否使用合并策略 max_merge_invocations: int | None = 5, # 最大合并调用次数 num_threads: int | None = None, # 线程数 failure_score: float = 0.0, # 失败分数 perfect_score: float = 1.0, # 完美分数 log_dir: str = None, # 日志目录 track_stats: bool = False, # 是否跟踪统计信息 use_wandb: bool = False, # 是否使用wandb wandb_api_key: str | None = None, # wandb API密钥 track_best_outputs: bool = False, # 是否跟踪最佳输出 warn_on_score_mismatch: bool = True, # 分数不匹配时是否警告 use_mlflow: bool = False, # 是否使用mlflow seed: int | None = 0 # 随机种子 )
为了向GEPA优化器提供反馈,需要实现如下指标函数:
def metric( gold: Example, pred: Prediction, trace: Optional[DSPyTrace] = None, pred_name: Optional[str] = None, pred_trace: Optional[DSPyTrace] = None, ) -> float | ScoreWithFeedback: """ 此函数使用以下参数调用: - gold: 黄金标准示例 - pred: 预测输出 - trace: 可选。程序执行的跟踪 - pred_name: 可选。当前正在由GEPA优化的目标预测器的名称 - pred_trace: 可选。GEPA正在寻求反馈的目标预测器的执行跟踪 注意pred_name和pred_trace参数。在优化过程中,GEPA将调用指标以获取 正在优化的单个预测器的反馈。GEPA在pred_name中提供预测器的名称, 在pred_trace中提供对应于预测器的子跟踪(跟踪的)。 如果在预测器级别可用,指标应返回对应于预测器的{'score': float, 'feedback': str}。 如果在预测器级别不可用,指标也可以在程序级别返回文本反馈(仅使用gold、pred和trace)。 如果没有返回反馈,GEPA将使用仅包含分数的简单文本反馈:f"This trajectory got a score of {score}." """ ...
DSpy GEPA:反射式提示词进化优化器详解
通过自然语言反思实现提示进化的新型优化器
info 基本概念与背景
GEPA(Genetic-Pareto)是一个反射式优化器,由UC Berkeley、Stanford等机构联合提出,论文为《GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning》(arxiv:2507.19457)。它能够自适应地进化任意系统的文本组件(如提示词),通过自然语言反思机制从试错中学习高级规则。
传统大型语言模型(LLMs)的下游任务优化长期依赖强化学习(RL)方法(如Group Relative Policy Optimization,GRPO),这些方法通常需要数千次rollout来学习新任务,计算成本高昂。GEPA的革命性在于将LLM执行轨迹转化为诊断信号,用语言反馈替代标量奖励,在HotpotQA等4个复杂任务上,仅用传统方法1/35的计算量实现最高19%的性能提升。
lightbulb GEPA的三重创新机制
1. 自然语言反思机制
核心突破:将传统RL的数值奖励信号,升级为可解释的语言反馈流。当复合AI系统(含多LLM模块)运行时,GEPA采集三类关键轨迹:
- 执行轨迹(推理链、工具调用)
- 评估轨迹(编译错误等中间信号)
- 结构化反馈(模块级责任归属)
# 伪代码简化说明 for rollout in minibatch: trace = execute_system(Φ) # 执行系统 feedback = μ_f(trace) # 生成语言反馈 new_prompt = LLM_reflect(feedback, current_prompt) # 反思生成新指令 if improves_local_score: # 本地验证有效 add_to_candidate_pool() # 加入候选池
案例示范:在多跳问答系统的第二跳查询模块优化中,GEPA通过反思总结出关键规则:”第一跳文档常覆盖单一实体,第二跳应检索其关联的高阶概念(如 parish人口→整个archipelago人口)”。这种语言化知识沉淀使单次提示更新即可获得显著提升。
2. Pareto前沿候选选择
传统RL的致命伤:仅优化全局最佳候选,陷入局部最优。GEPA的创新方案:
- 构建Pareto前沿:保留在每个训练实例上表现最优的候选提示
- 剔除严格支配解(如候选A在任务1最优,但候选B在任务1,2均最优,则剔除A. ✅
- 概率化抽样:对覆盖更多任务的最优候选赋予更高选择概率
# GEPA迭代流程:Pareto前沿维护多样性策略 # 数学本质: Pareto_frontier = {c | ¬∃c' : c' ≻ c} # 其中c为候选在各任务得分的向量,≻表示支配关系
该策略使搜索效率提升6.4%(表2)。
3. 系统感知交叉优化
创新点:从独立进化分支中提取互补模块:
# 交叉合并伪代码 def merge_candidates(parent, child1, child2): for module in system: if parent.prompt == child1.prompt and child2.prompt ≠ child1.prompt: adopt child2.prompt # 选择变异模块 ... # 其他合并规则 return hybrid_system
在GPT-4.1 Mini上,该策略带来额外5%增益,但需注意:分支独立性是合并有效的先决条件。
architecture GEPA的工作原理与架构设计
GEPA是一个进化优化器,它使用反射来进化复杂系统的文本组件。GEPA捕获DSPy模块执行的完整跟踪,识别与特定预测器对应的跟踪部分,并反思预测器的行为以提出新的预测器指令。
GEPA的核心架构包括:
- 跟踪捕获系统:捕获完整执行轨迹,包括推理链、工具调用和中间输出
- 反思引擎:基于执行轨迹和反馈生成自然语言反思,识别问题并提出改进
- 提示词变异器:根据反思结果生成新的提示词变体
- Pareto选择器:维护多样化的候选集,避免局部最优
- 交叉优化器:合并不同分支的优秀特性,进一步提升性能
# GEPA基本使用示例 gepa = GEPA(metric=metric, track_stats=True) batch_of_tasks = [dspy.Example(...) for task in tasks] new_prog = gepa.compile(student, trainset=trainset, valset=batch_of_tasks) pareto_frontier = new_prog.detailed_results.val_aggregate_scores # pareto_frontier是批处理中每个任务的分数列表
compare GEPA与传统强化学习方法的比较优势
特性 | 传统RL方法(如GRPO) | GEPA |
---|---|---|
学习信号 | 稀疏的标量奖励 | 丰富的自然语言反馈 |
计算效率 | 需要数千次rollout | 仅需传统方法1/35的计算量 |
候选选择 | 全局最优候选,易陷入局部最优 | Pareto前沿多样性选择 |
知识积累 | 隐式在模型参数中 | 显式自然语言规则 |
可解释性 | 低 | 高,反思过程可追踪 |
GEPA的核心优势在于利用语言的可解释性作为学习媒介,相比从稀疏的标量奖励导出的策略梯度,为LLMs提供了更丰富的学习信号。这种方法特别适合资源受限场景的AI系统优化。
assessment 实际应用中的性能表现和案例
GEPA在四大任务上进行了验证,表现出色:
- HotpotQA:多跳推理任务,识别未检索到的关键文档
- IFBench:复杂指令约束遵循,约束满足情况分解说明
- PUPA:隐私保护与质量平衡,质量分 vs 隐私泄漏分
- HoVer:多源事实验证,正确/缺失文档集标识
核心实验结果:
- 35倍效率提升:在IFBench任务中,GEPA仅用678次rollout(GRPO需24,000次)实现更高性能
- 训练信号极致压缩:实际学习所用rollout低至79次(IFBench),因大部分计算用于候选验证
- 全面超越现有方法:在所有四个任务上,GEPA均优于GRPO和MIPROv2等基线方法
实际应用案例:在NPUEval硬件优化中,GEPA用编译错误触发检索相关技术手册,使向量利用率从4.25%提升至30.52%。
code 实现细节与API参考
# GEPA的主要参数 dspy.GEPA( metric: GEPAFeedbackMetric, # 用于反馈和评估的指标函数 auto: Literal['light', 'medium', 'heavy'] | None = None, # 自动预算设置 max_full_evals: int | None = None, # 最大完整评估次数 max_metric_calls: int | None = None, # 最大指标调用次数 reflection_minibatch_size: int = 3, # 单个GEPA步骤中用于反思的示例数 candidate_selection_strategy: Literal['pareto', 'current_best'] = 'pareto', # 候选选择策略 reflection_lm: LM | None = None, # 用于反思的语言模型 skip_perfect_score: bool = True, # 是否跳过完美分数的示例 add_format_failure_as_feedback: bool = False, # 是否将格式失败添加为反馈 instruction_proposer: ProposalFn | None = None, # 自定义指令提议器 component_selector: ReflectionComponentSelector | str = 'round_robin', # 组件选择器 use_merge: bool = True, # 是否使用合并策略 max_merge_invocations: int | None = 5, # 最大合并调用次数 num_threads: int | None = None, # 线程数 failure_score: float = 0.0, # 失败分数 perfect_score: float = 1.0, # 完美分数 log_dir: str = None, # 日志目录 track_stats: bool = False, # 是否跟踪统计信息 use_wandb: bool = False, # 是否使用wandb wandb_api_key: str | None = None, # wandb API密钥 track_best_outputs: bool = False, # 是否跟踪最佳输出 warn_on_score_mismatch: bool = True, # 分数不匹配时是否警告 use_mlflow: bool = False, # 是否使用mlflow seed: int | None = 0 # 随机种子 )
为了向GEPA优化器提供反馈,需要实现如下指标函数:
def metric( gold: Example, pred: Prediction, trace: Optional[DSPyTrace] = None, pred_name: Optional[str] = None, pred_trace: Optional[DSPyTrace] = None, ) -> float | ScoreWithFeedback: """ 此函数使用以下参数调用: - gold: 黄金标准示例 - pred: 预测输出 - trace: 可选。程序执行的跟踪 - pred_name: 可选。当前正在由GEPA优化的目标预测器的名称 - pred_trace: 可选。GEPA正在寻求反馈的目标预测器的执行跟踪 注意pred_name和pred_trace参数。在优化过程中,GEPA将调用指标以获取 正在优化的单个预测器的反馈。GEPA在pred_name中提供预测器的名称, 在pred_trace中提供对应于预测器的子跟踪(跟踪的)。 如果在预测器级别可用,指标应返回对应于预测器的{'score': float, 'feedback': str}。 如果在预测器级别不可用,指标也可以在程序级别返回文本反馈(仅使用gold、pred和trace)。 如果没有返回反馈,GEPA将使用仅包含分数的简单文本反馈:f"This trajectory got a score of {score}." """ ...
DSpy GEPA:反射式提示词进化优化器详解
通过自然语言反思实现提示进化的新型优化器
info 基本概念与背景
GEPA(Genetic-Pareto)是一个反射式优化器,由UC Berkeley、Stanford等机构联合提出,论文为《GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning》(arxiv:2507.19457)。它能够自适应地进化任意系统的文本组件(如提示词),通过自然语言反思机制从试错中学习高级规则。
传统大型语言模型(LLMs)的下游任务优化长期依赖强化学习(RL)方法(如Group Relative Policy Optimization,GRPO),这些方法通常需要数千次rollout来学习新任务,计算成本高昂。GEPA的革命性在于将LLM执行轨迹转化为诊断信号,用语言反馈替代标量奖励,在HotpotQA等4个复杂任务上,仅用传统方法1/35的计算量实现最高19%的性能提升。
lightbulb GEPA的三重创新机制
1. 自然语言反思机制
核心突破:将传统RL的数值奖励信号,升级为可解释的语言反馈流。当复合AI系统(含多LLM模块)运行时,GEPA采集三类关键轨迹:
- 执行轨迹(推理链、工具调用)
- 评估轨迹(编译错误等中间信号)
- 结构化反馈(模块级责任归属)
# 伪代码简化说明 for rollout in minibatch: trace = execute_system(Φ) # 执行系统 feedback = μ_f(trace) # 生成语言反馈 new_prompt = LLM_reflect(feedback, current_prompt) # 反思生成新指令 if improves_local_score: # 本地验证有效 add_to_candidate_pool() # 加入候选池
案例示范:在多跳问答系统的第二跳查询模块优化中,GEPA通过反思总结出关键规则:”第一跳文档常覆盖单一实体,第二跳应检索其关联的高阶概念(如 parish人口→整个archipelago人口)”。这种语言化知识沉淀使单次提示更新即可获得显著提升。
2. Pareto前沿候选选择
传统RL的致命伤:仅优化全局最佳候选,陷入局部最优。GEPA的创新方案:
- 构建Pareto前沿:保留在每个训练实例上表现最优的候选提示
- 剔除严格支配解(如候选A在任务1最优,但候选B在任务1,2均最优,则剔除A. ✅
- 概率化抽样:对覆盖更多任务的最优候选赋予更高选择概率
# GEPA迭代流程:Pareto前沿维护多样性策略 # 数学本质: Pareto_frontier = {c | ¬∃c' : c' ≻ c} # 其中c为候选在各任务得分的向量,≻表示支配关系
该策略使搜索效率提升6.4%(表2)。
3. 系统感知交叉优化
创新点:从独立进化分支中提取互补模块:
# 交叉合并伪代码 def merge_candidates(parent, child1, child2): for module in system: if parent.prompt == child1.prompt and child2.prompt ≠ child1.prompt: adopt child2.prompt # 选择变异模块 ... # 其他合并规则 return hybrid_system
在GPT-4.1 Mini上,该策略带来额外5%增益,但需注意:分支独立性是合并有效的先决条件。
architecture GEPA的工作原理与架构设计
GEPA是一个进化优化器,它使用反射来进化复杂系统的文本组件。GEPA捕获DSPy模块执行的完整跟踪,识别与特定预测器对应的跟踪部分,并反思预测器的行为以提出新的预测器指令。
GEPA的核心架构包括:
- 跟踪捕获系统:捕获完整执行轨迹,包括推理链、工具调用和中间输出
- 反思引擎:基于执行轨迹和反馈生成自然语言反思,识别问题并提出改进
- 提示词变异器:根据反思结果生成新的提示词变体
- Pareto选择器:维护多样化的候选集,避免局部最优
- 交叉优化器:合并不同分支的优秀特性,进一步提升性能
# GEPA基本使用示例 gepa = GEPA(metric=metric, track_stats=True) batch_of_tasks = [dspy.Example(...) for task in tasks] new_prog = gepa.compile(student, trainset=trainset, valset=batch_of_tasks) pareto_frontier = new_prog.detailed_results.val_aggregate_scores # pareto_frontier是批处理中每个任务的分数列表
compare GEPA与传统强化学习方法的比较优势
特性 | 传统RL方法(如GRPO) | GEPA |
---|---|---|
学习信号 | 稀疏的标量奖励 | 丰富的自然语言反馈 |
计算效率 | 需要数千次rollout | 仅需传统方法1/35的计算量 |
候选选择 | 全局最优候选,易陷入局部最优 | Pareto前沿多样性选择 |
知识积累 | 隐式在模型参数中 | 显式自然语言规则 |
可解释性 | 低 | 高,反思过程可追踪 |
GEPA的核心优势在于利用语言的可解释性作为学习媒介,相比从稀疏的标量奖励导出的策略梯度,为LLMs提供了更丰富的学习信号。这种方法特别适合资源受限场景的AI系统优化。
assessment 实际应用中的性能表现和案例
GEPA在四大任务上进行了验证,表现出色:
- HotpotQA:多跳推理任务,识别未检索到的关键文档
- IFBench:复杂指令约束遵循,约束满足情况分解说明
- PUPA:隐私保护与质量平衡,质量分 vs 隐私泄漏分
- HoVer:多源事实验证,正确/缺失文档集标识
核心实验结果:
- 35倍效率提升:在IFBench任务中,GEPA仅用678次rollout(GRPO需24,000次)实现更高性能
- 训练信号极致压缩:实际学习所用rollout低至79次(IFBench),因大部分计算用于候选验证
- 全面超越现有方法:在所有四个任务上,GEPA均优于GRPO和MIPROv2等基线方法
实际应用案例:在NPUEval硬件优化中,GEPA用编译错误触发检索相关技术手册,使向量利用率从4.25%提升至30.52%。
code 实现细节与API参考
# GEPA的主要参数 dspy.GEPA( metric: GEPAFeedbackMetric, # 用于反馈和评估的指标函数 auto: Literal['light', 'medium', 'heavy'] | None = None, # 自动预算设置 max_full_evals: int | None = None, # 最大完整评估次数 max_metric_calls: int | None = None, # 最大指标调用次数 reflection_minibatch_size: int = 3, # 单个GEPA步骤中用于反思的示例数 candidate_selection_strategy: Literal['pareto', 'current_best'] = 'pareto', # 候选选择策略 reflection_lm: LM | None = None, # 用于反思的语言模型 skip_perfect_score: bool = True, # 是否跳过完美分数的示例 add_format_failure_as_feedback: bool = False, # 是否将格式失败添加为反馈 instruction_proposer: ProposalFn | None = None, # 自定义指令提议器 component_selector: ReflectionComponentSelector | str = 'round_robin', # 组件选择器 use_merge: bool = True, # 是否使用合并策略 max_merge_invocations: int | None = 5, # 最大合并调用次数 num_threads: int | None = None, # 线程数 failure_score: float = 0.0, # 失败分数 perfect_score: float = 1.0, # 完美分数 log_dir: str = None, # 日志目录 track_stats: bool = False, # 是否跟踪统计信息 use_wandb: bool = False, # 是否使用wandb wandb_api_key: str | None = None, # wandb API密钥 track_best_outputs: bool = False, # 是否跟踪最佳输出 warn_on_score_mismatch: bool = True, # 分数不匹配时是否警告 use_mlflow: bool = False, # 是否使用mlflow seed: int | None = 0 # 随机种子 )
为了向GEPA优化器提供反馈,需要实现如下指标函数:
def metric( gold: Example, pred: Prediction, trace: Optional[DSPyTrace] = None, pred_name: Optional[str] = None, pred_trace: Optional[DSPyTrace] = None, ) -> float | ScoreWithFeedback: """ 此函数使用以下参数调用: - gold: 黄金标准示例 - pred: 预测输出 - trace: 可选。程序执行的跟踪 - pred_name: 可选。当前正在由GEPA优化的目标预测器的名称 - pred_trace: 可选。GEPA正在寻求反馈的目标预测器的执行跟踪 注意pred_name和pred_trace参数。在优化过程中,GEPA将调用指标以获取 正在优化的单个预测器的反馈。GEPA在pred_name中提供预测器的名称, 在pred_trace中提供对应于预测器的子跟踪(跟踪的)。 如果在预测器级别可用,指标应返回对应于预测器的{'score': float, 'feedback': str}。 如果在预测器级别不可用,指标也可以在程序级别返回文本反馈(仅使用gold、pred和trace)。 如果没有返回反馈,GEPA将使用仅包含分数的简单文本反馈:f"This trajectory got a score of {score}." """ ...