数据截至 (上游 commit fd6b9a6352af)
EvoAgentX — 顶层全景与阅读地图
30 秒导读: EvoAgentX 是一个把"多智能体工作流"当软件一样自动构建、自动评测、自动改进的开源框架。你给一句话目标,它生成一张可执行的多智能体工作流图并跑出结果;你再给一个数据集,它用进化算法反复改这张图,让它在任务上越跑越准。本章只做顶层导航——讲清它是什么、五大块怎么拼、两条主线怎么走,以及后面 6 章按什么顺序读;任何子系统的实现细节都留给对应章节。
1. 这是什么(零基础也能懂)
一句话定义: EvoAgentX 是一个用于构建、评测、进化基于 LLM 的智能体工作流的框架——目标驱动、模块化、可自动演化。这句话的事实取自仓库 README.md「What is EvoAgentX」一节(README.md:38-39)。
它想解决的痛: 今天用 LLM 搭多智能体系统,通常是人手写一长串 prompt、手工把几个 agent 串起来(所谓"prompt chaining / manual orchestration")。这套东西又脆又难调:改一个环节要人肉重连,想知道"好不好"只能凭感觉,想变好只能继续手调。EvoAgentX 的立场是:别再手工编排了——把工作流当成"可以被持续测试和改进的软件"。
三件事,对应三个阶段,构成一个闭环:
| 阶段 | 白话 | 你要给什么 | 框架产出什么 |
|---|---|---|---|
| 构建(Autoconstruction) | 一句话变成一套多智能体流程 | 一句话目标 | 可执行的 WorkFlowGraph |
| 评测(Evaluation) | 给流程打分 | 一个数据集 + 评分标准 | 指标分数(如准确率) |
| 进化(Self-Evolution) | 照分数把流程改得更好 | 上面两样 | 一张更优的工作流/prompt |
最小使用直觉(路径一:一句话 → 结果): 下面这段来自 examples/workflow/workflow_demo.py:23-37,是"给目标 → 生成 → 执行"的完整骨架。
# 示意,提炼自 examples/workflow/workflow_demo.py:23-37
goal = "Generate html code for the Tetris game that can be played in the browser."
# ① 从一句话目标自动生成一张多智能体工作流图
wf_generator = WorkFlowGenerator(llm=llm)
workflow_graph = wf_generator.generate_workflow(goal=goal)
# ② 按图里每个任务的要求,批量把 agent 实例化出来
agent_manager = AgentManager()
agent_manager.add_agents_from_workflow(workflow_graph, llm_config=openrouter_config)
# ③ 执行整张图,拿到最终结果
workflow = WorkFlow(graph=workflow_graph, agent_manager=agent_manager, llm=llm)
result = workflow.execute(extract_output=True) # 重点看这一行:整套流程在这里跑完
最小使用直觉(路径二:工作流 + 数据集 → 更优工作流): 下面来自 examples/optimization/textgrad/math_textgrad.py:63-102,是"拿一张已有工作流,让优化器在 benchmark 上把它改好"。
# 示意,提炼自 examples/optimization/textgrad/math_textgrad.py:63-102
workflow_graph = SequentialWorkFlowGraph.from_dict(math_graph_data) # 一张已有工作流
benchmark = MATH(...) # 一个带答案的数据集
optimizer = TextGradOptimizer(graph=workflow_graph, optimize_mode="all", ...)
optimizer.evaluate(dataset=benchmark, eval_mode="test") # 优化前:先测一遍基线
optimizer.optimize(benchmark, seed=8) # 迭代改进(核心一行)
optimizer.restore_best_graph() # 回到迭代中最好的那张图
optimizer.evaluate(dataset=benchmark, eval_mode="test") # 优化后:再测,看提升
一句话类比: 把工作流想成一段"会自己做单元测试、还会照测试结果自动重构的代码"——WorkFlowGenerator 是脚手架生成器,Evaluator 是测试套件,Optimizer 是那个不知疲倦、照着分数一遍遍改代码的实习生。
2. 顶层全景(五大块怎么拼)
EvoAgentX 的代码全在 evoagentx/ 包下。可以把它切成五大纵向块 + 一层横向能力。
怎么读下面这张图: 从上到下是"越来越高层"——最底下是所有对象共享的地基,往上是执行单元,再往上是把单元编排起来的工作流引擎;左上的自动构建器负责"造图",右侧的进化优化器 + 评测负责"改图";最右一列的工具/记忆/RAG/HITL 是横切能力,插到 agent 身上让它能动手、能记忆、能被人管。
一句话目标 goal
│
┌────────────────▼─────────────────┐
│ ④ 自动构建器 workflow_generator │ TaskPlanner → AgentGenerator
│ (拆任务 → 造 agent → 连成图) │
└────────────────┬─────────────────┘
│ 产出
┌──────────▼───────────┐ ┌──────────────────────┐
│ ③ 工作流引擎 workflow/ │ │ 横向能力(插到 agent) │
│ WorkFlowGraph 存结构 │◄──────►│ tools/ 工具:动手 │
│ WorkFlowManager 调度 │ 用 │ memory/ 记忆:短/长期 │
│ Environment 记轨迹 │ │ rag/ 检索增强 │
└──────────┬───────────┘ │ hitl/ 人在环中审批 │
│ 每个任务交给 └──────────────────────┘
┌──── ──────▼───────────┐
│ ② 执行单元 agents/ actions/│
│ Agent 持有多个 Action │
│ Action = 一次结构化LLM调用│
└──────────┬───────────┘
│ 都建立在
┌──────────▼───────────┐
│ ① 地基 core/ │ BaseModule 自动注册 + 序列化
│ Message 消息 / Parser │ LLM 输出解析
└──────────────────────┘
⑤ 进化:optimizers/ ── 反复调用 evaluators/ + benchmark/ 给"图"打分并改进
(AFlow / TextGrad / MIPRO / SEW / MapElites …)
部件一句话职责(部件 | 职责 | 主要文件):
| 部件 | 职责 | 主要文件(相对克隆根) |
|---|---|---|
| ① 核心地基 | 所有对象的共同基类:自动注册、存/取(序列化)、消息、LLM 输出解析 | evoagentx/core/module.py、core/registry.py、core/message.py、models/base_model.py |
| ② Agent / Action | 执行单元:Agent 持有若干 Action,Action 把一次 LLM 调用变成结构化输出 | evoagentx/agents/agent.py、agents/customize_agent.py、actions/action.py |
| ③ 工作流引擎 | 存工作流结构(图)、调度下一个任务/动作、记录执行轨迹 | evoagentx/workflow/workflow_graph.py、workflow/workflow.py、workflow/workflow_manager.py、workflow/environment.py |
| ④ 自动构建器 | 从一句话目标拆子任务、造 agent、连成可运行工作流 | evoagentx/workflow/workflow_generator.py、agents/task_planner.py、agents/agent_generator.py |
| ⑤ 进化优化器 + 评测 | 在数据集上给工作流打分,并用进化算法迭代改进 | evoagentx/optimizers/*.py、evaluators/evaluator.py、benchmark/benchmark.py |
| 横向:工具 | 让 agent 真正动手:代码执行、搜索、文件、数据库、浏览器… | evoagentx/tools/tool.py(Tool/Toolkit)及同目录各 *_tool.py |
| 横向:记忆 | 短期与长期记忆 | evoagentx/memory/long_term_memory.py、memory/memory_manager.py |
| 横向:RAG | 检索增强: 分块、向量化、检索 | evoagentx/rag/rag.py(RAGEngine) |
| 横向:HITL | 人在环中:执行前审批、收集人类输入 | evoagentx/hitl/approval_manager.py(HITLManager) |
一个容易忽略但很关键的事实:这五块不是各写各的——它们几乎全部继承自同一个 BaseModule(core/module.py:51)。工作流图、agent、action、优化器都能用同一套 save_module / from_dict 存取,也都在导入时自动登记进 MODULE_REGISTRY(core/registry.py:21)。这就是"一张工作流能被存成 JSON、被优化器读进来改、再存回去"能成立的底层原因(细节见 01-core-foundation.md)。
3. 主线走一遍(高层,不进代码)
路径一:一句话目标 → 可执行工作流
高层四步,对应第 2 节图里 ④→③→②:
goal(一句话)
│ WorkFlowGenerator.generate_workflow(goal) workflow/workflow_generator.py:100
▼
① TaskPlanner 把目标拆成带依赖的子任务(plan)
│
② build_workflow_from_plan 把 plan 连成 WorkFlowGraph workflow/workflow_generator.py:201
│
③ AgentGenerator 给每个子任务生成/指派一个 agent
▼
可执行的 WorkFlowGraph
│ AgentManager.add_agents_from_workflow(...) agents/agent_manager.py:204
│ WorkFlow.execute(...) workflow/workflow.py:96
▼
WorkFlowManager 反复"挑下一个就绪任务 → 派 agent 执行 → 把结果写进 Environment",直到图跑完
▼
最终结果 WorkflowResult
真源码锚点:生成入口 WorkFlowGenerator.generate_workflow(workflow/workflow_generator.py:100)内部依次调 TaskPlanner(拆解)、build_workflow_from_plan(建图,:201)、generate_agents(造 agent);执行侧 WorkFlow.execute(workflow/workflow.py:96)驱动 WorkFlowManager.schedule_next_task(workflow/workflow_manager.py:431)一轮轮往前推。展开见 04-auto-construction.md 与 03-workflow-execution.md。
路径二:工作流 + 数据集 → 迭代改进
这条是 EvoAgentX 名字里"Evo"的所在。给定一张工作流和一个带标准答案的 benchmark,优化器在"评测 → 改 → 再评测"里打转:
现有 WorkFlowGraph + Benchmark(带答案的数据集)
│
▼
Optimizer.optimize(dataset) optimizers/optimizer.py:23(抽象接口)
│
├─(loop)→ step():对图/prompt 做一次改动(不同算法改法不同)
│ AFlow=蒙特卡洛搜图 TextGrad=文本梯度改 prompt
│ MIPRO=贝叶斯调指令+示例 SEW=进化式重写
│
└─(loop)→ evaluate():用 Evaluator 在 Benchmark 上跑一遍打分
optimizers/optimizer.py:35 → evaluators/evaluator.py:74
▼
保留分最高的那张图(restore_best_graph)
真源码锚点:所有优化器都实现同一个抽象基类 Optimizer(optimizers/optimizer.py:12)的 optimize(:23)/step(:29)/evaluate(:35);评分统一走 Evaluator.evaluate(evaluators/evaluator.py:74)。展开见 05-self-evolution-optimizers.md。