{"schema_version":1,"id":"article:anthropic-agent-skills","kind":"article","slug":"anthropic-agent-skills","title":"跳出二手资料：为什么说 Anthropic 的 Agent Skills 是「渐进式」的未来？","author":"晨旭","url":"https://chenxu.xin/writing/anthropic-agent-skills","date":"2025-11-07","updated":"2025-11-07","description":"结合 Anthropic 官方博文拆解 Agent Skills：三层渐进式信息披露如何解决上下文窗口限制，Skills 与代码执行的结合，以及一套 AI 原生的 Skill 开发方法论。","position":null,"group":null,"series":"AI技术理解","tags":["agent","context-engineering","learning-method","mcp"],"publication_status":"public","maturity":"evergreen","body_sha256":"066658741b8d4c6b3ea1fdd53dd13abad7820eb5ef87e1258395bbef74ccc21e","paragraph_rule":"src/lib/paragraphs.mjs@1","paragraphs":[{"id":"p1","kind":"paragraph","text":"在 AI 技术浪潮中，我们每天都被大量的二手资料包围：公众号文章、解读视频、行业报告。但这些二手资料往往追求标题党和传播效果，内容可能浅显甚至失真。","raw":"在 AI 技术浪潮中，我们每天都被大量的二手资料包围：公众号文章、解读视频、行业报告。但这些二手资料往往追求标题党和传播效果，内容可能浅显甚至失真。"},{"id":"p2","kind":"paragraph","text":"想要真正理解一项新技术，我们必须回归一手资料：官方博客、技术文档和代码示例。","raw":"想要真正理解一项新技术，我们必须回归一手资料：官方博客、技术文档和代码示例。"},{"id":"p3","kind":"paragraph","text":"这篇的目标，正是结合 Anthropic 官方博文，深度拆解一个可能重塑 Agent 构建方式的新概念——Agent Skills，探究它如何通过「渐进式信息披露」的设计，巧妙地解决了 Agent 扩展性的核心难题。","raw":"这篇的目标，正是结合 Anthropic 官方博文，深度拆解一个可能重塑 Agent 构建方式的新概念——Agent Skills，探究它如何通过「渐进式信息披露」的设计，巧妙地解决了 Agent 扩展性的核心难题。"},{"id":"p4","kind":"heading","text":"什么是 Agent Skills？","raw":"## 什么是 Agent Skills？"},{"id":"p5","kind":"paragraph","text":"在过去，我们构建 Agent 的方式是碎片化的。正如官方博文所说，我们为每个用例构建「零散的、定制设计的 Agent」。这种方式不仅开发效率低，而且难以扩展和复用。","raw":"在过去，我们构建 Agent 的方式是碎片化的。正如官方博文所说，我们为每个用例构建「零散的、定制设计的 Agent」。这种方式不仅开发效率低，而且难以扩展和复用。"},{"id":"p6","kind":"paragraph","text":"Anthropic 提出的解决方案是 Agent Skills。官方的比喻很形象：为 Agent 构建一个 Skill，就像是为新员工准备一份入职指南。","raw":"Anthropic 提出的解决方案是 Agent Skills。官方的比喻很形象：为 Agent 构建一个 Skill，就像是为新员工准备一份入职指南。"},{"id":"p7","kind":"paragraph","text":"一个 Skill 不再是一个孤立的 API 或一个冗长的 Prompt，它是一个包含了指令、脚本和资源的文件夹。它将你的专业知识打包成可组合的资源，把一个「通用 Agent」转变为能满足你特定需求的「专家 Agent」。","raw":"一个 Skill 不再是一个孤立的 API 或一个冗长的 Prompt，它是一个包含了指令、脚本和资源的文件夹。它将你的专业知识打包成可组合的资源，把一个「通用 Agent」转变为能满足你特定需求的「专家 Agent」。"},{"id":"p8","kind":"heading","text":"核心设计原则：渐进式信息披露","raw":"## 核心设计原则：渐进式信息披露"},{"id":"p9","kind":"paragraph","text":"Agent Skills 之所以强大，核心设计原则在于渐进式信息披露。","raw":"Agent Skills 之所以强大，核心设计原则在于渐进式信息披露。"},{"id":"p10","kind":"paragraph","text":"可以把它比喻为一份精心组织的说明书：不需要一次性阅读所有内容，而是先看目录，再看章节，最后才查附录。Skills 通过一个三层结构，实现了上下文的按需加载。","raw":"可以把它比喻为一份精心组织的说明书：不需要一次性阅读所有内容，而是先看目录，再看章节，最后才查附录。Skills 通过一个三层结构，实现了上下文的按需加载。"},{"id":"p11","kind":"paragraph","text":"Level 1：技能元数据（SKILL.md Metadata）","raw":"**Level 1：技能元数据（SKILL.md Metadata）**"},{"id":"p12","kind":"paragraph","text":"每个 Skill 文件夹中 SKILL.md 文件头部的 YAML 元数据，主要包含 name 和 description。","raw":"每个 Skill 文件夹中 `SKILL.md` 文件头部的 YAML 元数据，主要包含 `name` 和 `description`。"},{"id":"p13","kind":"list","text":"- 何时加载：始终加载，在 Agent 启动时就预加载到 System Prompt 中。\n- 成本：极低，约 100 Tokens。\n- 目的：这是技能的「目录」，只提供足够的信息让 Claude 知道何时应该使用这个技能。","raw":"- 何时加载：始终加载，在 Agent 启动时就预加载到 System Prompt 中。\n- 成本：极低，约 100 Tokens。\n- 目的：这是技能的「目录」，只提供足够的信息让 Claude 知道何时应该使用这个技能。"},{"id":"p14","kind":"paragraph","text":"Level 2：技能主体（SKILL.md Body）","raw":"**Level 2：技能主体（SKILL.md Body）**"},{"id":"p15","kind":"paragraph","text":"SKILL.md 文件中除元数据外的主体部分，用 Markdown 编写，包含执行任务的核心指令。","raw":"`SKILL.md` 文件中除元数据外的主体部分，用 Markdown 编写，包含执行任务的核心指令。"},{"id":"p16","kind":"list","text":"- 何时加载：当技能被触发时。只有当 Claude 认为这个技能与当前任务相关，它才会去翻看这部分内容。\n- 成本：较低，通常小于 5k Tokens。\n- 目的：这是技能的「具体章节」，提供完成任务的核心逻辑。","raw":"- 何时加载：当技能被触发时。只有当 Claude 认为这个技能与当前任务相关，它才会去翻看这部分内容。\n- 成本：较低，通常小于 5k Tokens。\n- 目的：这是技能的「具体章节」，提供完成任务的核心逻辑。"},{"id":"p17","kind":"paragraph","text":"Level 3：捆绑文件（Bundled Files）","raw":"**Level 3：捆绑文件（Bundled Files）**"},{"id":"p18","kind":"paragraph","text":"存放在 Skill 文件夹中的额外文件，如 .py 脚本、reference.md 参考文档、.csv 数据、forms.md 表单模板。","raw":"存放在 Skill 文件夹中的额外文件，如 `.py` 脚本、`reference.md` 参考文档、`.csv` 数据、`forms.md` 表单模板。"},{"id":"p19","kind":"list","text":"- 何时加载：由 Claude 按需加载。\n- 成本：几乎无上限，因为它们只在需要时才被读入上下文。\n- 目的：这是技能的附录和工具箱，让 Skill 的能力可以无限扩展，而无需担心撑爆上下文窗口。","raw":"- 何时加载：由 Claude 按需加载。\n- 成本：几乎无上限，因为它们只在需要时才被读入上下文。\n- 目的：这是技能的附录和工具箱，让 Skill 的能力可以无限扩展，而无需担心撑爆上下文窗口。"},{"id":"p20","kind":"paragraph","text":"有一点需要注意：一个技能一旦被加入了上下文，便一直留在了上下文，这是不可逆的，现在还没有相应的卸载方式。","raw":"有一点需要注意：一个技能一旦被加入了上下文，便一直留在了上下文，这是不可逆的，现在还没有相应的卸载方式。"},{"id":"p21","kind":"heading","text":"实践中：Skills 与上下文窗口如何交互？","raw":"## 实践中：Skills 与上下文窗口如何交互？"},{"id":"p22","kind":"paragraph","text":"官方文档用一个流程图清晰地展示了 Skills 的工作流。","raw":"官方文档用一个流程图清晰地展示了 Skills 的工作流。"},{"id":"p23","kind":"paragraph","text":"（1）启动与触发：用户发起请求（例如「帮我填一下这张 PDF 表单」）。此时 Claude 的上下文窗口中只有所有已安装技能的 Level 1 元数据。Claude 根据用户意图和元数据描述，决定触发 PDF Skill。","raw":"**（1）启动与触发**：用户发起请求（例如「帮我填一下这张 PDF 表单」）。此时 Claude 的上下文窗口中只有所有已安装技能的 Level 1 元数据。Claude 根据用户意图和元数据描述，决定触发 PDF Skill。"},{"id":"p24","kind":"paragraph","text":"（2）加载 Level 2：Claude 触发技能后，调用工具去读取 pdf/SKILL.md 文件的完整内容，Level 2 的指令被加载到上下文窗口。","raw":"**（2）加载 Level 2**：Claude 触发技能后，调用工具去读取 `pdf/SKILL.md` 文件的完整内容，Level 2 的指令被加载到上下文窗口。"},{"id":"p25","kind":"paragraph","text":"（3）加载 Level 3（按需）：Claude 阅读了 Level 2 的指令，发现要完成填表这个子任务需要参考 forms.md，于是再次调用工具，只去读取这一个捆绑文件。","raw":"**（3）加载 Level 3（按需）**：Claude 阅读了 Level 2 的指令，发现要完成填表这个子任务需要参考 `forms.md`，于是再次调用工具，只去读取这一个捆绑文件。"},{"id":"p26","kind":"paragraph","text":"（4）执行任务：直到此刻，Claude 才集齐了所有完成任务所需的上下文，整合所有信息完成用户的请求。","raw":"**（4）执行任务**：直到此刻，Claude 才集齐了所有完成任务所需的上下文，整合所有信息完成用户的请求。"},{"id":"p27","kind":"heading","text":"不只是文本：Skills 与代码执行","raw":"## 不只是文本：Skills 与代码执行"},{"id":"p28","kind":"paragraph","text":"Skills 不仅仅是说明书，它还可以是工具箱。官方博文指出，Skills 可以包含预先编写好的代码（如 Python 脚本），供 Claude 自行决定执行。","raw":"Skills 不仅仅是说明书，它还可以是工具箱。官方博文指出，Skills 可以包含预先编写好的代码（如 Python 脚本），供 Claude 自行决定执行。"},{"id":"p29","kind":"paragraph","text":"这解决了 LLM 的两个核心痛点：","raw":"这解决了 LLM 的两个核心痛点："},{"id":"p30","kind":"list","text":"- 效率问题：让 LLM 通过 Token 生成来排序一个长列表，既昂贵又缓慢。\n- 可靠性问题：LLM 在执行传统代码（如数学计算、排序）时，并不能保证 100% 准确。","raw":"- **效率问题**：让 LLM 通过 Token 生成来排序一个长列表，既昂贵又缓慢。\n- **可靠性问题**：LLM 在执行传统代码（如数学计算、排序）时，并不能保证 100% 准确。"},{"id":"p31","kind":"paragraph","text":"通过将这些任务交给 Skills 中的 Python 脚本来执行，Agent 获得了确定性和可靠性，并且这个过程无需将代码本身加载到上下文窗口中，极大地节省了宝贵的 Token 空间。","raw":"通过将这些任务交给 Skills 中的 Python 脚本来执行，Agent 获得了确定性和可靠性，并且这个过程无需将代码本身加载到上下文窗口中，极大地节省了宝贵的 Token 空间。"},{"id":"p32","kind":"paragraph","text":"在实践中使用 Skill 时有两种选择：","raw":"在实践中使用 Skill 时有两种选择："},{"id":"p33","kind":"list","text":"- 直接调用：让 Claude 直接调用一个固定脚本，适合重复性任务。\n- 加载和修改：当脚本需要根据任务填入私有化信息时，Claude 可以先将脚本内容加载到上下文，理解并修改（例如填入特定参数），然后再执行。","raw":"- **直接调用**：让 Claude 直接调用一个固定脚本，适合重复性任务。\n- **加载和修改**：当脚本需要根据任务填入私有化信息时，Claude 可以先将脚本内容加载到上下文，理解并修改（例如填入特定参数），然后再执行。"},{"id":"p34","kind":"heading","text":"AI Native 的开发范式：如何构建 Skills？","raw":"## AI Native 的开发范式：如何构建 Skills？"},{"id":"p35","kind":"paragraph","text":"官方文档给出的开发与评估指南非常具有启发性，它颠覆了传统的开发思路。","raw":"官方文档给出的开发与评估指南非常具有启发性，它颠覆了传统的开发思路。"},{"id":"p36","kind":"paragraph","text":"从评估开始：不是先假想需求，而是先让 Agent 运行实际任务，观察它在哪些地方卡壳或需要帮助，然后增量式地为这些短板构建 Skills。","raw":"**从评估开始**：不是先假想需求，而是先让 Agent 运行实际任务，观察它在哪些地方卡壳或需要帮助，然后增量式地为这些短板构建 Skills。"},{"id":"p37","kind":"paragraph","text":"为扩展而设计：善用渐进式披露。当 SKILL.md 变得臃肿时，立即将其拆分为独立的参考文件（Level 3）。","raw":"**为扩展而设计**：善用渐进式披露。当 `SKILL.md` 变得臃肿时，立即将其拆分为独立的参考文件（Level 3）。"},{"id":"p38","kind":"paragraph","text":"从「Claude 的视角」思考：你的 name 和 description 写得是否清晰？Claude 能否在第一时间准确触发它？这是关键。","raw":"**从「Claude 的视角」思考**：你的 `name` 和 `description` 写得是否清晰？Claude 能否在第一时间准确触发它？这是关键。"},{"id":"p39","kind":"paragraph","text":"与 Claude 一起迭代：这是最重要的一点。当你发现 Skill 没被正确使用时，去问 Claude 哪里出了问题。让 Claude 自我反思，它会告诉你它真正需要什么样的上下文。这是一种与 AI 协同开发的新范式。","raw":"**与 Claude 一起迭代**：这是最重要的一点。当你发现 Skill 没被正确使用时，去问 Claude 哪里出了问题。让 Claude 自我反思，它会告诉你它真正需要什么样的上下文。这是一种与 AI 协同开发的新范式。"},{"id":"p40","kind":"heading","text":"未来展望：Skills、MCP 与自我进化的 Agent","raw":"## 未来展望：Skills、MCP 与自我进化的 Agent"},{"id":"p41","kind":"paragraph","text":"生态与分享：Anthropic 将在未来构建 Skills 的完整生命周期支持，包括创建、编辑、发现和分享。一个「Agent Skills 商店」指日可待。","raw":"**生态与分享**：Anthropic 将在未来构建 Skills 的完整生命周期支持，包括创建、编辑、发现和分享。一个「Agent Skills 商店」指日可待。"},{"id":"p42","kind":"paragraph","text":"协同 MCP：官方明确提到，Skills 将补充模型上下文协议（MCP）。这意味着未来，不同的 Agent 服务或许能够通过 Skills 协议来共享和调用彼此的能力。","raw":"**协同 MCP**：官方明确提到，Skills 将补充模型上下文协议（MCP）。这意味着未来，不同的 Agent 服务或许能够通过 Skills 协议来共享和调用彼此的能力。"},{"id":"p43","kind":"paragraph","text":"自我进化：最终极的愿景是——让 Agent 能够自己创建、编辑和评估 Skills。","raw":"**自我进化**：最终极的愿景是——让 Agent 能够自己创建、编辑和评估 Skills。"},{"id":"p44","kind":"heading","text":"最后","raw":"## 最后"},{"id":"p45","kind":"paragraph","text":"Agent Skills 是 Anthropic 对 Agent 架构的一次深度思考。它通过渐进式信息披露这一核心原则，将「文件夹」这个我们最熟悉的概念，转变成了 Agent 可动态加载、无限扩展、灵活组合的能力单元。","raw":"Agent Skills 是 Anthropic 对 Agent 架构的一次深度思考。它通过渐进式信息披露这一核心原则，将「文件夹」这个我们最熟悉的概念，转变成了 Agent 可动态加载、无限扩展、灵活组合的能力单元。"},{"id":"p46","kind":"paragraph","text":"这标志着我们正从提示词工程迈向真正的 Agent 上下文工程。","raw":"这标志着我们正从提示词工程迈向真正的 Agent 上下文工程。"},{"id":"p47","kind":"paragraph","text":"技术的飞速发展，意味着今天的观点明天就可能被迭代，但学习的方法论是永恒的。与其被动等待别人的二手信息，不如主动去阅读源头，形成自己的理解。","raw":"技术的飞速发展，意味着今天的观点明天就可能被迭代，但学习的方法论是永恒的。与其被动等待别人的二手信息，不如主动去阅读源头，形成自己的理解。"},{"id":"p48","kind":"paragraph","text":"哪怕我们最初的理解是片面的，甚至是错误的。但当它被纠正时，这种刻骨铭心的认知，会远比任何一篇二手总结都来得深刻和牢固。","raw":"哪怕我们最初的理解是片面的，甚至是错误的。但当它被纠正时，这种刻骨铭心的认知，会远比任何一篇二手总结都来得深刻和牢固。"}],"authored_claims":[{"id":"skills-three-level-disclosure","text":"Skills 用三层结构实现上下文按需加载：元数据始终常驻（约 100 Token）、正文在技能被触发时才读、捆绑文件由 Agent 按需读取，因此能力扩展几乎不受上下文窗口限制。","stance":"fact","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-11-07"},{"id":"skill-loading-is-irreversible","text":"一个技能一旦被加载进上下文，就会一直留在上下文里，这是不可逆的，目前还没有对应的卸载机制。","stance":"fact","confidence":null,"supersedes":null,"note":null,"formed_at":"2025-11-07"},{"id":"skills-are-toolboxes-not-just-docs","text":"Skills 不只是说明书，还是工具箱。把排序、计算这类任务交给 Skill 里的 Python 脚本，Agent 获得的是确定性和可靠性，而且脚本本身不需要进上下文。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-11-07"},{"id":"build-skills-from-evals","text":"构建 Skill 应该从评估开始，而不是先假想需求——先让 Agent 跑实际任务，观察它在哪里卡壳，再增量式地为这些短板补 Skill。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2025-11-07"},{"id":"read-primary-sources","text":"二手资料往往为了传播效果而浅显甚至失真。哪怕自己读一手资料形成的理解是片面的，被纠正时留下的认知也远比任何二手总结牢固。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2025-11-07"}],"claim_ids":["skills-three-level-disclosure","skill-loading-is-irreversible","skills-are-toolboxes-not-just-docs","build-skills-from-evals","read-primary-sources"],"revision":"ac0e26ee3d6c57cd73ec5df6de8d7db27d94a5a38c6c3e33cd6ac0c8e626cee5"}