☰
Skills 技能扩展——怎么给你的虾装上新的钳子|卷卷养虾记 · 第六篇:从 SKILL.md 到 TaoToken 的 Agent 能力装配
2026/10/2 16:54:57 网站建设 项目流程

1. 为什么你的 OpenClaw Agent 需要 Skills 技能扩展

刚把 OpenClaw 跑起来那几天,我总觉得这只「虾」有点笨。它能聊天、能查资料、能写代码片段,但每次让它做点固定流程的事,都得从头把要求复述一遍。比如每天早上要整理一份数据简报,我得把「读哪个表、取哪几个字段、按什么格式输出、发到哪里」重新讲一遍。它不嫌烦,我先烦了。

后来我才意识到,问题不在模型聪不聪明,而在于我没给它装「钳子」。OpenClaw 的 Agent 本体是一个通用推理引擎,它擅长理解意图、拆解任务,但它默认不知道你工作里那些只属于你的固定流程。Skills 技能扩展就是解决这件事的:把你重复做的流程,封装成一个可被 Agent 识别、加载、调用的功能模块。装上去之后,你只需要说一句「日报」,它就知道该干什么。

这篇是「卷卷养虾记」第六篇,聚焦 OpenClaw Agent 的 Skills 扩展机制。我会从 SKILL.md 的目录结构和加载逻辑讲起,拆解一个 Skill 从创建到生效的完整链路,给出可复制的 SKILL.md 配置模板,并演示如何通过 TaoToken 统一 Key/API 通道接入模型能力,最后附一次技能触发验证动作,确认新钳子真正装上了。适合已经在用 OpenClaw、想让 Agent 承担更多固定流程的读者;如果你还没配好基础环境,也可以先看配置部分,照着填就能跑。

核心检索词先摆出来:Skills 是 OpenClaw Agent 的可插拔功能模块,SKILL.md 是每个技能的说明书,Agent 在处理消息时会扫描已安装的 Skills,匹配触发条件后按流程执行。理解这三句话,后面所有操作都是它的展开。

我试过最直观的类比:没有 Skills 的 Agent,像一个聪明但桌上空空的人;装了 Skills 的 Agent,还是同一个人,但桌上多了锤子、扳手、计算器、模板库。工具不让人变聪明,但能让聪明人少干重复活。这就是 Skills 技能扩展的全部意义。

2. SKILL.md 目录结构与加载逻辑:OpenClaw Agent 技能装配的核心

要装钳子,先得知道钳子长什么样。OpenClaw 里每个 Skill 本质上是一个文件夹,标准结构如下:

skill-name/ ├── SKILL.md ← 技能说明书(触发条件、执行流程、输出格式) ├── tools/ ← 这个技能用到的工具(可选) └── templates/ ← 输出模板(可选)

SKILL.md 是必须的,另外两个目录按需创建。Agent 启动或收到消息时,会扫描 Skills 目录下的所有子文件夹,读取每个 SKILL.md,把触发条件和执行流程加载进上下文。当你的消息命中某个 Skill 的触发条件,Agent 就按那份说明书执行。

这里有个关键点很多人忽略:SKILL.md 不是给模型「自由发挥」的提示词,而是一份结构化契约。它要写清楚三件事——什么时候触发、按什么步骤执行、输出成什么样子。写得越明确,Agent 执行越稳定;写得含糊,它就会在边界情况上乱猜。

SKILL.md 的推荐结构分四块:基本信息、触发条件、执行流程、异常处理。触发条件建议写三种情况:精确触发(关键词直接命中)、模糊触发(需要向用户确认)、不触发(明确排除的场景)。「不触发」这条最容易被漏掉,但没有边界的 Skill 会在你不想让它触发的时候触发,反而添乱。

执行流程按步骤写,每一步说清楚:做什么、用什么数据、输出什么。异常处理至少覆盖三类:数据异常(数值明显偏离正常范围时先暂停)、模板异常(文件不存在时降级输出)、发送失败(把内容交给用户手动处理)。

加载逻辑上,OpenClaw 会按 Skills 目录的扫描顺序加载,同名 Skill 后加载的会覆盖先加载的。所以自定义 Skill 建议用带前缀的命名,避免和社区 Skill 冲突。激活后可以用openclaw skills list查看当前已加载的 Skill 及其状态,确认新钳子被正确识别。

理解了这套结构,写 SKILL.md 就只是把你脑子里的流程翻译成规范格式。下一节进入实操,从零写一个能跑的 Skill,并接上 TaoToken 的模型通道。

