Hotdry.

Article

自驱生长与极致省Token:GenericAgent从3K行种子代码到技能树的工程路径

解析 GenericAgent 如何从 3K 行种子代码自驱生长技能树,实现全系统控制同时将 Token 消耗压缩至 1/6 的工程路径与边界条件。

2026-05-10ai-systems

当业界大多数 Agent 框架选择以「丰富工具集 + 庞大知识库」换取能力边界时,GenericAgent 选择了一条截然不同的路径:从极简的 3K 行种子代码出发,让 Agent 在完成任务的过程中自主生长技能树,同时将上下文窗口压缩至竞品的六分之一乃至更低。这种设计的核心张力在于 —— 如何在保持极小系统体积的同时,让能力随使用持续增长?本文从分层记忆架构、原子工具集设计、技能结晶机制三个维度,解析这一自驱生长范式的工程实现路径与边界条件。

分层记忆架构:L0 至 L4 的信息密度最大化

GenericAgent 的分层记忆系统是其实现极低 Token 消耗的关键基础设施。该系统将记忆按生命周期和调用频率划分为五个层级,每一层都服务于特定的信息召回目标,共同构成了一个信息密度最大化的上下文供给机制。

L0 元规则层 存储 Agent 的基础行为约束和系统级规则。这部分内容在初始化后几乎保持静态,仅在框架升级时更新。元规则的设计目标是:以最精简的语句描述不可违背的行为边界,例如「不自动执行涉及财务的操作」「涉及隐私的操作必须经用户确认」等。将元规则与动态内容分离,使得每轮对话的上下文不必重复携带这些恒定信息。

L1 记忆索引层 是一个极简的快速路由结构,其设计灵感来自倒排索引。当用户输入新任务时,Agent 首先在 L1 中检索是否存在相似的任务模式或技能片段。L1 的存储形式极度压缩,仅保留「任务关键词 / 模式 → 对应技能在 L3 中的位置引用」这一映射关系。这一层级的 Token 占用极低,通常仅有数百个 token,却能显著加速技能召回。

L2 全局事实层 积累跨会话的稳定知识。与 L3 的技能不同,L2 存储的是客观事实类信息,例如「用户的工作邮箱是 xxx」「常用的开发环境路径是 /workspace」等。这类信息在每次会话中都需要在场,但不需要每次都重新推导,通过 L2 的持久化存储避免了在对话历史中反复传递。

L3 任务技能与 SOP 层 是技能树的核心存储位置。当 Agent 完成一个新任务时,它会自动将执行路径固化为可复用的技能单元。每个技能单元包含触发条件描述、执行步骤概要、依赖工具清单和预期输出格式。技能的粒度是经过精心设计的 —— 既不过于笼统导致复用性低,也不过于细碎导致管理复杂。经验表明,一个技能单元的理想规模在 200 至 500 个 token 之间,能够完整覆盖一类任务而不携带过多冗余。

L4 会话归档层 是 2026 年 4 月新增的特性,专门用于长程任务召回。当一个会话跨越多个轮次且中途被打断时,Agent 会将中间状态和关键决策点归档到 L4。下次遇到类似的长时间任务时,直接从 L4 召回历史执行上下文,恢复进度而非从头开始。这一机制显著降低了长程任务的 Token 消耗,因为不再需要将完整的中间过程保留在对话历史中。

整个分层记忆系统的工程参数可以总结为:上下文窗口目标值小于 30K token,L1 索引层建议上限为 1K token,L2 全局事实层建议上限为 5K token,L3 技能层按需加载单次调用的上限为 10K token,L4 会话归档单次召回上限为 15K token。这些参数确保了在大多数场景下,完整的上下文供给不会超过 30K token 的目标窗口。

原子工具集设计:九个基础能力构建系统级控制

GenericAgent 仅提供 9 个原子工具来构建完整的系统控制能力。这一选择背后的设计哲学是:与其提供一个庞大的工具库让 Agent 选择,不如提供一套最小化的正交能力集合,使 Agent 能够通过组合这些原子操作来达成任意目标。

