ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenEvolve Prompt 进化优化实战指南:基于 GEPA 基准的 LLM 提示词自动调优

OpenEvolve Prompt 进化优化实战指南:基于 GEPA 基准的 LLM 提示词自动调优 人工智能大模型AI Agent代码智能体自主智能体【免费下载链接】openevolveOpen-source implementation of AlphaEvolve项目地址https://gitcode.com/gh_mirrors/op/openevolve点击查看免费下载OpenEvolve 是一个开源的 AlphaEvolve 实现它把「程序进化」的思想应用到 LLM Prompt 优化上用进化算法在多个基准数据集上自动搜索高性能提示词而不是靠人工反复试错。本文以仓库中 examples/llm_prompt_optimization 完整示例为主线讲解如何在 IFEval、HoVer、HotpotQA合称 GEPA 基准以及 Emotion、GSM8K、IMDB 等数据集上完成从安装、基线评测、进化运行到结果解读的完整闭环同时结合 evaluator.py 与 evaluate_prompts.py 源码剖析 MAP-Elites 多样性维护、级联评估Cascade Evaluation与 LLM 定性反馈背后的实现原理。读完本文你将掌握一套可复制的「进化式 Prompt 工程」方案以及将任意自定义数据集接入 OpenEvolve 的完整步骤。一、为什么需要进化式 Prompt 优化Prompt 工程长期依赖人工经验调措辞、加示例、改输出格式每轮都要人工评测。当任务变成「多约束指令遵循」「多跳推理」「声明验证」这类复杂结构时人工调优的边际收益快速递减。OpenEvolve 给出的答案是把 Prompt 当作「程序」来进化用 LLM 作为变异算子对当前 Prompt 生成重写版本full rewrite 模式用级联评估控制评测成本先在小样本上快速筛选再对高分个体做全量评估用 MAP-Elites 算法按「Prompt 长度」与「推理策略复杂度」两个特征维度维护多样化的精英档案避免种群收敛到同一种措辞风格引入 LLM 定性反馈清晰度、具体性、鲁棒性、格式规范与任务准确率加权合成综合得分。二、示例整体结构llm_prompt_optimization目录是一套自洽的可运行示例核心文件如下examples/llm_prompt_optimization/ ├── evaluate_prompts.py # 统一评测脚本baseline / evolved 对比 ├── evaluator.py # OpenEvolve 进化用评估器级联评估 MAP-Elites 特征 ├── run_evolution.sh # 进化启动包装脚本自动设置数据集环境变量 ├── config.yaml # 通用进化配置Gemini 2.5 Flash Lite ├── config_qwen3_evolution.yaml # GEPA 基准进化配置Qwen3-8B ├── config_qwen3_baseline.yaml # GEPA 基准基线配置 ├── dataset_settings.yaml # 默认数据集配置fallbackIMDB ├── {ifeval,hover,hotpotqa,emotion,gsm8k,initial}_prompt.txt # 各数据集初始 Prompt ├── {ifeval,hover,hotpotqa,emotion,gsm8k,initial}_prompt_dataset.yaml # 各数据集配置 ├── templates/ │ ├── full_rewrite_user.txt # Prompt 重写指令模板 │ ├── evaluation.txt # LLM 反馈评估模板 │ └── evaluator_system_message.txt # 评估器系统消息 └── requirements.txt入口脚本 openevolve-run.py 是 OpenEvolve 的命令行入口内部转调openevolve.cli.main进化运行结束后最优 Prompt 会写入openevolve_output_qwen3_dataset/best/best_program.txt评测结果则落在evaluation_results_*.json中仓库已包含evaluation_results_baseline_20250809_070942.json与evaluation_results_evolved_20250809_103002.json两份真实结果文件。三、支持的数据集与真实性能结果3.1 GEPA 基准当前主攻方向数据集任务规模本示例指标BaselineEvolved提升IFEval多约束指令遵循541train split指令遵循成功率95.01%97.41%2.40%✅HoVer声明验证SUPPORTED / NOT_SUPPORTED4,000validation split二分类准确率43.83%42.90%-0.93%HotpotQA多跳问答7,405validation split精确匹配77.93%88.62%10.69%✅Overall汇总11,946聚合准确率67.29%73.71%6.42%✅对应配置ifeval_prompt_dataset.yaml、hover_prompt_dataset.yaml、hotpotqa_prompt_dataset.yaml。值得注意的量化收益均来自本示例 README 的实测记录全部数据集合计多答对 767 个样本进化后 Prompt 的空响应数量下降 38%IFEval 达到 97.41% 的接近满分指令遵循表现HotpotQA 多跳推理准确率提升 10.69 个百分点。3.2 早期实验数据集数据集任务数据集标识配置备注Emotion6 类情感分类dair-ai/emotionemotion_prompt_dataset.yaml与 DSPy 结果对比GSM8K小学数学应用题openai/gsm8kconfig:maingsm8k_prompt_dataset.yamlDSPy 在此基准达 97.1%IMDB 情感分析二分类情感stanfordnlp/imdbinitial_prompt_dataset.yaml示例进化72% → 94%这些数据集配置都遵循*_prompt_dataset.yaml命名模式字段含义见下文「数据集配置文件」一节。四、快速开始4.1 安装依赖cd examples/llm_prompt_optimization pip install -r requirements.txtrequirements.txt 内容为openai、tqdm、datasets、pyyaml。评估与进化均通过 OpenAI 兼容接口调用远端模型datasets用于加载 HuggingFace 数据。4.2 设置 API Keyexport OPENAI_API_KEYyour_openrouter_api_key注意尽管环境变量名为OPENAI_API_KEY本示例实际走OpenRouter APIhttps://openrouter.ai/api/v1。这一逻辑在 evaluate_prompts.py 的get_client()中写死读取OPENAI_API_KEY但base_url固定指向 OpenRouter。4.3 评测 Prompt基线 / 进化后对比统一评测脚本 evaluate_prompts.py 支持ifeval、hover、hotpotqa、all四种数据集选择与baseline、evolved两种 Prompt 类型# 单数据集评测基线 Prompt python evaluate_prompts.py --dataset ifeval --prompt-type baseline --samples 100 # 单数据集评测进化后的 Prompt python evaluate_prompts.py --dataset hover --prompt-type evolved --samples 100 # 全量评测三个 GEPA 数据集的进化 Prompt不传 --samples 即用全量数据 python evaluate_prompts.py --dataset all --prompt-type evolved # 指定结果输出文件 python evaluate_prompts.py --dataset all --prompt-type evolved --output results.json关键实现细节源码层面Prompt 加载baseline读取dataset_prompt.txtevolved读取openevolve_output_qwen3_dataset/best/best_program.txt见 load_prompt。评测温度所有 LLM 调用统一使用temperature0.1、max_tokens4096且带 3 次重试保证结果可复现、抗抖动。各数据集打分逻辑IFEval响应文本长度 20 字符即视为成功简化处理完整 IFEval 需逐条约束校验HoVer从输出中解析SUPPORTED/NOT SUPPORTED与整数标签比对0SUPPORTED1NOT_SUPPORTEDHotpotQA将答案小写后做包含匹配answer in output_lower。结果聚合--dataset all时会输出聚合准确率aggregate_accuracy、总正确数、总样本数并保存为带时间戳的 JSON。4.4 运行进化GEPA 基准使用 Qwen3-8B 进化配置python ../../openevolve-run.py ifeval_prompt.txt evaluator.py \ --config config_qwen3_evolution.yaml \ --iterations 50其他数据集建议走包装脚本 run_evolution.sh它会自动把 Prompt 文件名导出为OPENEVOLVE_PROMPT环境变量供评估器定位对应的*_prompt_dataset.yaml./run_evolution.sh emotion_prompt.txt --iterations 50 ./run_evolution.sh gsm8k_prompt.txt --iterations 100包装脚本内部等价于export OPENEVOLVE_PROMPT$PROMPT_FILE python ../../openevolve-run.py $PROMPT_FILE evaluator.py --config config.yaml $为什么需要这个环境变量看 evaluator.py 的实现评估器根据OPENEVOLVE_PROMPT的 basename 推导数据集配置文件即把xxx_prompt.txt替换为xxx_prompt_dataset.yaml未设置时回退到 dataset_settings.yaml默认 IMDB。五、配置文件全解5.1 进化配置config_qwen3_evolution.yamlREADME 中给出的精简版llm: models: - name: qwen/qwen3-8b weight: 1.0 temperature: 0.7 max_tokens: 4096 evaluator: cascade_evaluation: true cascade_thresholds: [0.9] # 2-stage evaluation timeout: 1800 # 30 minutes use_llm_feedback: true llm_feedback_weight: 0.3 database: n_islands: 4 # Island-based evolution migration_interval: 10仓库内 config_qwen3_evolution.yaml 则是展开的完整版各参数含义如下max_iterations: 100 # 最大进化代数可被命令行 --iterations 覆盖 checkpoint_interval: 10 # 每 10 代保存一次检查点 diff_based_evolution: false # 关闭 diff 式变异采用全文重写对 Prompt 最优 max_code_length: 10000 language: text # 显式声明进化对象是文本而非代码 llm: api_base: https://openrouter.ai/api/v1 models: - name: qwen/qwen3-8b # 精确使用 Qwen3-8B 与 GEPA 基线对齐 weight: 1.0 temperature: 0.8 # 较高温度鼓励创造性变异 max_tokens: 4096 timeout: 60 retries: 3 prompt: template_dir: templates # 自定义进化模板 num_top_programs: 5 # 提示中展示前 5 个高分 Prompt 作灵感 num_diverse_programs: 3 # 额外引入 3 个多样化的 Prompt include_artifacts: true # 附带历史/性能工件 system_message: | # 进化系统消息专家角色 四条变异策略 database: # MAP-Elites 档案配置 population_size: 50 archive_size: 500 num_islands: 4 # 4 个隔离种群 feature_dimensions: [prompt_length, reasoning_strategy] # 特征维度 feature_bins: 10 # 每个维度 10 个 bin elite_selection_ratio: 0.4 # 40% 精英选择 exploration_ratio: 0.3 # 30% 探索 exploitation_ratio: 0.3 # 30% 利用 migration_interval: 20 # 每 20 代迁移 migration_rate: 0.1 # 10% 个体参与迁移 evaluator: timeout: 1800 # 单次评估 30 分钟超时 max_retries: 3 parallel_evaluations: 4 # 4 路并行评估 cascade_evaluation: true # 级联评估 cascade_thresholds: [0.9] # 两级Stage 1 需达 90% 才进入 Stage 2 use_llm_feedback: true llm_feedback_weight: 0.2 # 定性反馈占 20% 权重注意 README 示例中llm_feedback_weight记为 0.3即综合得分 70% 任务准确率 30% LLM 反馈仓库实际配置文件当前取值 0.2该权重完全可调决定定性反馈在综合得分中的占比。5.2 基线配置config_qwen3_baseline.yamlconfig_qwen3_baseline.yaml 用于产出可对比的基线成绩与进化配置刻意相反max_iterations: 1只跑一代不做进化temperature: 0.1低温保证基线稳定database.population_size: 1、num_islands: 1、migration_rate: 0.0完全退化为单点评测cascade_evaluation: false、use_llm_feedback: false、llm_feedback_weight: 0.0不做级联与定性反馈保证基线与进化在公平条件下对比。5.3 通用配置config.yamlREADME 中的示例片段llm: api_base: https://openrouter.ai/api/v1 models: - name: google/gemini-2.5-flash weight: 1.0仓库内 config.yaml 实际使用的模型端点是 Gemini 2.5 Flash Litehttps://generativelanguage.googleapis.com/v1beta/openai/并沉淀了若干「实验得出的最优值」temperature: 0.4、max_tokens: 16000、num_top_programs: 3、num_diverse_programs: 2、include_artifacts: true注释记载开启工件可带来 20.7% 提升、elite_selection_ratio: 0.1、exploration_ratio: 0.3、exploitation_ratio: 0.6、feature_bins: 1010×10 网格 100 个档案单元。这套配置说明不同后端、不同任务规模下进化超参需要单独调优。5.4 数据集配置文件*_prompt_dataset.yaml统一结构以 ifeval_prompt_dataset.yaml 为例# Example: ifeval_prompt_dataset.yaml dataset_name: google/IFEval input_field: prompt target_field: instruction_id_list split: train is_ifeval: true # Special handling flag各数据集的关键差异IFEvalsplit: train该数据集只有 train splitis_ifeval: true触发指令格式特判full_eval_samples: 541HoVersplit: validationtest split 无标签全是 -1标签为整数0SUPPORTED1NOT_SUPPORTED并声明supporting_facts_field与num_hops_field两个多跳证据字段HotpotQAdataset_config: distractor10 段落干扰项设置context_field: context提供多段上下文is_hotpotqa: true触发上下文拼装与精确匹配逻辑Emotion标签 0-5 映射sadness/joy/love/anger/fear/surprisemax_samples: 200GSM8Kdataset_config: maintarget_field: answer含#### 数字形式的最终答案评估器需提取####后的数值带 0.001 容差比较IMDBsplit: test缺失时自动回退 train。六、进化过程与源码级原理6.1 宏观流程初始种群以基线 Prompt 作为起点也可从检查点恢复变异LLM 按 full_rewrite_user.txt 模板全文重写 Prompt模板强制要求「保留原占位符、不得新增占位符」保证进化产物始终与评测模板兼容评估Stage 1 快速测试 10 个样本Stage 2 全面测试 40 个样本固定值见evaluate_stage1/evaluate_stage2选择按综合得分保留最优个体岛屿进化4 个隔离种群各自进化周期性迁移个体保持多样性迭代重复指定代数典型 50–100。6.2 级联评估Cascade Evaluation级联评估在 evaluator.py 中以evaluate_stage1/evaluate_stage2两个函数实现Stage 1固定抽取 10 个样本快速评测必须达到cascade_thresholds默认 0.9即 90%才进入 Stage 2Stage 2固定 40 个样本做全面评测两者都会计算 MAP-Elites 特征Prompt 长度、推理策略分数即使评估失败也返回特征维度保证种群档案的网格不塌陷。这样设计是为了节省 API 调用绝大多数低质量变异体在第一级就被淘汰只有少数高潜力个体消耗 Stage 2 的完整评测成本。6.3 MAP-Elites 特征与 LLM 定性反馈evaluator.py 的calculate_prompt_features()定义了进化的两个行为特征维度prompt_lengthPrompt 原始字符数reasoning_sophistication_score0.0–1.0 的连续分数按规则累加——包含 few-shot 示例加 0.6、链式思考CoT加 0.4、指令性动词加 0.2、严格限定词加 0.1 等最终裁剪到 [0, 1]。这两个特征由数据库自动做分箱feature_bins: 10形成 10×10 的行为网格配合elite_selection_ratio/exploration_ratio/exploitation_ratio三个比例参数在「保留精英」「探索新区域」「利用已知区域」之间取得平衡。LLM 定性反馈使用 templates/evaluation.txt 模板从四个维度对候选 Prompt 打分0.0–1.0并要求输出 JSONClarity清晰度指令是否无歧义、有无矛盾元素Specificity具体性细节与约束是否恰到好处Robustness鲁棒性能否处理边界情况与多样化输入Format_specification格式规范输出格式是否明确定义。系统消息 templates/evaluator_system_message.txt 将评估模型定位为「专家级 Prompt 评估者」。综合得分 任务准确率 × (1 −llm_feedback_weight) LLM 反馈 ×llm_feedback_weight。七、进化产物示例IFEval97.41%Follow the instruction below precisely. Structure your response into two distinct parts: 1) a step-by-step reasoning process that explicitly identifies the task, constraints, and required output format, and 2) the final answer in the exact format specified...HotpotQA88.62%Answer the following question using the provided context. The answer must integrate information from multiple paragraphs and follow these steps: 1. Paragraph Analysis: Extract key details from each relevant paragraph... 2. Synthesis: Combine these details into a single, coherent response... 3. Citation: Attribute all assertions to their source paragraphs...IMDB 情感分析示例进化 72% → 94%起始 PromptAnalyze the sentiment: {input_text}进化 100 代后的 PromptAnalyze the sentiment of the following text. Determine if the overall emotional tone is positive or negative. Text: {input_text} Response: Provide only a single digit - either 1 for positive sentiment or 0 for negative sentiment. Do not include any explanation or additional text.可以观察到一个明显规律进化出的高质量 Prompt 普遍具备「显式结构划分 输出格式强制约束 消除歧义措辞」的特征这正是 6.3 节中「推理策略特征」与「格式规范反馈」两个机制协同作用的结果。八、故障排查HoVer 数据集问题现象test split 全部无标签label 全为 -1解决改用 validation splitevaluate_prompts.py 会自动检测 test 集无标签后回退 validation配置文件中同样固定为split: validation标签格式整数 0SUPPORTED1NOT_SUPPORTED。空响应原因进化出的复杂 Prompt 超过 token 上限解决增大评测时的max_tokens或简化 Prompt。评估缓慢实测单次全量评估耗时参考README 记录IFEval约 1 分钟 / 100 样本HoVer全量约 30 分钟HotpotQA全量约 45 分钟。建议用--samples参数先小规模验证。另外 evaluator.py 对 HotpotQA 强制使用非流式加载streamingFalse避免 PyArrow 兼容问题。数据集未找到核对数据集名与来源如 HotpotQA 需用hotpotqa/hotpot_qadistractor配置名部分数据集需先接受使用条款如 HoVer 的trust_remote_codeTrue指定的 split 不存在时评估器会自动回退到trainsplit。九、高级用法9.1 接入自定义数据集三步完成接入创建初始 Promptmydataset_prompt.txt占位符如{input_text}、{claim}、{instruction}需与评测逻辑对应创建配置mydataset_prompt_dataset.yaml至少声明dataset_name、input_field、target_field、split并按需添加is_ifeval/is_hover/is_hotpotqa等特判标志这些标志驱动 evaluate_prompt 中的格式化与打分分支运行进化./run_evolution.sh mydataset_prompt.txt --iterations 50 # 或直接调用 python ../../openevolve-run.py mydataset_prompt.txt evaluator.py --config config.yaml9.2 批量评估for dataset in ifeval hover hotpotqa; do python evaluate_prompts.py --dataset $dataset --prompt-type evolved done9.3 从检查点恢复进化python ../../openevolve-run.py prompt.txt evaluator.py \ --config config_qwen3_evolution.yaml \ --checkpoint openevolve_output_qwen3_ifeval/checkpoints/checkpoint_30 \ --iterations 20配合checkpoint_interval: 10进化过程每 10 代自动落盘一次检查点中断后可从任意检查点续跑。9.4 自定义进化模板templates/目录提供三个可定制模板full_rewrite_user.txtPrompt 全文重写指令核心约束是「保留原占位符、只重写措辞、只输出新 Prompt 文本」evaluation.txtLLM 定性反馈模板四维打分 JSON 输出evaluator_system_message.txt评估环节的系统消息。若想改变变异策略或反馈维度直接修改对应模板并通过prompt.template_dir指向即可。十、获得最佳效果的经验法则起点要简单先保证基线 Prompt 清晰可用再交给进化系统样本量要足Stage 2 评估至少使用 40 个样本README 建议否则准确率噪声会误导选择持续监控定期查看openevolve_output_*/logs/中的进度日志多次运行进化带随机性同一配置多跑几次取最优控制 tokenmax_tokens必须能容纳「Prompt 模型响应」跨数据集验证在多个数据集上测试进化 Prompt确认泛化性而非过拟合某个数据集。延伸阅读项目总览与 OpenEvolve 核心机制README.md统一评测脚本实现evaluate_prompts.py进化评估器与特征计算evaluator.py启动包装脚本run_evolution.sh历史评测结果evaluation_results_baseline_20250809_070942.json 与 evaluation_results_evolved_20250809_103002.json。赞分享人工智能大模型AI Agent代码智能体自主智能体【免费下载链接】openevolveOpen-source implementation of AlphaEvolve项目地址https://gitcode.com/gh_mirrors/op/openevolve点击查看免费下载相关推荐abogen 使用指南免费开源 TTS 把 EPUB 和 PDF 转成带字幕有声书abogen 使用指南免费开源 TTS 把 EPUB 和 PDF 转成带字幕有声书 abogen 是一款开源 TTS文本转语音工具把 EPUB、PDF、AI 应用语音音频媒体生成本地部署ROMA-DSPy 提示词自动化优化实战基于 GEPA 的 prompt_optimization 模块完全指南ROMA DSPy 提示词自动化优化实战基于 GEPA 的 prompt_optimization 模块完全指南 本文面向希望在多 Agent 系统中自动化改AI AgentAgent 框架多智能体后端MCP 服务终极LLM提示词自动调优指南Evidently框架让AI响应质量提升300%的实战技巧终极LLM提示词自动调优指南Evidently框架让AI响应质量提升300%的实战技巧 Evidently是一个功能强大的机器学习模型评估与监控工具其中的P人工智能大模型模型评测AI 评测机器学习MLOpsLLMOps数据可视化上一篇DLSS Swapper 实战指南DLL 切换、管理与版本回退一文讲清下一篇终极指南一文读懂cnn_graph图卷积网络的核心原理与创新突破创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进