3. 可复制配置:SKILL.md 模板与 TaoToken 接入片段

这一节给两份可直接复制的配置。第一份是 SKILL.md 模板,第二份是 TaoToken 的接入配置片段。两份都按真实路径和字段写,改掉占位符就能用。

先看 SKILL.md 模板。假设我们要写一个「风控日报生成器」,目录建在~/.openclaw/skills/risk-daily-report/:

# risk-daily-report ## 基本信息 - 名称:风控日报生成器 - 版本:1.0 - 作者:卷卷 - 描述:按固定模板生成风控日报并发送到指定群组 ## 触发条件 精确触发: 用户消息包含以下任一关键词: - 「日报」「生成日报」「今日日报」「日报生成」 模糊触发(需要确认): 用户消息包含「今天的报告」「每日报告」 → 询问用户「你是要生成风控日报吗?」 不触发: 包含「周报」「月报」「年报」的消息 ## 执行流程 ### 第一步:数据获取 优先通过数据源 API 读取今日数据报表。 如果读取失败,告知用户缺少哪些数据,让用户手动补充。 需要的指标: - total_intercept:今日总拦截量 - miss_rate / miss_rate_yesterday:今日/昨日漏放率 - false_positive_rate / false_positive_rate_yesterday:今日/昨日误伤率 - anomaly_merchants:重点商户异常情况 ### 第二步:数据处理 计算环比变化。 如果某项指标变化超过 10%,标注 并生成可能原因。 如果有商户异常,标注 🔴 并建议处理优先级。 ### 第三步:生成草稿 按 templates/daily-report.md 填入数据,生成日报草稿。 发给用户确认,等待「发送」指令。 ### 第四步:发送 用户确认后,通过消息通道发到指定群组。 发送完成后记录到 memory/daily/[今日].md。 ## 异常处理 - 数据异常:数值明显偏离正常范围时先暂停,向用户确认 - 模板异常:templates/daily-report.md 不存在时降级为纯文本输出 - 发送失败:把内容返回给用户,由用户手动发送

配套的输出模板放在templates/daily-report.md:

【风控日报】{{date}} 今日核心指标 ━━━━━━━━━━━━━━━━━━━━ 拦截总量:{{total_intercept}} 笔 漏放率:{{miss_rate}}% {{miss_rate_flag}} 环比昨日:{{miss_rate_change}}% 误伤率:{{false_positive_rate}}% {{false_positive_flag}} 环比昨日:{{false_positive_change}}% 重点商户情况 ━━━━━━━━━━━━━━━━━━━━ {{anomaly_merchants}} 今日备注 ━━━━━━━━━━━━━━━━━━━━ {{notes}} —— 卷卷自动生成 · {{timestamp}}

模板里的{{变量名}}在执行时会被实际数据替换。

接下来是 TaoToken 接入片段。OpenClaw 的模型调用走统一配置,把 Base URL 指向 TaoToken 的 API 地址,Key 用你在控制台创建的 Key,Model ID 填你要用的模型。配置文件路径按 OpenClaw 的约定放在~/.openclaw/config.toml:

[model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey" model_id = "claude-sonnet-4-20250514" timeout = 60 max_retries = 3

如果你用的是 JSON 格式的配置,等价片段如下:

{ "model": { "provider": "openai-compatible", "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey", "model_id": "claude-sonnet-4-20250514", "timeout": 60, "max_retries": 3 } }

三件套必须齐全:Base URL、Key、Model ID。少任何一个,Agent 在调用模型时都会失败。Key 在 TaoToken 控制台的 API Keys 页面创建,创建后只显示一次,记得保存。模型 ID 按你实际要用的填,不同模型 ID 不同,别照抄示例里的。

配置写完后,重启 OpenClaw 让配置生效。然后激活 Skill:

openclaw skills activate risk-daily-report openclaw skills list

skills list里应该能看到risk-daily-report [active]。到这里,钳子装上了,但还没验证它能不能夹东西。下一节做一次真实的触发验证。

4. 验证请求与成功结果:确认新钳子真正生效

配置写完不等于生效,必须跑一次真实触发。验证分两步:先确认模型通道通,再确认 Skill 被正确触发。

第一步,验证 TaoToken 通道。用 curl 直接打一次 API,确认 Key 和 Base URL 没问题:

curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [ {"role": "user", "content": "回复两个字:通了"} ], "max_tokens": 20 }'

成功的话返回 JSON 里会有choices数组,message.content是「通了」。如果这里就报错,先别往下走,回到第 5 节排查。

