
DeepEval 如何用 GEPA 运行提示词优化并解读 optimization_report【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval如果你有几十个 golden 用例但不确定当前 prompt 模板该往哪个方向改DeepEvalThe LLM Evaluation Framework里的PromptOptimizer可以用 GEPA 算法自动完成这件事你提供 prompt、golden 列表、评分指标和一个调用你 LLM 应用的model_callback它会自动搜索得分更高的 prompt并返回优化结果和一份optimization_report。本文基于 Prompt Optimization Introduction 和 GEPA 算法页/prompt-optimization-gepa.mdx)给出一条可以直接照做的执行路径以及 report 各字段的读法。准备条件Prompt、Golden 与 model_callback在跑优化之前先确认三类东西齐了Promptdeepeval.prompt.Prompt实例包含 prompt 模板text_template。Goldens一组Golden或ConversationalGolden实例作为优化的对照数据。model_callback包住你 LLM 应用的回调。优化过程中deepeval会把当前候选Prompt和一条Golden传进来你用prompt.interpolate(inputgolden.input)把 golden 的输入填进模板再调用你的应用必须返回str——这个字符串会作为 test case 的actual_output交给 metrics 打分。from deepeval.dataset import Golden from deepeval.metrics import AnswerRelevancyMetric from deepeval.prompt import Prompt from deepeval.optimizer import PromptOptimizer # 你要优化的 prompt prompt Prompt(text_templateRespond to the query.) # 包住你的 LLM 应用 async def model_callback(prompt: Prompt, golden: Golden) - str: interpolated_prompt prompt.interpolate(inputgolden.input) res await YourApp(interpolated_prompt) # 按你应用的实际调用方式 return res optimizer PromptOptimizer(metrics[AnswerRelevancyMetric()], model_callbackmodel_callback)两个必填参数是metrics用于打分和反馈的 deepeval 指标列表和model_callback。可选参数包括algorithm默认就是GEPA()、async_config、display_config、mutation_config。执行步骤用 GEPA 运行一次优化GEPA 是PromptOptimizer的默认算法algorithm默认值为GEPA()所以不传algorithm就已经在用 GEPA。只有想调整它的行为时才需要显式构造optimized_prompt optimizer.optimize( promptprompt, goldens[ Golden(inputWhat is Saturn?, expected_outputSaturn is a car brand.), Golden(inputWhat is Mercury?, expected_outputMercury is a planet.), ], ) # 查看优化结果 print(Optimized prompt:, optimized_prompt.text_template) print(Optimization report:, optimizer.optimization_report)optimize()有两个必填参数prompt和goldens。注意metrics是在构造PromptOptimizer时传入的见 PromptOptimizer 源码GEPA 页面示例里把metrics写在optimize()调用参数里的写法与当前源码签名不一致以构造函数传参为准。在 Python 环境中执行python main.pyoptimize()返回最优Prompt。如果想并发运行而不阻塞主线程文档提供了异步入口a_optimize()在 async 函数里await optimizer.a_optimize(...)再用asyncio.run驱动。可选自定义 GEPA 参数需要控制搜索行为时构造GEPA实例并传给algorithmfrom deepeval.optimizer.algorithms import GEPA gepa GEPA( iterations10, pareto_size5, minibatch_size4, patience4, random_seed42, ) optimizer PromptOptimizer(algorithmgepa, metrics[...], model_callbackmodel_callback)文档列出的可选参数及默认值参数默认值文档说明iterations5变异尝试总次数pareto_size3验证集D_pareto中的 golden 数每个候选都会在这批 golden 上评分以保证公平比较minibatch_size8每次迭代从D_feedback抽取的 golden 数自动按可用数据截断patience3连续拒绝该次数子代后提前停止random_seedtime.time_ns()控制 golden 切分、minibatch 抽样、Pareto 父代选择与平局判定固定如42才能复现tie_breakerPREFER_CHILD平局策略另有PREFER_ROOT、RANDOMaggregate_instancesmean_of_all把单个 prompt 的 per-golden Pareto 分数聚合成标量reflection_modelgpt-4o-mini生成诊断/反馈的 LLMmutation_modelgpt-4o重写 prompt 的 LLMscorer—自定义 scorer通常由PromptOptimizer注入默认random_seed是time.time_ns()即不固定种子时每次运行结果都会不同需要可复现的运行就固定random_seed。可选限流配置如果你的评测模型或 LLM 应用会触发 rate limit给PromptOptimizer传AsyncConfigfrom deepeval.optimizer.configs import AsyncConfig optimizer PromptOptimizer( metrics[AnswerRelevancyMetric()], model_callbackmodel_callback, async_configAsyncConfig(throttle_value2, max_concurrent5), )throttle_value每个 test case 的节流秒数默认 0和max_concurrent并行 test case 数上限默认 20只在run_async为True默认时生效。降低max_concurrent、调高throttle_value是文档推荐的限流手段。GEPA 做了什么理解 report 之前先懂流程GEPAGenetic-Pareto不是收敛到单个“最好”的 prompt而是维护一个多样化候选池流程分五步Golden 切分把 goldens 切成互不相交的两部分——固定的验证集D_pareto大小pareto_size和反馈集D_feedback。prompt 基于D_feedback的反馈变异但按D_pareto上的表现挑选避免过拟合。Pareto 父代选择一个 prompt 若在D_pareto上所有 golden 都不劣、至少一个更优就“支配”另一个 prompt不被任何 prompt 支配的构成 Pareto 前沿。父代按各 prompt“赢得最高分”的频率加权抽样而不是总是选平均分最高的。反馈与重写从D_feedback抽一个 minibatch收集诊断反馈基线打分再用 rewriter 生成子代 prompt。双门验收子代必须先在同一个 minibatch 上严格超过父代minibatch gate再在D_pareto上相对父代和存档内所有配置都非支配Pareto gate。被拒会累加连续拒绝计数达到patience就提前结束。终选按聚合分数默认均值排名平局由tie_breaker决定返回获胜 prompt。结果验证与解读 optimization_report优化跑完后验证路径有两条拿到新 promptoptimized_prompt.text_templateLIST 风格 prompt 是messages_template就是可以直接替换线上模板的结果DisplayConfig.show_indicator默认为True控制台还会打印算法生成的 summary 表格。读optimization_report它挂在PromptOptimizer实例上优化结束后赋值见 prompt_optimizer.pyprint(optimizer.optimization_report) print(optimizer.optimization_report.optimization_id)report 共暴露六个顶层字段定义见 gepa.py 中 report 的组装字段类型怎么解读optimization_idstr本次运行的唯一标识文档建议在多数工作流中把它记录进日志方便回溯best_idstr最终获胜 prompt 配置的内部 idaccepted_iterationsList[AcceptedIteration]每个被接受的子代一条记录parent/child的 id、moduleid以及标量化的before/after分数——这是判断“哪一步改进有效”的直接依据pareto_scoresDict[str, List[float]]每个配置 id 到D_pareto上逐 golden 分数列表的映射即 GEPA 维持 Pareto 前沿所用的分数表parentsDict[str, Optional[str]]每个配置 id 到其父 id 的映射根配置对应None构成所有被探索变体的祖先树prompt_configurationsDict[str, PromptConfigSnapshot]每个配置 id 到该节点 prompt 快照的映射含父 id 和逐模块的 TEXT/LIST prompt 内容实际读法大多数时候直接取optimized_prompt.text_template并使用即可。需要深入时用best_id在prompt_configurations里找到获胜节点的完整 prompt 文本用parents沿祖先链回溯它的演化路径用accepted_iterations里各条记录的before/after确认每一步被接受时分数确实提升了pareto_scores则告诉你获胜 prompt 是在哪些 golden 上强、哪些上弱。文档明确说这些字段适合“重建搜索树、可视化 prompt 跨迭代演化、调试某个配置为何被选为best_id”这类场景。早停与其他运行现象若某轮子代被 Pareto gate 拒绝会累计连续拒绝计数计数达到patience默认 3时搜索提前停止不会跑满全部iterations默认 5。运行中如果看到类似early stop (patience3)的状态说明即触发了这条路径。DisplayConfig.announce_ties默认为False设为True后GEPA 检测到配置间平局时会打印一行提示。优化开始前如果发生错误如model_callback内部抛错PromptOptimizer会以DeepEvalError中断并在状态行给出[GEPA] ... halted形式的信息见 错误处理逻辑此时检查你的 callback 是否正确调用了 LLM 应用并返回字符串。限制与注意事项文档只覆盖了PromptOptimizer的 Python 用法未提供命令行或离线批处理入口主路径就是上述脚本形式。两个 LLM 分工不同reflection_model默认gpt-4o-mini负责诊断mutation_model默认gpt-4o负责重写两者都可以在GEPA(...)构造时覆盖。goldens 会被切成D_pareto和D_feedback两份互斥集合minibatch_size超出D_feedback可用量时会自动截断因此 golden 数量太少时反馈信号会受限。a_optimize()与optimize()是同步/异步两种入口二选一即可不要在同步上下文里嵌套再调asyncio.run。跑通一次后optimized_prompt与optimization_report就是本次任务的完整产出前者用于替换模板后者尤其optimization_id、best_id、accepted_iterations用于归档和复盘这次搜索为什么收敛到该 prompt。【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考