跳到主要内容

Agent Skills

Agent Skill 是把任务说明、脚本和参考资料打包在一起的技能目录。它保存完成某类任务的方法,让 Agent 在需要时读取并复用。比如,团队可以用 Skill 规定怎样写发布说明、处理 PDF 表单或检查数据库迁移。

本文先介绍技能目录的结构,再解释按需加载怎样节省上下文。随后区分 Skill 与工具的职责,说明技能选错或执行失败时怎样处理。

1. 面试核心​

先记住这几条,再读正文
  • Skill 与 Tool。 Skill 保存任务步骤和配套资源,Tool 提供执行接口,实际动作和权限检查由程序完成。卡 · Skill、Tool、MCP、CLI 的分工
  • 按需加载。 渐进式加载先提供名称和描述,选中技能后再读取正文,执行时按需读取资源或运行脚本。卡 · 结构
  • 技能选择。 模型根据 Skill 的名称、描述和当前任务选择技能,描述中的输入类型与业务边界帮助区分相似技能。卡 · 渐进式加载
  • MCP、CLI 与 Skill。 MCP 提供工具与数据的接入协议,CLI 提供命令行接口,Skill 说明怎样组合它们完成任务。卡 · Skill、Tool、MCP、CLI 的分工
  • 选择与执行评测。 Skill 的触发评测检查是否选对技能,执行评测检查选中后能否完成任务并满足约束。卡 · 触发与执行评测

2. 结构​

一个 Skill 以 SKILL.md 为入口,把说明和执行时需要的文件放在同一目录。下面以生成发布说明为例,展示这些文件怎样分工。

release-notes/
├── SKILL.md
├── scripts/
│ └── collect_prs.py
├── references/
│ └── style-guide.md
└── assets/
└── template.md

SKILL.md 开头的元数据用于介绍和识别技能,其中 name 与 description 必填。name 给出名称,description 说明做什么、何时使用。正文再写具体步骤、判断规则和验收要求。

目录中的配套文件分成三类资源:

  • scripts/ 保存可执行脚本,例如收集合并的 PR。PR 是提交给代码仓库的合并请求。
  • references/ 保存详细规范,例如发布说明的措辞要求,需要时再读。
  • assets/ 保存输出模板等文件,让不同任务的产物保持相同格式。

下面是 SKILL.md 的简化示例:

---
name: release-notes
description: 根据合并的 PR 生成发布说明。用户要求版本更新说明时使用。
---

# 发布说明

1. 用 scripts/collect_prs.py 收集合并的 PR。
2. 按功能、修复和破坏性变更分类。
3. 按 assets/template.md 输出。
4. 核对 PR 引用与版本范围。

这个技能先收集 PR,再分类、套用模板,最后核对引用与版本范围。收集范围可以从上个版本标签开始,避免混入更早版本的变更。团队分类规则还可区分 feature(功能)、fix(修复)和 chore(维护),并单独列出破坏性变更。

正文应保留完成任务所需的说明,长篇规范则放到 references/。同时写清何时读取哪份规范,模型才能在对应步骤找到它。

模型通过命令工具运行脚本,因此执行需要对应权限。审核或修改脚本时,模型也可以读取源码。

3. 渐进式加载​

安装的技能多了,如果把每份说明都放进提示词,上下文就会被无关流程占满。渐进式加载把读取分成三层,只在任务需要时展开更多内容。

层级内容加载时机
元数据名称、描述和定位信息宿主发现可用技能时
正文SKILL.md 指令用户指定或模型选择后
资源脚本、参考资料与模板执行具体步骤时

宿主是负责组织模型请求、读取文件和执行工具的应用。它先把可用技能的名称、描述和位置提供给模型,相当于一份简短目录。用户指定技能或模型判断任务相关后,再通过读文件工具加载正文。正文引用的模板和参考资料则留到对应步骤读取。

这样一来,未使用的技能只占元数据空间,比一次加载全部流程更省 Token。简短元数据可按几十到一百 Token 估算,正文则宜控制在数千 Token 内。实际开销取决于描述长度和宿主添加的信息,技能越多,总开销仍会增长。所以,目录中应删去重复与无关描述。