第二步,验证 Skill 触发。在 OpenClaw 对话里直接发「日报」,观察 Agent 的反应。正确的执行链路应该是:Agent 扫描到消息命中risk-daily-report的精确触发条件,加载 SKILL.md,按第一步去读数据源。如果数据源没配好,它应该按异常处理逻辑告诉你缺哪些数据,而不是卡死或乱编。

我第一次跑的时候,数据源 API 没通,Agent 直接回了一句「数据读取失败,缺少 total_intercept、miss_rate 两项,请手动补充」。这就是异常处理生效了,说明 Skill 被正确加载并执行了。补上假数据再发一次「日报」,它按模板生成了草稿,等我确认。整个链路跑通。

成功结果长这样:你发「日报」,Agent 回一份填好数据的草稿,末尾问你是否发送。你回「发送」,它调用消息通道发出去,并在memory/daily/下留一条记录。到这一步,新钳子才算真正装上了。

验证时建议用假数据先跑全流程,确认每个步骤都没问题,再接入真实数据源。真实数据一旦出错,排查成本高得多。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth

这一节对照真实报错,逐个给排查路径。这些错我都踩过,按顺序查基本能定位。

401 Unauthorized。最常见,Key 不对或没带上。检查三处:config.toml里api_key是否填了完整 Key(有没有多余空格);curl 测试时Authorization头是不是Bearer sk-xxx格式;Key 是否在 TaoToken 控制台被删除或过期。如果 Key 刚创建,确认复制完整,创建后只显示一次。

local proxy failed。这个报错通常出现在 Agent 调用模型时,本地网络层没把请求发出去。检查base_url是否写成https://taotoken.net/api,注意结尾不要多加/v1,路径拼接由客户端处理。另外确认本机没有残留的代理环境变量干扰,env | grep -i proxy看一下,有的话清掉再试。

reading choices 报错。一般是返回体结构不符合预期,常见原因是model_id填错,服务端返回了错误对象而不是正常的choices数组。把model_id换成控制台里确认可用的模型 ID,重试。如果还报,用第 4 节的 curl 单独打一次,看返回体里error字段写了什么。

OAuth 相关报错。如果你用的是 Claude Code 或 Codex 这类带 OAuth 流程的客户端,报 OAuth 失败通常是认证方式没切到 API Key 模式。以 Codex 为例,~/.codex/auth.json里要写 API Key 而不是 OAuth token:

{ "OPENAI_API_KEY": "sk-你的TaoTokenKey", "OPENAI_BASE_URL": "https://taotoken.net/api" }

Claude Code 的 settings 里同理,把 Base URL 指向 TaoToken,Key 填 API Key。三件套 Base URL、Key、Model ID 一个都不能少。CC Switch 或 Cline MCP 场景下,也是这三件套配齐,MCP 的 server 配置里把模型通道指向 TaoToken。

排查顺序建议:先 curl 验证通道,再查客户端配置,最后看 Skill 本身。通道不通,Skill 写得再好也跑不起来。

6. 从 SKILL.md 到 TaoToken:把 Agent 能力装配成可复用资产

写到这里,一只装了新钳子的虾已经能干活了。回头看整条链路:SKILL.md 定义「什么时候做什么」,TaoToken 提供「用什么模型做」,两者拼起来才是完整的 Agent 能力装配。

我自己的风控日报 Skill 从 v1 到 v3 踩过不少坑。v1 能跑但很脆,数据源一失败就卡死;v2 加了异常处理,但触发条件太宽,有次我说「今天的报告怎么样」,它以为我要生成日报直接开跑,加了「不触发」规则才好;v3 加了数据异常检测,有次数源出问题漏放率是 0,它差点直接发出去,现在这种情况会先暂停让我确认。每次出问题就是一次改进机会。

如果你想让 Agent 自己记录这些教训,可以装self-improving-agent这个 Skill,它会从错误中学习并自动记录,下次遇到类似情况主动规避。用一段时间后,再配上memory-consolidator定期整理记忆文件,Agent 会越用越顺手。

Skills 解决的核心问题是重复。重复本身不是坏事,它意味着你已经把某件事想清楚了、流程固化了、可以交出去了。交出去之后,你的注意力就能放在那些还没想清楚的事上。这就是给虾装钳子的意义——不是让它变聪明,而是让它替你干那些你已经想明白的活。

下一篇聊「一只虾能夹,三只虾能搬山」,让几只虾一起干活。卷卷养虾记持续更新中。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询