
1. 为什么你的 Agent 越接越卡从 MCP 工具爆炸说起如果你正在给 AI Agent 接能力大概率踩过这个坑一开始只连了一个 MCP Server感觉挺爽后来陆续加了 GitHub、数据库、文件系统、浏览器某天突然发现——明明只问了一句「今天几号」账单却烧掉了几万 Token而且模型开始「犯迷糊」该调的工具不调不该调的乱调。这不是你的错觉而是 MCP 架构的固有代价。MCP 的机制决定了每一个连接的 Server必须在对话开始前把它所有工具的完整定义名称、描述、参数 Schema、示例一次性注入上下文。一个 GitHub MCP 自带 30 多个工具按每个工具 500 Token 算光这一个就吃掉近 2 万 Token。你连 5 个 Server还没开始干活上下文已经被工具定义塞满了。更麻烦的是「注意力稀释」。工具越多模型越容易分心。在 MCP Atlas 这类包含 40 多个 Server、300 多个工具的基准测试里即便是当前最强的模型工具调用准确率也会随着工具数量增加而明显下滑。Agent Skills 就是冲着这两个问题来的。它是什么一句话把重复性的专业流程打包成「文件夹形态的能力插件」让 Agent 按需加载、用多少拿多少。它能做什么让 Agent 在需要时才读取操作手册、才加载脚本平时只保留几百 Token 的「目录」。适合谁正在搭建 Agent 能力、被 MCP 成本和准确率双重折磨的开发者。这篇文章不讲空概念我会带你走完从 SKILL.md 结构、渐进式披露机制到可复制的配置骨架、TaoToken 统一 Key 接入、再到验证 Skills 是否真正生效的完整链路。读完你能自己写出第一个能跑的 Skill并且知道它和 MCP 的边界在哪。2. SKILL.md 结构拆解与渐进式披露机制实战2.1 一个 Skill 到底长什么样Agent Skills 官方文档反复强调一个关键词File-system based基于文件系统。理解这一点后面全通。你可以把它类比成写代码时的import。程序不需要把所有依赖代码抄进主文件而是从node_modules里按需取。Skill 也是这个逻辑每个 Skill 就是一个真实存在的文件夹放在固定位置比如.claude/skills或.opencode/skills里面装着几样东西SKILL.md核心指令告诉 AI 怎么干活的 SOP必须有。reference/更详细的参考文档可选。scripts/可执行脚本Python、Node.js 等可选。assets/图片、模板等资源可选。SKILL.md 的开头是三根短横线包裹的元数据相当于 Skill 的「身份证」--- name: article-polish description: 用于润色中文技术文章。当用户要求「润色」「改写」「优化表达」「调整语气」一段技术文本时使用。不适用于从零创作或翻译。 --- ## 目标 把用户提供的技术文章改写得更通顺、更专业同时保留原意和技术准确性。 ## 使用步骤 1. 先确认用户想要的风格严谨/轻松/科普。 2. 通读原文标记出逻辑跳跃和口语化表达。 3. 逐段改写保持技术术语不变。 4. 输出时保留原文的代码块和链接。 ## 注意事项 - 不要新增原文没有的事实。 - 不要替用户做删减决定有歧义先提醒。 - 代码块内容一律不动。name是唯一标识起个简单好记的英文名。description决定什么时候触发——这是整个 Skill 最关键的字段。描述越具体、越贴近真实用户措辞越容易在正确场景被调用。很多人写的 Skill 不生效90% 是 description 太笼统比如只写「用于处理文章」模型根本判断不出该不该用。2.2 渐进式披露三层加载按需取用这是 Agent Skills 设计得最聪明的地方。你可以把它想象成去图书馆查资料的三步第一层先看目录元数据 Metadata系统启动时只加载每个 Skill 的name和description。这一层占用极小几十个 Skill 也就几千 Token。它的作用是告诉模型「你的工具箱里有这些能力」。此时模型知道自己「会什么」但不知道「具体怎么做」。第二层翻开手册指令 Instructions当用户说「帮我把这段润色一下」模型发现这归article-polish管才会去读取那个文件夹里的 SKILL.md。详细步骤、注意事项这时才进入上下文。第三层动手干活运行时资源 Runtime Resources真正执行时才加载 reference 和 scripts。比如任务是「分析 Excel」还是「创建 Excel」对应不同的 reference 文档只有识别到具体意图才去读。而 scripts 里的代码根本不会塞给模型读模型只按指引执行脚本一个几百行的 Python 文件也不会消耗 Token。这意味着一个 Skill 可以打包整套文档和大量脚本只要任务不需要这些内容永远不占上下文。对比 MCP「连接即注入全部工具定义」的做法差距是数量级的。2.3 Skills 和 MCP 的协作边界那 MCP 会被淘汰吗结论是不会被淘汰但需求会大幅减少。MCP 的真正价值在协议层——它统一了 AI 连接外部世界的方式。如果你是一个通用三方平台地图、笔记、SaaS想让所有 Agent 都能用上你的能力首选还是发布 MCP Server。但如果你有的是重复性工作流——固定流程读写本地文件、标准范式 Review 代码、固定风格写文章——这些场景用 Skill 更合适。过去这些需求里的本地文件读写、连 GitHub、生成图片都得靠 MCP现在可以打包进 Skill。未来的格局大概率是Agent 内置核心能力bash、read、edit、write少数通用 MCP Server 负责远程连接大量 Skills 负责封装标准工作流。两者在必要时协作但 Skills 承担绝大部分「教 AI 怎么做事」的工作。3. 可复制配置SKILL.md 骨架 TaoToken 统一 Key 接入3.1 一个可直接用的 SKILL.md 骨架下面这个骨架你可以直接复制改掉 name 和 description 就能用。我把它设计成「外部知识检索」场景因为这是最能体现 Skills 价值的实战方向--- name: kb-retrieval description: 用于从本地知识库检索信息并回答用户问题。当用户询问「根据文档」「查一下资料」「知识库里有没有」等需要检索本地文档的场景时使用。不适用于纯闲聊或通用知识问答。 --- ## 目标 基于本地 knowledge/ 目录下的 Markdown 文档回答用户问题并标注信息来源。 ## 使用步骤 1. 读取 knowledge/ 目录下的文件列表判断哪些文件可能相关。 2. 对相关文件执行关键词匹配定位候选段落。 3. 若候选段落不足以回答读取 reference/retrieval-guide.md 获取更细的检索策略。 4. 组织答案每个结论后标注来源文件名。 5. 若知识库中确实没有相关信息明确告知用户不要编造。 ## 注意事项 - 严禁编造知识库中不存在的内容。 - 引用时保留原文关键术语不要随意改写。 - 涉及代码片段时原样输出。注意description里我特意写了「不适用于纯闲聊或通用知识问答」——负向描述同样重要它能防止 Skill 在不该触发的时候被误调用。3.2 用 TaoToken 统一 Key 打通模型通道Skill 本身只是「说明书」真正干活还得靠模型。如果你在多个客户端Claude Code、Cline、Codex之间切换每个都要单独配 Key 很麻烦。用 TaoToken 的统一通道可以一次配好处处可用。先拿到你的 Key访问 TaoToken API Keys 页面 创建然后按客户端配置。Claude Code 的 settings.json 配置路径~/.claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的TaoToken密钥, ANTHROPIC_MODEL: claude-sonnet-4-5-20250929 } }Cline / Roo Code 的配置在插件设置里填{ apiProvider: openai, openAiBaseUrl: https://taotoken.net/api, openAiApiKey: sk-你的TaoToken密钥, openAiModelId: claude-sonnet-4-5-20250929 }Codex 的 auth.json 配置路径~/.codex/auth.json{ OPENAI_API_KEY: sk-你的TaoToken密钥, OPENAI_BASE_URL: https://taotoken.net/api }三件套记牢Base URL Key Model ID缺一不可。Base URL 统一用https://taotoken.net/api不要加 UTM 参数。3.3 把 Skill 放到正确位置不同客户端的 Skill 目录大同小异都是.客户端名/skills客户端Skill 目录Claude Code.claude/skills/OpenCode.opencode/skills/Cursor.cursor/skills/Codex.codex/skills/把你的 Skill 文件夹比如kb-retrieval/整个放进去不需要任何「安装」或「注册」动作。下次对话时模型会自动根据 description 匹配。4. 验证 Skills 是否真正生效三个可复现的测试动作配好了不代表生效了。很多人以为「文件放进去就行」结果 Skill 根本没被调用。下面三个动作帮你确认。4.1 动作一确认元数据被加载在客户端里直接问你现在有哪些可用的 Skills请列出名称和用途。如果配置正确模型应该能列出你放进去的 Skill 名称和 description。如果它说「没有 Skills」或答非所问说明目录位置错了或者客户端版本不支持 Skills。4.2 动作二触发一次真实调用用贴近 description 的自然语言提问比如对kb-retrieval根据知识库帮我查一下项目部署流程是怎样的。观察模型的反应。生效时你会看到它先读取knowledge/目录列表再定位文件最后组织答案并标注来源。如果它直接凭记忆瞎答说明 Skill 没触发——回去检查 description 是否够具体。4.3 动作三验证脚本执行如果你的 Skill 带 scripts让它跑一次获取当前系统时间。对带 Node.js 脚本的 Skill模型应该调用脚本并返回真实时间而不是编一个。这一步能确认「运行时资源」层是否正常工作。实测下来三个动作全过说明你的 Skill 从元数据到脚本的完整链路都通了。任何一个环节卡住对照下一节的排查表。5. 常见报错排查401、local proxy failed、reading choices、OAuthSkills 本身不复杂但接入模型通道时容易出问题。下面是我踩过的坑和对应解法。401 Unauthorized最常见。原因通常是 Key 没填对或者 Base URL 写错了。检查两点一是ANTHROPIC_AUTH_TOKEN或OPENAI_API_KEY是否完整复制别漏了sk-前缀二是 Base URL 必须是https://taotoken.net/api不要多加/v1或斜杠。改完重启客户端。local proxy failed / connection refused客户端连不上通道。先确认网络能访问taotoken.net再检查是不是本地配了别的代理把请求劫持了。如果你之前配过其他中转地址记得清掉环境变量里的HTTP_PROXY、HTTPS_PROXY。配置里只保留 TaoToken 的 Base URL。Error reading choices / unexpected response format这个报错通常出现在用 OpenAI 兼容格式调 Claude 模型时。原因是某些客户端默认按 OpenAI 的响应结构解析但模型返回格式不匹配。解法是确认客户端的apiProvider设置正确Claude 系列走 Anthropic 格式别混用。如果客户端支持优先选 Anthropic 原生协议。OAuth 相关报错 / authentication failed有些客户端如 Claude Code默认走 OAuth 登录流程你配了自定义 Base URL 后它还在尝试 OAuth就会冲突。解法是在 settings.json 里显式设置ANTHROPIC_AUTH_TOKEN并确保没有残留的 OAuth 凭证文件。必要时删掉旧的登录缓存重新配。Skill 不触发无报错但没调用这不是通道问题是 description 问题。把 description 改得更具体加入真实用户会说的措辞并补上「不适用于……」的负向边界。改完重启客户端让元数据重新加载。排查顺序建议先确认通道通能正常对话再确认 Skill 被加载动作一最后确认触发动作二。分层定位别一上来就怀疑 Skill 写错了。6. 从能跑到好用把 Skills 接进你的日常工作流到这里你已经有了一个能跑的 Skill 和一条稳定的模型通道。接下来是怎么让它真正省事。第一从最高频的重复流程开始封装。别一上来就写十个 Skill先挑那个你每天都要跟 AI 重复解释三遍的流程——比如代码 Review 规范、周报格式、文档翻译风格。把它写成 SKILL.mddescription 写细。第二善用 reference 分层。SKILL.md 保持精简把长文档、分支流程放进 reference/。这样主指令加载快细节按需读取Token 省得明明白白。第三脚本能干的别让模型读。任何确定性计算、格式转换、文件操作写成脚本让模型调用而不是让它「理解」代码。既省 Token 又避免幻觉。第四通道统一客户端随便换。用 TaoToken 的 Base URL Key Model ID 三件套Claude Code、Cline、Codex 一套配置走天下。想验证模型效果可以去 模型对话页面 直接试长期跑编码和 Agent 任务Coding Plan 更划算接入细节查 官方文档。Skills 的门槛低到只要你会写提示词就能上手但真正拉开差距的是 description 的精准度和渐进式披露的分层设计。先把一个 Skill 打磨到「每次都能正确触发」比写十个半成品有用得多。