脚本还能减少模型处理确定性工作的开销。比如,解析文件、批量重命名和校验格式,都可以交给脚本完成。模型只读取必要结果,就省去了重复生成代码和阅读大量中间数据的 Token。审核脚本时仍可读取源码,按需执行与源码审查并不冲突。

3.1 沙箱中的 Skill​

Agent 在容器或远程沙箱中执行任务时,读文件工具只能访问该环境里的文件。因此,需要把经过审核的 Skill 目录挂载或复制进去,让说明和脚本都能被找到。

模型通过工具读取沙箱中的 SKILL.md,再用命令工具运行脚本。读取和执行都受沙箱权限约束,执行结果随后通过工具响应回到模型上下文。

元数据仍由宿主发现并加入上下文,具体放在哪种消息中由产品决定。例如,OpenAI Responses 的 shell 技能目录放在用户提示上下文中。技能目录的位置、发现规则和指令优先级也要按所用产品配置。

4. Skill、Tool、MCP、CLI 的分工​

设计一个能力时,需要区分执行接口和使用方法。Tool 提供可调用的函数,Skill 则说明完成任务时该怎样使用这些函数。

形式职责示例
Tool以契约暴露执行能力查询订单
MCP Server统一发现与调用外部能力接入代码托管服务
CLI提供命令行接口git、搜索、测试命令
Skill组织流程、规则和资源按模板生成发布说明
常驻指令给出反复适用的规则项目构建与代码约定

Tool 的参数用 Schema 描述,也就是规定参数类型和必填字段的结构规则。MCP Server 通过协议提供一组工具和数据,可供多个应用复用。CLI 是命令行接口,模型可以通过命令工具调用 git、搜索或测试程序。命令输出还能通过管道交给下一个程序过滤。

选择封装方式时,可以按任务的执行方式与使用频率判断:

  • 单步完成、参数明确的能力适合 Tool,例如查询订单。
  • 需要组合多个工具,并遵循业务规则的任务适合 Skill,例如按团队规范生成发布说明。
  • 只在部分任务中使用的知识适合放入 Skill,按需加载。
  • 每个请求都适用的规则适合放入系统提示或仓库指令,例如项目构建约定。

这些形式可以组合使用。比如,Skill 说明发布流程,MCP 工具读取代码托管服务的数据,CLI 再处理本地文件。MCP 的协议分工见 MCP。

5. 常见问题​

5.1 Skill 失效与回退​

Skill 失效时,先区分选错技能和选对后执行失败。两类问题对应不同的修改位置,混在一起修改容易掩盖原因。

选错技能时,要对照失败请求,检查名称和描述是否写清适用范围。两个相似技能被混用,就在描述中补充输入类型或适用业务线。差别很小、流程重复的技能可以合并,再在正文中按条件分支处理。

选对后执行失败,则检查正文步骤、输入和依赖。比如,页面结构或接口字段变化,会让原来的操作步骤失效。脚本应在执行前检查这些前置条件,并返回能定位问题的错误。容易反复出错的确定性步骤,可以改成脚本并增加校验。

收到明确错误后,Agent 可以在已有权限内改用通用工具,或报告任务未完成。没有匹配的 Skill 时,也应按普通流程处理任务。记录失败样例后再更新技能,用这些样例和正常请求一起回归。

5.2 Skill 脚本的执行权限​

5.3 触发与执行评测​

6 · 面试题卡片​

本页题目与参考回答

6.1 Skill 和 Tool 有什么区别?什么情况下做成 Skill,什么情况下做成 Tool?​

考察重点

  • 解释 Skill 如何保存流程知识,以及 Tool 如何执行动作。
  • 能根据任务步骤和使用频率,区分 Skill、Tool 与常驻指令。

相关内容:Skill、Tool、MCP、CLI 的分工。

参考回答

Skill 保存完成任务的方法和资源,Tool 则提供程序可以执行的接口。

Tool 用参数 Schema 规定输入,调用后可以读取数据或改变外部状态。Skill 告诉模型该按什么步骤完成任务,并可引用工具和附带脚本。实际执行与权限检查,仍由宿主的工具完成。

