上周写了两篇关于GEPA的文章《Agent多步误差咋破?看下GEPA,反思自进化+帕累托前沿,超过DSPy的MIPROv2》《别被提示词优化困住!用DSPy.GEPA把Prompt做成可演进的工程(万字长文)》,有不少朋友还是很困惑。GEPA(Genetic-Pareto Evolutionary Prompt Optimization)是一套围绕“反思式文本演化”构建的优化框架,可以将任何包含文本组件(提示词、指令、代码等)的系统演化到更高性能。它通过候选生成、执行反馈、反思迭代和 Pareto 选择,逐步改进模型的行为表现。随着本仓库的演进,我不仅整理了核心算法和示例,还针对 GEPA 写了一个完整的浏览器前端,并在后端增加了详细的日志记录,帮助开发者和研究者更直观地理解 GEPA 如何驱动大型语言模型(LLM)优化。
本文结合仓库结构、算法流程、前端集成与日志输出,由浅入深地认识 GEPA,并贴合最新日志展示 Demo 数据集与 AIME 数据集的实测表现,方便你快速复现。能给这个项目一颗Star,万分感谢
项目地址:https://github.com/xiumaoprompt/gepa-ui[1]
1. 仓库总览与技术栈
项目结构
src/gepa/:核心库,包括 GEPA 引擎(core)、默认适配器(adapters)、反思式候选生成(proposer)、日志系统(logging)等。
src/gepa/examples/:多个任务示例,涵盖 AIME、AnyMaths、RAG、DSPy 等,方便复现实验。
tests/:PyTest 单测,验证算法在录播数据上的表现。
src/gepa_frontend/:我们新增的FastAPI 前端,提供网页交互、静态资源和丰富日志。
README.md:使用说明、DSPy 集成示例、快速入门(AIME)等。
主要依赖
Python 3.10+,gepa核心库。
litellm用于统一封装各家 LLM API(DeepSeek、Moonshot 等)。
fastapi+uvicorn构建 Web 前端。
可选依赖:datasets(加载公开数据集)、wandb、mlflow等。
2. GEPA 算法速览
GEPA 的一次迭代包含以下步骤:
初始化候选:以种子 prompt(seed_candidate)作为起点。
候选评估:通过适配器(例如DefaultAdapter)在训练/验证集上执行任务,记录 LLM 输出与得分。
反思与提案:把失败案例与反馈整理成反思数据集,经反思模型生成新候选。
Pareto 选择:比较各候选在不同样本上的得分,选出非支配解,保证整体性能提升。
终止条件:可设置最大调用次数、时间、文件监视等停止条件。
README 中的 AIME 示例演示了如何优化 GPT-4.1 mini 的提示词:
import gepa
trainset, valset, _ = gepa.examples.aime.init_dataset()
seed_prompt = {"system_prompt": "You are a helpful assistant ... ### <final answer>"}
# Let's run GEPA optimization process.
gepa_result = gepa.optimize(
seed_candidate=seed_prompt,
trainset=trainset, valset=valset,
task_lm="openai/gpt-4.1-mini", # <-- This is the model being optimized
max_metric_calls=150, # <-- Set a budget
reflection_lm="openai/gpt-5", # <-- Use a strong model to reflect on mistakes and propose better prompts
)
print("GEPA Optimized Prompt:", gepa_result.best_candidate['system_prompt'])3. FastAPI 前端:可视化 GEPA 的运行3.1 设计目标
我们基于 FastAPI 写了一个轻量前端,提供:
在浏览器中输入任务模型、反思模型、API Key、Base URL 等信息。
快速选择数据集:Demo Arithmetic(新增)、Mock Mini Set、AIME Benchmark。
自定义运行参数(最大调用次数、训练/验证样本数、随机种子、种子提示词)。
一键验证模型连通性(Verify Models)并运行完整 GEPA 流程(Run GEPA)。
UI 结构示例:
+-------------------------------------------+
| GEPA Optimization Demo |
| 模型设置 + API Key / Base URL |
| Dataset = Demo Arithmetic (推荐 DeepSeek) |
| Max Metric Calls = 5, Train=5, Val=3, Seed=1
| Seed Prompt 默认填入 '... ### <final answer>'
| [Verify Models] [Run GEPA] |
| Status + Detailed Results |
+-------------------------------------------+3.2 后端详尽日志
我们在app.py和DefaultAdapter中加入了大量日志,涵盖:
模型验证:清楚显示Verify Models是否成功。
数据集来源:记录使用 Demo / Mock / AIME。
LLM 调用:打印 litellm 的 model 值、返回内容截断片段。
判分细节:DefaultAdapter会打印“期望答案、解析出的答案、得分”。
GEPA 进度:展示每次迭代的评估、反思提案、Pareto 前沿、最佳得分等。
这些日志让我们能看见 GEPA 的“内脏”,上面提供的两段真实日志(Demo 与 AIME)就是最佳证据。
4. Demo 数据集:DeepSeek 100% 成功示例
为快速验证 DeepSeek,我们新增了 10 条 Demo 算术题:
[
{"input":"Add 12 and 7.","answer":"### 19"},
{"input":"What is 15 minus 4?","answer":"### 11"},
...
{"input":"If a book costs $18 and you pay with $50, how much change?","answer":"### 32"}
]
默认配置(Max Metric Calls=5,Train=5,Val=3,Seed=1),运行日志节选如下,您也可以按照正常批次(Max Metric Calls=30,Train=10,Val=10,Seed=1)运行,得到一个更为精准的系统提示词。(本文截图仅为展示项目已经跑通)
INFO gepa_frontend: Launching GEPA run | dataset=demo | train=5 | val=3 | max_metric_calls=5 | seed=1
INFO ... Eval sample | expected=19 | extracted=19 | score=1.0
INFO ... Eval sample | expected=11 | extracted=11 | score=1.0
INFO ... Eval sample | expected=48 | extracted=48 | score=1.0
INFO ... GEPA run complete | total_metric_calls=6 | num_candidates=1 | best_score=1.000
前端会展示:
模型 resolved 名称(如deepseek/deepseek-chat)。
总调用数、最佳验证得分。
最佳 prompt(系统提示)。
候选历史(得分、迭代索引、提示词文本)。
验证集得分列表(Aggregate & Subscores)。
5. AIME 数据集:探索更难的任务
切换到Dataset = AIME后,可以设置train=3、val=2、max_metric_calls=3等参数。日志示例:
INFO ... Eval sample | expected=385 | extracted=96 | score=0.0
...
INFO ... Proposed new text for system_prompt: You are a mathematical problem-solving assistant...
INFO ... Eval sample | expected=227 | extracted=227 | score=1.0
INFO ... Eval sample | expected=242 | extracted=242 | score=1.0
INFO ... Eval sample | expected=244 | extracted=2 | score=0.0
可以看到:
GEPA 会自动针对难题生成新提示词(例如加入 Euler 公式、平面图知识等 domain hints)。
虽然最终 aggregate 得分可能仍为 0(难题仍有失误),但日志显示新的提示词对部分题目已有帮助。
这为进一步加大训练集、使用更强的推理模型等优化策略提供靶点。
6. 如何运行前端
安装依赖(若已在venv中可直接激活):
pip install -e '.[full,frontend]'
启动服务:
uvicorn gepa_frontend.app:app --reload
打开浏览器访问http://localhost:8000:
填DEEPSEEK_API_KEY,填 Base URLhttps://api.deepseek.com。
保持Dataset=Demo Arithmetic验证链路,确认得分 1.0。
视需求再切换到AIME Benchmark观察进阶表现。
观察终端日志,了解每次 DeepSeek 调用、评分与 prompt 演化。
7. 总结与展望
GEPA 的价值:在多种文本任务中稳健迭代提示词,提升模型表现。
前端与日志:FastAPI 前端 + 细粒度日志让 GEPA 运行轨迹一目了然,特别适合教学、演示和调试。
Demo & AIME:Demo 数据集保证快速验证链路;AIME 让我们探索进一步提高模型的空间。
下一步:可尝试接入更多 LLM、扩展数据集、修改适配器或并入自有系统,打造自动化 PromptOps 平台。
引用链接
[1]:https://github.com/xiumaoprompt/gepa-ui
未来已来,有缘一起同行!