为什么技能塞得越多,Agent 反而越笨?聊聊技能膨胀与隔离设计

左侧单体 Agent 被杂乱繁重的工具淹没不知所措,右侧三位专职 Agent 分工明确、各持专用工具高效协作。

很多刚接触 Agent 扩展机制的开发者,都会经历这样一个阶段:

发现仓库里、社区中有各种实用的 Skill(技能扩展)——代码审查、全库重构、Git 提交、Docker 运维、数据库查询、文档生成、网页抓取、社交发帖……兴奋之下,把能找到的 20 多个 Skill 一口气全部塞进同一个主力 Agent 里,期待获得一个无所不能的“超级全栈助手”。

然而实际跑起来后,现实往往令人沮丧:

这正是社区近来广泛讨论的技能膨胀(Skill Bloat)与单体 Agent(God Agent)陷阱。本文将深入剖析技能过度堆叠导致模型智商“降级”的底层机制,并介绍 Holon 如何通过基于角色的技能隔离来解开这个死结。

技能过度堆叠的四大底层矛盾

把所有技能装给一个 Agent,本质上是用人类对“软件插件”的传统直觉,套用在了基于概率预测的语言模型上。语言模型的上下文空间既是工作记忆,也是注意力资源。一旦工具数量突破阈值,系统就会遭遇以下四大不可调和的矛盾:

1. Token 基础税与注意力稀释(Attention Dilution)

在当前主流的 Agent 实现中,Skill 的本质是携带了一系列工具元数据(Tool Schema)和工作流指引(Workflow Guidance)的提示词注入。

当一个 Agent 挂载了 25 个 Skill 时:

2. 行为准则与人设互斥(Instruction & Persona Collision)

工具定义不仅包含函数签名,往往还伴随核心的行为规范。而不同工种的行为规范在逻辑上往往是高度互斥的。

最具代表性的冲突发生在 Code Reviewer(审查员) 与 Software Developer(开发者) 之间:

角色维度Code Reviewer 技能规范Software Developer 技能规范
核心目标挑剔审视、寻找隐患、确保规范快速实现、最小改动、尽快落盘验证
操作边界严格只读,绝不主动修改被审代码读写俱全,发现错误立即 ApplyPatch 修复
输出标准必须附带严密的一手证据链与审查意见输出可工作的代码实现与通过的测试

如果将这两类技能硬塞给同一个 Agent,模型在接收到模糊指令(如“帮我看下这个 PR 为什么挂了”)时就会陷入行为分裂:

3. 工具混淆与参数幻觉(Tool Schema Confusion)

当技能库膨胀后,工具命名和功能的相似度急剧上升:

面对功能重叠的工具群,模型进行决策时往往会产生“选择瘫痪”:

4. 信任边界坍塌与爆炸半径(Blast Radius Explosion)

安全性是单体 Agent 最致命的短板。

遵循安全工程中的最小特权原则(Principle of Least Privilege),一个负责抓取外部网页或阅读邮件的 Agent,其运行环境应该高度沙箱化,甚至不应具备本地代码执行与私有凭据访问权限,以抵御潜在的 Prompt 注入攻击(Indirect Prompt Injection)。

但如果开发者为了图方便打造了一个“全能 Agent”:

一旦不可信内容中潜藏了恶意对抗指令,Agent 的整条防线就会瞬间被突破,恶意内容可以直接操纵本地工具执行未授权操作。把所有技能堆在一处,等同于主动拆除了所有信任边界。

Holon 的解法:以职责定义角色,按角色隔离技能

在 Holon 的架构哲学中,解决技能膨胀的核心不是发明更复杂的“动态工具路由过滤算法”,而是回归现实世界人类团队的成熟协作范式:专业分工与职责隔离。

在软件团队中,我们不会要求同一个人既当全栈开发、又当严苛的合规审计员、还要管生产环境发布和公关社交账号。对于 Agent 亦是如此。

1. 共享技能库(Skill Library)与专属挂载

Holon 采用“集中管理、按需授权”的技能机制:

每个 Agent 每次与模型交互时,上下文仅携带该角色必需的 3~5 个工具,系统提示词干净轻量,注意力零稀释,Token 成本大幅降低。

2. 独立的身份契约(AGENTS.md)与工作区(Workspace)

每个长期存在的 Agent 拥有独立的配置空间:

3. 基于 WorkItem 与委派的清晰协作

分工之后,复杂任务如何完成?

在单体 Agent 架构中,用户试图在一个巨型对话会话里通过反复提示“你现在是审查者……你现在是开发者……”来切换模式,这种软性提示极易失效。

而在 Holon 中:

  1. 明确的事项承载(WorkItem):目标、验收证据与执行状态持久化在独立的工单中,不受单次对话上下文长度限制;
  2. 事件驱动的委派(Delegation):开发 Agent 完成代码补丁后,向审查 Agent 发起只读审查委派;审查 Agent 在完全隔离的独立上下文环境中审阅变更、提出阻断性意见或给出通过凭据;
  3. 等待与唤醒:开发 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. 在角色目录下局部挂载专有规范与工具

3. 在角色目录中启动会话,指向目标仓库

日常使用时,不要直接在杂乱的项目根目录里全局开跑,而是在专职角色目录下启动 Agent,并通过提示词或参数让它去操作目标仓库或具体的 Git worktree:

# 启动审查专员检查目标仓库的 PR
cd ~/.agents/code-reviewer && claude "审查 /path/to/my-repo 中的最新改动"

这种做法的好处立竿见影:

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。

把大目标拆解开来:

  1. 梳理你最常用的 2~3 个核心日常场景(如开发、审查、文档);
  2. 分别创建具备独立身份的长期 Agent;
  3. 仅为它们挂载最少必要技能,并赋予清晰的职责准则。

你将发现,少即是多。当每个 Agent 拥有干净聚焦的上下文时,哪怕是参数规模适中的模型,也能输出令人惊艳的高质量成果。


推荐阅读与实操指南

本文相关机制与设计验证基于 Holon 长期运行环境记录。