查询订单这类单步、参数明确的能力适合 Tool。按团队规范生成发布说明,需要组合多个步骤和业务规则,适合写成 Skill。少数任务才需要的知识按需加载;每个请求都适用的规则放入系统提示或仓库指令。

6.2 Skill 的核心原理是什么?为什么能减少 Token 消耗?​

考察重点

  • 解释元数据、正文和资源为什么分层加载,以及各层何时进入上下文。
  • 说明脚本执行怎样节省 Token,以及沙箱中如何读取和执行技能。

相关内容:结构、渐进式加载、沙箱中的 Skill。

参考回答

Skill 通过按需加载说明和资源,并让脚本处理确定性工作,减少模型需要读取和生成的 Token。

宿主先提供技能名称、描述和位置,模型选中后再读取 SKILL.md。正文引用的参考资料和模板,留到对应步骤加载。因此,未使用的技能只占元数据空间;简短元数据可按几十到一百 Token 估算,实际值取决于内容和宿主。

解析文件、批量重命名等工作交给脚本后,模型只需读取必要输出,省去阅读代码和中间数据的开销。在沙箱中运行时,需要先挂载或复制技能目录,再通过工具读取文件和执行脚本。结果通过工具响应回传,执行仍受沙箱权限限制。

6.3 Agent 怎么选择要调用的 Skill?两个相似的 Skill 被调用错误怎么办?​

考察重点

  • 说明名称、描述和任务内容怎样共同影响技能选择。
  • 能区分误选、步骤错误与依赖失效,并用回归任务验证修复。

相关内容:渐进式加载、Skill 失效与回退。

参考回答

Agent 根据技能的名称、描述和当前任务选择 Skill;相似技能误选时,应补充区分条件或合并重复技能。

排查时,先把失败请求与描述对照,判断是否缺少输入类型或适用业务线。两份技能的差异很小时,可以合并成一份,再在正文中按条件分支处理。

如果技能选对了,却在执行时失败,就检查正文步骤、前置条件和依赖。把容易出错的确定性步骤改为脚本,并增加执行前校验。页面结构或接口字段变化时,脚本应返回明确错误,Agent 再在已有权限内改用通用工具或报告未完成。

没有匹配技能时,按普通流程处理任务。修订后同时测试应触发、不应触发和选中后的执行任务,确认误选与执行失败都得到处理。

6.4 MCP、CLI 和 Skill 分别适合什么场景?​

考察重点

  • 解释 MCP、CLI 和 Skill 分别怎样支持接入、执行与流程复用。
  • 能结合模型轮数、进程启动和网络往返分析延迟。

相关内容:Skill、Tool、MCP、CLI 的分工、MCP。

参考回答

MCP 适合让多个应用复用工具与数据接入,CLI 适合调用已有命令,Skill 适合复用组合这些能力的流程。

比如,通过 MCP 接入 GitHub、数据库或内部服务,可以统一工具发现和调用。远程部署时,还要配合鉴权。CLI 可以调用本地 git、搜索和测试程序,并用管道过滤输出。Skill 则规定调用顺序、业务判断和验收要求。

延迟取决于模型推理轮数、进程启动和网络往返。CLI 可以访问远程服务,MCP 也可以在本地运行,所以需要按实际调用链测量。本地处理可直接用 CLI 或脚本;固定步骤合并进一个脚本后,能减少逐步等待模型决策的时间。

6.5 怎样区分 Skill 选择错误与执行错误,并设计评测?​

考察重点:能用评测请求区分技能误选与执行失败,并分别检查触发边界和产物是否合格。

相关内容:触发与执行评测。

参考回答

选择错误是任务没有选中正确技能,执行错误则是选中后未完成任务或违反了约束,两者需要分开评测。

触发评测覆盖应使用、相近但不适用、完全无关三类请求,记录漏选与误选。只有一个技能时,也要检查它是否在错误时机触发。执行评测则检查产物、工具调用记录和约束,例如发布说明的 PR 引用和版本范围。

根据结果分别调整名称、描述或正文步骤与依赖。每次修改后回归两组任务,才能判断是否修好原问题并保持已有行为。

7. 参考资料​