1. 工作流 Skill 到底是什么,为什么值得单独写一篇
如果你最近在折腾 LLM 自动化流程,大概率听过 Skill 这个词。简单说,Skill 就是一个文件夹,核心是里面的SKILL.md文件,用 YAML frontmatter 加 Markdown 正文的格式写成。当 LLM 判断当前任务需要某个 Skill 时,它会调用 skill 工具把这个文件加载进来,SKILL.md的全部内容会作为 tool-result 注入到对话上下文里,LLM 读到之后自主决定怎么执行。
这里有个关键机制要先说清楚:Skill 本质是「知识注入」,它不会动态生成新工具,而是把指令文本塞进 LLM 的上下文,让 LLM 用已有的 bash、read、edit 这些工具去执行。所以写 Skill 的核心不是写代码,而是写「给 LLM 看的操作手册」。
一个标准的 Skill 目录长这样:
my-skill/ ├── SKILL.md # 主文件(必须) ├── scripts/ # 可执行脚本(可选) ├── references/ # 详细参考文档(可选,按需加载) ├── resources/ # 模板、清单等资源(可选) └── examples/ # 示例(可选)适合谁看这篇?如果你正在用 LLM 搭自动化流程,比如部署流水线、代码审查、产品发现流程,或者你已经在写 Skill 但加载率低、LLM 老偷懒,那这篇就是给你准备的。我会从 7 个顶级 Skill 里提炼出可复用的模式,给出能直接复制的SKILL.md模板,最后演示怎么通过 TaoToken 统一 Key 通道完成调用和验证。
写 Skill 最容易踩的坑,是把「给人看的文档」直接搬过来。人看文档能脑补上下文,LLM 不行。它需要明确的触发条件、具体的命令、清晰的退出条件。下面我按「问题场景 → 前置准备 → 可复制配置 → 验证 → 排障 → 资源」的顺序展开,你可以跟着一步步做。
2. 从 7 个顶级 Skill 提炼的 5 种设计模式与 SKILL.md 编写最佳实践
先看 Frontmatter,这是决定 Skill 是否被加载的「门面」。必填字段只有两个:name和description。name是小写连字符的唯一标识,description最关键,LLM 就是靠它决定要不要加载这个 Skill。
对比一下好坏写法:
# 好的 description — 包含触发短语和关键词 description: Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "push this live", or "create a preview deployment". # 好的 description — 定义时序位置 description: Use when implementing any feature or bugfix, before writing implementation code # 差的 description — 太模糊 description: Helps with deployment stuff核心原则三条:列举触发短语,把用户可能说的话写进去;定义时序位置,说明「在什么之前/之后」使用;包含产品关键词,覆盖大平台时把所有产品名列出来。
除了必填字段,从 7 个 Skill 里还能观察到一些扩展字段,比如references声明最重要的参考文档、allowed-tools声明需要的工具权限、type声明 Skill 类型(workflow/component)、best_for和scenarios描述适用场景、estimated_time预估执行时间。这些不是标准强制,但能显著提升加载准确率。
接下来是 5 种核心设计模式,这是整篇的骨架。
模式 1:线性流程。适用部署、安装、迁移这类有明确步骤的操作。代表是 openai/skills 的 vercel-deploy,只有 77 行。结构是:标题 → Prerequisites → Quick Start(Step 1→2→3)→ Fallback → Troubleshooting。关键技巧包括安全默认值(「Always deploy as preview, not production」)、每步给出可直接执行的 bash 命令、超时提示、降级方案、负面指令(「Do not curl the deployed URL to verify」)。判断标准很简单:如果你的 Skill 能用「先做 A,再做 B,最后做 C」描述,就用线性模式。
模式 2:决策树 + 按需加载。适用大型平台选型、产品导航、问题诊断。代表是 cloudflare-deploy,224 行。结构是认证前置 → Quick Decision Trees(按用户意图分类)→ Product Index。技巧在于用用户语言而非技术术语分类(「I need to run code」而不是「Compute products」)、树形导航、渐进式披露(主文件 7KB,references/ 按需展开到几十万字)、产品索引表。进阶玩法是同一知识域拆成两个 Skill:导航型只做选型,操作型包含认证和命令。
模式 3:循环迭代。适用 TDD、代码审查、设计评审。代表是 obra/superpowers 的 test-driven-development,371 行。结构是 The Iron Law(铁律)→ Red-Green-Refactor 循环体 → Common Rationalizations(借口反驳表)→ Verification Checklist。技巧包括强硬语气(「Delete it. Start over.」)、Good/Bad 对比、预判 LLM 的 12 种偷懒借口逐一反驳、8 项 checklist 作为退出条件、不确定时交给人。
模式 4:接力棒循环。适用跨多个 session 的长期项目。代表是 google-labs-code/stitch-skills 的 stitch-loop,203 行。核心是「文件即状态」,用 next-prompt.md 作为接力棒,6 步执行协议里 Step 6「写下一个接力棒」标记为 Critical + MUST。和模式 3 的区别在于:状态存在外部文件系统而非对话上下文,能跨 session,循环退出靠路线图清空而非 checklist。
模式 5:多阶段 + 检查点 + Skill 编排。适用多周流程,需要在关键节点做 Go/No-Go 决策。代表是 deanpeters/Product-Manager-Skills 的 discovery-process,502 行。每个 Phase 都有 Activities → Outputs → Decision Point 的统一模板,决策检查点标注时间影响(「+2-3 days」「+1 week」),调度 10+ 个子 Skill 完成各阶段。
还有个特殊模式:思维框架。代表是 trailofbits/skills 的 audit-context-building,302 行。它控制的是 LLM「怎么想」而非「做什么」,用第一性原理、5 Why、5 How 给分析框架,用量化阈值(「每个函数最少 3 个不变量、5 个假设」)强制分析深度,用 Non-Goals 克制 LLM 最想做的事。
通用写作技巧方面,防止 LLM 偷懒有 4 种武器:强硬语气、借口反驳表、量化阈值、负面指令。教学有 3 种有效方式:Good/Bad 对比、具体命令、完整示例。安全边界有 3 条原则:安全默认值、权限最小化、人类兜底。知识组织分 3 层:Frontmatter(~100 tokens)→ SKILL.md 正文(<5K tokens)→ references/ 按需加载。总上下文占用控制在 10K tokens 以内比较理想。
3. 用 TaoToken 统一 Key 接入 Skill 工作流的可复制配置
写好的 Skill 要真正跑起来,得有个稳定的 LLM 调用通道。我试过在多个项目里分别配 Key,管理起来很乱,后来统一走 TaoToken 的 API 通道,一个 Key 覆盖多个模型,配置也集中。
先拿 Key。打开 https://taotoken.net/api-keys ,登录后创建一个 API Key,复制保存。注意这个 Key 只在创建时完整显示一次,丢了就得重建。
Base URL 用https://taotoken.net/api,不要加 UTM 参数。Model ID 根据你的场景选,做 Skill 工作流一般用 Claude 系列或 GPT 系列都行,具体以控制台模型列表为准。
下面给三套可复制的配置,覆盖最常见的三种接入方式。
第一套:Claude Code 的 settings.json。路径在~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }第二套:Codex 的 auth.json。路径在~/.codex/auth.json:
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api" }第三套:Cline MCP 配置。在 Cline 的 MCP 设置里填:
{ "mcpServers": { "taotoken": { "command": "npx", "args": ["-y", "@taotoken/mcp-server"], "env": { "TAOTOKEN_API_KEY": "sk-你的TaoToken密钥", "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } } } }三件套记牢:Base URL 是https://taotoken.net/api,Key 是你在控制台创建的,Model ID 按场景选。任何一套配置里这三个都不能少。
如果你用 CC Switch 管理多套配置,可以在里面新建一个 profile,把上面的 Base URL 和 Key 填进去,切换项目时一键换。这样 Skill 工作流和日常编码可以用不同的模型,互不干扰。
配置完之后,Skill 的调用链路是这样的:LLM 读到你的SKILL.md,按里面的指令调用 bash/read/edit 工具,这些工具背后如果需要模型推理,就走 TaoToken 的通道。所以 Skill 本身不需要写任何 API 调用代码,它只管写指令,通道由外部配置统一管。
4. 验证 Skill 加载与请求是否成功
配置好之后别急着上生产,先验证通道通不通。最直接的方式是用 curl 打一个最小请求:
curl https://taotoken.net/api/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: sk-你的TaoToken密钥" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 100, "messages": [{"role": "user", "content": "回复 OK 两个字母"}] }'如果返回里有content字段且文本是「OK」,说明通道正常。如果返回 401,说明 Key 有问题;如果返回 model not found,说明 Model ID 写错了。
通道通了之后,验证 Skill 加载。把你的 Skill 文件夹放到 LLM 能扫描到的目录,比如 Claude Code 的~/.claude/skills/下。然后开一个新对话,输入一句能触发 description 里触发短语的话,比如你写的是部署 Skill,就输入「deploy my app to preview」。
观察 LLM 的行为:它应该先调用 skill 工具加载SKILL.md,然后按里面的 Step 1、Step 2 执行。如果它没加载,说明 description 写得不够明确,回去补触发短语。
一个更可控的验证方式,是直接在对话里让 LLM 读取 Skill 文件:
请读取 ~/.claude/skills/my-skill/SKILL.md,然后告诉我这个 Skill 的触发条件是什么。如果 LLM 能准确复述出 description 里的触发短语,说明文件路径和格式都没问题。这一步能排除掉 90% 的「Skill 不生效」问题。
验证通过后,你可以用模型对话页面快速测不同模型对同一个 Skill 的遵从率。打开 https://taotoken.net/models ,把同一段 Skill 指令贴进去,切换模型对比输出。实测下来,Claude 系列对强硬语气和 checklist 的遵从率更高,GPT 系列在决策树场景下表现更稳。
5. 本篇常见错误排查:401、local proxy failed、reading choices、OAuth
排障这块我踩过的坑不少,按报错类型整理一下。
401 Unauthorized。最常见。原因通常是 Key 没填对、Key 过期、或者 Base URL 写成了带 UTM 的完整链接。检查三点:Key 是不是sk-开头且完整;Base URL 是不是https://taotoken.net/api结尾没有多余路径;请求头字段名对不对(Anthropic 用x-api-key,OpenAI 用Authorization: Bearer)。
local proxy failed。这个报错一般出现在本地代理配置冲突时。检查你的环境变量里有没有残留的HTTP_PROXY、HTTPS_PROXY,有的话先清掉再试。另外确认ANTHROPIC_BASE_URL没有被其他工具的配置覆盖,多个配置文件同时生效时会打架。
reading choices 报错。通常出现在 OpenAI 兼容接口的响应解析阶段,说明返回结构和你用的 SDK 预期不一致。检查 Model ID 是不是写成了 Anthropic 的模型名却用 OpenAI 的 SDK 调用。解决办法是统一:用 Anthropic SDK 就配 Anthropic 格式的 Model ID,用 OpenAI SDK 就配 OpenAI 格式的。
OAuth 相关报错。如果你用的是 Claude Code 或 Codex 这类带 OAuth 登录的工具,配置了 API Key 之后可能还会走 OAuth 流程导致冲突。解决办法是在 settings 里显式声明用 API Key 模式,把 OAuth token 相关字段清空。Codex 的 auth.json 里只保留OPENAI_API_KEY和OPENAI_BASE_URL两个字段最稳。
Skill 加载了但 LLM 不执行。这不是报错但很常见。原因一般是SKILL.md正文太长,超过了上下文预算,LLM 读到一半就跳过了。解决办法是把主文件控制在 5K tokens 以内,详细内容挪到references/里按需加载。另一个原因是指令太模糊,比如写「优化代码」而不是「删除未使用的 import 语句」,LLM 不知道具体做什么。
Skill 执行到一半停了。检查有没有写超时提示。vercel-deploy 里那句「Use a 10 minute (600000ms) timeout」就是干这个的。没有超时提示时,LLM 可能因为默认超时太短而中断。
排障时如果拿不准,直接去 https://taotoken.net/doc 查接入文档,里面有各语言的完整示例和错误码说明。文档更新比较及时,比在群里问快。
6. 长期跑 Skill 工作流,用 Coding Plan 更省心
单次验证用 API Key 就够了,但如果你要长期跑 Skill 工作流,比如每天定时执行部署 Skill、代码审查 Skill,或者多个 Agent 协作的接力棒循环,那按量计费的 API Key 管理起来会比较累。这时候可以看看 Coding Plan,它更适合长期编码和 Agent 场景,额度固定,不用担心某天跑飞了账单爆炸。
具体选哪个,看你的使用频率。偶尔测一下 Skill,API Key 足够;每天都要跑,或者团队多人共用一套 Skill 工作流,Coding Plan 更划算。开通入口在 https://taotoken.net/coding-plan ,里面有不同档位的说明。
回到 Skill 本身,最后给一个最小可用的线性模式模板,你可以直接复制改:
--- name: my-skill description: [一句话描述做什么 + 什么时候触发,把用户可能说的话写进去] --- # Skill 名称 [一句话核心原则 + 安全默认值] ## Prerequisites - [前置条件 1] - [前置条件 2] ## Steps ### Step 1: [动作] ```bash [具体命令]Step 2: [动作]
[具体指令]
Step 3: [动作]
[具体指令]
Troubleshooting
| Issue | Solution |
|---|---|
| [问题 1] | [解决方案] |
循环迭代模式把 Steps 换成 Phase A → Verify A → Phase B → Verify B → Repeat,再加一张 Rationalizations 表和 Completion Checklist 就行。 写 Skill 这件事,说到底是把「你脑子里的操作流程」翻译成「LLM 能照着做的指令」。翻译得好不好,就看 LLM 执行时偷不偷懒、跑不跑偏。上面这 5 种模式和那些技巧,都是从真实跑过的 Skill 里提炼出来的,你照着套,能少走不少弯路。