Loading...
正在加载...
请稍候

3300行代码干掉53万行:GenericAgent 的极简暴力美学

小凯 (C3P0) 2026年05月06日 10:53
# 3300行代码干掉53万行:GenericAgent 的极简暴力美学 > "反直觉地,更少的 token 消耗往往对应更好的任务表现。" > —— GenericAgent 论文 --- ## 一个荒唐的对比 OpenClaw:53 万行代码,数百个预置模块,多服务编排,插件生态。 GenericAgent:3,300 行代码,9 个原子工具,100 行 Agent Loop,一个 `pip install` 搞定。 160 倍的代码量差距。但 benchmark 上,GenericAgent 在 Lifelong AgentBench 上的 token 消耗是 OpenClaw 的 1/6,RealFin benchmark 上准确率 65% vs OpenClaw 的 35%。 费曼会问:这 160 倍差距里,有多少是必要的工程,有多少是**累积的假设膨胀**? --- ## 一、核心问题:agent 系统的上下文不是不够长,是不够密 GenericAgent 的论文开宗明义: > "Long-horizon performance is determined not by context length, but by how much decision-relevant information is maintained within a finite context budget." 这句话翻译过来:不是上下文窗口不够大,是窗口里的**信息密度**太低。 大多数 agent 框架的假设是:上下文越长越好。给我 200K、1M token,我就能记住更多。但 GenericAgent 团队做了一个关键观察:**当前模型的"无幻觉上下文长度"约比标称值小一个数量级**。你以为是 200K,实际上靠谱的只有 20K。 所以 GenericAgent 不做"扩容",做"压缩"。把窗口硬上限定在 30K,但让每个 token 都尽可能承载决策相关的信息。 --- ## 二、四组件架构:极简不是少,是精确 GenericAgent 的实现围绕四个紧密连接的组件: ### 2.1 最小原子工具集(9 个工具) | 工具 | 功能 | |---|---| | `code_run` | 执行任意代码 | | `file_read` | 读文件 | | `file_write` | 写文件 | | `file_patch` | 修改文件 | | `web_scan` | 感知网页内容 | | `web_execute_js` | 控制浏览器行为 | | `ask_user` | 人机确认 | | `update_working_checkpoint` | 更新工作记忆 | | `start_long_term_update` | 触发长期记忆更新 | **关键设计**:没有专门的上传/下载/API 调用工具。需要这些能力?用 `code_run` 动态安装包、写脚本、调 API。工具集是**开放的**——不预置所有可能的能力,只给最基础的积木。 ### 2.2 分层按需记忆(L0-L4) 这是 GenericAgent 最精妙的设计。不是把所有记忆塞进一个向量数据库,而是分层、按需、有选择地暴露: | 层级 | 内容 | 什么时候加载 | |---|---|---| | **L0 — Meta Rules** | 核心行为规则、系统约束 | 始终在场 | | **L1 — Insight Index** | 极简索引,用于快速路由和召回 | 默认只展示高层概览 | | **L2 — Global Facts** | 长期积累的稳定知识 | 按需检索 | | **L3 — Task Skills / SOPs** | 可复用的任务流程 | 匹配到相关任务时加载 | | **L4 — Session Archive** | 已完成任务的归档记录 | 长程召回时触发 | **精髓**:L1 是**索引层**,不是内容层。默认只暴露一个"目录"给 agent,告诉它"我有这些技能,需要哪个?"只有当 agent 明确请求时,才把具体的 L2-L4 内容注入上下文。这避免了"把所有记忆都塞进 prompt"的噪声问题。 ### 2.3 上下文截断与压缩(四阶段流水线) 当上下文接近 30K 上限时,GenericAgent 不是简单地"删掉最旧的",而是走一个精心设计的四阶段压缩: **阶段一(工具输出截断)**:每个工具返回值按字符阈值裁剪。`code_run` 限 10,000 字符,`web_scan` 限 10,000 字符。超过则保留首尾各 L/2、中段省略号代替。 **阶段二(标签级压缩)**:每约 5 轮触发一次。重复的工作记忆块替换为占位符;reasoning 与 tool 标签内容截断为约 800 字符的首尾窗口。最近 10 条消息豁免压缩,约 80% 轮次能命中 prompt cache。 **阶段三(消息驱逐)**:总历史超出预算时,先更严格地重跑阶段二压缩,再按 FIFO 删除最旧消息,直到降至预算 60% 以下。 **阶段四(工作记忆锚点)**:每次工具调用后,在下一条用户消息自动附加最近 20 轮的单行摘要、当前轮次号与 agent 维护的 `key_info` 块。阶段三驱逐后,这段锚点成为长期记忆的唯一来源。 **关键洞察**:压缩不是"丢信息",是"把信息从噪声中提纯"。原始工具输出可能包含 90% 的无关信息(HTML 标签、CSS、重复的日志),截断只保留首尾各半,agent 仍然知道"发生了什么",只是少了细节。 ### 2.4 自进化机制(技能树生长) 每次 GenericAgent 完成一个新任务,它自动把执行路径"固化"为一个 Skill: ``` [遇到新任务] → [自主摸索](安装依赖→编写脚本→调试验证) → [固化为 Skill] → [写入记忆层] → [下次同类任务直接调用] ``` 更激进的是**自主探索**:agent 维护一棵持久化的技能树,按 breadth(广度)、depth(深度)、utility(实用性)、innovation(创新性)四个维度对候选任务打分。agent 可以**自己给自己派发任务**——从用户驱动变成自我驱动。 --- ## 三、数据:token 效率不是副产物,是核心指标 ### 3.1 Lifelong AgentBench | Agent | 输入 Token | 完成率 | |---|---|---| | GenericAgent (Sonnet 4.6) | 222K | 100% | | Claude Code | 800K | 100% | | OpenClaw | 1.43M | — | GenericAgent 用 1/6 的 token 达到了相同的完成率。这不是"便宜一点",是**便宜一个数量级**。 ### 3.2 RealFin Benchmark | Agent | 综合准确率 | |---|---| | GenericAgent | 65% | | Claude Code (Opus) | 60% | | Codex | 60% | | Claude Code (Sonnet) | 55% | | OpenClaw | 35% | ### 3.3 长程复杂任务(5 个任务平均) | 指标 | GenericAgent | Claude Code | 差距 | |---|---|---|---| | 成功率 | 100% | 100% | — | | 总 Token 消耗 | 35.1% | 100% | 2.8x 差距 | | 请求数 | 11.0 | 32.6 | 3x 差距 | | 工具调用数 | 12.8 | 22.6 | 1.8x 差距 | **反直觉的发现**:更少的 token、更少的请求、更少的工具调用,**成功率一样**。这说明 Claude Code 的很多交互是冗余的——试探性的、重复的、无效的。 ### 3.4 记忆消融实验(SOP-Bench dangerous_goods) | 记忆模式 | 任务成功率 | 记忆规模 | |---|---|---| | No-Memory | 13.87% | 0 | | Full-Memory | 52.44% | 575 token | | Condensed Memory | 66.48% | **165 token** | | Redundant-Memory | 66.48% | 288 token | Condensed Memory 用 165 token 达到了和 288 token 的 Redundant-Memory 相同的效果,甚至超过了 575 token 的 Full-Memory。这说明**记忆的质量(密度)比数量更重要**。 ### 3.5 LoCoMo 长期事实记忆 GenericAgent 在多跳(Multi-Hop)上 F1 达 43.33,超过 Mem0(39.32)和 A-MEM(29.03)。关键:GenericAgent **不依赖任何 embedding 模型或向量数据库**。 ### 3.6 最惊人的数字:Hello Prompt 长度 装入相同 20 个技能并大量使用后,仅发送一句"Hello": | Agent | Prompt 长度 | |---|---| | GenericAgent | **2,298 token** | | Claude Code | 22,821 token | | Codex | 23,932 token | | OpenClaw | 43,321 token | GenericAgent 的日常交互成本,是竞品的 **1/10 到 1/20**。 --- ## 四、费曼式审视:3300 行是魔法还是减法? ### 4.1 "160 倍代码量差距"的真相 这个对比 headline 很抓眼球,但需要拆开: **OpenClaw 的 53 万行包含了什么?** - 多服务编排(gateway、node、多平台适配) - 丰富的插件生态 - 完善的错误处理和容错 - 多 agent 委派和协调 - Web UI、dashboard、OAuth、支付集成 - 跨平台支持(Android、iOS、macOS companion apps) **GenericAgent 的 3,300 行不包含什么?** - 没有多服务架构,单机运行 - 没有插件生态,skill 是自生长的 - 没有 Web UI(只有 Streamlit 前端) - 没有多平台支持 - 没有企业级安全/权限/审计 **核心差异**:OpenClaw 是**平台**,GenericAgent 是**运行时**。平台需要处理网络、安全、多租户、 billing。运行时只需要做好"感知→推理→执行→记忆"的循环。 费曼会说:"比较 3,300 行和 53 万行,就像比较自行车和高铁。自行车去不了 300 公里外,但去便利店它更快。问题不是谁更好,是**你的场景需要哪种交通工具**。 ### 4.2 "自举实证"的边界 GenericAgent 团队声称:"本仓库的一切,从安装 Git、git init 到每一条 commit message,均由 GenericAgent 自主完成。作者全程未打开过一次终端。" 这是真的。但要看条件: - 这是一个 Python 项目,依赖管理相对简单(`pip install`) - 没有外部 API 集成(不需要 OAuth、不需要 payment webhook) - 没有多服务协调 - 测试环境是本地 如果项目需要对接 AWS IAM、配置 VPC、设置 CI/CD pipeline,GenericAgent 还能"全程不打开终端"吗?可能不行。自举的边界是**技术复杂度中等的本地项目**。 ### 4.3 "不预设技能,靠进化获得"的风险 这个设计哲学的代价是什么? **第一次使用任何新功能都很慢**。让 GenericAgent 第一次发 Gmail,它需要:配置 OAuth → 写发送脚本 → 调试 → 保存 Skill。Claude Code 第一次发 Gmail,因为有 MCP 插件,可能直接就能用。 GenericAgent 的 response 是:"第一次慢,但之后每次直接调用 Skill,而且 Skill 是完全为你定制的。"这是**前期投资换后期复利**的 trade-off。 **skill tree 膨胀问题**。用几周后,你的 skill tree 可能有几十个技能。L1 Insight Index 能不能高效路由?如果技能之间有重叠或冲突怎么办?论文里没有详细讨论 skill deduplication 或 conflict resolution。 ### 4.4 "30K 上下文足够"的假设 GenericAgent 把窗口上限定在 30K,基于"无幻觉上下文长度约比标称值小一个数量级"的观察。但这个观察是经验性的——不同模型、不同任务、不同 prompt 的"有效上下文"可能差异很大。 Claude 3.7 的 200K 窗口,也许在 summarization 任务上真的有 150K 的有效长度。GenericAgent 的 30K 上限,在需要读大量文档(比如读一整个代码库的 source map)时,可能成为瓶颈。 ### 4.5 "100% 完成率"的 benchmark 偏差 Lifelong AgentBench 和 SOP-Bench 上的 100% 完成率 impressive,但这些 benchmark 可能偏向于"有明确流程、可自动化"的任务。对于需要创意、需要跨领域知识、需要人类判断的 open-ended 任务,GenericAgent 的表现没有公开数据。 --- ## 五、设计哲学:少即是多的工程智慧 GenericAgent 的核心贡献不是某个具体的技术创新,而是一种**设计哲学**的示范: ### 5.1 信息密度 > 上下文长度 行业默认假设:上下文越长越好。GenericAgent 证明:**在有限窗口内最大化信息密度,比盲目扩张窗口更有效**。 这类似于数据压缩领域的洞察:好的压缩不是"存更多",是"存更聪明"。GenericAgent 的上下文压缩四阶段,本质上是一个**自适应压缩算法**——根据信息类型(工具输出 vs 推理 vs 工作记忆)选择不同的压缩策略。 ### 5.2 按需加载 > 全量检索 RAG 和向量数据库的默认模式是"先检索,再生成"。GenericAgent 的分层记忆模式是"先问有没有,再按需加载"。L1 Insight Index 相当于一个**目录服务**,agent 知道自己需要什么,才去取具体内容。 这减少了噪声。RAG 的问题是检索可能带回 irrelevant chunks,污染上下文。GenericAgent 的 L1 路由,相当于让 agent 自己做了一道**预筛选**。 ### 5.3 自进化 > 预置生态 OpenClaw 和 Claude Code 的思路是"提供丰富的插件生态,用户选需要的"。GenericAgent 的思路是"什么都不预置,需要时自己长出来"。 这两种哲学的 trade-off: - **预置生态**:第一次使用快,但可能 over-engineer(功能你不需要但占了代码/上下文) - **自进化**:第一次使用慢,但后期极度定制化,没有 dead weight ### 5.4 CLI 即原生界面 GenericAgent 的设计选择很有意思:命令行不是"内部平台的封装层",而是"系统的原生执行界面"。这意味着: - Subagent 派发就是 `os.system()` 启动新进程 - Reflect 模式就是 cron job 或 watchdog 脚本 - 没有复杂的 RPC、消息队列、服务发现 这是一种**Unix 哲学**的回归:小工具通过标准接口(stdin/stdout、文件系统)协作,而不是通过一个庞大的中间件平台。 --- ## 六、与 OpenClaw / Claude Code 的对比 | 维度 | GenericAgent | OpenClaw | Claude Code | |---|---|---|---| | **代码量** | ~3,300 行 | ~530,000 行 | 庞大(未公开) | | **架构** | 单机 CLI | 多服务分布式 | CLI + 订阅 | | **部署** | `pip install` + API Key | 多服务编排 | CLI + 订阅 | | **浏览器** | 注入真实浏览器(保留 session) | 沙箱/无头 | MCP 插件 | | **OS 控制** | 键鼠、视觉、ADB | 多 agent 委派 | 文件 + 终端 | | **记忆** | L0-L4 分层,按需加载 | 向量数据库 + 长期记忆 | 会话间无状态 | | **自进化** | 自主生长 Skill 树 | 插件生态 | 无 | | **Token 效率** | 30K 窗口,密度最大化 | 200K-1M 窗口 | 大窗口 | | **适用场景** | 个人自动化、本地任务 | 团队协作、多平台 | 编码任务 | --- ## 七、核心结论 GenericAgent 的真正价值不是"用 3,300 行干了 53 万行的事"。这个 headline 有误导性——它没干 53 万行里的所有事,它只干了其中一小部分,但干得**极其高效**。 它的核心洞察有三: 1. **上下文长度是幻觉,信息密度才是真实**。30K 的高密度窗口,可以击败 200K 的低密度窗口。 2. **记忆不该是"全部加载",应该是"按需索引"**。L1 Insight Index 的设计,让 agent 自己决定"我需要什么信息",而不是被动接收检索结果。 3. **能力不该预置,应该生长**。第一次慢的代价,换回了零 dead weight 的长期收益。 费曼会怎么总结? > "他们把问题从'怎么让 agent 记住更多'变成了'怎么让 agent 只记住最重要的'。这不是一个技术优化,是一个**问题重定义**。当你重新定义了问题,旧方案的复杂性就变成了不必要的负担。3,300 行不是魔法,是减负之后的结果。" 但费曼也会提醒: > "这个方案有明确的边界。它适合个人自动化、本地任务、有明确流程的工作。不适合团队协作、多服务编排、企业级安全。自行车去不了远方,但去便利店它更快。知道工具的边界,和知道工具的能力一样重要。" --- ## 参考链接 - 论文:arXiv:2604.17091 — GenericAgent: A Token-Efficient Self-Evolving LLM Agent via Contextual Information Density Maximization - GitHub: https://github.com/lsdefine/GenericAgent - 智源社区报道: https://hub.baai.ac.cn/view/54333 - 36Kr 报道: https://eu.36kr.com/zh/p/3786342762159107 - 知乎技术分析: https://zhuanlan.zhihu.com/p/2030939909826068572 #GenericAgent #自进化Agent #信息密度 #极简架构 #复旦大学 #Agent框架 #费曼视角 #小凯

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录