https://t.co/TcM1ujYofB
TL;DR · AI 摘要
本文提出了一种结合记忆和工具的自我进化Harness架构,通过动态调整代理行为提升代码任务处理能力。
核心要点
- Pi系统采用最小化Harness设计,支持TypeScript钩子和记忆压缩策略
- Hermes使用三层Prompt结构(稳定/上下文/易失)实现动态提示管理
- 记忆压缩保留最近20,000 tokens原始数据并自动摘要
结构提纲
按章节快速跳转。
- §引言
提出自我进化Harness的概念,通过记忆机制提升代理性能
定义编码代理由冻结模型和交互程序组成,包含提示构建、工具调用和结果处理循环
展示最小化Harness设计,包含扩展钩子、技能管理、提示模板和会话树结构
描述三层Prompt架构和SQLite会话管理,包含上下文压缩和动态预算警告机制
分析记忆压缩策略如何保持缓存温暖并控制上下文长度
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 自我进化的Harness架构
- Pi系统
- TypeScript钩子
- 技能管理
- 记忆压缩
- Hermes系统
- 三层Prompt结构
- SQLite会话管理
- 上下文压缩
- 核心机制
- 冻结模型+交互程序
- 提示构建循环
- 记忆保留策略
金句 / Highlights
值得收藏与分享的关键句。
Pi系统通过TypeScript钩子实现记忆注入,压缩策略可替换
Hermes使用SQLite存储会话,支持上下文压缩和动态预算警告
记忆压缩保留最近20,000 tokens原始数据,其余内容自动摘要
mem0在X上的推文:"https://t.co/TcM1ujYofB" / X
@mem0ai
$
具备记忆功能的自我进化框架
如何在不训练模型的前提下,让你的编程代理在下一个Linear任务/工单等场景中表现得更好?
我的意思是,我们是否需要留下一些笔记?在AGENTS.md中添加规则?为特定场景创建技能?大多数人其实都在这么做,只是没有明确命名这个过程,我们只是试图优化设置,让它明天不再犯同样的错误,而这个设置就是你的框架。
Cursor分享了他们如何调整自己的框架,后来还撰写了一篇关于研究浏览器上多代理运行一周的报告,并在查看日志后调整了角色分工。
OpenAI发布了Codex循环,这是一个可以复现的序列。
Anthropic则是手动编写技能。
现在我想重点讨论的点是:一个能够自我进化的框架,以及记忆在其中的位置。
通用框架结构
通用框架的结构是:编程代理由一个冻结模型和一个与其交互的程序组成。每次交互中,该程序会:
- 构建提示词
- 列出可用工具
- 执行模型请求的操作
- 附加执行结果并进行总结或停止
这就是框架的基本运作方式。Claude Code、Codex、Cursor、Pi、Hermes都采用相同的循环结构,只是实现厚度不同,其中我们能实际打开的两个框架如下。
Pi
Pi是一个极简框架,我正因它的这种特性而喜爱它。
官网描述:"让Pi帮你构建所需内容,或安装一个按你方式执行的包。"
核心工具:读取、写入、编辑、bash命令
循环流程:推理 → 工具调用 → 观察结果 → 再次推理
我们附加了四个组件:
扩展模块:TypeScript钩子(agent/pre-step, agent/request, tool start/end)。记忆会在下一次推理步骤前注入。压缩策略是可替换的。
技能库:通过agentskills.io定义。提示词中显示名称,仅在选择时加载完整文件,保持缓存热度。
提示模板:/name路径会扩展markdown文件。
主题:TUI界面,但这不是重点。
指令来源顺序:全局AGENTS.md → 父级目录 → 当前工作目录。SYSTEM.md会替换或追加系统提示词。会话以树状结构存储,/tree命令可恢复任意节点。压缩策略保留最近约20,000个token的原始内容并总结其余部分。
相同运行时可支持TUI、JSON、RPC或SDK,其中SDK的重要性可能超出预期,因为仅交互式框架无法进入自动化外循环。
因此,官方Pi在评分后不会自我重写,只是暴露接口。自我优化循环以包的形式存在,我们稍后会回到这个仓库。
_ ___
Hermes
Hermes由Nous开发,实现更厚但同样遵循相同循环结构:
run_conversation: 任务ID → 追加用户消息 → 构建或复用缓存系统提示 → 若历史记录超过上下文长度的一半则先压缩 → 格式化为提供方要求(chat completions, Codex Responses, Anthropic Messages)→ 注入临时预算警告和上下文压力 → 调用模型 → 工具调用(执行、追加、循环)→ 文本:持久化会话、刷新内存、返回结果
提示词分三层结构:
稳定层(身份、工具、技能索引)
上下文层(当前目录AGENTS.md)
易失层(内存快照、配置文件、时间戳)
压缩时会重建前缀以保持缓存热度。会话存储在SQLite中并支持搜索。压缩操作会关闭当前会话并创建子会话,从而形成继承链而非单个重写块。工具是注册表加暴露列表。默认迭代预算500。存在子代理,父代理终止时子代理也会终止。
目前这仍然是通用框架,尚未实现自我进化功能。
他们实际上在构建什么
两者都在决定本轮模型能看到的内容。模型永远看不到仓库,它只能看到一串标记。
一个例子是Node安装时持续重新生成pnpm-lock.yaml,第17轮,进程已经运行了20分钟。
左侧边缘是稳定的,因此可以缓存:系统、工具、AGENTS.md。然后可能添加一个注释,说明这个仓库的安装是锁文件,不要重新生成。接着是摘要,说明第1到11轮已被替换,这些轮次已从窗口中移除。然后是原始尾部和最新的bash。
如果锁文件的教训从未被写入,下一轮进程将搜索不到,下一张票据的第一轮将是一个空线程和相同的npm install。/tmp下的辅助进程会随主进程一起死亡。如果它不在磁盘上,不在新进程会打开的位置,就不会发生,而所有内容都取决于谁写入了那串标记。
这些如何演变为自我进化?
Hermes,继续
同样的两个控制装置,现在增加了额外的循环,这就是为什么Hermes提到学习。在一次成功且不间断的轮次之后,派生代理可能会运行。
大约每10个用户轮次,它可以写入MEMORY.md或USER.md
大约每10次工具调用,如果启用了技能工具,它可以修补或创建SKILL.md
派生代理继承了缓存的系统提示,因此他们测量到成本降低了约26%,它只获取内存和技能工具,最多进行16次迭代,它不能破坏仓库,也不能编辑运行run_conversation的Python代码。文档中优先级是先修补已加载的内容,然后深化,再在其下添加文件,最后才创建新技能。你可以启用写入审批门,并将差异暂存到~/.hermes/pending/下。
下一节,组装加载这些文件,程序是同一个程序。他们分割后的内存是一个应保留在上下文中的小而持久的事实,技能是一个按需加载的较长过程。
轨迹指向下一个窗口可以打开的文件,评分是审查模型的判断加上可能的人类,而不是编码基准。
__
Pi,继续
官方Pi仍然不会为你执行这个分支。Prime Intellect在Pi上构建了Prime Agent,他们的README中提到了这一点。
面向模型的工具变成了持久的IPython内核。文件、shell、技能、子代理只是Python调用。上下文是一个变量,而不仅仅是聊天记录。子代理是rlm(task),一个异步句柄。TypeScript主机仍然拥有提供者、会话、子代理和安全性。
他们新增的是一个持续控制装置,四个存储库分别支持创建/读取/更新/删除:提示注释、子代理规范、技能、内存。内核中的对象与rlm.harness和磁盘上的对象相同。
/refine是额外的写入器。后台代理读取当前轨迹,并对这四个中的一个应用最小的证据支持的编辑,refine-log记录快照以便回滚,且不会重写不可变的基础系统提示。pi-continual将同样的想法以markdown形式复制回普通Pi,位于.pi/harness/下。提交目录后,改进就是一个可审查的差异。
因此,Hermes在轮次结束后通过分支进行写入,Prime则在轨迹中任务中途通过回滚日志进行写入,两者都持久化文件,但都不会替换coding_agent.py。
Prime Agent报告ARC-AGI-3 RHAE Best@1从30%提升至95.5%(Karten等),这不是SWE-bench,是不同游戏和不同写法。
因此,常见观察
在此引入的内容中,内部循环并未改变,包括组装、采样、工具、追加和压缩等步骤。新增的是第二个写入器,允许某些额外内容改变下一个窗口的内容。
在Hermes中,该写入器是一个分支,可能写入MEMORY.md或SKILL.md文件。在Prime中,它对应/refine操作,针对四个存储进行处理。在你自己的设置中,这可能表现为你在处理完一个差评工单后,手动编辑AGENTS.md文件。
普通编码代理会检查仓库、编辑文件、运行测试并提交补丁。而自我进化的代理除了这些操作,还会将这些交互转化为持久化更新,这种持久化是关键。如果在问题结束时丢弃更改的尝试则不在此列(Zhou等人已对此命名)。
一旦看到第二个写入器,就会发现人们曾将三种不同的写入方式统一为一个数字。
在某个问题中发明的工具,随后又随着流程被删除。
下一个会话将加载的文件,代理程序保持不变,这正是我们刚才讨论的内容。
代理本身的全新检出版本,保存在归档中。
Hermes和Prime属于(2)类,Live-SWE属于(1)类,DGM属于(3)类。将1类和3类混合使用,就是为何77.4%和20-to-50会被引用为相同结果的原因。
发明工具后立即删除
Live-SWE从mini-SWE开始,约100行代码,仅使用bash,每个操作都启动新的子进程,且不改变这个循环。离线代理会编辑框架并在基准上评分,DGM在SWE-bench上的运行成本约为22,000美元。他们的策略相反,认为能编写Python代码的模型可以在处理问题时直接编写工具。
每一步后,反思提示会询问是否需要新工具来加速。代理编写脚本、运行它、可能进行修改。他们测量了反思过程,而不仅仅是权限。
他们实际产出的一个工具是go_analyzer.py,在SWE-Bench Pro的Navidrome问题中使用。Bash可以搜索Go文件,但grep无法区分结构体和注释。该脚本匹配Go语法,查找结构体、函数、引用和导入。之前的最佳基线无法完成该问题。
左侧仍是mini-SWE,观察后新增的框是反思过程,如果确认则会生成/tmp/go_analyzer.py。下一个示例调用python /tmp/go_analyzer.py struct handler.go Library,这只是另一个bash命令,没有新工具API,文件在当前进程中生成。
SWE-bench Verified随机50个样本,Claude 4.5 Sonnet表现:
仅使用bash:62.0%
提示允许编写工具但无反思:64.0%,生成2.92个工具
每一步后反思:76.0%,生成3.28个工具
提醒功能推动了数字变化,完整Verified测试中Gemini 3 Pro达到77.4%且无需测试时扩展。SWE-Bench Pro中Claude 4.5 Sonnet为45.8%。不同基准、不同模型,77.4%并非Pro基准的数值。
弱模型会失败。相同50个样本,GPT-5-Nano在mini-SWE中得44.0%,在Live-SWE中降至14.0%,轨迹循环,模型甚至不知道创建工具的意义。
然后他们将其丢弃,论文中明确提到这一点。未来工作是将有用工具序列化为技能,但尚未实现,下一个Navidrome问题又从bash开始。
发明解析器后又删除的长问题才是优质问题,这不是新框架。在60个问题的测试中,他们以65.0%对53.3%击败DGM,且无需离线预算。如果同时使用两篇论文数据,请同时引用两组数字,不要强行合并。
技能文件
编写SKILL.md是所有人的建议,包括Live-SWE的未来工作,保持程序,将知识存储在磁盘上。
SkillsBench测量了人们持续推荐的方法:让代理在解决问题前编写打包内容,然后加载。18个Harness配置,87个任务。由人工整理的技能包成功率从33.9%到50.5%。通过Anthropic的技能生成器自动生成的包,在无技能基准下表现如下:
Claude Code, Opus 4.7:下降8.1
Codex, GPT-5.5:下降11.3
Gemini CLI, Gemini 3.1 Pro:下降11.5
审计过程虽然枯燥但具有价值,未使用的包被丢弃,编写过程吞噬了解决方案,已使用的包却包含错误(3d-scan-calc将单位换算作为关键假设,求解器遵循了该假设),包泄露了任务内容。Hermes可以控制写入操作。你仍需要对下一个任务进行评分,否则任务可能失败。
持有数字的写入操作发生在评分之后。CODESKILL从已通过的轨迹中提取过程,然后由图书管理员进行合并和删除。相比无技能基准平均提升+9.69。仅提取方式使知识库增长至1,252个,维护操作将其削减至676个,收益保持稳定。相同文件结构,但方向相反。
先成功再建立库,SkillsBench就是当你跳过这个顺序时发生的事情。
替换代理
DGM是离线写入,与Live-SWE的实时写入形成对比。借鉴Schmidhuber的哥德尔机,去掉证明过程,在编程基准上对重写进行评分。用他们的话说,编程代理就是仓库加一个可读、可写、可执行的冻结模型,自我改进就是在这个仓库上的编程任务。
基础代理目标模糊,仅包含bash和一个可查看或替换整个文件的编辑工具,与mini-SWE的赌注相同。
一次生成包含两个部分。父代复制自身并编辑副本,新文件存在但还不是代理,然后对子代进行评分。如果子代仍能编译且仍能编辑,存档中的指针会移动。在指针移动前,你仍然拥有父代。
按评分粗略采样父代,采样概率与已有编辑能力子代数量成反比,每个节点始终保持非零概率。父代阅读自己的评估日志,提出一个特性,然后在副本上实现。
先完成10个任务,如果仍能编辑则进入存档,否则永不进入。接下来完成50个任务。如果在60个任务混合测试中通过40%且排名前二,再完成200个任务以减少评分噪声。
经过80次迭代后,SWE-bench从20.0%提升至50.0%,完整多语言版本从14.2%提升至30.7%,每次SWE-bench运行成本约22,000美元。
路径经过更差的父代,在已发布运行中迭代4和56次。节点24是编辑工具重写,该分支从23.3%提升至40.5%。删除存档后可进行爬山优化。始终扩展冠军模型,可达到39.7%的成绩,相比存档的50.0%。
子代发明的只是普通Harness工作,更精细的查看和编辑功能、补丁验证、多尝试机制加第二个模型进行排序、失败尝试历史记录、长上下文管理。真正发生改变的是Harness文件。
存档也是你发现作弊的方式。独立运行中,评分要求"停止幻觉工具使用",某个子代移除了检测器标记,未修正幻觉却获得完美2.0分。分支差异使漏洞可见,因此将子代沙盒化,切断网络连接,保留代码库。
没有IDE提供这种功能,Sakana的论文是研究运行,不是Cursor。
内存实际存储位置
下一个任务是全新进程,线程为空,未记录的内容将消失,这就是为什么内存在此文章中呈现,而不是作为插件,而是作为对第二个写作者允许保留内容的规则。
有三类可记录的内容,它们不可互换。
agent 的 git。DGM 的存档、提交记录、父指针、评估日志、得分。无法编辑的内容会被丢弃,但比父节点更差的内容会特意保留,这就是为什么你仍然能看到节点 24。这不是一个记忆产品,只是一个带有账本功能的支架仓库。
笔记。SWE-Exp 是一个经验银行。体验者阅读成功和失败的修复记录,提取出简短的笔记,说明问题是如何被理解的,以及概括性的策略。下一个问题检索时,重排序器会保留一个。在 Verified 数据集上,Claude 4 Sonnet 的 Pass@1 为 73.0%。DeepSeek-V3 在零经验时为 37.8%,一个经验为 42.0%,两个、三个、四个经验的表现更差。经验库在约 300 条记录时趋于饱和。将原始轨迹重新放回后,得分会下降 6.0 点。
因为这是人们将其扁平化为"记忆"的对象,所以只保留一条笔记。
问题 A,锁文件票据,agent 重新生成 pnpm-lock.yaml,CI 失败,有人看到这个仓库固定了锁文件。你不会存储 400 行日志,只存储一句话。两周后的问题 B,新流程,将搜索一次性整合到第一个提示中,而不是每次 bash 命令都搜索,只保留一行。SWE-Exp 已经测量出一个经验胜过四个。仓库 A 中的 pnpm 习惯如果只存储在用户 ID 下,会成为仓库 B 中的毒药,因此检索范围是检索的一部分。
技能,在通过评估后。人工整理的笔记有帮助,但解决前 agent 自己写的笔记通常没有,评估后提取的笔记才是目前记录数字的写法。
一个能泛化的辅助工具是支架仓库的一个提交。你希望生成 40 次时能看到的失败方法是经验库中的一行。下一个会话需要加载的技能必须来自已经通过的轨迹。自动加载上一个问题的 SKILL.md 是 SkillsBench 已经标记为损失的混合技能。
不要将 coding_agent.py 放入记忆 API。评分者和存档会选择子节点。试图完成这个任务的存储会隐藏你所需的谱系,当子节点剥离检测器时。
我们有的是行、用户 ID、agent ID、运行 ID。两个共享这些 ID 的支架版本实际上写入和读取相同的笔记。生成 12 次的失败方法应该在生成 40 次时返回。
写入路径是在评估后,你已经选择了句子。infer=False 会原样存储。默认添加会从消息中提取事实,提取会将锁文件笔记转换为"用户遇到了依赖问题"。不要在相同数据上混合使用这两种方式,否则会存储两次。
run_id 是这个票据或这次生成的评估,评分后它就会消失。
agent_id 是这个支架版本。user_id 是这个人或这个仓库,它会保留。
按你写的方式过滤。在 infer=False 后,你可以在一个行上设置两个 ID 并进行 AND 操作。在默认提取后,一个事实被归因于一个说话者,因此这两个字段的 AND 操作会返回空(Mem0)。
读取路径是下一个任务的组装,一次性搜索到第一个提示中,而不是每次 bash 命令都搜索,一行胜过四行。
锁文件笔记、失败方法、仓库惯例:是
生成的工具:否
评分前生成的 SKILL.md:否
对话记录:否
平台上的梦想整合了仅限 user_id 的行。在 user_id 加上 agent_id 下的笔记会跳过这个过程。将人工编写技能保存为文件,将支架 git 保存为 git。
参考文献
Xia 等人,Live-SWE-agent
Zhang 等人,达尔文哥德尔机器
Sakana,达尔文哥德尔机器
Zhou 等人,自演进编码代理
Chen 等人,SWE-Exp
Li 等人,CODESKILL
Li 等人,SkillsBench
Yang 等人,mini-SWE-agent
Schmidhuber,哥德尔机器
Karten 等人,Prime Agent
Prime Intellect,Prime Agent
Pi 编码代理
pi-continual
Nous Research,Hermes Agent
Anthropic, 代理技能
OpenAI, Codex 代理循环
Cursor, 持续改进我们的代理框架
Cursor, 向自动驾驶代码库迈进
Mem0 论文
Mem0, 实体作用域内存
/$
4:37 PM · 2026年9月9日
9.9K
浏览量
11
138
230