首页
看点啥
插画图片
首页 看点啥 Harness 工程之道:Skill 原理及最佳实践

Harness 工程之道:Skill 原理及最佳实践

2026-07-05 0

Agent Skills 如何让 AI Agent 更聪明、更高效?本文从核心理念到工程实践,为你系统拆解 Skill 的运作机制与最佳路径。
核心内容:
1. Skill 产生的背景:从臃肿的 Prompt 工程到模块化能力封装
2. 核心原理:基于“渐进性披露”的三阶段加载机制
3. 工程实践:以真实项目为例讲解结构规范与触发优先级

阿里妹导读

Agent Skills 是一种轻量、开放的能力扩展规范,用于为 AI Agent 扩展专业知识和工作流。本文从概念原理出发,结合真实的工程化项目 trade-ab-skill,系统性地讲解 Skill 的结构规范、触发机制、作用域优先级,以及最佳实践。(文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。)

一、Skill 的产生与核心理念

1.1 从 Prompt 工程到 Skill 工程的演进

当前的大模型都存在一个共性:每轮对话都是"失忆"的,必须从零开始构建上下文,由此发展出了 Prompt 工程。比如 CLAUDE.md 将团队的技术选型、编码规范、架构约束等都固化为一份 Agent 可读的配置文档。每次会话启动时,Agent 就会自动加载这些信息,直接进入高效协作模式,不需要每次都从头到尾交代背景。

但是随着复杂性的增加,问题也逐渐暴露出来。传统的 Prompt 工程将所有领域知识一股脑塞进提示词,项目越复杂,Prompt 越臃肿。上下文窗口被撑满,模型的注意力被稀释,真正关键的信息反而容易被"淹没"。并且这些知识和具体项目深度耦合,换个场景就得重写一遍,几乎没有复用性可言。

Agent Skill 的出现正是为了解决这些问题,它将领域知识和工作流封装为可移植、可版本控制的文件夹,用来"教"Agent 如何处理特定任务或工作流,Agent 按需加载。你可以将 Skills 类比成新员工手册。这也是 Anthropic 官方博客用的类比:Skills 是给 AI Agent 的「入职指南」,把领域知识打包成可发现、模块化的能力。

下面是 Agent Skills 的官方定义:

"Agent Skills are a lightweight, open format for extending AI agent capabilities with specialized knowledge and workflows."

1.2 核心理念:渐进性披露

Skill 体系最核心的设计理念是渐进性披露(Progressive Disclosure),即只在需要时才加载需要的知识,而非一次性加载全部。

Skill 的渐进性披露主要分三阶段:

该模型在实际应用中带来的性能提升是显著的,绝大部分请求仅需要部分资源。渐进性披露用最小的上下文成本,换取了最大的知识覆盖范围,确保上下文窗口留给真正重要的信息,这就是"按需投放知识"的核心经济学优势。同样也保证了决策的精准性和 Skill 的可扩展性。

1.3 System Prompt 与 Skill 的区别

文件类型

System Prompt

Skill

定位

项目级全局规则、编码规范

特定领域能力封装

加载策略

会话启动时全量加载

渐进式按需加载

生效范围

当前项目

可跨项目、跨会话(取决于作用域配置)

上下文成本

恒定占用,与任务无关也会消耗

仅在命中时加载,未命中零成本

结构化

单文件,扁平组织

多文件模块化,支持脚本和资源

适用场景

编码风格、项目约定、通用约束

完整工作流、多步骤流程、领域专家知识

简单记法:System Prompt 是"这个项目的规矩",Skill 是"一种可复用的能力"。

一个项目可以同时拥有 System Prompt 和多个 Skill:System Prompt 定义全局编码规范和项目约定,Skill 封装特定领域的工作流。两者协同工作——System Prompt 中的规则对所有 Skill 生效,而 Skill 内部的规则仅在激活时叠加。

二、Skill 的结构组成

2.1 目录结构规范

一个 Skill 的核心就是一个包含 SKILL.md 的文件夹:

my-skill/             # 必需:skill名称,短横线分隔├── SKILL.md          # 必需:主文件,包括元信息 + 指令,文件名需全大写├── scripts/          # 可选:可执行脚本├── references/       # 可选:参考文档├── assets/           # 可选:模板、资源└── ...               # 任意额外文件
这种格式已被 Claude Code、Cursor、GitHub Copilot、Gemini CLI 等 40+ 主流 Agent 产品采纳,成为事实上的开放标准。

