用进化算法优化 LLM Agent 的工具调用
更新时间:2026/05/17
文章定位:学术风格技术博客 + 研究方案草案。
关键词:tool use optimization, evolutionary algorithm, genetic algorithm, Pareto selection, coding agent, causal attribution
核心判断:遗传算法并不是只能优化连续参数,也可以优化 LLM agent 的离散控制策略。对于 tool use,真正适合进化的对象不是模型权重,而是 planner、tool router、tool description、retry policy、verifier 和 skill bundle 这些外层可控部件。
现有研究已经从 prompt evolution 走向 tool-use policy evolution 和 skill evolution,但仍缺少对长链路工具轨迹的因果归因、状态安全和跨 harness 泛化验证。
一、为什么 tool use optimization 适合进化算法
Tool use 的优化空间天然是离散、组合和非可微的。一个 agent 是否成功,取决于工具选择、参数生成、执行顺序、错误恢复、状态保存和最终综合。这里很难直接对 closed-source LLM 做梯度更新,也很难用单一奖励稳定训练。相比之下,遗传算法和更宽泛的 evolutionary optimization 有三个优势。
第一,它不要求访问模型权重。对于 Claude Code、Codex-like agent、DeepSeek/Qwen/GLM 接入 harness 这类系统,工程团队通常只能改 prompt、tool schema、adapter、memory、verifier 和 workflow。进化算法正好可以把这些外层构件当作 genome。
第二,它适合多目标优化。Tool use 不能只看 pass rate,还要看成本、延迟、工具调用次数、无效调用率、状态正确性和安全副作用。Pareto selection 比单一分数更适合保留不同权衡下的候选策略。
第三,它可以利用失败轨迹。长链路 agent 的失败通常带有可诊断结构:选错工具、参数错、漏验证、状态漂移、重复调用或错误成功。进化算法可以把这些失败转化为 targeted mutation,而不是盲目改写整个系统提示词。
因此,本文讨论的“遗传算法做 tool use optimization”,不是传统意义上对神经网络参数做遗传搜索,而是对 agent 外层控制策略 做进化。
二、相关研究:从 prompt 到 tool policy,再到 skill bundle
目前可以把相关研究分成五条线。
| 方向 | 代表工作 | 优化对象 | 与 tool use 的关系 | 主要局限 |
|---|---|---|---|---|
| Tool-use policy evolution | EvoTool | Planner、Selector、Caller、Synthesizer | 最直接面向工具调用策略,使用 blame-aware mutation 和 diversity-aware selection | 模块归因仍偏诊断式,真实 workspace、副作用和长期状态覆盖不足 |
| Prompt evolution | GEPA, SPRIG | system prompt、module prompt、文本规则 | 可用于 planner prompt、router prompt、verifier prompt 的优化 | 不是 tool-use native,容易只优化语言层而忽略状态和副作用 |
| Context optimization | ACL 2025 Joint Optimization | agent instruction 与 tool description | 说明工具描述和 agent 指令的不完整会造成计算开销,并可通过联合优化提升效率 | 主要解决上下文表达效率,不等于完整工具轨迹优化 |
| Skill evolution | EvoSkill, CoEvoSkills | 可复用 skill folder、workflow、multi-file artifacts | 适合 coding agent,把失败经验沉淀成可复用技能 | skill 会膨胀、冲突,并重新引入 skill selection 问题 |
| Multi-objective skill search | SkillMOO | skill bundle | 用 NSGA-II survivor selection 同时优化成功率、成本和运行时间 | 面向软件工程 skill bundle,尚未充分覆盖通用 tool policy 与安全副作用 |
这些工作共同说明一个趋势:agent 优化正在从“改一段 prompt”转向“进化一个可执行系统”。EvoTool 是最接近 tool-use policy optimization 的工作。它把工具策略拆成 Planner、Selector、Caller 和 Synthesizer,并用轨迹诊断做 blame attribution,只 mutation 被归因的模块。GEPA 则更一般,它将 compound AI system 中的 prompt 视作可进化文本,利用轨迹、工具调用和工具输出做自然语言反思,再通过 Pareto frontier 合并互补经验。ACL 2025 的 joint optimization 进一步说明,工具描述本身也是优化对象,不完整 context 会导致冗余工具调用和额外计算开销。EvoSkill、CoEvoSkills 和 SkillMOO 则把优化对象从单条 prompt 扩展到 skill 级别。
三、现有研究要解决的科学问题
1. 长链路 credit assignment
Tool use 的失败通常具有延迟反馈。一个 coding agent 最终没有通过测试,可能不是最后的 answer synthesis 出错,而是 40 步之前选错了检索路径、覆盖了文件、漏跑了测试,或者误解了工具返回值。EvoTool 已经将 delayed supervision 和 long-horizon credit assignment 作为核心挑战,但现有 blame attribution 多数仍是基于诊断轨迹的解释式归因。
更严格的科学问题是:
如何从长工具轨迹中识别真正导致失败的最小因果子轨迹,而不是只生成一个合理的失败解释?
这要求评测系统不只保存最终答案,还要保存工具调用、状态变化、失败节点和可重放环境。
2. Agent genome 的表示问题
传统遗传算法有明确 genome,例如 bit string、树结构或参数向量。LLM agent 的 genome 更复杂。它可能包括 planner prompt、tool router prompt、tool descriptions、few-shot examples、权限矩阵、重试策略、并行策略、verifier 规则、memory compression 和 skill bundles。
现有工作通常只优化其中一个层次。GEPA 优化 prompt,ACL joint optimization 优化 instruction 和 tool description,EvoSkill 优化 skill,EvoTool 优化四个 tool-use policy 模块。真正的问题是:
什么样的 agent genome 既足够表达 tool-use 行为,又能被 mutation、selection 和 safety constraint 稳定操作?
如果 genome 太细,搜索空间爆炸;如果 genome 太粗,mutation 会破坏已有能力。
3. 多目标 fitness 的可验证性
Tool use optimization 不能只最大化任务成功率。对于生产 agent,更重要的是 safe success rate。一个 agent 如果通过减少验证步骤来提高速度,或通过扩大权限来提高完成率,短期 benchmark 可能变好,但系统风险上升。
需要同时优化的目标包括:
- 成功率
- 工具调用次数
- 无效调用率
- 成本和延迟
- 状态变化正确性
- 错误恢复率
- 安全副作用
- 跨任务泛化
SkillMOO 用多目标优化处理成功率、成本和 runtime,是一个重要方向。但 tool use 还需要把安全和状态正确性从 soft metric 提升为 hard constraint。
4. 泛化与 benchmark overfitting
进化算法很容易对固定任务集过拟合。一个 prompt 在 StableToolBench 上减少调用次数,不代表它在真实 coding agent 中也更可靠。一个 skill 在 SealQA 上有效,也不一定能迁移到 SWE-bench 或 Terminal-Bench。EvoSkill 报告了零样本迁移增益,这很有价值,但它也说明 transferability 必须被单独评估,而不是从训练集性能中推断。
真正需要回答的问题是:
进化出来的 tool-use policy 是否能跨任务、跨工具集、跨模型和跨 harness 保持收益?
5. 自我改进的安全边界
如果 agent 可以进化自己的工具策略,它可能会学会绕过原本用于保护系统的步骤。例如减少确认、跳过 verifier、扩大工具权限,或把风险写操作伪装成普通调用。现有 self-evolving agent 工作多数强调性能改进,但对“哪些策略可以被 mutation,哪些策略必须冻结”讨论不足。
这不是工程细节,而是科学问题:tool-use optimizer 本身也需要被约束。
四、现有方案的缺陷
EvoTool 的贡献在于把 tool-use policy 拆成模块,并引入 blame-aware mutation。但它仍面临三个限制。第一,Planner、Selector、Caller、Synthesizer 的四分法对 API agent 足够清晰,对 coding agent 的真实边界还不够细。文件系统、shell、浏览器、git、CI、部署和权限系统会引入更多状态与副作用。第二,trajectory-grounded blame attribution 可能把相关性当因果性。第三,目前评测仍主要依赖 benchmark,缺少千次级调用、workspace dirty state、权限拒绝、回滚和并发写冲突的系统测试。
GEPA 和 SPRIG 的缺陷则在于优化对象偏文本。它们可以有效改进 prompt,但 prompt 改进不等于工具轨迹安全。一个更会写计划的 agent,仍可能在工具选择、状态保存和副作用控制上失败。
ACL joint optimization 的价值在于指出 context 不完整会带来工具使用低效,并联合优化 agent instruction 与 tool description。但减少工具调用次数不一定总是正确目标。在 coding agent 和企业工作流中,某些验证调用、dry-run 调用和权限检查是必要冗余。盲目压缩工具调用数可能牺牲 safe success rate。
Skill evolution 方向更接近真实 coding agent,但也有自己的问题。Skill 会增长、重叠和冲突。一个 skill bundle 变强后,系统仍需要回答“什么时候触发这个 skill”。如果没有强 verifier,坏 skill 也可能因为偶然 benchmark gain 被保留下来。
五、一个可能的新方案:Causal-Pareto Tool Evolution
我建议把新方案定义为 Causal-Pareto Tool Evolution, CPTE。它的目标不是进化模型,也不是单独进化 prompt,而是进化一套带安全约束的工具调用控制策略。
1. Genome
一个候选 agent policy 可以表示为:
G = {
planner_policy,
tool_router_policy,
tool_description_patch,
few_shot_tool_examples,
permission_matrix,
retry_and_recovery_policy,
parallelization_policy,
verifier_policy,
memory_checkpoint_policy,
skill_bundle
}
其中 permission_matrix、高风险写操作 gate 和安全 invariant 不允许自由 mutation。它们只能在 sandbox 中测试,或只能被收紧,不能被优化器直接放宽。
2. Trace
每次任务执行必须保存完整事件流:
user_goal plan tool_call_requested tool_call_validated tool_call_executed tool_result state_delta verifier_result final_answer human_or_test_verdict
优化对象不是最后一句回答,而是整条工具轨迹。这一点对长链路 agent 尤其关键。
3. Causal attribution
CPTE 不只依赖 LLM 自我反思,而是引入 counterfactual replay。基本思想是固定轨迹的一部分,只替换一个模块,看失败是否被消除:
- 固定 planner,替换 selector,检验工具选择是否为主要失败源。
- 固定 selector,替换 caller,检验参数生成是否为主要失败源。
- 固定工具轨迹,只替换 synthesizer,检验结果综合是否出错。
- 固定执行策略,只替换 verifier,检验错误是否本可被提前拦截。
这样,blame attribution 从“自然语言解释”变成“反事实证据支持的归因”。它不能完全解决因果识别,但能显著降低把失败错归到无关模块的概率。
4. Mutation
不同失败类型触发不同 mutation:
| 失败类型 | mutation 对象 | 验证方式 |
|---|---|---|
| 工具选错 | tool router policy, tool description patch | 候选工具 recall 与 precision |
| 参数错误 | caller prompt, schema examples | schema validity + semantic validator |
| 重复调用 | retry policy, memory checkpoint policy | redundant call ratio |
| 漏验证 | verifier policy | state invariant coverage |
| 并行冲突 | parallelization policy | write-lock violation rate |
| 状态漂移 | memory checkpoint policy, result-id protocol | checkpoint survival |
| 错误成功 | safety invariant, verifier rules | safe success rate |
5. Selection
CPTE 使用 Pareto selection,而不是单一分数:
maximize: safe_success_rate state_delta_correctness recovery_rate cross_task_transfer minimize: invalid_tool_call_rate redundant_call_ratio latency token_cost risky_write_count
任何违反 hard safety constraints 的候选直接淘汰,即使 pass rate 更高。
6. Deployment
部署上应采用 champion/challenger,而不是直接替换:
- Champion 是当前稳定策略。
- Challenger 是进化产生的新策略。
- Challenger 先跑 offline replay。
- 再进入 shadow mode,只观察,不执行高风险写操作。
- 通过后进入 canary。
- 出现 safety regression 自动回滚。
六、可检验的研究假设
如果把 CPTE 写成论文,我建议围绕一个核心假设展开:
在长链路工具调用任务中,反事实轨迹归因比自然语言自反思更能指导 tool-use policy evolution,并能在相同预算下提高 safe success rate。
实验设计可以包括四组:
- 原始 agent。
- GEPA-style prompt evolution。
- EvoTool-style blame-aware mutation。
- CPTE:counterfactual blame + Pareto tool-policy evolution + safety constraints。
评测不应只使用单一 benchmark。可以分层使用 BFCL、ToolSandbox、tau-bench、Terminal-Bench / SWE-bench 子集,以及自建 high-dimensional tool trace benchmark。核心指标包括 safe success rate、invalid tool call rate、redundant call ratio、recovery rate、state correctness、cost、latency 和 cross-model transfer。
七、创新点总结
1. 从 prompt evolution 到 trajectory evolution
优化对象从单段文本扩展为完整工具轨迹和控制策略,包括路由、调用、验证、状态和恢复。
2. 反事实归因
用可重放轨迹检验失败归因,减少仅靠自然语言解释带来的误归因。
3. 安全硬约束
把权限越界、不可逆写操作和副作用违规设为淘汰条件,而不是普通 fitness 项。
4. 面向真实 coding agent
显式处理 workspace diff、checkpoint、artifact、shell output、test result 和 verifier state。
5. 多目标 Pareto 选择
同时优化成功率、成本、延迟、冗余调用、恢复能力和安全性,避免单一 pass rate 过拟合。
6. 跨模型和 harness
优化外层 agent policy,而不是模型权重,因此可迁移到 Claude Code、Codex-like agent 和 OpenAI-compatible provider。
结论
遗传算法用于 tool use optimization 并不是一个边缘想法。它正在以几种形式进入 agent 研究:GEPA 优化 prompt,ACL joint optimization 优化 instruction 与 tool description,EvoTool 优化模块化工具策略,EvoSkill 和 CoEvoSkills 优化可复用 skill,SkillMOO 用多目标进化优化软件工程 skill bundle。
但现有方案仍主要停留在文本、模块或 skill 层面。长链路工具调用真正需要的是轨迹级优化:保存完整工具事件,识别因果失败源,局部 mutation,使用 Pareto selection,并把安全约束置于成功率之上。
因此,下一步值得做的不是再发明一个更长的 prompt optimizer,而是构建一个可以重放、归因、进化和验证的 tool-use policy laboratory。只有在这种实验系统中,tool use optimization 才能从经验调参走向可检验的科学问题。