DSpy GEPA:反射式提示词进化优化器详解

DSpy GEPA:反射式提示词进化优化器详解

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采集三类关键轨迹:

  • 执行轨迹(推理链、工具调用)
  • 评估轨迹(编译错误等中间信号)
  • 结构化反馈(模块级责任归属)
Python
# 伪代码简化说明
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.
  • 概率化抽样:对覆盖更多任务的最优候选赋予更高选择概率
Python
# GEPA迭代流程:Pareto前沿维护多样性策略
# 数学本质:
Pareto_frontier = {c | ¬∃c' : c' ≻ c}
# 其中c为候选在各任务得分的向量,≻表示支配关系

该策略使搜索效率提升6.4%(表2)。

3. 系统感知交叉优化

创新点:从独立进化分支中提取互补模块:

Python
# 交叉合并伪代码
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选择器:维护多样化的候选集,避免局部最优
  • 交叉优化器:合并不同分支的优秀特性,进一步提升性能
Python
# 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参考

Python
# 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优化器提供反馈,需要实现如下指标函数:

Python
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:反射式提示词进化优化器详解

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采集三类关键轨迹:

  • 执行轨迹(推理链、工具调用)
  • 评估轨迹(编译错误等中间信号)
  • 结构化反馈(模块级责任归属)
Python
# 伪代码简化说明
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.
  • 概率化抽样:对覆盖更多任务的最优候选赋予更高选择概率
Python
# GEPA迭代流程:Pareto前沿维护多样性策略
# 数学本质:
Pareto_frontier = {c | ¬∃c' : c' ≻ c}
# 其中c为候选在各任务得分的向量,≻表示支配关系

该策略使搜索效率提升6.4%(表2)。

3. 系统感知交叉优化

创新点:从独立进化分支中提取互补模块:

Python
# 交叉合并伪代码
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选择器:维护多样化的候选集,避免局部最优
  • 交叉优化器:合并不同分支的优秀特性,进一步提升性能
Python
# 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参考

Python
# 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优化器提供反馈,需要实现如下指标函数:

Python
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:反射式提示词进化优化器详解

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采集三类关键轨迹:

  • 执行轨迹(推理链、工具调用)
  • 评估轨迹(编译错误等中间信号)
  • 结构化反馈(模块级责任归属)
Python
# 伪代码简化说明
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.
  • 概率化抽样:对覆盖更多任务的最优候选赋予更高选择概率
Python
# GEPA迭代流程:Pareto前沿维护多样性策略
# 数学本质:
Pareto_frontier = {c | ¬∃c' : c' ≻ c}
# 其中c为候选在各任务得分的向量,≻表示支配关系

该策略使搜索效率提升6.4%(表2)。

3. 系统感知交叉优化

创新点:从独立进化分支中提取互补模块:

Python
# 交叉合并伪代码
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选择器:维护多样化的候选集,避免局部最优
  • 交叉优化器:合并不同分支的优秀特性,进一步提升性能
Python
# 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参考

Python
# 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优化器提供反馈,需要实现如下指标函数:

Python
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}."
    """
    ...

发表评论

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网 🐾 DeepracticeX 社区 🐾 老薛主机 🐾