🔧 Tool Calling 是什么?

"晚上11点23分,GPT说它知道北京今天的天气。但它不知道——它只是在'认为'自己知道。直到有了 Tool Calling,它才真的去看了看窗外的天空。"

更新时间:2026-04-18 | 阅读时间:约8分钟 | 分类:OpenClaw Agent技能

一、Tool Calling 定义

Tool Calling(工具调用),也叫 Function Calling(函数调用),是大语言模型(LLM)与外部世界交互的核心机制。它允许模型在生成回复时,不只是输出文字,而是主动请求调用预定义的函数或工具来获取信息、执行操作。

打个比方:如果 LLM 是一个超级聪明的图书管理员,那么 Tool Calling 就是她手里的电话——当她不确定某个数据时,可以直接打电话(调用工具)去确认,而不是靠记忆瞎编。

💡 一句话理解:Tool Calling 让 AI 从"只会说的嘴"变成"既能说又能干的手"——它不只是聊天,还能实际帮你做事。

二、Tool Calling 的工作原理

传统 LLM vs Tool-Enabled LLM

维度 传统 LLM Tool-Enabled LLM
知识来源 训练数据(有截止时间) 训练数据 + 实时工具
能力边界 只能生成文本 可以执行操作、获取数据
准确性 容易"幻觉" 通过工具验证,大幅降低幻觉
交互方式 输入文字 → 输出文字 输入文字 → 可能调用工具 → 输出结果

Tool Calling 的执行流程

用户输入:"今天北京天气怎么样?"
    ↓
Step 1: LLM 分析意图 → "需要获取实时天气数据"
    ↓
Step 2: LLM 生成 tool_call → {
  "function": "get_weather",
  "arguments": { "city": "北京", "date": "today" }
}
    ↓
Step 3: 系统执行工具调用 → 调用天气API → 返回实际数据
    ↓
Step 4: LLM 整合工具结果 → "北京今天晴转多云,气温15-25°C..."
    ↓
输出给用户

关键点:模型不直接执行工具,它只是告诉系统"我想调用这个工具",实际的执行由宿主程序(如 OpenClaw)完成。这种设计保证了安全性和可控性。

三、工具定义的核心要素

要让 LLM 知道有哪些工具可用,你需要用 JSON Schema 定义工具:

{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "获取指定城市的实时天气信息",
    "parameters": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string",
          "description": "城市名称,如:北京、上海"
        },
        "unit": {
          "type": "string",
          "enum": ["celsius", "fahrenheit"],
          "description": "温度单位"
        }
      },
      "required": ["city"]
    }
  }
}
🔑 关键技巧:工具的 description 字段极其重要!LLM 完全依赖描述来决定是否调用工具。描述越清晰,调用越准确。

四、常见的工具类型

1. 信息获取类

2. 系统操作类

3. 交互沟通类

4. 专业工具类

五、OpenClaw 中的 Tool Calling

OpenClaw 内置了大量开箱即用的工具,同时支持自定义工具扩展。

内置工具一览

工具名 功能 使用场景
web_search DuckDuckGo 搜索 查找最新信息
web_fetch 获取网页内容 阅读文章、提取信息
exec 执行 Shell 命令 系统管理、代码运行
read / write 文件读写 内容生成、配置修改
browser 浏览器控制 网页自动化、截图
message 消息发送 Discord、飞书等平台通知
cron 定时任务管理 定期执行任务

OpenClaw 实战:多工具协同

场景:用户要求"帮我监控竞品网站 futuretools.io 的最新变化"
# OpenClaw Agent 自动执行的工具调用链:

# Step 1: 抓取竞品网站
web_fetch("https://futuretools.io")

# Step 2: 提取工具列表
exec("grep -o 'href=\"/[^\"]*\"' | head -50")

# Step 3: 对比上次记录的差异
read("/workspace/data/competitor_tools.json")

# Step 4: 生成分析报告
write("/var/www/miaoquai/competitor-report.html", report)

# Step 5: 通知到 Discord
message(action="send", channel="competitor-alert", message="发现3个新工具...")

自定义工具扩展

OpenClaw 支持通过 MCP(Model Context Protocol)扩展工具集:

# 在 OpenClaw 配置中添加 MCP 工具
{
  "mcpServers": {
    "my-custom-tools": {
      "command": "node",
      "args": ["/path/to/my-mcp-server.js"]
    }
  }
}

六、Tool Calling 的常见坑

⚠️ 坑1:工具描述不清晰

模型不知道什么时候该用、什么时候不该用你的工具。描述要写清楚:功能、输入、输出、适用场景、不适用场景

⚠️ 坑2:参数类型不严格

LLM 可能传入格式错误的参数。一定要在工具实现中做好参数校验和错误处理。

⚠️ 坑3:工具过多导致选择困难

一次传入太多工具定义会降低模型的选择准确率。建议每次对话控制在 10-15 个工具以内,或使用工具分组。

⚠️ 坑4:无限循环调用

Agent 可能反复调用同一个工具。设置最大调用次数限制(通常 5-10 次)。

七、总结

Tool Calling 是 AI Agent 的手和脚,是让 LLM 从"纸上谈兵"进化为"实战高手"的关键能力。在 OpenClaw 中,丰富的内置工具和 MCP 扩展机制让你可以快速构建功能强大的 AI Agent 系统。

"世界上有一种能力叫 Tool Calling,它让 AI 从一个只会说'我觉得'的哲学家,变成了一个能说'我去查一下'的实干家。这中间的距离,大概就是从ChatGPT到AI Agent的距离。"

© 2026 妙趣AI | miaoquai.com - 让AI变得妙趣横生