Claude Agent Skills的四種設(shè)計模式詳解;從漸進式披露到最小權(quán)限
一、地基:為什么 Skill 需要"設(shè)計模式"
Agent Skill 的本質(zhì),是一個包含指令、腳本與資源的文件夾,讓 agent 能夠更準(zhǔn)確、更高效地完成某類專業(yè)工作。它最簡的形態(tài)只是一個 SKILL.md,靠 YAML frontmatter 里的 name 和 description 被發(fā)現(xiàn)和觸發(fā)。
真正讓 Skill 可擴展的,是 Anthropic 反復(fù)強調(diào)的唯一核心原則——漸進式披露(Progressive Disclosure)。它把信息分成三層,按需加載:
| 層級 | 內(nèi)容 | 加載時機 | 體量建議 |
|---|---|---|---|
| ① 元數(shù)據(jù) | name + description | 啟動時全部載入,用于判斷"何時該用" | ~100 tokens |
| ② 正文 | SKILL.md 主體指令 | 任務(wù)命中 description 時才讀入 | < 5,000 tokens |
| ③ 資源 | reference.md、腳本、模板… | 正文指示時才按需讀取 / 執(zhí)行 | 無限制 |
漸進式披露解決的是"上下文經(jīng)濟"問題。但一個成熟 Skill 面對的風(fēng)險遠(yuǎn)不止上下文膨脹,還有:輸出格式漂移、模型算錯數(shù)、權(quán)限越界。于是社區(qū)在這條地基之上,沉淀出四種設(shè)計模式——它們彼此正交,每一種約束一個獨立的風(fēng)險維度:
| 設(shè)計模式 | 約束的維度 | 核心手段 |
|---|---|---|
| 模板驅(qū)動 | 輸出格式 | 預(yù)定義模板嚴(yán)格約束結(jié)構(gòu) |
| 腳本增強 | 計算可靠性 | 確定性邏輯封裝為腳本 |
| 知識分層 | 上下文經(jīng)濟 | 按頻率與互斥性分層加載 |
| 工具隔離 | 權(quán)限安全 | allowed-tools 聲明能力邊界 |
下面逐一展開。
二、模式一:模板驅(qū)動(約束"輸出格式")
意圖:用預(yù)定義模板嚴(yán)格約束輸出結(jié)構(gòu),讓結(jié)果可預(yù)期、可對比、可自動化后處理。
適用:周報、事故復(fù)盤、代碼審查報告、合規(guī)檢查單——任何"格式必須統(tǒng)一、下游還要機器解析"的場景。在此模式下,Claude 的輸出嚴(yán)格遵循模板骨架,不再自由發(fā)揮。
要點:模板本體應(yīng)放進引用文件或 assets/,SKILL.md 正文只寫"何時套用 + 每個字段怎么填"。這樣既約束了格式,又不讓整段模板擠占正文的 token 預(yù)算——它天然與"知識分層"復(fù)用同一套機制。
實戰(zhàn)示例:事故復(fù)盤報告生成器
場景:SRE 團隊每次線上事故后產(chǎn)出結(jié)構(gòu)一致的復(fù)盤文檔,便于歸檔、檢索、季度匯總。
incident-postmortem/
├── SKILL.md
├── assets/
│ └── template.md
└── reference/
└── severity.md
SKILL.md
--- name: incident-postmortem description: 線上事故復(fù)盤報告生成。當(dāng)用戶提供事故時間線、影響范圍,或要求撰寫 postmortem / 事故報告 / 復(fù)盤時使用。 --- # 事故復(fù)盤報告生成 ## 何時使用 用戶描述了一次線上事故并需要產(chǎn)出正式復(fù)盤文檔時。 ## 步驟 1. 讀取 `assets/template.md` 作為唯一輸出骨架,**不得增刪任何一級標(biāo)題**。 2. 若用戶未提供嚴(yán)重等級,依據(jù) `reference/severity.md` 判定,并在報告中注明判定依據(jù)。 3. 按下列規(guī)則填寫: - **影響范圍**:必須量化(受影響用戶數(shù) / 請求數(shù) / 時長);無數(shù)據(jù)寫"待補充",禁止編造。 - **時間線**:`HH:MM` 單調(diào)遞增,每行一個事件。 - **改進項**:每條含負(fù)責(zé)人占位 `@owner` 與截止日期 `YYYY-MM-DD`,便于下游腳本抽取建單。 4. 輸出純 Markdown,不要整體包進代碼塊。 ## 硬約束 - 不臆測未提供的數(shù)字。 - 一級標(biāo)題順序與模板完全一致(看板按標(biāo)題解析)。
assets/template.md
# 事故復(fù)盤:<一句話標(biāo)題> ## 元信息 - 事故編號:INC- - 嚴(yán)重等級: - 發(fā)生時間: - 恢復(fù)時間: - 總時長: ## 影響范圍 ## 時間線 ## 根因分析 ### 直接原因 ### 根本原因 ## 處置與恢復(fù) ## 改進項 | 措施 | 負(fù)責(zé)人 | 截止日期 | 狀態(tài) | | ---- | ------ | -------- | ---- | ## 經(jīng)驗教訓(xùn)
reference/severity.md
# 嚴(yán)重等級判定 | 等級 | 判定標(biāo)準(zhǔn) | | ---- | -------- | | P0 | 核心功能全站不可用,或數(shù)據(jù)丟失/泄露 | | P1 | 核心功能部分不可用,影響 >10% 用戶 | | P2 | 非核心功能不可用,或有降級方案 | | P3 | 輕微影響,無用戶可感知中斷 | 判定就高不就低:同時命中多個等級時取最嚴(yán)重者。
三、模式二:腳本增強(約束"計算可靠性")
意圖:把確定性計算邏輯封裝成腳本,由 Claude 調(diào)用執(zhí)行,而不是用自然語言推導(dǎo)。
適用:財務(wù)計算、正則匹配、數(shù)據(jù)清洗與格式轉(zhuǎn)換、批量文件操作。相較大模型推理,腳本執(zhí)行更精準(zhǔn)、更省 token、可復(fù)現(xiàn)、可測試。
一條黃金法則(源自官方 Skill authoring best practices):
如果你發(fā)現(xiàn)自己正在
SKILL.md里寫公式、讓 Claude 去"心算"——立刻停下,這段邏輯應(yīng)當(dāng)被搬進腳本。
實戰(zhàn)示例:SLA 可用性計算器
場景:從停機記錄 CSV 精確計算月度可用性、累計停機時長、錯誤預(yù)算消耗。數(shù)字必須精確,絕不讓模型估算。
sla-calculator/
├── SKILL.md
└── scripts/
└── sla.py
SKILL.md
--- name: sla-calculator description: 根據(jù)事故記錄計算 SLA 可用性、停機時長與錯誤預(yù)算。當(dāng)用戶提供停機 CSV,或詢問月度可用性、錯誤預(yù)算是否耗盡時使用。 allowed-tools: Bash(python3 *), Read --- # SLA 可用性計算 ## 關(guān)鍵原則 **所有數(shù)值計算必須調(diào)用腳本完成,禁止在對話中心算。** ## 步驟 1. 確認(rèn)停機記錄為 CSV,列:`start,end`(ISO8601)。 2. 執(zhí)行: `python3 scripts/sla.py --file <路徑> --target 99.9 --month 2026-07` 3. 將腳本輸出的 JSON 轉(zhuǎn)述為結(jié)論,并明確指出錯誤預(yù)算是否已耗盡。 4. **不要修改腳本輸出的任何數(shù)字。**
scripts/sla.py
#!/usr/bin/env python3
"""從停機記錄計算月度可用性與錯誤預(yù)算。計算集中于此以保證可復(fù)現(xiàn)。"""
import argparse, csv, json, calendar
from datetime import datetime
def parse(ts):
return datetime.fromisoformat(ts.replace("Z", "+00:00"))
def month_seconds(month):
year, mon = map(int, month.split("-"))
return calendar.monthrange(year, mon)[1] * 24 * 3600
def main():
p = argparse.ArgumentParser()
p.add_argument("--file", required=True)
p.add_argument("--target", type=float, required=True) # SLA 目標(biāo) %,如 99.9
p.add_argument("--month", required=True) # YYYY-MM
a = p.parse_args()
total = month_seconds(a.month)
down = 0
with open(a.file, newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
down += (parse(row["end"]) - parse(row["start"])).total_seconds()
uptime = (total - down) / total * 100
allowed = total * (100 - a.target) / 100 # 允許停機秒數(shù)
budget_used = down / allowed * 100 if allowed else 0
print(json.dumps({
"month": a.month,
"uptime_pct": round(uptime, 4),
"target_pct": a.target,
"downtime_seconds": int(down),
"downtime_human": f"{int(down)//3600}h{int(down)%3600//60}m",
"error_budget_used_pct": round(budget_used, 2),
"budget_exhausted": budget_used >= 100,
"meets_sla": uptime >= a.target,
}, ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()
體會一下黃金法則的價值:uptime、error budget 這類公式一旦出現(xiàn)在正文里讓 Claude 心算,結(jié)果就不可復(fù)現(xiàn)、還費 token;搬進 sla.py 后,它變成一次確定性的工具調(diào)用。腳本還能通過 allowed-tools: Bash(python3 *) 把執(zhí)行面收窄到"只能跑 Python"——這正好引出下一個模式。
四、模式三:知識分層(約束"上下文經(jīng)濟")
意圖:按使用頻率組織知識,是漸進式披露的模式化表達(dá)。
遵循 80/20 法則——80% 的請求只需要 20% 的核心知識。于是:
- 高頻核心內(nèi)聯(lián)進
SKILL.md; - 低頻細(xì)節(jié)(完整 API 參考、邊緣案例、長表單說明)拆到引用文件,用一句話說明"什么情況下去讀它"。
一個常被忽略的第二維度:除了頻率,還要看互斥性。官方建議把"mutually exclusive or rarely used"的上下文拆到不同文件——否則 Claude 會同時載入相互沖突的指令。分層不只是為了省 token,也是為了避免指令打架。
實戰(zhàn)示例:REST API 設(shè)計規(guī)范
場景:統(tǒng)一團隊 API 風(fēng)格。90% 的問題只涉及命名/狀態(tài)碼/版本(內(nèi)聯(lián));分頁、錯誤體、鑒權(quán)是低頻且互斥的細(xì)節(jié)(外置)。
rest-api-guide/
├── SKILL.md
└── reference/
├── pagination.md
├── errors.md
└── auth.md
SKILL.md(內(nèi)聯(lián) 20% 核心)
---
name: rest-api-guide
description: 團隊 REST API 設(shè)計規(guī)范。設(shè)計/評審 HTTP 接口、命名端點、選狀態(tài)碼,或問及 API 版本、分頁、錯誤格式、鑒權(quán)時使用。
---
# REST API 設(shè)計規(guī)范
## 核心規(guī)則(高頻,直接遵循)
- **資源命名**:復(fù)數(shù)名詞 + kebab-case,如 `/user-groups`;不出現(xiàn)動詞。
- **層級**:`/orders/{id}/items`,嵌套不超過兩層。
- **方法語義**:GET 只讀且冪等;POST 創(chuàng)建;PUT 全量替換;PATCH 局部更新;DELETE 刪除。
- **狀態(tài)碼**:200/201/204 · 400/401/403/404/409/422 · 500。
- **版本**:URL 前綴 `/v1/`,僅破壞性變更升版本。
## 何時查閱引用文件(低頻,按需加載)
- 設(shè)計**分頁 / 游標(biāo)** → 讀 `reference/pagination.md`
- 定義**錯誤響應(yīng)體** → 讀 `reference/errors.md`
- 涉及**鑒權(quán) / Token / 權(quán)限** → 讀 `reference/auth.md`
> 這三個主題互斥且少同時出現(xiàn),故不內(nèi)聯(lián)——既省 token,也避免規(guī)則相互干擾。
reference/errors.md
# 錯誤響應(yīng)體規(guī)范
統(tǒng)一使用 RFC 9457 (Problem Details):
```json
{
"type": "https://api.example.com/errors/out-of-stock",
"title": "庫存不足",
"status": 409,
"detail": "商品 SKU-123 當(dāng)前庫存為 0",
"instance": "/orders/8821"
}
```
- `type` 為可跳轉(zhuǎn)錯誤文檔 URL;無專屬文檔時用 `about:blank`。
- 校驗錯誤(422)追加 `errors` 數(shù)組,每項含 `field` 與 `message`。
- 絕不在 `detail` 泄露堆棧、SQL 或內(nèi)部主機名。
reference/pagination.md
# 分頁規(guī)范
默認(rèn)游標(biāo)分頁,大數(shù)據(jù)集禁用 offset。
請求:`GET /orders?limit=50&cursor=eyJpZCI6MTAwfQ`
```json
{
"data": [ ... ],
"page": { "next_cursor": "eyJpZCI6MTUwfQ", "has_more": true }
}
```
- `limit` 默認(rèn) 50,上限 200,越界返回 400。
- `next_cursor` 為空表示已到末頁。
reference/auth.md
# 鑒權(quán)規(guī)范 - 傳輸:僅 HTTPS;Token 放 `Authorization: Bearer <jwt>`。 - 過期:access token ≤ 15min,配合 refresh token。 - 401 = 未認(rèn)證 / Token 失效;403 = 已認(rèn)證但無權(quán)限。二者不可混用。
五、模式四:工具隔離(約束"權(quán)限安全")
意圖:通過 allowed-tools 明確界定 Skill 的能力邊界。它屬于安全設(shè)計,核心價值在于聲明"禁止做什么"——這往往比定義"能做什么"更關(guān)鍵。
典型的最小權(quán)限實踐:審計類 Skill 不給寫權(quán)限,生成類 Skill 不給修改權(quán)限。
?? 一個必須知道的邊界:allowed-tools 這個 frontmatter 字段只在 Claude Code CLI 下生效,通過 Agent SDK 使用 Skill 時不生效。因此不能只靠 skill 的 allowed-tools 當(dāng)安全邊界——在 SDK / 生產(chǎn) agent 場景,真正的權(quán)限邊界必須落在 agent 的 tools 白名單、permission 系統(tǒng)或 hooks 上。skill frontmatter 更像"約定 + CLI 層加固",不是不可繞過的沙箱。
實戰(zhàn)示例:只讀安全審計
場景:上線前跑一遍安全體檢,只報告不改動,防止 agent 順手"幫忙修復(fù)"反而引入風(fēng)險。
security-audit/
├── SKILL.md
└── reference/
└── checklist.md
SKILL.md
--- name: security-audit description: 只讀代碼庫安全審計。當(dāng)用戶要求安全體檢、掃描硬編碼密鑰、檢查危險調(diào)用或上線前安全審查時使用。 allowed-tools: Read, Grep, Glob --- # 只讀安全審計 ## 能力邊界(重要) 本 Skill **只讀**。frontmatter 未授予任何寫入/執(zhí)行工具: - 只發(fā)現(xiàn)、只報告,**絕不修改文件**。 - 如需修復(fù),輸出建議交由人工或另一個具備寫權(quán)限的流程處理。 ## 步驟 1. 依據(jù) `reference/checklist.md` 逐項用 Grep / Glob 掃描。 2. 每條發(fā)現(xiàn)給出:`文件:行號`、風(fēng)險等級、證據(jù)片段、修復(fù)建議。 3. 輸出風(fēng)險清單表,按嚴(yán)重度降序;無發(fā)現(xiàn)則明確寫"未發(fā)現(xiàn)"。 ## CLI 與 SDK 邊界提示 `allowed-tools` 僅在 Claude Code CLI 生效。若本 Skill 經(jīng) Agent SDK 調(diào)用, 只讀約束不由 frontmatter 強制,須在 agent 的 tools 白名單或權(quán)限系統(tǒng)中另行限定。
reference/checklist.md
# 安全審計清單 ## 密鑰與憑證 - 硬編碼密鑰:形如 `key/secret/password/token = "<長字符串>"` 的賦值 - 私鑰文件頭:出現(xiàn) PRIVATE KEY 文件頭 - 云訪問密鑰:符合各云廠商 Access Key 格式的字符串 ## 危險調(diào)用 - 命令注入:拼接用戶輸入調(diào)用系統(tǒng)命令 / 開啟 shell 執(zhí)行 - 不安全反序列化:對不可信數(shù)據(jù)做反序列化 - SQL 拼接:用字符串拼接構(gòu)造 SQL 而非參數(shù)化查詢 ## 配置 - 生產(chǎn)開調(diào)試:生產(chǎn)配置中調(diào)試開關(guān)為開 - 過寬 CORS:允許來源為通配符 ## 風(fēng)險等級 Critical=可直接遠(yuǎn)程利用 · High=需前置條件 · Medium=縱深防御問題 · Low=最佳實踐偏差
上表為起點清單,落地時請配合具體掃描規(guī)則,并按實際技術(shù)棧裁剪。
六、組合與取舍:先識別最大的風(fēng)險維度
這四種模式正交、可疊加。上面四個示例分別把格式、計算、上下文、權(quán)限四類不確定性,外移到了模板 / 腳本 / 引用文件 / 工具白名單。一個成熟 Skill 往往是四者的組合:
分層組織正文 + 引用模板 + 關(guān)鍵計算走腳本 + 收緊工具權(quán)限
但真正的設(shè)計判斷,不是"全都用上",而是先識別這個任務(wù)里最大的風(fēng)險維度,再優(yōu)先套對應(yīng)模式:
| 你最擔(dān)心的問題 | 優(yōu)先采用 | 關(guān)鍵動作 |
|---|---|---|
| 輸出格式會漂移 | 模板驅(qū)動 | 模板外置,正文只寫填寫規(guī)則 |
| 模型會算錯 | 腳本增強 | 公式一律搬進腳本 |
| 上下文會爆 / 指令會打架 | 知識分層 | 按頻率 + 互斥性拆文件 |
| 會越權(quán)操作 | 工具隔離 | 最小權(quán)限;SDK 場景另設(shè)邊界 |
七、結(jié)語
漸進式披露是地基,四種模式是建在其上的承重墻——分別扛住格式、計算、上下文、權(quán)限四類載荷。
寫 Skill 的成熟標(biāo)志,不是把 SKILL.md 寫得更長、更全,而是學(xué)會用最小的正文,把不確定性外移:格式外移給模板,計算外移給腳本,細(xì)節(jié)外移給引用文件,權(quán)限外移給工具白名單。留在正文里的,只剩下那句最關(guān)鍵的——"什么時候,該做什么"。
以上就是Claude Agent Skills的四種設(shè)計模式詳解;從漸進式披露到最小權(quán)限的詳細(xì)內(nèi)容,更多關(guān)于Claude Agent Skills四種設(shè)計模式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章

一文詳解Claude Code中的五層架構(gòu):MCP、Skills、Agent、Subagents、Agent Teams怎么協(xié)
5 月初 Anthropic 官方公布了 Claude Code 的五層架構(gòu)——MCP / Skills / Agent / Subagents / Agent Teams,這個分層不是營銷話術(shù),每層都有明確的職責(zé)邊界和協(xié)作方向,下面2026-05-18
CLAUDE.md 寫錯一行,為什么 Agent 會全程跑偏?
一行模糊規(guī)則,竟讓AI Agent瘋狂重構(gòu)全倉庫、燒光你的Token?揭秘為什么CLAUDE.md寫錯一行,Agent會全程跑偏,下面就來詳細(xì)的介紹一下2026-07-06
claude的命令、skill、agent與plugin插件的使用與實戰(zhàn)指南
在 Claude Code 生態(tài)中,Commands(命令)、Skills(技能)、Agents(子代理) 與 Plugins(插件) 構(gòu)成了從“單次交互”到“系統(tǒng)化工程”的完整能力擴展體系,本文介紹clau2026-06-23
如何在 WSL 中部署 Claude Code 并開啟 Agent Team 模式
在WSL中部署Claude并并開啟AgentTeam模式,通過tmux實現(xiàn)多智能體協(xié)同開發(fā),提升代碼審查與測試效率,這篇文章給大家介紹在 WSL 中部署 Claude Code 并開啟 Agent Team 模式,2026-05-29





