ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenClaw - Day 5 用 Skills 给你的 AI 装上一整箱工具:OpenClaw 技能系统深度实践指南

OpenClaw - Day 5 用 Skills 给你的 AI 装上一整箱工具:OpenClaw 技能系统深度实践指南 1. 为什么你的 AI 助手需要一箱工具从聊天到干活的鸿沟很多人对 AI 助手的印象还停留在“会聊天的搜索引擎”——能回答问题、写点文案但离真正的私人助理差了一整箱工具。OpenClaw 的 Skills 系统就是来填这个坑的它把每个外部能力封装成一个独立技能安装到固定目录后助手启动时自动加载像手机开机自动加载已装 App 一样。我试过把 OpenClaw 当成日常开发助手用最大的感受是大模型本身已经够聪明缺的不是脑子是手和脚。访问 API、读写文件、操作浏览器、连 SaaS 服务、查业务数据这些事单靠语言能力解决不了。Skills 就是给 AI 装上的那双手。这篇文章聚焦 OpenClaw 技能系统从零落地以 SKILL.md 为入口演示在 ClawdHub 发现与安装 Skills、编写自定义技能骨架、通过 TaoToken 统一 Key/API 通道接入 AI 助手并完成一次可复现的调用验证。你会拿到可复制的 SKILL.md 模板、config.toml 配置骨架与逐步验证动作在本地跑通技能加载与调用链路。适合谁看已经在用 OpenClaw 但还没碰过 Skills 的开发者想给 AI 助手接自定义 API 但不知道从哪下手的同学以及被各种 Key 管理搞烦了、想统一走一个通道的人。2. TaoToken 前置统一 Key 与 API 通道在写 SKILL.md 之前先把“AI 怎么调用模型”这件事理顺。OpenClaw 的 Skills 里很多技能需要调用大模型做推理或总结如果每个技能都单独配一套 Key管理成本会爆炸。TaoToken 在这里的角色是统一入口一个 Key 走通模型对话、编码计划、控制台管理。你需要先拿到两样东西API Key在 TaoToken 控制台的 API Keys 页面创建格式类似sk-开头的一串字符。API 地址https://taotoken.net/api这是所有请求的 base URL。创建 Key 的入口在这里https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite拿到 Key 之后不要急着写进 SKILL.md。正确做法是写进 OpenClaw 的全局配置或环境变量让所有技能共享。这样你换 Key 的时候只改一个地方不用翻遍每个技能目录。注意API Key 属于敏感信息不要提交到 Git 仓库。建议放在~/.openclaw/config.toml或系统环境变量里SKILL.md 里只引用变量名。如果你还没决定用哪个模型可以先在模型对话页面试一下https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite3. 可复制配置SKILL.md 模板与 config.toml 骨架3.1 目录结构先定好OpenClaw 扫描技能的目录通常有两个位置当前工作区./skills/skill-name/共享目录~/.openclaw/skills/skill-name/共享目录的好处是同一台机器上的多个 Agent 或工作区都能复用。我建议自定义技能放共享目录项目专属技能放工作区。一个完整的技能目录长这样~/.openclaw/skills/ └── my-summarizer/ ├── SKILL.md ├── config.toml └── scripts/ └── summarize.py3.2 SKILL.md 模板SKILL.md 是写给 AI 看的“技能说明书”也是写给未来维护者看的入口文档。下面这个模板可以直接复制修改# my-summarizer ## 这个技能是干什么的 把用户提供的长文本或 URL 内容压缩成结构化摘要输出要点列表和一句话结论。 ## 能提供哪些操作 - summarize_text: 输入一段文本返回摘要 - summarize_url: 输入一个 URL抓取正文后返回摘要 ## 适合什么场景 - 用户说“帮我总结这篇文章” - 用户粘贴一段长文说“提炼要点” - 用户给一个链接说“看看讲了什么” ## 调用方式 当用户请求摘要时调用 scripts/summarize.py传入 text 或 url 参数。 ## 注意事项 - 单次输入文本不超过 8000 字超出时先分段 - URL 抓取失败时返回错误信息不要编造内容 - 摘要语言跟随原文语言关键点SKILL.md 不是写给人看的 API 文档是写给模型看的“什么时候该用我、怎么用我”。所以“适合什么场景”这一节要写得像触发条件而不是功能列表。3.3 config.toml 配置骨架config.toml 负责技能级别的配置比如 API 地址、模型名、超时时间。下面是一个走 TaoToken 通道的骨架[skill] name my-summarizer version 0.1.0 enabled true [api] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY model claude-3-5-sonnet timeout_seconds 60 [limits] max_input_chars 8000 max_output_tokens 1024注意api_key_env这一行它告诉技能从环境变量TAOTOKEN_API_KEY读取 Key而不是把 Key 硬编码在文件里。你只需要在 shell 里 export 一次export TAOTOKEN_API_KEYsk-你的实际Key如果你用的是长期编码或 Agent 场景可以考虑 Coding Plan额度更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite3.4 脚本骨架scripts/summarize.py 是真正干活的代码。这里给一个最小可运行版本import os import sys import requests API_BASE os.environ.get(TAOTOKEN_API_BASE, https://taotoken.net/api) API_KEY os.environ[TAOTOKEN_API_KEY] def summarize(text: str) - str: resp requests.post( f{API_BASE}/v1/chat/completions, headers{Authorization: fBearer {API_KEY}}, json{ model: claude-3-5-sonnet, messages: [ {role: system, content: 你是一个摘要助手输出要点列表和一句话结论。}, {role: user, content: text}, ], max_tokens: 1024, }, timeout60, ) resp.raise_for_status() return resp.json()[choices][0][message][content] if __name__ __main__: input_text sys.stdin.read() print(summarize(input_text))这个脚本从环境变量读 Key从 stdin 读输入输出摘要到 stdout。OpenClaw 调用技能时就是按这个约定来的。4. 验证请求跑通一次可复现的调用配置写完了接下来验证链路是否通。分三步走。4.1 第一步确认技能被加载openclaw skills list你应该能在输出里看到my-summarizer状态是 enabled。如果没看到检查目录路径是否正确、SKILL.md 是否存在。4.2 第二步手动跑一次脚本在终端里直接喂一段文本给脚本echo OpenClaw 的 Skills 系统把外部能力封装成独立技能安装后助手启动时自动加载。每个技能包含 SKILL.md、配置文件和脚本。SKILL.md 告诉 AI 这个技能能做什么、什么时候用。 | python ~/.openclaw/skills/my-summarizer/scripts/summarize.py如果返回了摘要内容说明脚本本身和 TaoToken 通道都是通的。如果报 401检查TAOTOKEN_API_KEY是否 export 成功如果报连接超时检查base_url是否写对。4.3 第三步在对话里触发技能启动 OpenClaw 对话输入帮我总结一下这段话OpenClaw 的 Skills 系统把外部能力封装成独立技能……助手应该会识别到摘要需求调用 my-summarizer 技能返回结构化摘要。如果它没有调用技能而是自己直接回答了说明 SKILL.md 的“适合什么场景”写得不够像触发条件回去改得更具体一些。4.4 验证成功的标志一次成功的调用链路长这样你发出自然语言请求助手读取 SKILL.md判断该用 my-summarizer助手调用 scripts/summarize.py传入文本脚本通过 TaoToken API 调用模型模型返回摘要脚本输出到 stdout助手把结果整理后返回给你整个过程你只需要说一句话中间的工具选择、参数传递、API 调用都是自动的。5. 本篇常见错排查5.1 技能列表里看不到自定义技能最常见的原因是目录层级不对。OpenClaw 期望的是skills/skill-name/SKILL.md如果你写成了skills/SKILL.md或者skills/my-summarizer/my-summarizer/SKILL.md都扫不到。用find ~/.openclaw/skills -name SKILL.md确认一下实际路径。5.2 脚本报 Key 无效或 401先确认环境变量在当前 shell 里生效echo $TAOTOKEN_API_KEY如果输出为空说明 export 没成功或者你在新的终端窗口里没重新 export。另一个可能是 Key 复制时带了空格或换行重新从控制台复制一次。5.3 助手不调用技能自己直接回答这是 SKILL.md 描述不够“触发导向”的典型症状。把“适合什么场景”改成用户可能说的原话比如“当用户说‘帮我总结’‘提炼要点’‘这篇文章讲了什么’时使用本技能”。模型是靠语义匹配来选技能的描述越贴近真实请求命中率越高。5.4 调用超时或返回空检查 config.toml 里的timeout_seconds是否太短长文本摘要可能需要 30 秒以上。另外确认max_input_chars限制是否被触发——如果输入超限脚本应该返回明确错误而不是静默失败。5.5 多个技能语义重叠导致选错如果你装了多个摘要类技能模型可能选错。解决办法是在每个 SKILL.md 里写清楚边界比如“本技能只处理英文技术文档中文内容请用 xxx 技能”。技能不是装越多越好语义重叠是调用错误的主要来源。6. 把技能接进你的日常工作流跑通第一个自定义技能之后你可以按同样的套路接更多能力。核心步骤就四步建目录、写 SKILL.md、写 config.toml、写脚本。SKILL.md 决定模型什么时候用你config.toml 决定怎么连脚本决定实际干什么。如果你打算长期用 OpenClaw 做编码或 Agent 任务建议把 Key 管理统一到 TaoToken所有技能共享一个通道换 Key 只改一个环境变量。接入文档在这里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteClaude Code 相关的接入配置也可以参考https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite最后提醒一句从 3 到 5 个核心技能起步用熟了再加新的。每个技能都会让模型在对话时多读一份 SKILL.md装太多会拖慢响应、增加 Token 消耗、提高选错概率。工具箱轻量且高频使用比塞满 200 个 App 但只用 20 个要高效得多。
返回列表