Agent Skill详解
在现代基于大模型(LLM)的智能代理(agent)架构中,LLM是AI Agent的“大脑”,负责思考和规划,Skill(技能)是"手脚",负责执行和行动,通常指一组封装好的、面向特定功能的可调用单元(函数、API、服务或子代理),这些单元可以被Agent在推理过程中动态调用以完成具体任务。在某些框架中也被称为Tools或Plugins,
【什么是Skill】
在现代基于大模型(LLM)的智能代理(agent)架构中,LLM是AI Agent的“大脑”,负责思考和规划,Skill(技能)是"手脚",负责执行和行动,通常指一组封装好的、面向特定功能的可调用单元(函数、API、服务或子代理),这些单元可以被Agent在推理过程中动态调用以完成具体任务。
在某些框架中也被称为 Tools 或 Plugins,任何本地函数、外部 REST API、数据库查询器、检索器(retriever)、工具(tool)或一组复合能力(组合 skill)等都可以被看做是Agent Skill。
通常,Skill会被放入System Prompt中,让LLM知道有什么Skill可以使用。在LangChain等框架中会显示提供Skill和LLM的绑定,在Invoke时,同样会将Skill放入提示词中。
一个 Skill 通常包含以下三个核心要素:
-
描述/元数据(Schema/Description): 这是写给 LLM 看的说明书。它告诉模型:“这个技能叫什么?有什么用?输入参数需要什么格式?”
-
权限(Authorization): 访问外部服务所需的 API Key 或认证令牌
-
功能逻辑(Implementation): 这是一段具体的代码(如 Python 函数、API 调用),用于执行特定任务(例如:查询天气、发送邮件、查询数据库)
【Skill 的作用与价值】
- 扩展能力边界:把 LLM 的文本生成能力与现实世界操作(检索知识、执行命令、调用服务)连接起来
- 复用与模块化:同一 Skill 可以被不同 agent 复用,便于维护与升级
- 提升可靠性与可控性:将高风险或高确定性任务(如支付、下单、系统配置)放入受控代码/服务中,而不是让模型“想象”答案
【Claude Code Skill】
Claude Code Skill 是 Claude Code(Anthropic 推出的终端原生 AI 编程工具)用来扩展其能力的一种机制,是 Agent Skills 开放标准在软件编程领域的一种具体实现方式。
其将Skill推到新的阶段——可以用过纯自然语言描述实现Skill,而在通用Agent Skill中,Skill需要通过代码编写的方式实现。
在软件编程领域,存在极其强大的Bash,可以实现文件的增删改查,程序的调用执行等,Claude Code基于Bash等实现了极为强大的工具。
Skill.md中的逻辑描述经过解析后,其最终执行时所需的能力均可通过这些工具实现,一些与业务相关的特有的能力可以通过命令行调用py方式实现,因此只需做纯自然语言描述即可。
两者区别如下:
| 维度 | 通用 Agent Skill (如 LangChain Tools, OpenAI Plugins) | Claude Code Skill (Claude Code 特有实现) |
|---|---|---|
| 存在形式 | 代码/API:通常是 Python/JS 函数,或者通过 HTTP API 暴露的服务。 | 文件/Markdown:以本地目录形式存在,核心是 SKILL.md 文档和关联脚本(如 Bash 脚本)。 |
| 注册方式 | 显式注册:需要在代码中实例化工具类(如 tools = [search_tool])或通过 API 上传 Schema。 |
自动发现:Claude Code 会自动扫描项目目录中的 Skill 定义,无需手动编写注册代码。 |
| 交互媒介 | 函数调用 (Function Calling):LLM 输出 JSON 参数 →→ 代码执行 →→ 返回字符串结果。 | Bash 命令与文件操作:Claude Code 通过在终端执行 Bash 命令、读取/编辑文件来与 Skill 交互。 |
| 上下文管理 | 一次性加载:通常将工具的描述一次性放入 Prompt 中(容易占用 Token)。 | 渐进式披露 (Progressive Disclosure):分级加载(元数据 →→ 指令 →→ 资源)。只有当 Claude 决定使用该 Skill 时,才会加载详细的指令内容,极大节省上下文窗口。 |
| 执行环境 | 沙箱/云端:通常运行在 Python 解释器或云端服务器中。 | 本地终端 (Terminal):直接在用户的本地开发环境中运行,拥有访问本地文件系统、运行 git 命令等权限。 |
【Claude Code Skill 的具体结构】
一个Skill的完整目录结构如下:
my-skill/
SKILL.md
scripts/
assets/
references/
SKILL.md(必需):Skill 的核心文件scripts/(可选):放 Python/Bash 等脚本,让 Skill 在流程中可调用本地工具(例如 lint、format、生成代码、跑测试)assets/(可选):常用于生成文件的模板(比如 PR 描述模板、报告模板)、代码脚手架/配置样板、固定格式输出(减少模型“临场发挥”导致的漂移)references/(可选):参考资料/规范/手册,例如团队代码规范、API 文档摘录、安全/合规要求等,供 Skill 执行时查阅。信息不应该同时存在于Skill.md和references中,如果信息量过大,可以将简略信息放置前者,详细信息放入后者
Skill文档内容
由 YAML 元数据 和 Markdown 指令 两部分组成的混合体
YAML Frontmatter (元数据头)位于文件的最顶部,用 --- 包裹,是Skill的元数据,是“索引层”,通常在Claude Code启动时就常驻加载,让系统知道技能是否可用、何时可用,有如下关键字段:
name: 技能名称(通常与文件夹名一致)description: 简短描述。非常重要,因为 Claude 依靠这段文字来进行语义匹配,需要包括两个方面的内容,具体能力(即能干什么)、触发场景(即什么时候可以使用),也可以增加使用限制(即什么情况下不使用)。
Markdown Body (指令正文),这是当 Skill 被触发后,注入到 Claude 上下文中的具体 Prompt,模型按照要求做事。完整的内容如下:(很多不是必须的)
- 目标与范围(Goal/Scope)
- 输入要求(需要用户提供什么、文件路径、上下文)
- 输出协议(必须产出哪些段落/字段/格式,如 JSON、表格、固定章节)
- 约束规则(禁止行为,哪些必须要做)
- 操作步骤(分阶段依次做哪些事情,可以引用其他Skill)
- 决策规则(优先级、if/then、边界条件、冲突处理)
【Skill使用】
Skill创建
使用Anthropic 提供的 skill-creator Skill创建Skill
Skill获取
可从以下渠道获取Skill,注意这些skill可以用于Claude Code、Cursor、
- https://github.com/obra/superpowers
- 面向工程团队专属 Skill 套件,包含一系列最佳实践
- https://github.com/anthropics/skills
- Anthropic官方维护的skill
- https://skills.sh/
- skill社区精选的skill
- https://github.com/agentskills/agentskills
- 团队应根据业务实践创建自己专属的skill库、
- 通过find-skill查找
Skill优化
- skill冲突:随着skill逐渐增多,必然出现skill冲突的情况,需要在skill中指定优先级或者设计为互斥的或者指定使用某个skill
- 精简skill:skill最好保持精简,小于500行。必要时需要对skill中的Body做转向优化,以减少输入token消耗,也可以用Skill-Creator自检
- skill组合:一个skill只做一件事,不要做一个万能Skill,不能skill之间可以通过指定的方式做不同组合,可以是链式或有向无环图组合,以实现不同功能
- 尽可能脚本化:一个功能可以通过底层的 Python/Bash 脚本实现的,不要放在skill boby中描述,使用脚本更快速、确定、节省token
- 定期迭代:通过skill-creator生成skill后还需要做定期微调迭代
【参考】
更多推荐



所有评论(0)