OpenClaw实战教程系列第06篇 - 工具调用与 Skills:不只是聊天
OpenClaw 的真正威力:AI 能动手,不只是动嘴。

从“聊天”到“干活”
回想一下你使用 ChatGPT 的经历:
场景:你想整理一下 Downloads 文件夹里的 PDF 文件。
用 ChatGPT:
-
问 ChatGPT:“怎么整理 PDF 文件?”
-
ChatGPT 给你一堆命令示例
-
你复制粘贴到终端
-
出错了,再回去问 ChatGPT
-
反复几次……
用 OpenClaw:
-
直接说:“帮我把 Downloads 里的 PDF 按年份分类”
-
AI 直接执行,告诉你结果
-
完成
这就是工具调用的力量。
内置工具:AI 的基础能力
OpenClaw 提供了一套内置工具,让 AI 能真正操作你的电脑。
工具清单
| 工具 | 功能 | 典型用法 |
|---|---|---|
| read | 读取文件 | 读代码、读配置、读文档 |
| write | 写入文件 | 写代码、写报告、生成文件 |
| edit | 编辑文件 | 修改代码、更新配置 |
| exec | 执行命令 | 跑脚本、git 操作、系统命令 |
| web_search | 网页搜索 | 查资料、找解决方案 |
| web_fetch | 抓取网页 | 获取特定页面内容 |
| browser | 浏览器控制 | 操作网页、截图(第 11 篇详讲) |
| message | 跨渠道发消息 | Telegram/Discord 互发 |
| memory_search | 记忆搜索 | 查找历史信息(第 05 篇已讲) |
实战演示
- 文件操作(read/write/edit)
读取文件:
你:看看我的 package.json
AI:我来读取一下...(调用 read)
{
"name": "my-project",
"version": "1.0.0",
"dependencies": {
"express": "^4.18.0"
}
}
看起来这是一个 Express 项目。需要我帮你检查什么吗?
写入文件:
你:创建一个 .gitignore 文件,忽略 node_modules 和 .env
AI:好的(调用 write)
已创建 .gitignore:
node_modules/
.env
*.log
编辑文件:
你:在 package.json 里添加一个 start 脚本
AI:我来修改(调用 edit)
已添加 start 和 dev 脚本:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}
- 命令执行(exec)
Git 操作:
你:git status 看看
AI:(调用 exec:git status)
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
modified: src/config.js
modified: package.json
你有两个文件修改了,需要我帮你提交吗?
系统命令:
你:看看磁盘空间
AI:(调用 exec:df -h)
Filesystem Size Used Avail Capacity
/dev/disk1 466Gi 320Gi 146Gi 70%
你的主磁盘用了 70%,还剩 146GB。
运行脚本:
你:跑一下测试
AI:(调用 exec:npm test)
PASS src/utils.test.js
✓ should format date correctly (3ms)
✓ should handle empty input (1ms)
Tests: 2 passed, 2 total
所有测试通过!
- 网页搜索(web_search/web_fetch)
搜索信息:
你:查一下 OpenClaw 最新版本有什么新功能
AI:(调用 web_search)
根据搜索结果,OpenClaw 最新版的新功能包括:
1. 支持更多模型提供商
2. 新增 browser 工具的截图功能
3. 优化了 memory_search 的性能
需要我帮你详细查看某个功能吗?
抓取特定页面:
你:抓取这个文档页面,总结一下 https://example.com/docs
AI:(调用 web_fetch)
根据页面内容,这篇文档主要讲:
1. 安装步骤(3 步)
2. 配置参数说明(5 个关键参数)
3. 常见问题和解决方案
- 跨渠道发消息(message)
跨渠道发消息:
你:给我 Telegram 发个消息,说"部署完成了"
AI:(调用 message 发送到 Telegram)
已发送:"部署完成了"
在你手机上应该已经收到了。
Skills:扩展 AI 的能力
内置工具是基础,但还不够。Skills 让 AI 能使用更专业的功能。
什么是 Skill?
Skill = 一组预定义的指令 + 脚本 + 文档
简单来说,Skill 就是给 AI 的“使用说明书”,教它如何完成特定任务。
结构:
OpenClaw 从两个位置加载 Skills(按优先级排序):
1️⃣ 工作区 Skills(推荐,最高优先级)
~/.openclaw/workspace/skills/
-
这是创建和开发 Skill 的主要位置
-
适合项目特定的 Skills
2️⃣ 本地 Skills(全局共享)
~/.openclaw/skills/
-
用于跨项目共享的 Skills
-
可以覆盖内置 Skills
示例目录结构:
~/.openclaw/workspace/skills/ # 工作区 Skills
├── weather/ # 天气查询 Skill
│ ├── SKILL.md # 使用说明(AI 读这个学习怎么用)
│ └── scripts/
│ └── get_weather.sh # 实际执行的脚本
├── github/ # GitHub 操作 Skill
│ ├── SKILL.md
│ └── scripts/
│ ├── list_issues.sh
│ └── create_pr.sh
└── ...
安装 Skill(ClawHub)
OpenClaw 有官方的 Skills 市场:ClawHub
# 查看可用 Skills
clawhub list
# 安装 Skill(默认安装到当前工作区的 ./skills 目录)
clawhub install weather # 天气查询
clawhub install github # GitHub 操作
clawhub install himalaya # 邮件管理
clawhub install hackernews # Hacker News 浏览
clawhub install todoist # Todoist 任务管理
clawhub install calendar # 日历操作
💡 安装位置说明:
-
默认安装到
./skills(当前工作目录) -
如果没有工作区,会回退到
~/.openclaw/workspace/skills/ -
安装后重启 Gateway 或说“刷新 skills”让 AI 识别
热门 Skills 推荐
| Skill | 功能 | 典型场景 |
|---|---|---|
| weather | 查询天气 | “明天北京天气怎么样?” |
| github | 操作 GitHub | “看看我的 open issues”、“创建一个 PR” |
| himalaya | 邮件管理 | “查一下未读邮件”、“发送邮件给 xxx” |
| hackernews | HN 浏览 | “今天 HN 热门文章有哪些?” |
| todoist | 任务管理 | “添加一个任务:完成 OpenClaw 教程” |
| calendar | 日历操作 | “看看今天的日程”、“提醒我明天开会” |
| rss | RSS 订阅 | “订阅这个博客的 RSS” |
| screenshot | 截图工具 | “截个屏保存到桌面” |
使用示例
天气查询:
你:明天需要带伞吗?
AI:(使用 weather Skill)
查询了明天北京的天气:
🌤️ 多云,气温 15-22°C
☔ 降水概率 10%
不需要带伞,天气不错!
GitHub 操作
:
你:看看 OpenClaw 项目最近的 issues
AI:(使用 github Skill)
最近 5 个 issues:
1. #234 - Discord 连接超时问题(open)标签:bug
2. #233 - 添加 Gemini 模型支持(closed)标签:enhancement
3. #232 - Cron 任务文档不完整(open)标签:documentation
需要我帮你查看某个 issue 的详情吗?
邮件管理:
你:看看有没有重要邮件
AI:(使用 himalaya Skill)
你有 3 封未读邮件:
1. [重要] AWS 账单提醒 - 本月费用 $23.5
2. [GitHub] PR #45 需要你 review
3. [Newsletter] JavaScript Weekly
需要我帮你总结某封邮件吗?
TOOLS.md:你的本地备忘录
Skills 是通用的,但你的环境是独特的。TOOLS.md 记录你本地特有的信息。
作用
-
记录 AI 需要知道的本地环境信息
-
补充 Skills 缺少的环境配置
-
定义你自己的快捷方式
示例
# TOOLS.md - 本地工具配置
## SSH 主机(常用服务器)
- prod-server: 生产服务器,IP 1.2.3.4,用 key ~/.ssh/prod
- test-server: 测试服务器,IP 5.6.7.8,用 key ~/.ssh/test
- blog-vps: 博客服务器,用 key ~/.ssh/blog
## 数据库连接
- 本地 Postgres: postgres://localhost:5432/mydb
- 用户名: saga
- 密码: (存在 ~/.pgpass,AI 可以读取)
## 项目目录
- 主项目: ~/Projects/my-app/
- 博客: ~/Projects/blog/
- 教程: ~/Documents/openclaw-tutorial/
## 常用命令快捷方式
- 启动开发服务器: npm run dev(在 ~/Projects/my-app/)
- 运行测试: npm test
- 部署到生产: ./deploy.sh
## API Keys(本地开发用)
- Stripe Test Key: sk_test_xxx(存在 ~/.stripe/key)
- SendGrid API: (存在 ~/.sendgrid/key)
使用场景
场景 1:SSH
到服务器
你:连接到生产服务器看看日志
AI:(读取 `TOOLS.md`,知道 prod-server 的配置)
好的,连接到 prod-server(1.2.3.4)...
已连接。查看什么日志?
场景 2:数据库操作
你:查一下本地数据库的用户表
AI:(读取 TOOLS.md,知道数据库连接信息)
连接到本地 Postgres...
id | username | email | created_at
----+----------+-------+------------
1 | saga | ... | 2025-01-15
2 | alice | ... | 2025-01-16
场景 3:快速启动项目
你:启动博客的开发服务器
AI:(读取 TOOLS.md,知道博客目录和命令)
进入 ~/Projects/blog/,启动开发服务器...
服务器启动在 http://localhost:3000
实战案例
案例 1:自动化日报系统
需求:每天早上自动采集新闻,生成摘要。
使用工具:
-
web_search / web_fetch:采集新闻
-
write:生成日报文件
-
exec:发布到博客
-
message:发送完成通知
案例 1:自动化日报系统
你:执行今天的日报采集
AI:好的,开始采集...
1. 搜索 HN 热门... 找到 10 条
2. 抓取 Product Hunt... 找到 5 条新产品
3. 搜索科技新闻... 找到 8 条
4. 生成摘要... 完成
5. 写入文件 ~/Daily/2025-01-20.md
6. 发布到博客... 完成
7. Telegram 通知... 已发送
📰 日报生成完成!
- 采集:23 条内容
- 精选:8 条核心新闻
- 耗时:2 分钟
- 成本:$0.08
案例 2:代码审查助手
需求:自动检查代码规范,给出修改建议。
使用工具:
-
read:读取代码文件
-
exec:运行 linter / 测试
-
edit:自动修复问题
案例 2:代码审查助手
你:检查一下 src/utils.js 的代码质量
AI:好的,开始检查...
1. 读取文件... 完成
2. 运行 eslint... 发现 3 个问题:
- Line 23: 未使用的变量 'temp'
- Line 45: 缺少分号
- Line 67: console.log 应该删除
3. 运行测试... 全部通过
建议修改:
- [ ] 删除第 23 行的 temp 变量
- [ ] 第 45 行添加分号
- [ ] 第 67 行的 console.log 改为 logger.debug
需要我帮你自动修复吗?
案例 3:多步骤部署流程
你:部署到生产环境
AI:开始部署流程...
1. 检查配置文件... 确认是生产配置 ✓
2. git pull... 已更新到最新代码
3. npm install... 依赖安装完成
4. npm run build... 构建成功
5. 运行测试... 全部通过 ✓
6. 部署到服务器... 上传完成
7. 验证线上版本... curl 返回 200 ✓
🚀 部署成功!
- 版本:v1.2.3
- 耗时:3 分钟
- 线上地址:https://myapp.com
故障排除
Q1: AI 说“我没有这个工具的权限”
原因:工具被禁用了。
cat ~/.openclaw/openclaw.json | grep tools
确保配置中没有禁用需要的工具:
{
"tools": {
"allow": ["read", "write", "edit", "exec", "web_search"]
}
}
Q2: exec 命令执行失败
常见原因:
-
命令不存在
AI:执行 “python script.py” 结果:command not found: python
解决:确认命令已安装,或使用完整路径。 -
PATH 不同
AI 使用的 PATH 可能和你的终端不同。
解决:使用绝对路径,或在TOOLS.md中定义完整命令。 -
权限问题
AI:执行 “npm install -g xxx” 结果:EACCES: permission denied
解决:避免全局安装,或用 nvm 管理 Node.js。
Q3: Skill 安装失败
# 检查 clawhub 是否可用
clawhub --version
# 查看详细错误
clawhub install xxx --verbose
Q4: Skill 装了但 AI 不会用
原因:AI 没正确读取 SKILL.md。
解决:
你:重新加载 skills
AI:好的,重新读取所有 Skills……
(AI 会重新扫描 skills/ 目录)
已识别 Skills:
- weather
- github
- himalaya
验证清单
确认工具系统正常工作:
-
AI 能读取文件(read)
-
AI 能写入文件(write)
-
AI 能执行命令(exec)
-
AI 能搜索网页(web_search)
-
安装了至少 1 个 Skill(如
-
AI 能使用 Skill(测试:“今天天气怎么样?”)
-
创建了
-
测试了多工具组合的场景(如:搜索→写入→执行)
下一步
工具调用让 AI 能干活了,但还不够自动化。下一篇教你如何让 AI 自动执行定时任务:
→ 第 07 篇 | 定时任务 Cron — 让 AI 每天 6 点自动采集新闻、8 点发日报,不用你说。
读者讨论
你最想用 AI 帮你自动执行什么任务?
查邮件?整理文件?还是别的什么?
欢迎在评论区分享!
本系列目录
-
第 01 篇:OpenClaw 是什么?
-
第 02 篇:5 分钟安装指南
-
第 03 篇:连接你的第一个聊天渠道
-
第 04 篇:个性化你的 AI
-
第 05 篇:记忆系统
-
第 06 篇:工具调用与 Skills(你在这里)
-
第 07 篇:定时任务 Cron
-
查看完整目录
下一篇预告:Cron 定时任务,让 AI 在指定时间自动执行工作——比如每天早上 6 点采集新闻、9 点提醒你开会、周五下午生成本周总结。