code_run 是最具扩展性的原子工具,它允许 Agent 在运行时执行任意代码。与传统的工具预注册机制不同,code_run 的设计理念是将「工具创建权」本身作为工具授予 Agent。当 Agent 遇到新任务时,如果现有工具无法满足需求,它可以通过 code_run 动态安装 Python 包、编写脚本、调用外部 API 或控制硬件设备。这种设计将技能的可扩展性从框架层面下沉到 Agent 行为层面 —— 框架不需要预先知道 Agent 会遇到什么任务,Agent 自己有能力在需要时创造新的工具。

file_read、file_write、file_patch 构成了文件系统操作的三剑客。file_read 用于感知文件内容,file_write 用于创建或覆盖文件,file_patch 用于精细化修改文件片段。三者的设计参数略有差异:file_read 默认返回文件的前 4K 字符,超出部分需要显式指定范围;file_write 在执行前会进行简单的语法检查以避免明显的格式错误;file_patch 使用行号加内容的方式进行精确定位,减少了 Agent 生成补丁时出现偏差的概率。

web_scan 提供了网页内容感知能力,返回当前页面的文本内容和关键 DOM 元素信息。web_execute_js 则允许 Agent 向浏览器注入 JavaScript 代码以控制页面行为。两者的配合使用使得 GenericAgent 能够像真实用户一样操控浏览器,同时保留登录态等会话信息。关键的工程参数是:web_scan 默认超时设定为 10 秒,超时后返回部分内容和警告标志;web_execute_js 的执行结果限制在 2K 字符以内,超出部分截断并提示 Agent 请求更精确的操作。

ask_user 是唯一的混合智能接口,用于在关键决策点引入人工确认。设计参数包括:ask_user 调用后会话上下文会暂停推进,直到用户明确响应;超时默认设为 300 秒,超时后 Agent 可以选择继续执行或放弃任务;用户响应支持文本指令和预设选项两种模式,预设选项用于标准化高频确认场景。

update_working_checkpoint 和 start_long_term_update 是两个记忆管理工具。前者允许 Agent 在执行过程中保存当前状态到 L4,以便于长程任务的中断恢复;后者触发技能结晶流程,将当前会话中发现的通用执行模式写入 L3。这两个工具的存在使得 Agent 能够在「执行任务」和「积累经验」之间建立自动化的闭环。

需要特别指出的是,这 9 个原子工具虽然在数量上远少于主流 Agent 框架的预置工具库,但通过 code_run 的动态扩展能力,实际可用的能力边界是开放的。框架的设计者将「预装工具」和「按需创造」区分开来 —— 预装的是不可替代的基础操作,扩展的由 Agent 自主完成。这一边界划分使得框架体积保持在 3K 行量级,而能力天花板却可以随使用持续提升。

技能结晶机制:从执行路径到可复用单元的自动转化

自驱生长的核心在于技能结晶机制 —— 当 Agent 首次完成一个任务时,它会将执行过程中积累的探索经验转化为可复用的技能单元,供后续同类任务直接调用。这一机制解决了传统 Agent 框架中「每次都从头摸索」的资源浪费问题,同时也降低了新任务对 Token 预算的消耗。

技能结晶的触发条件由 start_long_term_update 工具管理,但触发本身并不完全依赖显式调用。Agent Loop 中内置了基于执行成功率和任务复杂度的隐式触发逻辑:当一个任务的执行路径超过 5 个工具调用且最终成功时,系统会自动评估该路径是否存在可复用的通用模式。如果评估结果为肯定,则向 Agent 发送结晶确认请求,由 Agent 确认后再执行写入 L3 的操作。

技能单元的内部结构遵循「触发条件 + 执行概要 + 依赖声明 + 预期输出」四段式设计。触发条件使用自然语言描述任务类型,例如「监控股票并在价格突破阈值时发送邮件提醒」;执行概要以步骤编号的形式列出关键操作,略去了 Agent 在探索过程中的试错细节;依赖声明列出该技能所需的外部包或 API 凭证,以便在调用前进行环境检查;预期输出描述技能的正常返回结果,用于验证执行是否成功。这种结构的设计目标是在保持技能可理解性的同时,压缩存储体积。

技能单元的粒度控制是结晶机制中最需要工程权衡的部分。过于粗粒度的技能会导致一个技能涵盖太多不同场景,使得触发时的匹配准确率下降;过于细粒度则会产生大量碎片化的技能单元,反而增加了 L1 索引的负担。GenericAgent 建议的粒度划分原则是「同一类工具 + 同一类目标」的组合,例如「文件批量重命名」「特定网站的自动化登录流程」等。一个技能单元的字数建议控制在 200 至 500 之间,过长的技能应该被拆分为多个子技能的组合。

