ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

为什么别人的OpenClaw比你好用?3分钟搞懂Skill:是什么、怎么用、怎么创建,一篇讲透

为什么别人的OpenClaw比你好用?3分钟搞懂Skill:是什么、怎么用、怎么创建,一篇讲透

1. 为什么同样用 OpenClaw,别人的小龙虾就是更听话

很多人第一次装好 OpenClaw,兴奋地丢一句「帮我整理下今天的资料」,结果它回你一段泛泛而谈的废话,或者干脆答非所问。转头看别人录屏,同样是 OpenClaw,输入「豆瓣 top250」就自动翻页抓数据、导出 CSV、顺手生成一个能看的 HTML 页面。差距不在模型,也不在电脑配置,而在一个东西:Skill。

Skill 是什么?一句话,它是给 AI Agent 装上的专项能力包。你可以把 OpenClaw 想象成一台刚出厂的手机,系统自带的功能能打电话、能上网,但你想让它干专业活,就得装 App。Skill 就是 OpenClaw 的 App。没有 Skill 的 Agent 只会聊天,装了 Skill 的 Agent 才会干活。qclaw 是腾讯基于 OpenClaw 做的对话入口,能连微信和 QQ,但底层跑的还是同一套 Skill 机制,所以你在 qclaw 里学的东西,换到原生 OpenClaw 一样能用。

适合谁看?三类人最该搞懂它。第一类,装了 OpenClaw 但觉得「也就那样」的人,问题多半出在没配 Skill;第二类,想让 Agent 自动处理重复工作的人,比如每天抓数据、整理表格、生成报告;第三类,想把自己的一套流程固化下来、以后一句话触发的人。这篇不讲虚的,从 skill.md 的结构讲到创建流程,再给一份能直接复制的配置模板和验证动作,让你对比自己的配置,找到体验差距到底在哪。

核心检索词先摆出来:OpenClaw Skill 是什么、怎么用、怎么创建。这三个问题搞懂,你的小龙虾才算真正养熟。下面按「问题场景 → 前置准备 → 可复制配置 → 验证结果 → 排错 → 进阶」的顺序走,每一步都能跟着做。

2. OpenClaw Skill 机制拆解与 qclaw 前置准备

要理解 Skill,先看它的载体:skill.md。这是一个 Markdown 文件,放在 OpenClaw 的技能目录里,Agent 启动时会扫描这些文件,把里面的描述读进上下文。skill.md 的核心不是代码,而是「元信息 + 指令」。元信息告诉 Agent 这个技能叫什么、什么时候触发;指令告诉 Agent 触发后该按什么步骤干活。

一个 skill.md 通常包含这几块。第一块是 name,技能的唯一标识,比如 douban-movies。第二块是 description,这是最关键的部分,它描述了「输入什么关键词会触发这个 skill」。你写「抓取豆瓣 top250 电影」,那用户输入「豆瓣 top250」时,Agent 就会匹配到这个技能。第三块是触发条件,可以理解成关键词列表或者意图描述。第四块是执行指令,也就是 Agent 触发后要做什么,比如「运行 scripts/fetch_douban_top250.py,把结果保存为 CSV」。第五块是依赖说明,比如需要哪些 Python 库、需要什么环境变量。

为什么 description 这么重要?因为 Agent 判断用不用某个 Skill,靠的就是语义匹配。你 description 写得含糊,比如「处理数据」,那用户说「帮我看看这个表」它可能触发,说「整理下销售记录」它也可能触发,结果就是乱触发或者不触发。写得精准,比如「抓取豆瓣电影 top250 的名称、年代、评分和简介,导出 CSV」,那匹配就准。这就是为什么别人的 OpenClaw 好用——他们的 skill.md 描述写得清楚,触发条件卡得准。

前置准备这块,你需要一个能跑 OpenClaw 的环境。qclaw 的好处是开箱即用,直接在对话里就能创建技能,也能连微信和 QQ。如果你用原生 OpenClaw,需要确认技能目录在哪,通常是项目根目录下的 skills 文件夹。还要确认 Python 环境可用,因为很多 Skill 会调用 Python 脚本。另外,qclaw 时不时会提示「服务太火爆了,请稍后重新发起请求」,这是公共算力排队,解决办法是设置用自己的大模型,比如 Kimi、MiniMax,在设置里填 API Key 和 Base URL 就行。