一个设计良好的 Skill 目录结构,是渐进性披露能否有效落地的基础。核心思想是主文件做路由,模块文件做执行。

2.2 SKILL.md 文件结构

SKILL.md 是每个 Skill 的唯一入口,也是唯一的"触发器",其结构分为两部分:frontmatter 元信息和正文指令。

frontmatter 是 YAML 格式的元信息块,最核心的两个字段是 name 和 description

---name: trade-ab-skilldescription: 为用户提供 AB 实验的创建与修改能力,支持实验创建、调流量、  加桶删桶、实验下线等操作。当用户提到创建实验、修改实验、调流量、加桶删桶、  实验下线等场景时触发。---
下面是以 Claude Code 为例的完整 frontmatter 字段:

维度

字段

是否必填

约束

用途

身份字段(触发机制)

name

必填

最长 64 字符,只能用小写字母、数字和连字符,不能以连字符开头或结尾;若省略默认使用目录名

Skill 的唯一标识符,同时也是文件夹名。Agent 通过它来定位和管理 Skill

description

必填

最长 1024 字符,不能为空;若省略默认使用 SKILL.md 正文第一段

Skill 能否被正确触发的关键。Agent 靠这段描述来判断当前任务是否该调用这个 Skill,需要写清楚做什么(WHAT)以及什么时候该用它(WHEN)

argument-hint

可选

参数提示格式,如 [source directory] [output format]

在 / 菜单中显示,帮助用户了解该 Skill 接受的输入格式

权限字段(权限控制)

disable-model-invocation

可选

