"晚上11点23分,GPT说它知道北京今天的天气。但它不知道——它只是在'认为'自己知道。直到有了 Tool Calling,它才真的去看了看窗外的天空。"
Tool Calling(工具调用),也叫 Function Calling(函数调用),是大语言模型(LLM)与外部世界交互的核心机制。它允许模型在生成回复时,不只是输出文字,而是主动请求调用预定义的函数或工具来获取信息、执行操作。
打个比方:如果 LLM 是一个超级聪明的图书管理员,那么 Tool Calling 就是她手里的电话——当她不确定某个数据时,可以直接打电话(调用工具)去确认,而不是靠记忆瞎编。
| 维度 | 传统 LLM | Tool-Enabled LLM |
|---|---|---|
| 知识来源 | 训练数据(有截止时间) | 训练数据 + 实时工具 |
| 能力边界 | 只能生成文本 | 可以执行操作、获取数据 |
| 准确性 | 容易"幻觉" | 通过工具验证,大幅降低幻觉 |
| 交互方式 | 输入文字 → 输出文字 | 输入文字 → 可能调用工具 → 输出结果 |
用户输入:"今天北京天气怎么样?"
↓
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 完全依赖描述来决定是否调用工具。描述越清晰,调用越准确。
web_search - 搜索引擎web_fetch - 获取网页内容database_query - 数据库查询api_call - 调用外部 APIfile_read / file_write - 文件操作exec_command - 执行系统命令browser_action - 浏览器自动化send_message - 发送消息send_email - 发送邮件notify - 推送通知code_interpreter - 代码执行image_generator - 图像生成calculator - 数学计算OpenClaw 内置了大量开箱即用的工具,同时支持自定义工具扩展。
| 工具名 | 功能 | 使用场景 |
|---|---|---|
web_search |
DuckDuckGo 搜索 | 查找最新信息 |
web_fetch |
获取网页内容 | 阅读文章、提取信息 |
exec |
执行 Shell 命令 | 系统管理、代码运行 |
read / write |
文件读写 | 内容生成、配置修改 |
browser |
浏览器控制 | 网页自动化、截图 |
message |
消息发送 | Discord、飞书等平台通知 |
cron |
定时任务管理 | 定期执行任务 |
# 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"]
}
}
}
模型不知道什么时候该用、什么时候不该用你的工具。描述要写清楚:功能、输入、输出、适用场景、不适用场景。
LLM 可能传入格式错误的参数。一定要在工具实现中做好参数校验和错误处理。
一次传入太多工具定义会降低模型的选择准确率。建议每次对话控制在 10-15 个工具以内,或使用工具分组。
Agent 可能反复调用同一个工具。设置最大调用次数限制(通常 5-10 次)。
Tool Calling 是 AI Agent 的手和脚,是让 LLM 从"纸上谈兵"进化为"实战高手"的关键能力。在 OpenClaw 中,丰富的内置工具和 MCP 扩展机制让你可以快速构建功能强大的 AI Agent 系统。
© 2026 妙趣AI | miaoquai.com - 让AI变得妙趣横生