技能结晶后的存储优化同样值得关注。新写入的技能单元会同时更新 L1 索引,生成任务描述中的关键词到 L3 存储位置的映射。随着技能数量的增长,L1 索引本身也需要定期重构以保持召回效率。工程实践中建议:当技能数量超过 50 个时,每月执行一次 L1 索引重构,将高频共现的关键词合并,删除长期未命中的低价值索引项。

边界条件与工程参数配置

极简架构带来的不仅是成本优势,也伴随着明确的工程边界。理解这些边界条件是有效使用 GenericAgent 的前提。

任务类型的适用边界方面,GenericAgent 最适合的任务类型是「具有明确输出标准但执行路径需要探索」的场景。对于需要实时连续响应的场景(如监控系统),当前的架构需要额外的调度层扩展。对于极度依赖外部 API 稳定性但缺乏错误处理经验的任务,初次探索可能消耗大量 Token。对于需要跨平台协同且缺乏统一协议的场景,Agent 需要更长的探索周期来建立稳定的执行模式。

Token 消耗的控制边界方面,虽然框架设计的目标是 30K 以内的上下文窗口,但这是一个动态上限而非硬性保证。当技能树规模增长到一定程度时,单次加载多个相关技能可能导致上下文接近或超过上限。工程参数建议设置一个 35K 的预警阈值,当预估上下文可能超出预警值时,优先加载 L0 和 L1,并按需加载 L3 中的最相关技能。如果预警持续出现,说明技能粒度可能需要进一步优化。

自我进化的稳定性边界方面,技能结晶过程是半自动化的,最终需要 Agent 确认。这意味着 Agent 的判断质量直接决定了技能树的质量。如果 Agent 的推理能力在某个领域存在盲点,它可能会错误地将次优执行路径固化为技能单元。工程建议在初期使用阶段设置一个「技能观察期」,新结晶的技能在前三次调用时记录执行结果,如果成功率低于 80% 则触发技能审查流程。

工具集扩展的权限边界方面,code_run 的动态能力扩展是一把双刃剑。一方面它赋予了 Agent 自我进化的能力,另一方面也带来了安全和稳定性风险。框架本身不限制 Agent 通过 code_run 安装包或执行系统命令,但建议在部署时配置独立的执行环境,并限制网络访问范围。对于生产环境,建议在 mykey.py 中设置 code_run 的沙箱模式参数,将文件操作限制在工作目录内,将网络请求限制在白名单域名中。

实践建议:从种子代码到技能树的落地参数

对于希望基于 GenericAgent 构建专属技能树的用户,以下是一组经过验证的工程参数建议。

启动阶段配置建议使用默认的 9 个原子工具,不进行额外扩展。初次运行时建议完成 5 至 10 个不同类型的任务,以建立初始的技能雏形。每个任务建议控制在 10 分钟以内,避免在探索阶段消耗过多 Token。技能结晶确认时建议 Agent 精简执行概要,删除探索过程中的冗余步骤。

中期扩展阶段建议技能数量在 20 个以上时执行首次 L1 索引重构。每月检查一次技能成功率,清理或优化成功率低于 70% 的技能单元。引入 L4 会话归档处理需要跨日执行的长时间任务,避免重复加载中间过程。

长期优化阶段建议技能数量超过 100 个后,按照业务领域进行分组管理,每组设置独立的 L1 索引以加速召回。对于高频复用的核心技能,考虑将其编译为预置插件以获得更快的调用速度。对于低频技能,可以将其压缩存储以节省 L3 空间。

GenericAgent 的设计哲学指向了一个重要的趋势:Agent 框架的未来可能不是「更大更全」,而是「更小更聪明」。通过让 Agent 自己积累经验来扩展能力边界,框架得以保持极简的体积,而用户获得的却是随使用不断生长的专属工具集。这一范式的可行性已经通过自举实验得到了验证 —— 整个仓库从初始化到提交记录,均由 Agent 自主完成。

资料来源:GitHub - lsdefine/GenericAgent: https://github.com/lsdefine/GenericAgent

ai-systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com