ARTICLE DETAIL

资讯详情

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

手把手教你创建 OpenClaw Skill:记事本自动写入实战(TaoToken 配置版)

手把手教你创建 OpenClaw Skill:记事本自动写入实战(TaoToken 配置版) 1. 为什么要在 OpenClaw 里做一个记事本自动写入 SkillOpenClaw Skill 可以理解成给本地 AI 助手装上的“外挂动作模块”模型负责理解你说的话Skill 负责把这句话变成电脑上真实发生的操作。记事本自动写入就是最典型的入门场景——你说“帮我记一下周五交周报”它自动打开记事本并把内容粘进去。适合谁适合正在把本地 AI 工具接入统一 Key/API 通道的开发者尤其是想让模型输出直接落到本机应用、而不是停在聊天框里的人。我这次的目标很明确从零搭一个notepad-automationSkill跑通“用户说一句话 → 模型判断触发 → 调用脚本 → 记事本打开并写入”的完整链路同时把模型请求统一走 TaoToken 通道方便后面换模型、查用量、做多工具共用一套 Key。整个过程拆成可复制的骨架、配置片段和验证动作你照着做就能复现。先说清楚这个 Skill 能做什么它监听类似“帮我记一下”“打开记事本写”“记录到记事本”这类意图触发后模拟 WinR 打开运行框输入notepad回车等窗口起来后用剪贴板粘贴的方式写入文本。为什么不用直接os.system(notepad.exe)因为那样没法确认窗口是否就绪也没法稳定把焦点交给记事本而 WinR 是通用入口不依赖任务栏固定位置换台机器也能跑。技术选型上我踩过坑这里直接给结论启动记事本用 WinR 而不是 Win数字因为 Win数字依赖任务栏固定顺序换机器就废文本输入用剪贴板粘贴而不是 SendKeys因为 SendKeys 遇到中文输入法会乱码还可能报 Access Denied自动保存第一期不做因为保存对话框处理复杂先完成最小可用版本。下面按这个思路一步步来。2. TaoToken 前置统一 Key 与 API 通道准备在写 Skill 之前先把模型请求的出口统一掉。OpenClaw 这类本地工具通常要配置一个模型服务地址和 Key如果每个 Skill 各配一套后面维护会很乱。TaoToken 的作用就是提供统一的 API 通道你申请一个 Key所有 Skill、Coding 工具、Agent 都走同一个入口换模型只改配置不改代码。你需要先拿到 API Key。打开官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册后进入控制台在 API Keys 页面创建一个新 Key。建议按用途命名比如openclaw-notepad方便后面排查是哪个工具在调用。创建后立刻复制保存页面刷新后通常不再完整显示。拿到 Key 后记下两个地址API 基础地址是https://taotoken.net/api这个不带任何跟踪参数配置里就填它文档入口在官网导航里能找到接入前建议扫一眼当前支持的模型列表和请求格式避免填错路径。如果你后面要做长期编码或 Agent 任务可以顺带了解 Coding Plan它更适合高频调用场景只是验证模型通不通用模型对话页面直接试一句就行。这一步的产出是一个可用的 Key 和一个基础地址。先别急着写 Skill用最简方式验证通道是通的否则后面报错你分不清是 Skill 的问题还是 Key 的问题。验证方式在第四节这里先把配置位置说清楚OpenClaw 的模型配置一般在settings.json或config.toml里不同版本文件名可能不同以你本地实际为准。3. 可复制配置Skill 骨架与 settings.json / config.toml 片段3.1 目录结构先建 Skill 目录放在 OpenClaw 的 skills 路径下通常是~/.qclaw/skills/或你自定义的工作目录。结构如下notepad-automation/ ├── SKILL.md # Skill 定义模型靠它判断是否触发 ├── README.md # 使用说明 ├── scripts/ │ └── notepad_automation.py # 核心脚本 └── references/ └── tech-design.md # 技术选型记录SKILL.md是最关键的文件模型只读它来决定调不调用。description字段要写全触发场景否则你说“记一下”它可能不认。--- name: notepad-automation description: Notepad auto-writing skill. Opens Notepad and writes text via clipboard paste. Triggers when user says: 帮我记一下, 打开记事本写, 记录到记事本, take a note, write to notepad. Supports Chinese input by bypassing IME with clipboard. --- # Notepad Automation ## 使用方式 用户说“帮我记一下XXX”时调用 scripts/notepad_automation.py把 XXX 作为参数传入。 ## 依赖 - Python 3.8 - pywin32提供 win32clipboard3.2 核心脚本脚本逻辑分三步WinR 打开运行框、输入 notepad 回车、剪贴板粘贴文本。下面是可以直接复制的版本#!/usr/bin/env python3 # -*- coding: utf-8 -*- import ctypes import time import sys VK_LWIN 0x5B VK_R 0x52 VK_RETURN 0x0D VK_CONTROL 0x11 VK_V 0x56 KEYEVENTF_KEYUP 0x0002 def key_down(vk): ctypes.windll.user32.keybd_event(vk, 0, 0, 0) def key_up(vk): ctypes.windll.user32.keybd_event(vk, 0, KEYEVENTF_KEYUP, 0) def combo_key(key1, key2): key_down(key1) time.sleep(0.05) ctypes.windll.user32.keybd_event(key2, 0, 0, 0) time.sleep(0.05) ctypes.windll.user32.keybd_event(key2, 0, KEYEVENTF_KEYUP, 0) key_up(key1) def copy_to_clipboard(text): import win32clipboard win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardText(text) win32clipboard.CloseClipboard() def paste_from_clipboard(): key_down(VK_CONTROL) time.sleep(0.05) ctypes.windll.user32.keybd_event(VK_V, 0, 0, 0) time.sleep(0.05) ctypes.windll.user32.keybd_event(VK_V, 0, KEYEVENTF_KEYUP, 0) key_up(VK_CONTROL) def open_notepad(): combo_key(VK_LWIN, VK_R) time.sleep(0.8) copy_to_clipboard(notepad) paste_from_clipboard() time.sleep(0.5) key_down(VK_RETURN) time.sleep(0.05) key_up(VK_RETURN) time.sleep(2.0) def write_to_notepad(text): copy_to_clipboard(text) time.sleep(0.2) paste_from_clipboard() time.sleep(0.5) def main(): if len(sys.argv) 2: print(Usage: python notepad_automation.py text) sys.exit(1) text sys.argv[1] open_notepad() write_to_notepad(text) print(Done!) if __name__ __main__: main()3.3 模型通道配置片段在 OpenClaw 的settings.json里把模型服务指向 TaoToken。字段名以你本地版本为准核心是 base_url 和 api_key{ model: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key: 你的_TaoToken_Key, model_name: 你选用的模型名 } }如果你用的是config.toml等价写法[model] provider openai-compatible base_url https://taotoken.net/api api_key 你的_TaoToken_Key model_name 你选用的模型名配置完重启 OpenClaw Gateway让 Skill 和模型配置一起生效。注意 Key 不要提交到 Git建议用环境变量或本地私有配置文件。4. 验证请求确认 Skill 触发且请求经统一通道转发4.1 先验证模型通道在写 Skill 之前先用模型对话页面发一句“你好”确认能正常返回。这一步通过说明 Key 和 base_url 没问题。如果这里就报 401检查 Key 是否复制完整、有没有多余空格报 404 就检查 base_url 是不是写成了带路径的地址。4.2 再验证 Skill 脚本单独跑脚本确认记事本能打开并写入python scripts/notepad_automation.py 测试文本周五交周报预期结果运行框一闪记事本打开文本出现在编辑区。如果记事本没打开看运行框是否弹出如果弹出了但没输入 notepad多半是剪贴板没写进去检查 pywin32 是否安装。4.3 最后验证端到端在 OpenClaw 里说“帮我记一下今天下午三点开会地点会议室 A”。预期链路是模型识别意图 → 调用 Skill → 脚本执行 → 记事本写入。同时去 TaoToken 控制台的用量页面看有没有新增请求记录有记录就说明请求确实走了统一通道而不是本地直连或其他出口。这一步的验证动作很关键很多人配完以为通了其实模型请求走的是旧地址Skill 调用走的是另一套。用量记录是唯一能证明“统一通道生效”的证据。5. 本篇常见错排查5.1 控制台中文乱码现象是脚本输出���这类字符。原因是 Windows 控制台默认 GBK显示不了 UTF-8。这不影响记事本实际写入内容因为剪贴板操作是独立的。如果强迫症想修在脚本开头加import sys, io sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)5.2 SendKeys 报 Access Denied如果你一开始用 PowerShell 的SendKeys在非交互上下文里会报 Access Denied。这是 Windows 安全限制不是代码写错。解决办法就是换ctypes.windll.user32.keybd_event直接调底层 API没有上下文限制。5.3 中文输入乱码用 SendKeys 发中文搜狗、微软拼音会拦截结果是乱码。剪贴板方案绕过了输入法SetClipboardText写什么CtrlV就粘什么中文 100% 正确。这也是为什么脚本里文本输入全部走剪贴板。5.4 记事本没获得焦点如果 WinR 之后焦点没切过去粘贴会粘到别的地方。排查方法把time.sleep(2.0)调大一点给记事本启动留足时间或者用win32gui.FindWindow检测“无标题 - 记事本”窗口出现后再粘贴比固定延时更稳。5.5 请求没走 TaoToken如果用量页面没有记录检查settings.json里的 base_url 是不是被其他配置覆盖了或者 OpenClaw 有多个模型配置段实际生效的不是你改的那个。改完一定要重启 Gateway很多配置是启动时加载的。6. 接入方式与后续动作排障和接入相关的问题优先去 API Keys 页面确认 Key 状态再对照接入文档检查 base_url 和请求格式。如果你只是想验证模型能不能正常对话用模型对话页面最快。如果你打算把这个 Skill 扩展成长期编码或 Agent 工作流比如自动记录代码片段、批量写入待办那 Coding Plan 更适合高频调用场景成本和稳定性都更好控制。我实测下来这套骨架跑通后换模型只需要改settings.json里的model_nameSkill 代码一行不用动。下一步可以做的改进用win32gui.FindWindow替换固定延时让窗口检测更可靠加一个“追加到已有记事本”的分支避免每次新建窗口把文本参数改成从标准输入读取方便处理多行内容。这些都不影响当前链路按需迭代就行。
返回列表