工具调用——给AI一双可以触碰现实世界的手
"凌晨3点42分,我给AI装上了工具。它不是变得更聪明,而是终于能——查天气、发邮件、改代码。就像一个被关在玻璃房里的天才,突然有人递给它一把锤子。"
Tool Calling(工具调用),也称 Function Calling(函数调用),是AI Agent扩展能力边界的核心机制。它允许大语言模型在需要时调用外部工具或API来获取信息、执行操作。
Tool Calling 的本质是 结构化输出 + 外部执行。LLM 不直接执行工具,而是生成调用工具所需的参数,由外部系统执行后将结果返回给LLM。
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "城市名称" },
"date": { "type": "string", "description": "日期YYYY-MM-DD" }
},
"required": ["city"]
}
}
}
| 特性 | Tool Calling | ReAct |
|---|---|---|
| 执行方式 | 结构化输出,一次调用 | 推理+行动交替,多轮迭代 |
| 适用场景 | 明确的单次工具调用 | 复杂多步推理任务 |
| 延迟 | 较低(单次往返) | 较高(多轮交互) |
| 可解释性 | 中等(有调用记录) | 高(完整推理链) |
用 Tool Calling:天气查询、计算器、发送邮件等单一明确任务
用 ReAct:研究分析、故障排查、复杂决策等需要多步推理的任务
OpenClaw 的工具系统是其最强大的特性之一:
搜索网络信息,支持 DuckDuckGo 等引擎
获取并解析网页内容,支持 HTML→Markdown
文件写入和编辑操作
执行系统命令
浏览器自动化控制
发送消息到各种渠道(Discord、飞书等)
# 用户:"今天北京天气怎么样?"
# Step 1: LLM 判断需要调用 web_search
web_search({
"query": "北京今天天气",
"count": 5
})
# Step 2: 搜索结果返回
# ["北京今日晴,气温15-25°C..."]
# Step 3: LLM 生成最终回复
"今天北京天气晴朗,气温在15到25度之间,适合出门~"
mcp:
servers:
- name: weather-api
transport: http
url: "https://api.weather.com/mcp"
- name: github-mcp
transport: stdio
command: "npx -y @github/mcp-server"
- name: database-mcp
transport: sse
url: "http://localhost:3001/mcp"
# 配置完成后,这些MCP工具会自动出现在Agent的工具列表中
# Agent可以像调用内置工具一样调用MCP工具
调用日历API创建事件、查询日程、发送提醒——"明天下午3点提醒我开会"
调用数据库查询交易记录、计算统计指标、生成报表——"本月支出分析"
调用IoT API控制灯光、空调、安防——"把客厅温度调到25度"