Tool Calling 工具调用

更新时间:2026-03-18 | 阅读时间:9分钟

什么是 Tool Calling?

Tool Calling(工具调用)是让 AI 模型能够调用外部工具和 API 的能力。它让 AI 从"只会说话"进化到"能做事情"。

🎯 一句话理解

Tool Calling 就像是给 AI 装上了"手"——不只是告诉你怎么做,而是直接帮你做。搜索网页、写文件、发消息,统统不在话下。

Tool Calling vs Function Calling

概念 说明
Function Calling OpenAI 提出的概念,特指调用预定义函数
Tool Calling 更广泛的概念,包括函数、API、外部服务等

现在业界更倾向于使用 Tool Calling 这个术语,因为它更准确地描述了 AI 调用各种外部资源的能力。

为什么 Tool Calling 很重要?

  • 突破知识边界 - AI 可以获取最新信息
  • 执行实际操作 - 不只是回答问题,还能解决问题
  • 扩展能力范围 - 通过工具实现无限可能
  • 提高准确性 - 用工具验证和补充信息

工作原理

Tool Calling 的执行流程

用户请求
    ↓
AI 分析请求 → 决定是否需要工具
    ↓
生成工具调用请求(工具名 + 参数)
    ↓
系统执行工具 → 返回结果
    ↓
AI 整合结果 → 生成最终回答

工具定义结构

{
  "name": "get_weather",
  "description": "获取指定城市的天气信息",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "城市名称,如:北京"
      }
    },
    "required": ["city"]
  }
}

工具调用请求示例

{
  "tool_calls": [{
    "id": "call_abc123",
    "type": "function",
    "function": {
      "name": "get_weather",
      "arguments": "{\"city\": \"北京\"}"
    }
  }]
}

OpenClaw 实战应用

OpenClaw 内置工具

工具类别 工具名称 功能
文件操作 read, write, edit 读写文件、精确编辑
命令执行 exec, process 执行系统命令、管理进程
网络访问 web_search, web_fetch 搜索、抓取网页
浏览器 browser 浏览器自动化
消息通信 message 发送消息到各平台
任务调度 cron 定时任务管理

场景一:自动化报告生成

1. web_search: 搜索最新行业数据
2. web_fetch: 抓取详细报告内容
3. read: 读取历史数据文件
4. write: 生成新报告文件
5. message: 发送报告到飞书群

场景二:代码开发助手

1. read: 读取现有代码
2. exec: 运行测试命令
3. edit: 修复代码问题
4. exec: 再次测试验证
5. exec: git commit 提交

代码示例

OpenClaw 工具调用示例

# AI 自动决定调用工具

用户: "帮我搜索 OpenClaw 的最新教程"

AI 思考: 需要使用 web_search 工具

工具调用:
{
  "name": "web_search",
  "arguments": {
    "query": "OpenClaw 教程 2026",
    "count": 5
  }
}

工具返回: [搜索结果...]

AI 回复: "我找到了以下 OpenClaw 教程..."

自定义工具开发

// 定义自定义工具
const myTool = {
  name: "send_email",
  description: "发送邮件到指定地址",
  parameters: {
    type: "object",
    properties: {
      to: { type: "string", description: "收件人邮箱" },
      subject: { type: "string", description: "邮件主题" },
      body: { type: "string", description: "邮件正文" }
    },
    required: ["to", "subject", "body"]
  },
  execute: async (params) => {
    // 实现发送逻辑
    return { success: true, messageId: "msg_123" };
  }
};

💡 想了解更多?

访问 妙趣AI 获取更多 OpenClaw 教程和 AI 工具推荐!