整体设计要实现 Agent 的自我进化不只是让它记住信息更要能通过持续的反馈改进和修复自己。自进化机制根据深度不同可以划分为记录信息、保留信息、主动行动、整理沉淀、自我重构不同深度需要改进的对象、触发的时机和影响范围都不同。在具体实现上有两个关键点要考虑什么时候触发进化和要改进的是什么。在 CowAgent 中完整的自进化机制由五个层级共同构成分别对应不同的进化深度包括基础的记忆和知识维护、上下文智能总结、会话后主动复盘、梦境记忆整理、源码自更新。整体架构如下层级改进内容触发时机进化深度基础记忆和知识维护记忆 / 知识 / 提示词每次对话中记录上下文智能总结记忆上下文超限时保留会话后主动复盘技能 / 记忆 / 提示词 / 任务会话空闲后行动梦境记忆整理长期记忆每天定时沉淀源代码自更新代码被动/主动触发自我重构一、基础记忆和知识维护最基础的一层自进化其实发生在每一次的对话过程中Agent 通过大模型的工具决策能力以及系统提示词的引导判断对话中是否包含有价值的信息并通过内置工具把偏好、决策、事实、经验教训等写进长期记忆把可复用的知识写进知识库把涉及到 Agent 设定及运行规则等内容写入提示词文件。这三类信息维护的对象和时机各不相同记忆持久化在工作空间的文件中又分核心记忆和天级记忆。核心记忆MEMORY.md存放用户偏好、关键决策这类长期有效的事实会被注入到每次对话的系统提示词里所以必须保持精炼天级记忆memory/YYYY-MM-DD.md按天记录关键事件和对话摘要只在 Agent 用记忆检索工具时才加载。知识库以 Markdown 源文件存于工作空间、向量化数据存于数据库按主题组织、页面间交叉引用成知识图谱。当对话中发生搜索学习、深度研究等任务时Agent 会主动把整理后的知识沉淀进来。提示词人格设定AGENT.md、规则RULE.md、用户信息USER.md等也支持在对话中被实时修改它们都会加载进系统提示词让 Agent 根据反馈持续调整自身设定贴合用户习惯。上图示例用户在一次提问中表达了偏好并让 Agent 研究一个新概念Agent 在回答的同时主动把偏好写进记忆、把整理后的资料沉淀进知识库二、上下文智能总结上一节关于长期记忆的维护解决的是如何记住关键信息而这一节主要解决的是 Agent 在进化中如何不丢失信息。上下文是短期记忆项目中提供了可配置的轮次和 Token 长度限制当超限时不能简单裁剪掉旧消息而是要把其中的重要信息提炼总结后写入天级记忆中。整个智能压缩分四步处理截断超长工具结果第一道也是最廉价的一道。历史轮次里单个工具结果如一次返回上万行的检索超过阈值时只保留首尾两段加一句省略说明正在进行的当前轮次不动。这一步纯字符串处理、不调模型往往就能挡住大部分增长。按完整轮次裁剪轮次超限时以一轮完整对话为最小单位裁掉最早的一半而不是逐条删消息——这样能保证一次工具调用的入参和执行结果始终成对保留不会给模型留下调用了工具却没有结果的残缺上下文。被裁的内容并不是丢弃而是由 LLM 进行整理、提炼、总结一方面写入当天的天级记忆持久化另一方面注入回保留消息的开头让模型在丢掉原始细节后仍能接住前文的来龙去脉。按 Token 压缩当裁完轮次仍超出 Token 限制时再做进一步更精细化的裁剪当轮次本就不多时会对每一轮做文本压缩只留用户的首条提问和 Agent 的末条回复剥掉中间的工具调用链当轮次较多时则继续裁剪并总结更早的前一半对话。溢出兜底当模型 API 直接抛出上下文溢出同样会先把当前对话总结进记忆再做一次更激进的截断这是最后一道保险。三、会话后主动复盘会话后复盘是自进化中主动性最强、也是最核心的部分当一段对话告一段落、进入空闲时Agent 会主动回顾整个会话内容把对话中暴露的问题修复、将可复用流程固化为技能、把没做完的任务接着完成等。3.1 进化内容首先来看在复盘中主要做哪些改进优化和创建技能当某个 Skill 在用的时候暴露了问题例如配置错误、缺少步骤、内容过时等会直接修改技能文件让问题不再复发如果在对话中跑出了一套可复用的流程则会主动固化成一个新技能在下次类似任务时可以更稳定地执行。这一步让 Agent 从「技能的使用者」变成「技能的维护者」。收尾未完成任务把承诺了用户但没做完、或因临时性故障 (例如网络波动、环境问题等) 中断的任务进行 review 并再次尝试完成。补齐记忆 / 知识 / 提示词作为查缺补漏主对话本身就会主动写入记忆和知识库所以这里只作为兜底。上图示例Agent 在会话后复盘中发现可复用的工作流程创建为一个新技能并主动通知用户在改进中有两个关键的设计取舍技能和未完成任务是主要价值记忆、知识、提示词只作为查缺补漏因为这部分已有其他多层机制覆盖无需太多重复关注。修复源头而不是只记录问题如果问题根因在技能本身正确的动作是改技能而不只是在记忆里记一句「技能 X 有个错」这是目前很多 Agent 项目都存在的问题。记录症状不能阻止复发只有优化源头才能根除问题。3.2 触发时机主动复盘会在会话结束、空闲一段时间后触发且需要积累一定对话轮次才值得复盘简单说就是「用户不再继续聊了且这段对话有足够的信息量」两个条件都满足才触发一次。在项目中可以通过 Web 控制台的开关一键开启和关闭自进化开关另外触发空闲时间 (默认10分钟) 和 会话轮次阈值 (默认6轮会话) 也可以通过配置文件进行进一步调整。3.3 安全可控让 Agent 动手改自己一个最重要的问题就是 会不会改坏、会不会打扰用户。一个支持自主修改的系统最容易出现的几个问题包括1. 把错误的信息写进记忆或技能等2. 执行命令时越权改到系统内置的模块3. 修改完无法追溯和回退。所以这一层的设计就是围绕可追溯、可回滚、隔离执行的安全可控目标来实现隔离执行每次的复盘是一个独立的异步临时任务使用同一个主模型但可用工具集大幅收紧只能读上下文、改记忆与技能不污染、也不会拖慢主对话同时项目自带的内置技能会在代码层面进行保护。变更可回滚在 Agent 改动前会自动备份相关文件用户如果不认同某次改动直接在对话发送消息 (例如 把刚才的改动撤销) 即可还原工作空间。变更可追溯Agent 会将每一次变更记录持久化存储于空间中在「Web 控制台-记忆-自主进化」页面中可以追踪具体信息。未变更则不打扰复盘后会核对是否有实际的改动如果有变更则会主动将内容推送给用户否则全程静默、用户无感知。四、梦境记忆整理梦境记忆整理 (Deep Dream) 由每天夜间的定时任务 (默认 23:55) 主动完成。首先会将当天各会话的上下文 (短期记忆) 整理写进天级记忆随后执行一次记忆蒸馏读取当前的核心记忆和当天的天级记忆交由模型进行去重、合并相近条目、修剪、提炼新信息并替换旧信息输出一份精炼后的核心记忆同时会生成一篇叙事风格的梦境日记记录这次整理发现了什么、合并和清理了什么。梦境整理是每天运行的全局视角的自进化对当天所有会话的一次通盘梳理解决的正是随着时间推移长期记忆最容易出的两个问题不断膨胀和自相矛盾。整个过程遵循几条核心规则含义相近的多条合并成一条更高密度表述从天级日记里萃取值得永久记住的新信息偏好、决策、规则、经验、教训新旧记忆冲突以新条目替换旧条目临时记录、空条目、已被覆盖的冗余则直接清理最终将核心记忆 (MEMORY.md) 控制在一定数量内 (约 50 条以内)。为了让记忆整理更安全可控在实现上做了几层保护当天没有新日记时直接跳过绝不空覆写已有的核心记忆对日记内容和每条消息分别做哈希去重同样的内容不会被重复写入天级记忆即使对话跨天在提示词层面强约束整理的真实性避免凭空生成不存在的记忆除了每天定时跑也支持手动触发指定整理最近 N 天的记忆所有的梦境整理内容会以日记的形式持久化保存在工作空间中。五、源代码自更新源码自更新指的是 Agent 在运行过程中能够实时修改自身代码并重启以解决无法通过外置技能、工具等解决的问题由于存在一定不可控性这里更多做开放性讨论。出于安全性考虑目前 CowAgent 项目没有把源码自更新作为内置开放的功能但用户可通过指定要求来实现该效果。项目默认就是源码安装方式Agent 天然有访问源代码的权限只需将项目代码路径告诉 Agent 并给出明确改动需求即可让其修改自身代码并重启如果想要让 Agent 能够更主动地修改代码还可以封装为 Skill 或 Prompt 作为内置能力。修改代码是修改 Agent 能力本身不像变更记忆、技能等数据影响面更大。源码自更新存在两个难点如何避免 Agent 把代码改坏影响正常启动如何在当前进程中关闭自身并重启新的进程为了解决这两个问题项目中实现了一个cow self-restart的 CLI 命令专门用于 Agent 的自重启。首先会对代码进行运行自检出现任何依赖导入或解释器错误都会中止重启自检通过后则会启动一个脱离于当前进程树的接力进程在这个进程中对旧的进程进行关闭并启动新的进程实现优雅自重启。而在开源项目场景中Agent 修改自身代码其实还有另一个问题就是版本冲突。当本地修改代码后必然会相对主干分支形成分叉后续官方版本更新后代码拉取就有可能存在冲突这个时候就需要依赖人工或者 Agent 协助进行解决了。
让 Agent 在对话中成长:自进化机制的五层实现
发布时间:2026/6/30 6:27:38
整体设计要实现 Agent 的自我进化不只是让它记住信息更要能通过持续的反馈改进和修复自己。自进化机制根据深度不同可以划分为记录信息、保留信息、主动行动、整理沉淀、自我重构不同深度需要改进的对象、触发的时机和影响范围都不同。在具体实现上有两个关键点要考虑什么时候触发进化和要改进的是什么。在 CowAgent 中完整的自进化机制由五个层级共同构成分别对应不同的进化深度包括基础的记忆和知识维护、上下文智能总结、会话后主动复盘、梦境记忆整理、源码自更新。整体架构如下层级改进内容触发时机进化深度基础记忆和知识维护记忆 / 知识 / 提示词每次对话中记录上下文智能总结记忆上下文超限时保留会话后主动复盘技能 / 记忆 / 提示词 / 任务会话空闲后行动梦境记忆整理长期记忆每天定时沉淀源代码自更新代码被动/主动触发自我重构一、基础记忆和知识维护最基础的一层自进化其实发生在每一次的对话过程中Agent 通过大模型的工具决策能力以及系统提示词的引导判断对话中是否包含有价值的信息并通过内置工具把偏好、决策、事实、经验教训等写进长期记忆把可复用的知识写进知识库把涉及到 Agent 设定及运行规则等内容写入提示词文件。这三类信息维护的对象和时机各不相同记忆持久化在工作空间的文件中又分核心记忆和天级记忆。核心记忆MEMORY.md存放用户偏好、关键决策这类长期有效的事实会被注入到每次对话的系统提示词里所以必须保持精炼天级记忆memory/YYYY-MM-DD.md按天记录关键事件和对话摘要只在 Agent 用记忆检索工具时才加载。知识库以 Markdown 源文件存于工作空间、向量化数据存于数据库按主题组织、页面间交叉引用成知识图谱。当对话中发生搜索学习、深度研究等任务时Agent 会主动把整理后的知识沉淀进来。提示词人格设定AGENT.md、规则RULE.md、用户信息USER.md等也支持在对话中被实时修改它们都会加载进系统提示词让 Agent 根据反馈持续调整自身设定贴合用户习惯。上图示例用户在一次提问中表达了偏好并让 Agent 研究一个新概念Agent 在回答的同时主动把偏好写进记忆、把整理后的资料沉淀进知识库二、上下文智能总结上一节关于长期记忆的维护解决的是如何记住关键信息而这一节主要解决的是 Agent 在进化中如何不丢失信息。上下文是短期记忆项目中提供了可配置的轮次和 Token 长度限制当超限时不能简单裁剪掉旧消息而是要把其中的重要信息提炼总结后写入天级记忆中。整个智能压缩分四步处理截断超长工具结果第一道也是最廉价的一道。历史轮次里单个工具结果如一次返回上万行的检索超过阈值时只保留首尾两段加一句省略说明正在进行的当前轮次不动。这一步纯字符串处理、不调模型往往就能挡住大部分增长。按完整轮次裁剪轮次超限时以一轮完整对话为最小单位裁掉最早的一半而不是逐条删消息——这样能保证一次工具调用的入参和执行结果始终成对保留不会给模型留下调用了工具却没有结果的残缺上下文。被裁的内容并不是丢弃而是由 LLM 进行整理、提炼、总结一方面写入当天的天级记忆持久化另一方面注入回保留消息的开头让模型在丢掉原始细节后仍能接住前文的来龙去脉。按 Token 压缩当裁完轮次仍超出 Token 限制时再做进一步更精细化的裁剪当轮次本就不多时会对每一轮做文本压缩只留用户的首条提问和 Agent 的末条回复剥掉中间的工具调用链当轮次较多时则继续裁剪并总结更早的前一半对话。溢出兜底当模型 API 直接抛出上下文溢出同样会先把当前对话总结进记忆再做一次更激进的截断这是最后一道保险。三、会话后主动复盘会话后复盘是自进化中主动性最强、也是最核心的部分当一段对话告一段落、进入空闲时Agent 会主动回顾整个会话内容把对话中暴露的问题修复、将可复用流程固化为技能、把没做完的任务接着完成等。3.1 进化内容首先来看在复盘中主要做哪些改进优化和创建技能当某个 Skill 在用的时候暴露了问题例如配置错误、缺少步骤、内容过时等会直接修改技能文件让问题不再复发如果在对话中跑出了一套可复用的流程则会主动固化成一个新技能在下次类似任务时可以更稳定地执行。这一步让 Agent 从「技能的使用者」变成「技能的维护者」。收尾未完成任务把承诺了用户但没做完、或因临时性故障 (例如网络波动、环境问题等) 中断的任务进行 review 并再次尝试完成。补齐记忆 / 知识 / 提示词作为查缺补漏主对话本身就会主动写入记忆和知识库所以这里只作为兜底。上图示例Agent 在会话后复盘中发现可复用的工作流程创建为一个新技能并主动通知用户在改进中有两个关键的设计取舍技能和未完成任务是主要价值记忆、知识、提示词只作为查缺补漏因为这部分已有其他多层机制覆盖无需太多重复关注。修复源头而不是只记录问题如果问题根因在技能本身正确的动作是改技能而不只是在记忆里记一句「技能 X 有个错」这是目前很多 Agent 项目都存在的问题。记录症状不能阻止复发只有优化源头才能根除问题。3.2 触发时机主动复盘会在会话结束、空闲一段时间后触发且需要积累一定对话轮次才值得复盘简单说就是「用户不再继续聊了且这段对话有足够的信息量」两个条件都满足才触发一次。在项目中可以通过 Web 控制台的开关一键开启和关闭自进化开关另外触发空闲时间 (默认10分钟) 和 会话轮次阈值 (默认6轮会话) 也可以通过配置文件进行进一步调整。3.3 安全可控让 Agent 动手改自己一个最重要的问题就是 会不会改坏、会不会打扰用户。一个支持自主修改的系统最容易出现的几个问题包括1. 把错误的信息写进记忆或技能等2. 执行命令时越权改到系统内置的模块3. 修改完无法追溯和回退。所以这一层的设计就是围绕可追溯、可回滚、隔离执行的安全可控目标来实现隔离执行每次的复盘是一个独立的异步临时任务使用同一个主模型但可用工具集大幅收紧只能读上下文、改记忆与技能不污染、也不会拖慢主对话同时项目自带的内置技能会在代码层面进行保护。变更可回滚在 Agent 改动前会自动备份相关文件用户如果不认同某次改动直接在对话发送消息 (例如 把刚才的改动撤销) 即可还原工作空间。变更可追溯Agent 会将每一次变更记录持久化存储于空间中在「Web 控制台-记忆-自主进化」页面中可以追踪具体信息。未变更则不打扰复盘后会核对是否有实际的改动如果有变更则会主动将内容推送给用户否则全程静默、用户无感知。四、梦境记忆整理梦境记忆整理 (Deep Dream) 由每天夜间的定时任务 (默认 23:55) 主动完成。首先会将当天各会话的上下文 (短期记忆) 整理写进天级记忆随后执行一次记忆蒸馏读取当前的核心记忆和当天的天级记忆交由模型进行去重、合并相近条目、修剪、提炼新信息并替换旧信息输出一份精炼后的核心记忆同时会生成一篇叙事风格的梦境日记记录这次整理发现了什么、合并和清理了什么。梦境整理是每天运行的全局视角的自进化对当天所有会话的一次通盘梳理解决的正是随着时间推移长期记忆最容易出的两个问题不断膨胀和自相矛盾。整个过程遵循几条核心规则含义相近的多条合并成一条更高密度表述从天级日记里萃取值得永久记住的新信息偏好、决策、规则、经验、教训新旧记忆冲突以新条目替换旧条目临时记录、空条目、已被覆盖的冗余则直接清理最终将核心记忆 (MEMORY.md) 控制在一定数量内 (约 50 条以内)。为了让记忆整理更安全可控在实现上做了几层保护当天没有新日记时直接跳过绝不空覆写已有的核心记忆对日记内容和每条消息分别做哈希去重同样的内容不会被重复写入天级记忆即使对话跨天在提示词层面强约束整理的真实性避免凭空生成不存在的记忆除了每天定时跑也支持手动触发指定整理最近 N 天的记忆所有的梦境整理内容会以日记的形式持久化保存在工作空间中。五、源代码自更新源码自更新指的是 Agent 在运行过程中能够实时修改自身代码并重启以解决无法通过外置技能、工具等解决的问题由于存在一定不可控性这里更多做开放性讨论。出于安全性考虑目前 CowAgent 项目没有把源码自更新作为内置开放的功能但用户可通过指定要求来实现该效果。项目默认就是源码安装方式Agent 天然有访问源代码的权限只需将项目代码路径告诉 Agent 并给出明确改动需求即可让其修改自身代码并重启如果想要让 Agent 能够更主动地修改代码还可以封装为 Skill 或 Prompt 作为内置能力。修改代码是修改 Agent 能力本身不像变更记忆、技能等数据影响面更大。源码自更新存在两个难点如何避免 Agent 把代码改坏影响正常启动如何在当前进程中关闭自身并重启新的进程为了解决这两个问题项目中实现了一个cow self-restart的 CLI 命令专门用于 Agent 的自重启。首先会对代码进行运行自检出现任何依赖导入或解释器错误都会中止重启自检通过后则会启动一个脱离于当前进程树的接力进程在这个进程中对旧的进程进行关闭并启动新的进程实现优雅自重启。而在开源项目场景中Agent 修改自身代码其实还有另一个问题就是版本冲突。当本地修改代码后必然会相对主干分支形成分叉后续官方版本更新后代码拉取就有可能存在冲突这个时候就需要依赖人工或者 Agent 协助进行解决了。