这里要提一句模型接入。如果你想让 Skill 跑得稳,建议把模型层也掌握在自己手里。TaoToken 提供统一的 API 入口,Base URL 是 https://taotoken.net/api,你可以在控制台创建 API Key,然后在 OpenClaw 或 qclaw 的模型设置里填进去。这样 Skill 触发后的推理就走你自己的额度,不受公共排队影响。具体接入文档在 https://taotoken.net/doc 可以查到,模型对话入口在 https://taotoken.net/chat。这一步不是必须,但想让体验稳定,值得配。

理解机制之后,你会发现 Skill 的本质是「把一套工作流写成 Agent 能读懂的说明书」。说明书越清楚,Agent 干得越准。接下来进入实操,从创建一个空 Skill 开始。

3. 可复制配置:从空 Skill 到豆瓣 top250 抓取模板

这一节给能直接抄的配置。先创建一个空 Skill,在 qclaw 对话里直接说「帮我创建一个空的 skill」,它会生成目录和基础文件。如果你用原生 OpenClaw,手动建目录也行,结构如下:

skills/ douban-movies/ skill.md scripts/ fetch_douban_top250.py

关键是 skill.md 的内容。下面这份模板可以直接复制,改掉 name 和 description 就能用:

--- name: douban-movies description: 抓取豆瓣 top250 电影的名称、年代、评分和简介,导出 CSV 和 HTML 页面。当用户输入「豆瓣 top250」「豆瓣电影排行」「抓取豆瓣电影」时触发。 trigger: - 豆瓣 top250 - 豆瓣电影排行 - 抓取豆瓣电影 --- # 豆瓣 Top250 抓取技能 ## 执行步骤 1. 运行 scripts/fetch_douban_top250.py,自动翻页抓取前 250 部电影。 2. 提取字段:名称、年代、评分、简介。 3. 将结果保存为 data/douban_top250.csv。 4. 调用 scripts/render_html.py 生成 data/douban_top250.html 用于展示。 ## 依赖 - Python 3.9+ - requests, beautifulsoup4, pandas ## 注意事项 - 抓取间隔不低于 1 秒,避免请求过密。 - 若页面结构变化,更新解析逻辑。

这份配置里,description 和 trigger 是触发层,执行步骤是指令层,依赖是环境层。三层齐了,Agent 才知道「什么时候用、用了干什么、干之前要准备什么」。

对应的 Python 脚本骨架如下,放在 scripts/fetch_douban_top250.py:

