为什么技能塞得越多,Agent 反而越笨?聊聊技能膨胀与隔离设计
很多刚接触 Agent 扩展机制的开发者,都会经历这样一个阶段:
发现仓库里、社区中有各种实用的 Skill(技能扩展)——代码审查、全库重构、Git 提交、Docker 运维、数据库查询、文档生成、网页抓取、社交发帖……兴奋之下,把能找到的 20 多个 Skill 一口气全部塞进同一个主力 Agent 里,期待获得一个无所不能的“超级全栈助手”。
然而实际跑起来后,现实往往令人沮丧:
- 原本干净利落的代码改动,现在动辄在几个相似的查找工具间反复横跳;
- 让它审阅 PR,它却顺手修改了代码并直接准备提交;
- 偶尔让它查个文档,它却尝试去拉取线上环境的 Docker 状态;
- 哪怕只说一句“你好”,首字响应延迟和 Token 消耗都肉眼可见地飙升。
这正是社区近来广泛讨论的技能膨胀(Skill Bloat)与单体 Agent(God Agent)陷阱。本文将深入剖析技能过度堆叠导致模型智商“降级”的底层机制,并介绍 Holon 如何通过基于角色的技能隔离来解开这个死结。
技能过度堆叠的四大底层矛盾
把所有技能装给一个 Agent,本质上是用人类对“软件插件”的传统直觉,套用在了基于概率预测的语言模型上。语言模型的上下文空间既是工作记忆,也是注意力资源。一旦工具数量突破阈值,系统就会遭遇以下四大不可调和的矛盾:
1. Token 基础税与注意力稀释(Attention Dilution)
在当前主流的 Agent 实现中,Skill 的本质是携带了一系列工具元数据(Tool Schema)和工作流指引(Workflow Guidance)的提示词注入。
当一个 Agent 挂载了 25 个 Skill 时:
- 隐性成本:每个 Skill 附带 2~5 个工具定义,每个工具包含参数类型、字段描述与约束规则。每次向模型发起请求,无论实际任务有多简单,系统提示词中光是工具定义就可能占据 8,000 到 15,000 个 Token。这就是每轮交互都必须支付的“基础税”。
- 注意力退化:Transformer 的注意力机制并不是无限均匀的。当上下文充斥着大量当前任务完全用不到的工具描述时,真正与当前需求相关的关键约束就会被稀释。模型更容易丢失长距离依赖,出现“看漏条件”或“答非所问”。
2. 行为准则与人设互斥(Instruction & Persona Collision)
工具定义不仅包含函数签名,往往还伴随核心的行为规范。而不同工种的行为规范在逻辑上往往是高度互斥的。
最具代表性的冲突发生在 Code Reviewer(审查员) 与 Software Developer(开发者) 之间:
| 角色维度 | Code Reviewer 技能规范 | Software Developer 技能规范 |
|---|---|---|
| 核心目标 | 挑剔审视、寻找隐患、确保规范 | 快速实现、最小改动、尽快落盘验证 |
| 操作边界 | 严格只读,绝不主动修改被审代码 | 读写俱全,发现错误立即 ApplyPatch 修复 |
| 输出标准 | 必须附带严密的一手证据链与审查意见 | 输出可工作的代码实现与通过的测试 |
如果将这两类技能硬塞给同一个 Agent,模型在接收到模糊指令(如“帮我看下这个 PR 为什么挂了”)时就会陷入行为分裂:
- 它本该作为审查者指出设计缺陷,却因为身上装配了代码修改工具而“越权代劳”,直接把工作区改得一团糟;
- 或者在需要大刀阔斧重构时,受审查规范影响,只输出一堆挑剔评论却迟迟不肯动手落盘。
3. 工具混淆与参数幻觉(Tool Schema Confusion)
当技能库膨胀后,工具命名和功能的相似度急剧上升:
- 文件查找工具可能同时存在 3 种(全局模糊搜索、语法树语义搜索、精准正则匹配);
- 文档处理工具可能有 4 种(Markdown 格式化、PDF 解析、DOCX 转换、纯文本提取)。
面对功能重叠的工具群,模型进行决策时往往会产生“选择瘫痪”:
- 误选低效路径:明明一个简单的本地
rg -n就能定位行号,模型却可能调用重型的外部知识检索工具; - 跨工具参数混淆:把工具 A 的专用参数拼接到工具 B 的调用载荷中,导致运行时返回参数校验错误;
- 工具调用死循环:在两个相似工具之间来回尝试,消耗大量时间和配额却毫无实质进展。
4. 信任边界坍塌与爆炸半径(Blast Radius Explosion)
安全性是单体 Agent 最致命的短板。
遵循安全工程中的最小特权原则(Principle of Least Privilege),一个负责抓取外部网页或阅读邮件的 Agent,其运行环境应该高度沙箱化,甚至不应具备本地代码执行与私有凭据访问权限,以抵御潜在的 Prompt 注入攻击(Indirect Prompt Injection)。
但如果开发者为了图方便打造了一个“全能 Agent”:
- 这个 Agent 既有读取不可信外部数据的能力(如网络搜索、邮件抓取);
- 又同时拥有危险的写权限(如 Git 提交、服务器命令执行、数据库写入、社交平台发布)。
一旦不可信内容中潜藏了恶意对抗指令,Agent 的整条防线就会瞬间被突破,恶意内容可以直接操纵本地工具执行未授权操作。把所有技能堆在一处,等同于主动拆除了所有信任边界。
Holon 的解法:以职责定义角色,按角色隔离技能
在 Holon 的架构哲学中,解决技能膨胀的核心不是发明更复杂的“动态工具路由过滤算法”,而是回归现实世界人类团队的成熟协作范式:专业分工与职责隔离。
在软件团队中,我们不会要求同一个人既当全栈开发、又当严苛的合规审计员、还要管生产环境发布和公关社交账号。对于 Agent 亦是如此。
1. 共享技能库(Skill Library)与专属挂载
Holon 采用“集中管理、按需授权”的技能机制:
- 集中库(Library):机器或团队只需一次性添加各种 Skill(例如通过
holon skills add引入官方或开源技能); - 按 Agent 独立启用:技能默认不会全局注入。每个 Agent 在创建或配置时,只启用与自身角色严格匹配的极简技能集:
- 负责代码审阅的 Agent 仅挂载只读审查工具与 GitHub 事件监听;
- 负责代码实现的 Agent 挂载补丁修改、本地构建与测试执行工具;
- 负责知识沉淀的 Agent 挂载 Markdown 维基与文档链接校验工具。
每个 Agent 每次与模型交互时,上下文仅携带该角色必需的 3~5 个工具,系统提示词干净轻量,注意力零稀释,Token 成本大幅降低。
2. 独立的身份契约(AGENTS.md)与工作区(Workspace)
每个长期存在的 Agent 拥有独立的配置空间:
- 专属
AGENTS.md:明确定义该 Agent 的角色定位、常驻职责、操作边界(Authority Boundary)以及必须向人类操作者升级确认的红线。指令之间互不干扰,彻底杜绝人设精神分裂; - 独立的工作区投影:开发 Agent 可以独占一个干净的 Git worktree 进行源码修改与构建,而审查 Agent 则以只读方式投影主工作区,物理隔离文件写入权限。
3. 基于 WorkItem 与委派的清晰协作
分工之后,复杂任务如何完成?
在单体 Agent 架构中,用户试图在一个巨型对话会话里通过反复提示“你现在是审查者……你现在是开发者……”来切换模式,这种软性提示极易失效。
而在 Holon 中:
- 明确的事项承载(WorkItem):目标、验收证据与执行状态持久化在独立的工单中,不受单次对话上下文长度限制;
- 事件驱动的委派(Delegation):开发 Agent 完成代码补丁后,向审查 Agent 发起只读审查委派;审查 Agent 在完全隔离的独立上下文环境中审阅变更、提出阻断性意见或给出通过凭据;
- 等待与唤醒:开发 Agent 在收到明确审查反馈前进入休眠等待,审查完成通过事件唤醒开发 Agent 继续推进,直至交付闭环。
整个流程中,每个 Agent 都只做自己最擅长的事,每个上下文窗口都保持高度聚焦。
不只 Holon:在 Claude Code 或 Codex 中落地“Agent Home”目录隔离
这套“角色化分工与技能局部挂载”的思想,并不受限于特定的工具框架。如果你日常主要使用 Claude Code、OpenAI Codex CLI 或其他命令行 Agent,也完全不必把所有 Skill、MCP 工具全局堆在 ~/.claude.json 或单体项目配置中。
你可以借鉴 Agent Home 目录隔离法,用文件系统低成本打造干净的专职角色:
1. 为专职角色创建独立的 Agent Home 目录
在本地建立专门的角色工作目录,例如:
mkdir -p ~/.agents/code-reviewer ~/.agents/developer ~/.agents/docs-steward
2. 在角色目录下局部挂载专有规范与工具
- 独立的行为边界(
CLAUDE.md/AGENTS.md): 在~/.agents/code-reviewer/CLAUDE.md中写明该角色为“只读审查员”,明确“严禁直接修改业务代码”、“每条建议必须附带原代码行号与证据”;在~/.agents/developer/CLAUDE.md中则定义代码工程准则与测试规范。 - 局部的 MCP / 工具配置:
只在对应角色目录下配置
.mcp.json或本地脚本。例如:code-reviewer目录只启用 AST 只读解析、静态分析和 GitHub PR 读取 MCP;developer目录挂载文件编辑、构建工具和单元测试 runner;docs-steward目录仅挂载 Markdown 校验和文档索引工具。
3. 在角色目录中启动会话,指向目标仓库
日常使用时,不要直接在杂乱的项目根目录里全局开跑,而是在专职角色目录下启动 Agent,并通过提示词或参数让它去操作目标仓库或具体的 Git worktree:
# 启动审查专员检查目标仓库的 PR
cd ~/.agents/code-reviewer && claude "审查 /path/to/my-repo 中的最新改动"
这种做法的好处立竿见影:
- 模型每次交互时,系统提示词中永远只有该角色必需的 3~5 个工具定义;
- 没有全局工具的干扰,模型的长文本注意力始终集中在业务代码上;
- 工具调用命中率显著提升,彻底告别参数混淆与越权乱改。
4. 从“手工目录隔离”到“专有运行时”的演进
通过目录隔离打造专职 Agent,是每个人今天花 5 分钟就能落地的轻量实践。
随着多角色协作的深入,你可能会进一步遇到更复杂的协作诉求:比如怎么让审查 Agent 审完后自动通知开发 Agent?怎么在开发 Agent 等待审查时挂起进程、不浪费 Token?怎么让跨天的长任务拥有独立的生命周期?
这就是为什么 Holon 进一步将这一模式系统化:在保持每个 Agent 拥有独立配置目录(agent_home)与专属技能库的同时,提供了持久化工单(WorkItem)、事件等待与唤醒(Wait/Wake)以及工作区物理投影。目录隔离是基石,运行时协同则是水到渠成的进阶。
核心对比总结
| 维度 | 单体多能 Agent(God Agent) | Holon 角色化隔离多 Agent |
|---|---|---|
| 提示词体积 | 极度臃肿(随技能线性膨胀,常年万级 Token) | 极致轻简(通常仅保留 3~5 个核心工具) |
| 模型决策准确率 | 工具描述互相干扰,易出参数幻觉与调用死循环 | 工具意图明确单一,调用命中率极高 |
| 行为一致性 | 规则冲突,经常出现“只说不改”或“擅自乱改” | 行为规范固定在 AGENTS.md,执行坚决一致 |
| 安全防护等级 | 零隔离,单点 Prompt 注入即可撬动全量权限 | 权限物理沙箱隔离,外部数据输入不接触破坏性工具 |
| 协作演进能力 | 改动一处可能影响所有工作流,难以维护 | 增减独立 Agent 互不影响,支持团队渐进式扩展 |
从今天开始,为你的 Agent 减负
如果你正在为 Agent 的“注意力涣散”或“工具误选”感到困扰,不妨尝试停止往单一会话或单一实例中无休止地塞入 Skill。
把大目标拆解开来:
- 梳理你最常用的 2~3 个核心日常场景(如开发、审查、文档);
- 分别创建具备独立身份的长期 Agent;
- 仅为它们挂载最少必要技能,并赋予清晰的职责准则。
你将发现,少即是多。当每个 Agent 拥有干净聚焦的上下文时,哪怕是参数规模适中的模型,也能输出令人惊艳的高质量成果。
推荐阅读与实操指南
- 想要手把手为不同的 Agent 分配专属技能与行为边界?请阅读实操指南:为不同角色规划与隔离 Agent Skills。
- 了解 Holon 官方长期角色的配置实践:从模板创建专属 Agent。
- 深入理解长期事项与上下文隔离的技术原理:为什么需要 WorkItem?。
本文相关机制与设计验证基于 Holon 长期运行环境记录。
