






















自进化 (Self-evolution) 是 Agent Harness 的核心模块,拥有自进化能力后 Agent 才能在长期的任务交互中不断成长,总结和改进自己的技能、记录用户的反馈和偏好,从被动应答升级为能够主动复盘和自我成长的 Agent。本文以 CowAgent 开源项目为例,介绍 Agent 框架中五层自进化机制的架构设计和工程实现。
要实现 Agent 的自我进化,不只是让它记住信息,更要能通过持续的反馈改进和修复自己。自进化机制根据深度不同可以划分为:记录信息、保留信息、主动行动、整理沉淀、自我重构,不同深度需要改进的对象、触发的时机和影响范围都不同。
在具体实现上,有两个关键点要考虑: "什么时候触发进化" 和 "要改进的是什么"。在 CowAgent 中,完整的自进化机制由五个层级共同构成,分别对应不同的进化深度,包括:基础的记忆和知识维护、上下文智能总结、会话后主动复盘、梦境记忆整理、源码自更新。整体架构如下:

| 层级 | 改进内容 | 触发时机 | 进化深度 |
|---|---|---|---|
| 基础记忆和知识维护 | 记忆 / 知识 / 提示词 | 每次对话中 | 记录 |
| 上下文智能总结 | 记忆 | 上下文超限时 | 保留 |
| 会话后主动复盘 | 技能 / 记忆 / 提示词 / 任务 | 会话空闲后 | 行动 |
| 梦境记忆整理 | 长期记忆 | 每天定时 | 沉淀 |
| 源代码自更新 | 代码 | 被动/主动触发 | 自我重构 |
最基础的一层自进化其实发生在每一次的对话过程中,Agent 通过大模型的工具决策能力以及系统提示词的引导,判断对话中是否包含有价值的信息,并通过内置工具把偏好、决策、事实、经验教训等写进长期记忆,把可复用的知识写进知识库,把涉及到 Agent 设定及运行规则等内容写入提示词文件。
这三类信息维护的对象和时机各不相同:
MEMORY.md)存放用户偏好、关键决策这类长期有效的事实,会被注入到每次对话的系统提示词里,所以必须保持精炼;天级记忆(memory/YYYY-MM-DD.md)按天记录关键事件和对话摘要,只在 Agent 用记忆检索工具时才加载。
上图示例:用户在一次提问中表达了偏好并让 Agent 研究一个新概念,Agent 在回答的同时主动把偏好写进记忆、把整理后的资料沉淀进知识库
上一节关于长期记忆的维护解决的是如何记住关键信息,而这一节主要解决的是 Agent 在进化中如何不丢失信息。上下文是短期记忆,项目中提供了可配置的轮次和 Token 长度限制,当超限时不能简单裁剪掉旧消息,而是要把其中的重要信息提炼总结后写入天级记忆中。整个智能压缩分四步处理:

会话后复盘 是自进化中主动性最强、也是最核心的部分,当一段对话告一段落、进入空闲时,Agent 会主动回顾整个会话内容,把对话中暴露的问题修复、将可复用流程固化为技能、把没做完的任务接着完成等。
首先来看在复盘中主要做哪些改进:

上图示例:Agent 在会话后复盘中发现可复用的工作流程,创建为一个新技能,并主动通知用户
在改进中有两个关键的设计取舍:
主动复盘会在会话结束、空闲一段时间后触发,且需要积累一定对话轮次才值得复盘,简单说就是「用户不再继续聊了,且这段对话有足够的信息量」,两个条件都满足才触发一次。
在项目中,可以通过 Web 控制台的开关一键开启和关闭自进化开关,另外触发空闲时间 (默认10分钟) 和 会话轮次阈值 (默认6轮会话) 也可以通过配置文件进行进一步调整。

让 Agent 动手改自己,一个最重要的问题就是 "会不会改坏、会不会打扰用户"。一个支持自主修改的系统,最容易出现的几个问题包括:1. 把错误的信息写进记忆或技能等;2. 执行命令时越权改到系统内置的模块;3. 修改完无法追溯和回退。
所以这一层的设计就是围绕 可追溯、可回滚、隔离执行 的安全可控目标来实现:

梦境记忆整理 (Deep Dream) 由每天夜间的定时任务 (默认 23:55) 主动完成。首先会将当天各会话的上下文 (短期记忆) 整理写进天级记忆,随后执行一次记忆蒸馏,读取当前的核心记忆和当天的天级记忆,交由模型进行去重、合并相近条目、修剪、提炼新信息并替换旧信息,输出一份精炼后的核心记忆,同时会生成一篇叙事风格的梦境日记,记录这次整理发现了什么、合并和清理了什么。
梦境整理是每天运行的全局视角的自进化,对当天所有会话的一次通盘梳理,解决的正是随着时间推移,长期记忆最容易出的两个问题:不断膨胀 和 自相矛盾。整个过程遵循几条核心规则:

为了让记忆整理更安全可控,在实现上做了几层保护:
除了每天定时跑,也支持手动触发指定整理最近 N 天的记忆,所有的梦境整理内容会以日记的形式持久化保存在工作空间中。
源码自更新指的是 Agent 在运行过程中能够实时修改自身代码并重启,以解决无法通过外置技能、工具等解决的问题,由于存在一定不可控性,这里更多做开放性讨论。
出于安全性考虑,目前 CowAgent 项目没有把源码自更新作为内置开放的功能,但用户可通过指定要求来实现该效果。项目默认就是源码安装方式,Agent 天然有访问源代码的权限,只需将项目代码路径告诉 Agent 并给出明确改动需求即可让其修改自身代码并重启,如果想要让 Agent 能够更主动地修改代码,还可以封装为 Skill 或 Prompt 作为内置能力。
修改代码是修改 Agent 能力本身,不像变更记忆、技能等数据,影响面更大。源码自更新存在两个难点:
为了解决这两个问题,项目中实现了一个 cow self-restart 的 CLI 命令,专门用于 Agent 的自重启。首先会对代码进行运行自检,出现任何依赖导入或解释器错误都会中止重启;自检通过后则会启动一个脱离于当前进程树的接力进程,在这个进程中对旧的进程进行关闭,并启动新的进程,实现优雅自重启。
而在开源项目场景中,Agent 修改自身代码其实还有另一个问题,就是版本冲突。当本地修改代码后,必然会相对主干分支形成分叉,后续官方版本更新后,代码拉取就有可能存在冲突,这个时候就需要依赖人工或者 Agent 协助进行解决了。

上图示例:Agent 自行定位到自身代码问题并修改,再通过命令完成自检与重启
总结一下,我们通过不断递进的五层设计让 Agent 学会主动调整自己的提示词、记忆、知识、技能、甚至是源码,回顾整体设计思路,难点其实不是实现修改自己的能力,而是让它能够改得克制、改得可控。目标其实很朴素:真正实现一个越用越懂你、越用越少犯错的 Agent,而不是每天重新认识你一遍的 Agent。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。