☰
别再给AI塞提示词了:用SKILL.md给OpenClaw的Agent装上web_fetch技能
2026/9/28 18:37:33 网站建设 项目流程

1. 从“提示词越写越长”到“能力按需加载”

如果你最近在折腾 OpenClaw 的 Agent,大概率经历过这个阶段:为了让 Agent 能抓网页、能读文档、能调接口,你把一大段一大段的提示词往 system prompt 里塞,塞到最后自己都记不清哪条规则对应哪个能力。结果是模型启动变慢、token 成本飙升,最要命的是——工具一多,它反而开始“选错工具”,明明该抓网页却去调了搜索,明明该读本地文件却发起了一个 HTTP 请求。

这不是模型变笨了,而是上下文被稀释了。OpenClaw 给出的解法是 Skill 体系:把能力从“提示词堆叠”里抽出来,写成一个个独立的SKILL.md,系统启动时只加载极简索引,等用户输入真正匹配到某个场景,才把对应 Skill 的完整定义加载进来。这就是所谓的渐进式披露。

这篇就以web_fetch这个最常用的技能为例,带你走一遍完整流程:写一个可复制的SKILL.md骨架、用 TaoToken 统一 Key 和 API 通道、让 Agent 真正调用web_fetch并验证输出。适合已经跑通 OpenClaw 基础对话、想让 Agent 能力边界再扩一圈的开发者。全程不需要你重写 Agent 内核,改的是一个 Markdown 文件加一段配置。

2. TaoToken 前置:一把 Key 打通模型与 Skill 调用

在写 Skill 之前,先把模型通道理顺。OpenClaw 的 Agent 在触发 Skill 时,往往需要模型做一次“意图判断 + 参数抽取”,这背后是一次真实的模型请求。如果每个 Skill 都配一套 Key,维护成本会失控。我的做法是统一走 TaoToken 的 API 通道,一个 Key 覆盖对话、编码、Agent 场景。

先到控制台创建 Key,地址是https://taotoken.net/console,登录后在 API Keys 页面新建一个,复制出来形如sk-xxxx的字符串。注意这个 Key 只在创建时完整显示一次,先存到本地环境变量里,别直接写进代码。

export TAOTOKEN_API_KEY="sk-你的key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"

TaoToken 的接口是 OpenAI 兼容格式,所以 OpenClaw 里凡是填base_url和api_key的地方,都指向上面这两个值即可。如果你用的是 Claude Code 或 Anthropic 风格的调用,接入地址在https://taotoken.net/api下同样有对应端点,文档在https://taotoken.net/doc里写得很清楚,这里不展开。

注意:Key 不要提交到 Git,也不要在SKILL.md里硬编码。Skill 文件是会被 Agent 读取甚至分享给团队成员的,把密钥写进去等于公开。

配好之后,建议先用模型对话页面做一次连通性验证,地址https://taotoken.net/model-chat,随便发一句“你好”,能正常返回就说明 Key 和通道没问题。这一步别跳过,后面 Skill 调用失败时,你能快速判断是模型通道的问题还是 Skill 本身的问题。

3. 可复制配置:web_fetch 的 SKILL.md 骨架

OpenClaw 的 Skill 目录一般放在项目根下的skills/里,每个 Skill 一个子目录,核心文件就是SKILL.md。文件名固定,Agent 靠它识别。下面是我实测可用的web_fetch骨架,你可以直接复制,改掉里面的 URL 白名单和超时参数。

--- name: web_fetch description: 抓取指定 URL 的网页内容并提取正文,适用于需要读取在线文章、文档、公告的场景。当用户提供 http/https 链接并希望总结、翻译或提取信息时使用。 version: 1.0.0 triggers: - "抓取" - "读取这个链接" - "帮我看看这个网页" - "总结这篇文章" --- # web_fetch ## 能力说明 给定一个 http 或 https 链接,发起 GET 请求,返回页面正文的纯文本。 仅处理静态 HTML 或服务端渲染页面,不执行 JavaScript。 ## 输入参数 - url(必填):目标网页地址,必须以 http:// 或 https:// 开头 - max_chars(可选,默认 8000):返回正文的最大字符数,超出截断 ## 执行流程 1. 校验 url 协议,非 http/https 直接拒绝 2. 检查域名是否在允许列表内,不在则提示用户确认 3. 发起请求,超时 15 秒,携带常规浏览器 User-Agent 4. 解析 HTML,剥离 script/style 标签,提取正文文本 5. 按 max_chars 截断后返回 ## 边界与限制 - 不处理需要登录、Cookie 鉴权或 JS 动态渲染的页面 - 遇到 403/401 时明确告知用户“该页面需要鉴权,web_fetch 无法读取” - 不跟随跨域重定向超过 3 次 ## 失败处理 - 超时:提示“目标站点响应超时,请稍后重试或换用其他方式” - 正文为空:提示“页面正文可能由 JS 渲染,web_fetch 无法提取”

