OpenClaw Skill 实战指南:用 SKILL.md 让 AI Agent 学会新技能并接入 TaoToken
发布时间:2026/9/25 9:59:05 作者:尧图编辑部 阅读量:1,286

1. 为什么你的 AI Agent 总是“学不会”新技能如果你用 OpenClaw 跑过稍微复杂一点的任务大概率遇到过这种场景让 Agent 帮忙把一篇 Markdown 发到 CSDN它要么漏掉图片上传要么把标签填错要么干脆在编辑器里迷路。你手动纠正一遍下次换个标题它又忘了。问题不在于模型不够聪明而在于你从来没有给过它一份“上岗手册”。OpenClaw Skill 就是这份手册。它不是插件框架不是代码库而是一份结构化的指令包告诉 AI Agent 三件事什么时候该用这个技能、具体怎么做、需要调用哪些脚本和资源。SKILL.md 是唯一必需的文件其余目录按需添加。这意味着一个 Skill 可以简单到只有一个 Markdown 文件只要描述清楚Agent 就能按图索骥。这篇文章聚焦 OpenClaw Skill 从零落地。我会用 Playwright 场景演示一个真实可跑的 Skill让 AI Agent 学会“把 Markdown 发布到 CSDN 草稿箱”。过程中会给出可复制的 SKILL.md 配置片段、TaoToken 统一 Key/API 通道的接入步骤以及运行验证动作。适合正在用 OpenClaw 做自动化、想让 Agent 稳定执行固定流程的开发者。读完之后你可以直接复现一个能跑通的 Skill并确认它真的生效。2. TaoToken 前置给 Agent 一条稳定的模型通道在写 SKILL.md 之前先把模型通道准备好。OpenClaw 的 Agent 在触发 Skill 后需要调用大模型来理解指令、生成参数、判断执行结果。如果每次都要在代码里硬编码不同厂商的 Key维护成本会很高。TaoToken 提供的是统一 Key 和统一 API 通道你只需要一个 Key就能在 OpenClaw 里切换不同模型。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数配置时直接写这个。你需要先拿到 API Key。进入控制台创建 Key路径是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。创建完成后复制 Key后面在 OpenClaw 的模型配置里会用到。如果你还没决定用哪个模型可以先在模型对话页面测试一下 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 确认通道可用再接入。注意API Key 只显示一次创建后立即保存到本地环境变量或密钥管理工具里不要直接写进 SKILL.md 或提交到 Git。对于长期跑编码和 Agent 任务的场景Coding Plan 会更划算入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。它适合需要频繁调用模型、跑自动化流程的开发者。如果你只是偶尔验证一下 Skill用按量计费的 Key 就够了。3. 可复制配置SKILL.md 骨架与 Playwright 脚本现在进入核心部分。一个 OpenClaw Skill 的目录结构极简csdn-blog/ ├── SKILL.md # 唯一必需元数据 指令 └── scripts/ └── csdn_publish.py # Playwright 自动化脚本只有 SKILL.md 是必需的scripts 目录按需添加。下面先写 SKILL.md。3.1 SKILL.md 的触发器与指令体SKILL.md 由两部分组成YAML front matter 里的元数据以及正文指令。元数据中的 description 是触发器Agent 每次收到请求时会扫描所有 Skill 的 description语义匹配成功才激活对应 Skill。正文只有触发后才会加载到上下文不会长期占用 Token。--- name: csdn-blog description: Publish blog drafts to CSDN via browser automation (Playwright). Use when: user wants to post/publish/write a blog to CSDN, create CSDN draft. NOT for: reading CSDN articles or non-CSDN platforms. --- # CSDN Blog Publisher ## First-Time Setup python {baseDir}/scripts/csdn_publish.py --login ## Usage python {baseDir}/scripts/csdn_publish.py -t 标题 -f article.md python {baseDir}/scripts/csdn_publish.py -t 标题 -c 内容 --tags Python AI ## Image Handling 本地图片自动上传到 CSDN CDN远程图片链接保持不变。 ## Troubleshooting - 登录会话过期重新执行 --login 缓存账号 - 内容写入失败CSDN 前端 UI 更新需微调选择器注意{baseDir}占位符Agent 执行时会自动替换为 Skill 的实际路径不需要硬编码。description 里写清楚了触发条件和使用边界这是 Skill 能否被正确调用的关键。写得太模糊会被忽略写得太窄会错过相关场景。3.2 Playwright 脚本的核心逻辑脚本负责处理浏览器自动化这类脆弱操作。CSDN 会检测无头浏览器所以必须用有头模式并且用持久化上下文保存 Cookie避免每次重新登录。import argparse import asyncio from playwright.async_api import async_playwright USER_DATA_DIR ./csdn_user_data async def publish(title, contentNone, file_pathNone, tagsNone): async with async_playwright() as p: ctx await p.chromium.launch_persistent_context( USER_DATA_DIR, headlessFalse, # CSDN 屏蔽无头浏览器必须可视化 viewport{width: 1280, height: 720}, localezh-CN, ) page await ctx.new_page() await page.goto(https://mp.csdn.net/mp_blog/creation/editor) # 检测登录状态首次需要手动扫码 if await page.locator(iframe[src*login]).count() 0: print(请扫码登录...) await page.wait_for_selector(#txtTitle, timeout120000) # 写入标题 await page.fill(#txtTitle, title) # 通过 CKEditor API 注入内容绕过 Markdown/富文本切换 if file_path: with open(file_path, r, encodingutf-8) as f: content f.read() await page.evaluate( (c) CKEDITOR.instances.editor.setData(c), content ) # 设置原创声明 await page.click(input.el_mcm-radio__original[valueoriginal]) # 标签输入自定义组件必须用键盘模拟 if tags: tag_area page.locator(.el-select__input).first await tag_area.click() for tag in tags: await page.keyboard.type(tag, delay50) await page.keyboard.press(Enter) # 保存草稿 await page.click(button:has-text(保存草稿)) print(草稿已保存) await ctx.close() if __name__ __main__: parser argparse.ArgumentParser() parser.add_argument(--login, actionstore_true) parser.add_argument(-t, --title) parser.add_argument(-f, --file) parser.add_argument(-c, --content) parser.add_argument(--tags, nargs*) args parser.parse_args() if args.login: asyncio.run(publish(登录测试)) else: asyncio.run(publish(args.title, args.content, args.file, args.tags))脚本里几个关键点launch_persistent_context把 Cookie 保存在本地目录下次启动自动复用CKEDITOR.instances.editor.setData直接注入 HTML避免富文本切换的不稳定标签输入框是只读的自定义组件fill()会失败必须用keyboard.type()模拟键盘输入。3.3 在 OpenClaw 里接入 TaoTokenOpenClaw 的模型配置支持自定义 API 地址。把 TaoToken 的 API 入口填进去Key 用你在控制台创建的那个。# openclaw config 片段 model: provider: openai-compatible base_url: https://taotoken.net/api api_key: ${TAOTOKEN_API_KEY} model: claude-sonnet-4-20250514环境变量TAOTOKEN_API_KEY在启动 OpenClaw 前 export 好。这样 Agent 在触发 Skill 后所有模型调用都走 TaoToken 的统一通道换模型只需要改model字段不用动 Skill 本身。4. 验证请求确认 Skill 真的生效配置写完了怎么确认 Skill 被正确触发、脚本真的跑通分三步验证。第一步检查 Skill 是否被 OpenClaw 识别。在 OpenClaw 的 Skill 列表里应该能看到csdn-blogdescription 显示正常。如果没出现检查 SKILL.md 的 front matter 格式YAML 的---必须顶格name和description不能缺。第二步用自然语言触发。在对话里输入“帮我把这篇 Markdown 发到 CSDN 草稿箱标题是《测试文章》标签 Python AI。” Agent 应该自动匹配到csdn-blog这个 Skill加载 SKILL.md 正文然后调用脚本。你可以在 OpenClaw 的日志里看到 Skill 激活记录和脚本执行命令。第三步检查 CSDN 草稿箱。脚本跑完后打开 CSDN 创作中心草稿箱里应该出现一篇标题为《测试文章》的草稿标签已填好原创声明已勾选。如果图片是本地路径检查是否已替换为 CSDN CDN 的远程 URL。验证模型通道是否正常可以在模型对话页面发一条测试消息 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 确认返回正常。如果 Agent 在触发 Skill 后报模型调用错误优先检查 API Key 和 base_url 是否写对。5. 本篇常见错排查Skill 没有被触发。最常见的原因是 description 写得太模糊。Agent 做的是语义匹配如果 description 里只有“发布博客”而没有“CSDN”“草稿”这些关键词匹配成功率会下降。把触发场景写具体同时用NOT for排除不相关场景。脚本报CKEDITOR is not defined。说明页面还没加载完或者 CSDN 前端改了编辑器实现。在page.goto之后加await page.wait_for_selector(#txtTitle)确保编辑器初始化完成再注入内容。如果 CSDN 换了编辑器需要更新选择器和注入方式。标签输入失败。标签框是 Element UI 的自定义组件fill()会因为只读状态报错。必须用click()展开再用keyboard.type()逐字输入最后Enter确认。输入速度太快可能触发不了联想delay50是实测比较稳的值。登录会话过期。Cookie 存在USER_DATA_DIR里如果长时间不用会失效。重新执行python csdn_publish.py --login手动扫码一次即可。不要用无头模式CSDN 会检测并拒绝。模型调用 401。检查 TaoToken 的 API Key 是否复制完整base_url 是否写成https://taotoken.net/api不带 UTM。如果 Key 没问题去控制台确认额度是否充足。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各语言的调用示例。图片上传后链接失效。本地图片上传到 CSDN CDN 需要时间脚本里应该等上传完成再替换 URL。如果图片较大加一个wait_for_response监听上传接口。远程图片链接不要动保持原样。6. 把 Skill 用起来从验证到长期运行Skill 跑通之后你可以把它当成一个可复用的能力单元。每次写新文章只需要在 OpenClaw 里说一句“发到 CSDN”Agent 就会自动加载 SKILL.md、调用 Playwright 脚本、走 TaoToken 通道完成模型调用。整个过程不需要你手动打开浏览器、复制粘贴、填标签。如果你要长期跑编码和 Agent 任务建议把模型通道切到 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 成本更可控。API Key 管理在控制台 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 可以按项目创建不同的 Key方便追踪调用量。写 Skill 的本质是把业务规则、操作流程、专属约束压缩成 AI Agent 能精准识别、高效执行的标准化指令。规则越精简运行越稳定。SKILL.md 不需要写“为什么”只需要写“做什么”和“怎么做”。脚本处理脆弱操作自然语言处理灵活判断。桥窄加栏杆路宽少限制。最后留一个实用技巧每次 CSDN 前端 UI 更新后选择器可能失效。把选择器集中写在脚本顶部方便统一替换。SKILL.md 的 Troubleshooting 里记下常见问题和修复方式下次 Agent 遇到报错时可以自己参考排查。这样你的 Skill 会越用越稳而不是越用越脆。