- 人工智能
- 大模型
- AI Agent
- 代码智能体
- 自主智能体
【免费下载链接】openevolve
Open-source implementation of AlphaEvolve
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 # 默认数据集配置(fallback,IMDB) ├── {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 基准(当前主攻方向)
| 数据集 | 任务 | 规模(本示例) | 指标 | Baseline | Evolved | 提升 |
|---|---|---|---|---|---|---|
| IFEval | 多约束指令遵循 | 541(train split) | 指令遵循成功率 | 95.01% | 97.41% | +2.40%✅ |
| HoVer | 声明验证(SUPPORTED / NOT_SUPPORTED) | 4,000(validation split) | 二分类准确率 | 43.83% | 42.90% | -0.93% |
| HotpotQA | 多跳问答 | 7,405(validation 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 早期实验数据集
| 数据集 | 任务 | 数据集标识 | 配置 | 备注 |
|---|---|---|---|---|
| Emotion | 6 类情感分类 | dair-ai/emotion | emotion_prompt_dataset.yaml | 与 DSPy 结果对比 |
| GSM8K | 小学数学应用题 | openai/gsm8k(config:main) | gsm8k_prompt_dataset.yaml | DSPy 在此基准达 97.1% |
| IMDB 情感分析 | 二分类情感 | stanfordnlp/imdb | initial_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 Key
export OPENAI_API_KEY="your_openrouter_api_key"注意:尽管环境变量名为OPENAI_API_KEY,本示例实际走OpenRouter API(https://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.txt;evolved读取openevolve_output_qwen3_<dataset>/best/best_program.txt(见 load_prompt)。 - 评测温度:所有 LLM 调用统一使用
temperature=0.1、max_tokens=4096,且带 3 次重试,保证结果可复现、抗抖动。 - 各数据集打分逻辑:
- IFEval:响应文本长度 > 20 字符即视为成功(简化处理,完整 IFEval 需逐条约束校验);
- HoVer:从输出中解析
SUPPORTED/NOT SUPPORTED与整数标签比对(0=SUPPORTED,1=NOT_SUPPORTED); - HotpotQA:将答案小写后做包含匹配(
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.yaml)
README 中给出的精简版:
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.yaml)
config_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.yaml)
README 中的示例片段:
llm: api_base: "https://openrouter.ai/api/v1" models: - name: "google/gemini-2.5-flash" weight: 1.0仓库内 config.yaml 实际使用的模型端点是 Gemini 2.5 Flash Lite(https://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: 10(10×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各数据集的关键差异:
- IFEval:
split: "train"(该数据集只有 train split),is_ifeval: true触发指令格式特判,full_eval_samples: 541; - HoVer:
split: "validation"(test split 无标签,全是 -1),标签为整数(0=SUPPORTED,1=NOT_SUPPORTED),并声明supporting_facts_field与num_hops_field两个多跳证据字段; - HotpotQA:
dataset_config: "distractor"(10 段落干扰项设置),context_field: "context"提供多段上下文,is_hotpotqa: true触发上下文拼装与精确匹配逻辑; - Emotion:标签 0-5 映射(sadness/joy/love/anger/fear/surprise),
max_samples: 200; - GSM8K:
dataset_config: "main",target_field: "answer"含#### 数字形式的最终答案,评估器需提取####后的数值(带 0.001 容差比较); - IMDB:
split: "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 2; - Stage 2:固定 40 个样本做全面评测;
- 两者都会计算 MAP-Elites 特征(Prompt 长度、推理策略分数),即使评估失败也返回特征维度,保证种群档案的网格不塌陷。
这样设计是为了节省 API 调用:绝大多数低质量变异体在第一级就被淘汰,只有少数高潜力个体消耗 Stage 2 的完整评测成本。
6.3 MAP-Elites 特征与 LLM 定性反馈
evaluator.py 的calculate_prompt_features()定义了进化的两个行为特征维度:
- prompt_length:Prompt 原始字符数;
- reasoning_sophistication_score:0.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),并要求输出 JSON:
- Clarity(清晰度):指令是否无歧义、有无矛盾元素;
- Specificity(具体性):细节与约束是否恰到好处;
- Robustness(鲁棒性):能否处理边界情况与多样化输入;
- Format_specification(格式规范):输出格式是否明确定义。
系统消息 templates/evaluator_system_message.txt 将评估模型定位为「专家级 Prompt 评估者」。综合得分 = 任务准确率 × (1 −llm_feedback_weight) + LLM 反馈 ×llm_feedback_weight。
七、进化产物示例
IFEval(97.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...HotpotQA(88.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%)
起始 Prompt:
Analyze the sentiment: "{input_text}"进化 100 代后的 Prompt:
Analyze 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 split(evaluate_prompts.py 会自动检测 test 集无标签后回退 validation,配置文件中同样固定为
split: "validation"); - 标签格式:整数 0=SUPPORTED,1=NOT_SUPPORTED。
空响应
- 原因:进化出的复杂 Prompt 超过 token 上限;
- 解决:增大评测时的
max_tokens,或简化 Prompt。
评估缓慢
实测单次全量评估耗时参考(README 记录):
- IFEval:约 1 分钟 / 100 样本;
- HoVer:全量约 30 分钟;
- HotpotQA:全量约 45 分钟。
建议用--samples参数先小规模验证。另外 evaluator.py 对 HotpotQA 强制使用非流式加载(streaming=False),避免 PyArrow 兼容问题。
数据集未找到
- 核对数据集名与来源(如 HotpotQA 需用
hotpotqa/hotpot_qa+distractor配置名); - 部分数据集需先接受使用条款(如 HoVer 的
trust_remote_code=True); - 指定的 split 不存在时,评估器会自动回退到
trainsplit。
九、高级用法
9.1 接入自定义数据集
三步完成接入:
- 创建初始 Prompt:
mydataset_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.txt:Prompt 全文重写指令,核心约束是「保留原占位符、只重写措辞、只输出新 Prompt 文本」;evaluation.txt:LLM 定性反馈模板(四维打分 + JSON 输出);evaluator_system_message.txt:评估环节的系统消息。
若想改变变异策略或反馈维度,直接修改对应模板并通过prompt.template_dir指向即可。
十、获得最佳效果的经验法则
- 起点要简单:先保证基线 Prompt 清晰可用,再交给进化系统;
- 样本量要足:Stage 2 评估至少使用 40 个样本(README 建议),否则准确率噪声会误导选择;
- 持续监控:定期查看
openevolve_output_*/logs/中的进度日志; - 多次运行:进化带随机性,同一配置多跑几次取最优;
- 控制 token:
max_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
- 代码智能体
- 自主智能体
【免费下载链接】openevolve
Open-source implementation of AlphaEvolve
相关推荐
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数据可视化
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考