布尔值(true/false

设为 true 时,禁止模型自动调用该 Skill,仅允许用户手动触发

user-invocable

可选

布尔值(true/false

设为 false 时,用户不能直接调用该 Skill,只有模型可以自动调用

allowed-tools

可选

工具名列表,如 Read, Grep, Glob, Write, Bash(python:*)

工具白名单,精确控制 Skill 执行时可调用的工具及其权限范围

model

可选

模型名称,如 haikusonnet

指定该 Skill 使用的模型;建议简单任务用 Haiku 提升响应速度并降低成本

执行字段(运行时环境)

context

可选

可选值:fork

执行上下文;设为 fork 时,将在隔离的子智能体中执行,确保不污染主对话上下文

agent

可选

可选值:ExplorePlangeneral-purpose 或自定义 Agent

子智能体类型;当 context 设为 fork 时生效

hooks

可选

支持 PreToolUsePostToolUse 等钩子事件

生命周期事件钩子,定义 Skill 激活期间的事件处理逻辑

version

可选

语义化版本号(semver),如 1.0.0

用于版本控制和追踪迭代,方便团队协作时知道当前用的是哪个版本

正文部分可以直接看 Skill 例子的正文,此处不展开赘述。

三、触发机制

Skills 的触发机制是整个系统中最为关键的环节,直接决定了 Skill 能否在恰当时机被激活。这一点甚至比 Skills 内容本身质量更为重要。

3.1 自动触发和手动触发

Skills 支持自动触发(语义匹配)和手动触发两种机制:

自动触发:靠的是 description 字段。当用户的意图和 Skill 描述语义匹配时,Agent 会自己判断"这个任务我有现成的专业流程可以用",然后主动加载对应的 Skill。整个过程用户无感,就像一个老员工听到需求就自动翻出了对应的 SOP。

手动触发:用户通过斜杠命令(如 /skill-name)显式调用。这适合用户明确知道自己要用哪个 Skill 的场景,相当于直接点名"用这套流程来干活"。

两种机制互补:自动触发降低使用门槛,让 Skill 对新用户"隐形"生效;手动触发给老用户精确控制权,想用哪个你说了算。

3.2 description 书写规范

语义匹配机制完全依赖于 description 字段,description 是 Skill 能否被正确触发的核心。

Claude Code 推荐的书写公式为:功能定义 + 触发场景 + 核心能力。

写好它需要遵循几个原则:

四、作用域与优先级

Skill 的作用域决定了它在哪些场景下可用。主流 Agent 产品通常支持两级作用域:

位置

生效范围

适用场景

企业配置中心

全员生效

强制执行的企业级开发规范与安全策略

用户主目录下全局配置

个人所有项目

通用工具、个人偏好、跨项目能力

项目根目录或 .skills/ 目录

仅当前项目

项目特定工作流、团队约定

Plugin 内置资源

Plugin 启动时

社区共享的能力包、特定框架的专用指令集

当多个 Skill 同时存在时,可能出现触发冲突——两个 Skill 的 description 都匹配用户输入。优先级规则通常遵循以下层次:

企业策略 > 个人配置 > 项目配置 > Plugin 内置

五、Skill 最佳实践

5.1 Skill 正文即路由器:编排而非堆砌

核心理念:

最佳实践:SKILL.md 只保留路由表和全局规则,业务细节下沉到模块文件。

# ✅ 最佳实践:SKILL.md 是路由器## 意图路由表| 场景示例          | 路由模块   | 加载文件                      ||-----------------|-----------|------------------------------|| "创建实验"        | creator   | modules/creator/creator.md   || "实验XX调流量"     | modifier  | modules/modifier/modifier.md |## 全局安全红线1. 禁止调用万能工具2. 禁止编造数据3. 写模块限定接口

5.2 知识分层策略:何时拆分、如何组织

什么时候该拆文件? 一条经验法则:当一个文件超过 300 行,或某个 Step 的规则超过 100 行时,就是拆分信号。文件太长不光浪费 token,还会让 Agent 的注意力在大段文本中迷失。

如何组织知识分层?根据使用频率对知识进行分层组织。 越频繁用到的知识,离入口越近;越偶尔查阅的知识,越往深处放。这样 Agent 每次只加载当前步骤真正需要的内容,不会把上下文窗口塞满无关信息。

实践中可以用一棵简单的决策树来判断:

实践:trade-ab-skill 的分层

trade-ab-skill/├── SKILL.md             ← 意图路由表、全局安全红线(每次激活必读)├── modules/creator/creator.md           ← 创建流程 Step 编排、scenarioId 对照表(进入创建模块才读)├── modules/creator/collect-phase.md     ← 参数填充的 11 项执行清单(仅 Step 2 才读)├── modules/creator/validate-phase.md    ← 校验规则(仅 Step 3 才读)├── modules/creator/tools.md             ← MCP 工具接口列表(调接口时按需查阅)└── modules/creator/safety.md            ← 安全约束详细规则(validate 阶段按需加载)

5.3 安全实践 - Tool 的权限设计与工具隔离

这是工程级 Skill 最关键的安全实践之一。 当 Skill 涉及多个模块、调用多个 MCP 接口时,必须实施模块级的工具隔离——每个模块只能调用其白名单中的接口,遵循权限最小化原则。

设计原则:

  1. 白名单制:每个模块的 tools.md 明确列出可用接口,白名单外一律禁止;

  2. 危险接口显式禁用:万能工具(如直接 HTTP 调用)全局禁止;

  3. 工具隔离:不同模块使用不同的接口集合,防止误调用。

最佳实践:

5.4 脚本增强:扩展 Skill 能力边界

核心理念:将确定性计算逻辑封装为脚本,由 Agent 调用执行而非自行推导。脚本是 Skill 突破 LLM 能力边界的利器。

什么时候需要写成脚本?

如果这件事让 LLM 做有概率出错,但让脚本做能 100% 确定性完成,那就该封装成脚本。

如果发现自己在 SKILL.md 中编写公式让 Agent 运行计算,该逻辑也应该被挪到脚本中。

场景

纯指令的局限

脚本的优势

配置文件读写

LLM 可能写入格式错误的 JSON

脚本保证格式正确,原子写入

环境检测

LLM 无法可靠检测系统状态

脚本直接查询,返回结构化结果

日志采集

LLM 不应直接处理网络请求

脚本封装 HTTP 调用,异常自处理

复杂计算

LLM 算术不可靠

脚本精确计算

脚本的设计遵循四个原则:

  1. 自愈性——脚本内部处理所有异常,始终正常退出,绝不阻断 Skill 主流程

  2. 结构化输出——统一输出 JSON,方便 Agent 解析和流转

  3. 幂等性——多次执行结果一致,预检脚本只追加缺失项,不覆盖已有配置

  4. 安全边界——只操作指定文件,不触碰其他系统资源

最佳实践:

trade-ab-skill 就内置了两个关键脚本:MCP预检脚本负责在 Skill 启动前自动检测 MCP 依赖是否就绪;日志采集脚本负责采集实验操作日志。Agent 只需要调用脚本、读取返回的 JSON,不用自己去"猜"环境状态。

5.5 参数传递与动态注入

Skill 不仅是静态指令,更支持运行时参数传递和上下文预注入。在执行过程中,需要在多个阶段之间传递参数。良好的参数传递机制应满足:

最佳实践:trade-ab-skill 的参数传递模型:采用快照(Snapshot)机制作为跨阶段参数传递的载体。每个阶段将产出写入快照,下一阶段从快照读取。阶段门卡确保参数完整性。

动态注入:执行中的一些参数可以由用户直接提供,也可以在执行过程中动态获取:

最佳实践:trade-ab-skill 的用户偏好持久化:成功操作后,将关键参数写入 user-prefs.json,下次执行时自动注入:

{  "defaultScenarioId": "<场景ID>",  "defaultMetricTemplateId": "<模板ID>",  "recentExperimentIds": ["<实验ID1>", "<实验ID2>"],  "lastUsed": "2026-06-17",  "usageCount": 2}

5.6 测试与迭代

测试维度

Claude Code 官方推荐了三类核心测试方法:

如何高效迭代?

最佳实践:

trade-ab-skill 的日志采集机制,采用了两阶段 traceId 配对追踪,保障了日志埋点的采集。

六、用 skill-creator 从零创建一个 Skill

skill-creator 是一个用来创建和打包 Skill 的辅助工具,本身也是一个 Skill。可以协助你从零搭建一个 Skill。

Step 0:前置准备

确保本地已安装以下工具:

Step 1:初始化目录结构

告诉 AI:

「帮我用 skill-creator 生成一个名为 order-query 的 Skill」

AI 会自动运行初始化脚本,生成标准目录:

order-query/├── SKILL.md           ← 核心文件(必须)├── scripts/           ← 可执行脚本(可选)└── references/        ← 参考文档(可选)
Step 2:编写 SKILL.md

告诉 AI:

「帮我编写 order-query 的详细内容,这个 Skill 的功能是 xxx,主要用于 xxx 场景,触发词包括 xxx、xxx。」

AI 会帮你生成包含 YAML frontmatter 和正文的完整 SKILL.md。写作要点:description 要包含所有可能的触发词;正文只写领域专有知识,不写常识;复杂内容拆到 references/ 目录,SKILL.md 中用相对路径引用;控制在 500 行以内。

Step 3:添加参考文档(可选)

如果有复杂的操作流程或参考资料:

告诉 AI:

「把 xxx 的详细流程整理成 references/workflow.md,并在 SKILL.md 中加上引用。」

Step 4:打包验证

告诉 AI:

「用 skill-creator 打包验证 order-query,检查格式是否合规。」

打包脚本会自动校验:frontmatter 是否完整、name 和 description 是否存在、目录中是否有非法文件。有问题 AI 会直接告诉你哪里不对并帮你修复。

Step 5:推送到远端仓库

告诉 AI:

「帮我把 order-query 初始化为 git 仓库,关联远端地址,提交所有文件并推送到 main 分支。」

Step 6:后续迭代更新

修改 Skill 内容后,告诉 AI:

「帮我提交 order-query 的最新改动,commit 信息是 xxx,然后推送。」

整个流程可以浓缩为一张图:

下载 skill-creator    ↓告诉 AI:初始化目录    ↓告诉 AI:编写 SKILL.md + references    ↓告诉 AI:打包验证    ↓告诉 AI:git 提交并推送    ↓告诉 AI:迭代修改并推送
是不是很简单?从头到尾你没有手动执行过任何命令。你只负责描述意图,AI 负责执行,这就是 vibe coding 的魅力。

参考文档

[1] Agent Skills 官方文档:https://agentskills.io

[2]《Agent Skills 橙皮书:给AI装技能的完全指南》

[3]《Claude Code 实战 Harness 工程之道》

[4]《Harness 工程:从上下文管理到 Agent 系统构建》

本文以集团内部 trade-ab-skill 项目为真实案例,所有代码示例均来自该项目实际运行的 Skill 文件。

千问云-为Agent而生,驱动AI生产力
扫描下方二维码,直达千问云体验


点击阅读原文即可体验!

登录查看剩余 70% 内容

喜欢(0)

上一篇

Gbrain GraphRAG LLM Wiki Graphify:4 种知识图谱方案怎么选

Gbrain GraphRAG LLM Wiki Graphify:4 种知识图谱方案怎么选

下一篇

给野马套上缰绳:Agent Harness 工程实践 ——从范式理论到钉钉AI招聘的真实落地

给野马套上缰绳:Agent Harness 工程实践 ——从范式理论到钉钉AI招聘的真实落地
猜你喜欢