Agent Harness 源码拆解(九):Memory 与扩展——记忆怎么存才不越权,扩展怎么留口才不失控
这是系列的最后一篇。前八章把 harness 的骨架拆了一遍,最后一块拼图是两个”对外”的边界:记忆(agent 记住的东西)和扩展(别人给 agent 加的东西)。它们共享一个危险——都在把外部信息送进 agent 的决策里,处理不好,记忆会越权成命令,扩展会变成绕过权限门的后门。
当你的才华还撑不起你的野心时,那你就应该静下心来学习
这是系列的最后一篇。前八章把 harness 的骨架拆了一遍,最后一块拼图是两个”对外”的边界:记忆(agent 记住的东西)和扩展(别人给 agent 加的东西)。它们共享一个危险——都在把外部信息送进 agent 的决策里,处理不好,记忆会越权成命令,扩展会变成绕过权限门的后门。
多 Agent 是 harness 里最容易被”神话”也最容易被”搞砸”的模块。被神话,因为大家都幻想”拆一堆子代理并行干活”;被搞砸,因为真拆起来会发现两个要命的问题:子代理的 transcript 会撑爆父上下文,子代理可能拿到父没有的权限。
持久化是 harness 里最”安静”也最”贵”的模块。安静,因为正常情况下它不发声;贵,因为崩溃那一刻它会问你一个几乎无法回答的问题:这个工具,刚才到底跑没跑?
权限是 harness 里唯一会”出人命”的模块。模型是不可信的执行者,而它手里握着删库、发网络请求、读私人文件的能力。这一章的问题只有一个:什么能自动跑,什么必须问人,以及凭什么信它不会越权。
工具是 harness 和真实世界的唯一接口,也是设计密度最高的一块。这一章的两个问题看似简单,答错了代价极大:默认给模型几个工具?工具执行完,给模型看什么?
上下文工程是 harness 里最拧巴的一块:模型的窗口是有限的,token 成本随历史长度上涨,可关键信息一条都不能丢。这三个约束互相打架,而打架的战场通常在一个叫 compaction(压缩)的机制上。
主循环是 harness 里最”不值钱”也最”要命”的部分。不值钱,因为它看起来就一个 while;要命,因为中断、重试、插话、预算这些语义,全压在同一个 while 上。你写得再漂亮的分层,只要循环里有一个 if 没处理对,整个 agent 的行为就悄悄漂移。
接一家模型 API 很容易,接到第十家,你才会开始疼。疼的不是请求怎么写——curl 一下的事——而是”方言”:同样一句”模型要调工具”,Anthropic 用 tool_use 块,OpenAI 用 function_call 塞进一个叫 tool_calls 的数组,Google 又是另一套叫法。你把每家的适配代码写上三遍,就得到一个没人敢动的 adapter 目录。
如果你今天要从零写一个 coding agent,第一个要做的决定不是选哪个模型——模型换起来太容易了。真正的第一个决定是:你的 agent 内核,写多大?
本文是一篇综述与交叉验证性质的解读,视角为”一个社区实践如何长成产品能力”。素材来自四条独立线索:Geoffrey Huntley 的原始博文与哲学续篇、阿里云云原生的中文综述、Anthropic 官方工程博客、以及 Claude Code / ChatGPT 的官方文档,文末附全部出处。除特别标注「」的直引外,行文均为重新组织与个人分析。
整理日期:2026-09-25