Agent能自己“复盘”和“进化”,这个开源框架牛了!

发布于 2025-10-10 07:04
浏览
0收藏

我们一起分享 Agent Infra,一个好的 Infra 已经可以让Agent自动进化了。

然后,我去搜索了一下相关的开源框架,然后还真找到了一个。 仔细研究了一下原理,今天给家人们分享一个自我进化的智能体,到底是怎么做出来的?

Agent能自己“复盘”和“进化”,这个开源框架牛了!-AI.x社区

什么是自进化AI?(Self-Evolving AI)

传统的Agent工作流,本质上是一个固定的程序。我们预先设定好Prompt、工具和流程,然后期望它能在特定任务上表现良好。

自进化AI的核心思想,是把Agent从一个固定的工具,变成一个动态的生命体。

它拥有一个核心的反馈循环:执行 -> 评估 -> 进化

简单来说,它不仅会执行,还会复盘:

像普通Agent一样,完成你给定的任务;

完成后,一个内置的评估器会根据预设的标准(比如代码生成的准确率、问答的F1分数等)给它的表现打分。

如果分数不理想,一个优化器就会启动,分析问题出在哪里,然后自动修改它自己的Prompt、甚至是整个工作流的结构,生成一个进化版的自己,然后再去尝试,直到性能达标。

那效果怎么样呢?大佬们搞了个实验:他们把社区里两个已有的开源多智能体框架(Open Deep Research 和 OWL)拿过来,只用EvoAgentX的优化器去优化它们的Prompt,然后放到更难的GAIA基准上测试。

结果是,仅通过自动化的Prompt优化,这两个系统的性能都得到了明显的提升。

Agent能自己“复盘”和“进化”,这个开源框架牛了!-AI.x社区

到底如何做到自我进化?

进化的核心是几个优化器:

SEW优化器、 TextGrad优化器、 AFlow优化器、MiPro优化器:多提示优化器

接下来我尝试用尽量尽量简单的方式来讲清楚他们的差异和原理。 当然再往下滑会有具体的代码原理示例。

TextGrad

用基于梯度的方法来优化Prompt。

在一次任务执行后,它会让大模型反馈出输入指令中每个部分对最终结果的影响力权重。

  • 如果某个词的权重是负的,说明它很可能误导了模型。
  • 如果某个词的权重是正的,说明它对得到正确答案至关重要。

然后针对性地进行修改,不断迭代,直到找到一个最优的表达。

SEW

如果说TextGrad是优化Prompt,那SEW就是优化Workflow。

SEW 模仿进化论,物竞天择,适者生存。

比如说,一个工作流( Agent A -> Agent B -> Agent C)。

然后,对这个序列进行变异操作,例如:

  • 改变顺序:试试 Agent A -> Agent C -> Agent B 会不会更好?
  • 增加成员:在A和B之间插入一个新的 Agent D 会不会更好?
  • 删除成员:去掉 Agent C 会不会更高效?
  • 替换成员:把 Agent B 换成能力更强的 Agent B_plus 会不会更好?

经过一轮轮的变异和优胜劣汰的评估,SEW 最终会产出一个全新的、结构上可能完全不同的工作流定义。

AFlow

相比于SEW,AFlow 的思路更聚焦,它接受我们定义的工作流结构,但认为在执行这个流程时,可以有更聪明的策略。

AFlow 把工作流的执行过程看作一个决策树。在每一步,它都会面临一个选择:接下来应该调用哪个Agent?

它使用蒙特卡洛树搜索,来预演不同的执行路径,从而找到通往最终目标的最优路径。

例如,一个复杂任务可能不需要严格按照 A -> B -> C 的顺序,也许 A -> C 就直接解决了,或者 A -> B -> A 这样回头调用一次A效率更高。

AFlow 就是要找出这个最高效的执行路径。

MIPRO

这是一种与模型无关的迭代提示优化方法,它不关心模型内部是怎么想的,只看最终输出的结果,然后通过黑箱评估和自适应重排序来不断猜出更好的提示。

不断摇奖,拼最好的一个prompt。

以 SEW 优化器为例,简单看看具体逻辑

应用流程如下,类似于Pytorch训练模型一样:

from evoagentx.optimizers import SEWOptimizer
from evoagentx.benchmark import Benchmark
 
# 创建优化器
optimizer = SEWOptimizer(
    graph=workflow_graph,
    evaluator=evaluator,
    max_steps=10
)
 
# 开始自动进化
optimizer.optimize(dataset=benchmark_dataset)

进一步内部来看,评估 -> 新的结构/提示词 -> 重新评估

# 1. 评估当前性能
metrics = self.evaluate(dataset)
 
# 2. 生成新的结构或提示词
if self.optimize_mode in ["all", "structure"]:
    graph = self._wfg_structure_optimization_step(graph)
if self.optimize_mode in ["all", "prompt"]:
    graph = self._wfg_prompt_optimization_step(graph)
 
# 3. 重新评估并选择最优
new_metrics = self.evaluate(dataset, graph=graph)
if new_metrics["score"] > best_score:
    best_graph = graph

在进一步,其实是通过LLM理解整个工作流的目标和结构,然后为每个任务生成更精确、更有效的提示词。

# 遍历工作流中的每个任务
    for i, task in enumerate(graph_info["tasks"]):
        original_prompt = task["prompt"]  # 获取原始提示词
        
        # 构建优化提示词,包含:
        # 1. 任务描述
        # 2. 整个工作流步骤
        # 3. 当前任务的原始指令
        optimization_prompt = "Task Description: " + task_description + "\n\nWorkflow Steps:\n" + graph_repr + f"\n\nINSTRUCTION for the {i+1}-th task:\n\"\"\"\n" + original_prompt + "\n\"\"\""
        
        # 添加优化指令
        optimization_prompt += f"\n\nGiven the above information, please refine the instruction for the {i+1}-th task.\n"
        optimization_prompt += r"Note that you should always use bracket (e.g. `{input_name}`) to wrap the inputs of the tasks in your refined instruction.\n"
        optimization_prompt += "Only output the refined instruction and DON'T include any other text!"
        
        # 使用提示词繁殖器生成新的优化提示词
        new_prompt = self._prompt_breeder.generate_prompt(task_descriptinotallow=task_description, prompt=optimization_prompt, order=self.order)
        
        # 更新任务提示词
        graph_info["tasks"][i]["prompt"] = new_prompt

最后

今天的内容有一点点偏技术,自动进化的本质是,让我们可以突破静态的 prompt 或 Workflow,转而进入一个自我进化的智能体生态。

在这个生态中,AI 智能体能够被构建、评测,并通过迭代反馈循环不断优化——就像软件需要持续测试和改进一样。

EvoAgentX 是一个开源框架,项目在这里:https://github.com/EvoAgentX/EvoAgentX/blob/main/README-zh.md

本文转载自​​​​探索AGI​​​​,作者:猕猴桃

收藏
回复
举报
回复
相关推荐