import time import csv import requests from bs4 import BeautifulSoup BASE = "https://movie.douban.com/top250" HEADERS = {"User-Agent": "Mozilla/5.0"} def fetch_page(start): resp = requests.get(f"{BASE}?start={start}", headers=HEADERS, timeout=10) resp.raise_for_status() soup = BeautifulSoup(resp.text, "html.parser") items = [] for node in soup.select(".item"): title = node.select_one(".title").get_text(strip=True) rating = node.select_one(".rating_num").get_text(strip=True) year = node.select_one(".bd p").get_text(strip=True).split("/")[0].strip() intro = node.select_one(".inq") intro = intro.get_text(strip=True) if intro else "" items.append([title, year, rating, intro]) return items def main(): all_items = [] for start in range(0, 250, 25): all_items.extend(fetch_page(start)) time.sleep(1) with open("data/douban_top250.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["名称", "年代", "评分", "简介"]) writer.writerows(all_items) print(f"已保存 {len(all_items)} 条") if __name__ == "__main__": main()

这段脚本负责抓取和存 CSV。HTML 渲染可以再写一个脚本,或者让 Agent 触发 frontend-design 技能来生成。如果你在 qclaw 里,可以直接说「在技能里选择 frontend-design 再生成一个漂亮的 html 页面」,它会调用对应的设计技能,效果比手写模板好。

配置里还有一个点容易被忽略:路径。skill.md 里写的 scripts/fetch_douban_top250.py 是相对路径,相对于 skill 目录。如果你的 OpenClaw 工作目录不同,要么改成绝对路径,要么在 skill.md 里说明「脚本位于本技能目录下」。路径写错是新手最常见的坑,Agent 找不到脚本就会报错或者干脆不执行。

模型接入这块,如果你想让 Skill 触发后的推理走自己的额度,可以在 OpenClaw 的模型配置里填 TaoToken 的 Base URL 和 API Key。API Key 在 https://taotoken.net/api-keys 创建,Base URL 用 https://taotoken.net/api。配置片段类似:

{ "model_provider": "taotoken", "base_url": "https://taotoken.net/api", "api_key": "sk-你的key", "model_id": "claude-sonnet-4-20250514" }

Model ID 按你实际用的模型填,Claude 系列、GPT 系列都支持。填完之后,Skill 的触发判断和执行推理都走这个通道,稳定性和速度都可控。如果你长期跑编码类 Agent 任务,可以考虑 Coding Plan,入口在 https://taotoken.net/coding-plan,额度更划算。

配置写完,下一步是验证。别急着说「连上就能用」,得实际跑一遍看结果。

4. 验证请求与成功结果:一句话触发完整工作流

验证分三步。第一步,确认 Skill 被识别。在 qclaw 对话里输入「查看技能列表」或者打开技能管理页面,应该能看到 douban-movies。如果看不到,说明 skill.md 没被扫描到,检查目录位置和文件格式。YAML front matter 的---不能少,缩进不能乱。

第二步,触发测试。直接输入「豆瓣 top250」,观察 Agent 的反应。正常情况下,它会识别到触发词,读取 skill.md,然后执行脚本。你会在对话里看到它说「正在运行 fetch_douban_top250.py」之类的过程提示。等几秒到几十秒,取决于网络和翻页速度,它会告诉你「已保存 250 条数据到 data/douban_top250.csv」。

第三步,检查产物。打开 data 目录,应该有两个文件:douban_top250.csv 和 douban_top250.html。CSV 用表格软件打开,能看到名称、年代、评分、简介四列,250 行数据。HTML 用浏览器打开,是一个排版过的页面,列出电影信息。如果 HTML 不好看,回到对话里说「用 frontend-design 重新生成 html」,它会调用设计技能,产出一个更漂亮的版本。

实测下来,整个流程从输入到出结果,顺利的话一两分钟。成功的关键标志有三个:Agent 明确说出触发了哪个 Skill、脚本执行没有报错、产物文件真实存在且内容完整。三个都满足,说明你的 Skill 配置是对的。

这里对比一下「有 Skill」和「没 Skill」的差别。没配 Skill 时,你输入「豆瓣 top250」,Agent 只会回你一段介绍豆瓣 top250 是什么的文字,因为它没有执行能力。配了 Skill 后,它知道要跑脚本、要存文件、要生成页面。这就是体验差距的来源——不是模型变聪明了,是你给了它干活的工具和说明书。

验证通过后,你可以把这个 Skill 固化下来。以后只要输入「豆瓣 top250」,整套工作流自动跑。你还可以把工作流更新到 skill.md,比如加上「生成 HTML 后自动打开浏览器预览」,下次触发就多一步。Skill 是可以迭代的,越用越顺手。

如果你想让验证更严谨,可以加一个检查步骤:在 skill.md 的执行步骤里写「执行完成后,输出 CSV 的行数和文件路径」。这样 Agent 每次都会汇报结果,你能一眼看出有没有漏抓。这个技巧在调试阶段特别有用。

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

Skill 跑不起来,多半是下面几类错。逐个对照,找到你的那条。

第一类,401 Unauthorized。这个通常出现在模型接入环节。你填的 API Key 不对、过期,或者 Base URL 写错了。检查 https://taotoken.net/api-keys 里的 Key 是否复制完整,Base URL 是不是 https://taotoken.net/api。注意 Base URL 后面不要多加斜杠或者路径,有些客户端对格式敏感。如果用的是 Claude Code 类工具,OAuth 流程走不通时,改用 API Key 方式,在配置里填 Base URL、Key、Model ID 三件套。三件套缺一不可,只填 Key 不填 Base URL 也会 401。

第二类,local proxy failed。这个报错说明客户端在尝试走本地代理,但代理没起来或者端口不对。检查你的网络配置,确认没有残留的代理设置。如果你在 OpenClaw 或 qclaw 的设置里填了代理地址,把它清掉,直连即可。有些工具默认读系统代理,系统代理关了但工具配置里还留着,就会报这个。排查方法是看配置文件里有没有 proxy 相关字段,有就删掉。

第三类,reading choices 相关报错。这个一般出现在模型返回格式不符合预期时。比如你用的模型返回结构变了,客户端解析 choices 字段失败。解决办法是确认 Model ID 填对了,不同模型的返回格式有差异。如果你在 TaoToken 控制台切换了模型,记得同步更新配置里的 Model ID。另外,有些客户端对流式返回和非流式返回处理不同,如果报这个错,试试关掉流式开关。

第四类,OAuth 相关报错。Claude Code 这类工具默认走 OAuth 登录,如果你用的是 API Key 接入,需要在配置里明确指定认证方式。settings 文件里通常有 auth 字段,改成 api_key 模式,然后填 Key。如果还是报 OAuth 错,检查是不是有缓存的 token 文件,删掉重新配置。CC Switch 这类切换工具,配置时要写全 Base URL、Key、Model ID,少一个都会认证失败。

第五类,Skill 不触发。这个不是报错,但比报错更让人困惑。Agent 收到「豆瓣 top250」却没反应,说明 description 或 trigger 没匹配上。检查 skill.md 里的关键词是否和你的输入一致,语义匹配对措辞敏感。你可以把 trigger 写得更宽泛,比如加上「豆瓣」「电影排行」等词。另外确认 skill.md 文件编码是 UTF-8,中文乱码会导致匹配失败。

第六类,脚本执行报错。Agent 说「正在运行脚本」然后报 Python 错误。常见原因是依赖没装,比如缺 requests 或 beautifulsoup4。在 skill.md 的依赖里写清楚,然后手动 pip install 一遍。还有可能是路径问题,脚本里的相对路径和实际工作目录不一致。建议在脚本里用绝对路径,或者用 os.path.dirname(file) 定位。

排查的核心思路是分层:先确认模型接入通不通(401、OAuth),再确认 Skill 识别没识别(不触发),最后确认脚本跑没跑通(执行报错)。一层层往下查,别跳步。每解决一类,你的 OpenClaw 就稳一分。

6. 从自建 Skill 到灵感广场:让 Agent 越用越顺手

自己写 Skill 是基本功,但不必所有东西都从零造。qclaw 和 OpenClaw 生态里有灵感广场,可以直接找别人做好的 Skill 导入。导入方式很简单,在「添加技能」里输入 GitHub 链接,它会自动拉取 skill.md 和脚本。比如之前有人分享的「同事 Skill」,导入后就能用。导入第三方 Skill 时注意看它的依赖和权限,别让它跑你没预期的脚本。

自建和导入结合,是效率最高的路子。通用能力用现成的,比如前端设计、文档处理;你自己的专属流程自己写,比如公司内部的报表生成、特定数据源的抓取。写好的 Skill 可以导出分享,也能版本管理。skill.md 本质是文本文件,用 Git 管起来,改了什么一目了然。

进阶玩法是把多个 Skill 串起来。比如豆瓣抓取 Skill 跑完,自动触发 frontend-design Skill 生成页面,再触发一个「发送到微信」的 Skill 把结果推给你。这种编排在 skill.md 里写清楚步骤就行,Agent 会按顺序执行。qclaw 连了微信和 QQ,推送这一步天然支持。

还有一个提升稳定性的技巧:把模型层固定下来。公共算力排队时提示「服务太火爆」,体验会断。设置自己的模型,比如通过 TaoToken 接入 Kimi、MiniMax 或 Claude 系列,Skill 触发后的推理就走你的通道。配置入口在 https://taotoken.net/api-keys,接入文档在 https://taotoken.net/doc。长期跑 Agent 任务的话,Coding Plan 在 https://taotoken.net/coding-plan 有更合适的额度方案。

最后说个心态问题。Skill 不是一次写完就完美的,它像养宠物,得调。触发不准就改 description,脚本报错就修脚本,产物不满意就换设计技能。每次迭代都让 Agent 更懂你。别人的 OpenClaw 好用,不是他们天赋异禀,是他们把 skill.md 写清楚了,把工作流固化下来了。你照着这篇的模板走一遍,差距就补上了。现在就去创建一个空 Skill,把「豆瓣 top250」跑通,你的小龙虾就算正式上岗了。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进