前言:只会聊天的AI没用
世界上有两种AI:一种是只会说"我可以帮你"但啥也干不了的,另一种是真正能动手干活的。OpenClaw的Tool Calling就是让AI从"嘴炮"变成"实干家"的关键。
这一章,我们不讲虚的,直接上干货。看完这篇,你的Agent就能像哆啦A梦一样掏出各种工具了。
Tool Calling 是什么?
简单说:Tool Calling就是让LLM能够调用外部函数的能力。当模型判断需要使���工具时,会输出一个特殊的结构化调用请求,由运行时执行,然后把结果返回给模型继续处理。
核心流程
用户输入 → LLM判断 → 输出Tool Call → 执行工具 → 返回结果 → LLM继续处理 → 最终回复
OpenClaw 工具分类
OpenClaw内置了丰富的工具集,分为以下几类:
| 类别 | 工具 | 用途 |
|---|---|---|
| 文件操作 | read, write, edit | 读写文件、精准编辑 |
| 执行控制 | exec, process | 运行命令、管理进程 |
| 网络访问 | web_fetch, browser | 抓取网页、浏览器自动化 |
| 消息通信 | message, tts | 发送消息、语音合成 |
| 会话管理 | sessions_spawn, subagents | 创建子Agent、团队管理 |
| 记忆系统 | tdai_memory_search, tdai_conversation_search | 搜索记忆、对话历史 |
工具调用最佳实践
- 参数精确:工具调用时参数必须精确匹配schema,类型错误会导致调用失败
- 一次多工具:支持在一次响应中调用多个工具,适合并行操作
- 结果处理:工具返回结果后,模型会继续处理,不要中断流程
- 错误兜底:工具可能失败,要有fallback机制
正确示例:调用
read时,path参数必须是字符串:
{
"tool": "read",
"path": "/var/www/miaoquai/index.html"
}
常见错误:把路径写成变量名或缺少引号会导致调用失败。
高级技巧:组合工具调用
真正的Agent高手知道如何组合多个工具完成复杂任务:
// 组合调用示例:搜索+写入+通知
// 1. 先搜索
const news = await web_fetch({
url: "https://openai.com/blog"
});
// 2. 写入文件
await write({
path: "/var/www/miaoquai/news/latest.html",
content: formatNews(news)
});
// 3. 发送通知
await message({
action: "send",
message: "新闻已更新!",
channel: "feishu"
});
工具权限与安全
OpenClaw的工具权限由配置文件控制。你可以在TOOLS.md中查看当前可用工具:
- allow-once:单次执行,下次需要重新审批
- elevated:需要提升权限的敏感操作
- deny:被禁止的工具
安全提醒:涉及文件删除、系统命令等敏感操作时,会触发审批流程。不要绕过审批机制。
踩坑实录:那些年我踩过的坑
凌晨4点17分,我盯着日志里的错误信息发呆。Agent调用失败的原因竟然是——参数少了一个引号。
- 坑1:参数类型错误——把数字写成字符串,或反过来
- 坑2:路径不存在——调用read时文件不存在会报错
- 坑3:工具不存在——调用一个没有被启用的工具会失败
- 坑4:循环调用——工具调用触发另一个工具调用,无限循环
最佳实践总结
- 调用前检查参数是否符合schema
- 敏感操作用try-catch包裹
- 设置合理的超时时间
- 日志记录每次工具调用
- 定期检查工具权限配置