3分42秒——这是从人类提问到Agent完成搜索、分析、生成报告的全过程。如果你还在一个个串行调用工具,那你的Agent就像个只会上楼梯的电梯,永远到不了顶层。今天我们来聊聊工具调用的高级玩法。
一、工具调用基础回顾
OpenClaw的工具系统是Agent能力的核心。每次Agent需要执行操作时,它会选择合适的工具并发起调用:
1.1 标准调用流程
# 1. Agent分析用户意图
User: "搜索最新的AI新闻"
# 2. Agent选择工具并构建参数
web_search({
query: "最新AI新闻 2026",
count: 10
})
# 3. 获取结果并回复
→ 返回搜索结果 → Agent整理 → 回复用户
二、并行调用模式
当多个工具调用之间没有依赖关系时,可以并行执行,大幅提升效率。
2.1 独立任务并行
# 同时搜索多个关键词(OpenClaw自动并行)
# 这些调用没有依赖关系,可以同时执行
web_search({ query: "OpenClaw 教程", count: 5 })
web_search({ query: "Agent Skills 指南", count: 5 })
web_search({ query: "AI Agent 2026 趋势", count: 5 })
# 结果:3次搜索只需 1-2 秒(而非 3-6 秒)
2.2 多源数据聚合
# 同时从多个来源获取数据
web_fetch({ url: "https://news.site1.com/feed" })
web_fetch({ url: "https://news.site2.com/feed" })
web_fetch({ url: "https://news.site3.com/feed" })
# Agent自动合并结果生成综合报告
⚡ 性能提示:并行调用可以将总耗时从 O(n) 降到 O(1),但要注意API速率限制和服务器负载。
三、链式调用模式
当工具之间存在依赖关系时,使用链式调用模式,将前一步的输出作为后一步的输入。
3.1 搜索 → 抓取 → 分析
# 步骤1:搜索
results = web_search({ query: "OpenClaw MCP 教程" })
# 步骤2:抓取最相关的页面
page = web_fetch({ url: results[0].url })
# 步骤3:提取关键信息并生成摘要
→ Agent分析页面内容 → 生成结构化摘要
3.2 复杂决策链
# 社区运营的典型工具链
web_search("最新AI热点") # 1. 发现热点
web_fetch("热门文章URL") # 2. 深入阅读
write("daily-news.html", content) # 3. 生成日报
message({ action: "send", ... }) # 4. 分发到社区
四、条件调用模式
根据中间结果决定是否调用后续工具。
4.1 错误恢复模式
# 尝试主源 → 失败则切换备用源
try:
result = web_fetch({ url: primary_url })
if result.status != 200:
# 主源失败,搜索替代来源
search = web_search({ query: topic })
result = web_fetch({ url: search[0].url })
except:
# 全部失败,使用缓存
result = read({ file: "cache/backup.html" })
4.2 智能分流
# 根据查询类型选择不同工具
if query.contains("价格") or query.contains("股票"):
web_search({ query: query }) # 实时搜索
elif query.contains("文档") or query.contains("解释"):
web_fetch({ url: relevant_doc }) # 文档抓取
else:
browser({ action: "snapshot", url: query_url }) # 浏览器截图
五、Structured Output 模式
让工具调用返回结构化数据,便于后续处理。
5.1 JSON 输出规范
# 工具调用返回结构化数据
{
"status": "success",
"data": {
"tools": [
{ "name": "web_search", "calls": 142, "avgLatency": "1.2s" },
{ "name": "web_fetch", "calls": 89, "avgLatency": "2.5s" }
],
"summary": { "totalCalls": 231, "successRate": "97.4%" }
}
}
5.2 在Skill中定义输出格式
# SKILL.md 中指定输出格式
## Output Format
Always return results in this structure:
- **工具名称**: 调用次数 (成功率)
- **平均延迟**: X.Xs
- **错误统计**: 最近24h错误数
六、批量调用模式
对大量相似任务使用批量处理。
6.1 批量文件处理
# 批量检查网站死链
urls = [
"https://miaoquai.com/tools/chatgpt.html",
"https://miaoquai.com/tools/claude.html",
"https://miaoquai.com/tools/openclaw.html"
]
for url in urls:
result = exec({ command: f"curl -s -o /dev/null -w '%{{http_code}}' {url}" })
if result != "200":
dead_links.append(url)
七、工具调用优化策略
7.1 缓存策略
- 对不常变化的数据使用本地缓存
- 设置合理的缓存过期时间
- 对API响应进行预处理和缓存
7.2 速率控制
- 遵守API速率限制(requests per minute)
- 实现令牌桶或漏桶算法
- 在高峰期自动降级
7.3 错误隔离
- 单个工具失败不影响整体流程
- 提供合理的默认值和回退方案
- 记录失败上下文便于排查
🎯 实战总结:工具调用的高级模式就像武功秘籍——并行调用是"轻功",链式调用是"内功",条件调用是"心法"。练好这三招,你的Agent就能在工具调用的江湖里横着走了。