Skip to main content
← All posts
作者:Sagasu

OpenClaw实战教程系列第06篇 - 工具调用与 Skills:不只是聊天

OpenClaw 的真正威力:AI 能动手,不只是动嘴。


从“聊天”到“干活”

回想一下你使用 ChatGPT 的经历:

场景:你想整理一下 Downloads 文件夹里的 PDF 文件。

用 ChatGPT:

  1. 问 ChatGPT:“怎么整理 PDF 文件?”

  2. ChatGPT 给你一堆命令示例

  3. 你复制粘贴到终端

  4. 出错了,再回去问 ChatGPT

  5. 反复几次……

用 OpenClaw:

  1. 直接说:“帮我把 Downloads 里的 PDF 按年份分类”

  2. AI 直接执行,告诉你结果

  3. 完成

这就是工具调用的力量。


内置工具:AI 的基础能力

OpenClaw 提供了一套内置工具,让 AI 能真正操作你的电脑。

工具清单

工具功能典型用法
read读取文件读代码、读配置、读文档
write写入文件写代码、写报告、生成文件
edit编辑文件修改代码、更新配置
exec执行命令跑脚本、git 操作、系统命令
web_search网页搜索查资料、找解决方案
web_fetch抓取网页获取特定页面内容
browser浏览器控制操作网页、截图(第 11 篇详讲)
message跨渠道发消息Telegram/Discord 互发
memory_search记忆搜索查找历史信息(第 05 篇已讲)

实战演示

  1. 文件操作(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"
}
  1. 命令执行(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

所有测试通过!
  1. 网页搜索(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. 常见问题和解决方案
  1. 跨渠道发消息(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”
hackernewsHN 浏览“今天 HN 热门文章有哪些?”
todoist任务管理“添加一个任务:完成 OpenClaw 教程”
calendar日历操作“看看今天的日程”、“提醒我明天开会”
rssRSS 订阅“订阅这个博客的 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 命令执行失败

常见原因:

  1. 命令不存在
    AI:执行 “python script.py” 结果:command not found: python
    解决:确认命令已安装,或使用完整路径。

  2. PATH 不同
    AI 使用的 PATH 可能和你的终端不同。
    解决:使用绝对路径,或在 TOOLS.md 中定义完整命令。

  3. 权限问题
    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 点提醒你开会、周五下午生成本周总结。