这个骨架的关键在于description和triggers。description是给模型看的,决定它什么时候想起这个 Skill;triggers是给索引层用的,命中才加载完整定义。很多人 Skill 写了但 Agent 不调用,八成是description写得太泛,比如只写“抓网页”,模型判断不出和内置搜索的区别。

web_fetch的定位要卡死:它只做“已知 URL 的静态抓取”。搜索、动态渲染、鉴权页面都不归它管。边界写清楚,模型才不会乱用。

4. 验证请求:让 Agent 真正调用 web_fetch

配置写完了,得验证它真的被调用。启动 OpenClaw 后,在对话里丢一个静态页面的链接,比如某个技术博客的文章地址,然后说“帮我抓取这个链接的正文”。

预期行为是这样的:Agent 先做意图判断,命中web_fetch的 triggers,加载完整 Skill 定义,抽取url参数,然后执行。你会在日志或工具调用面板里看到类似这样的记录:

{ "skill": "web_fetch", "params": { "url": "https://example.com/blog/post-1", "max_chars": 8000 }, "status": "success", "chars_returned": 6421 }

如果返回的正文是干净的段落文本,没有<div>标签残留,说明 HTML 剥离逻辑生效了。这时候你可以再补一句“用三句话总结”,Agent 会基于刚抓到的正文继续推理,而不是重新抓一遍——因为正文已经进了当前上下文。

再测一个边界场景:丢一个需要登录的页面链接。预期是 Agent 明确回复“该页面需要鉴权,web_fetch 无法读取”,而不是返回一堆登录页的导航文字。这个负向验证比正向验证更重要,它证明你的边界声明被模型正确理解了。

提示:如果你在验证时发现 Agent 没调用 Skill 而是直接凭记忆回答,先检查triggers是否命中,再检查 Skill 目录是否被 OpenClaw 正确扫描。可以在启动日志里搜skill loaded确认。

5. 本篇常见错排查

Skill 不触发,Agent 直接回答。最常见的原因是description和用户输入语义距离太远。比如用户说“这个链接讲了啥”,而你的 description 写的是“执行 HTTP 请求获取资源”。把 description 改成贴近用户口语的描述,比如“读取在线文章内容”,命中率会明显上升。

触发了但报 403。目标站点识别出请求不是浏览器。检查你的 User-Agent 是否被改成了默认的 Python 请求头。在 Skill 的执行流程里显式指定一个常规浏览器 UA,能解决大部分 403。

返回正文为空或只有导航文字。这是典型的 JS 渲染页面,web_fetch拿到的只是 HTML 骨架。这时候不要硬改web_fetch去执行 JS,那会让 Skill 变重。正确做法是另写一个 Skill,比如基于浏览器快照的方案,让两个 Skill 各管各的边界。

Key 报 401 或额度异常。先确认环境变量有没有被正确读取,再确认 Key 没有过期。如果是在 CI 或容器里跑,注意环境变量不会自动继承。TaoToken 的用量和额度可以在控制台实时看,排查时先看那里。

Skill 加载了但参数抽取错误。比如把max_chars抽成了字符串"8000"。在SKILL.md的参数说明里明确写“整数”,并在执行流程第一步做类型转换,能避免这类问题。

6. 把能力沉淀成文件,而不是记忆

回到开头那个问题:为什么别再给 AI 塞提示词了?因为提示词是易失的、不可复用的、每次对话都要重新讲一遍的。而SKILL.md是文件,它能进版本控制、能被团队共享、能在下次遇到同样场景时被直接加载。

web_fetch只是一个起点。你可以照着这个骨架,把“读本地 CSV”“调内部 API”“生成周报”都写成独立 Skill。每个 Skill 只解决一类问题,边界清晰,触发条件明确。Agent 不再是一个什么都懂一点但什么都不稳的“通才”,而是一个知道在什么场景下调用什么能力的调度器。

模型通道这边,统一用 TaoToken 的 Key 和 API 地址,省去多套凭证的麻烦。需要长期跑编码和 Agent 任务的,可以看看 Coding Plan 的额度方案;只是验证模型连通性的,模型对话页面就够用。接入细节和参数说明都在文档里,遇到报错先翻文档再排查,比盲目改配置快得多。

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

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

立即咨询