开始使用
如果你是第一次接触 tool_calls,可以把它理解成:让模型不只会说,还会按约定调用外部能力。
在 OpenClaw 和主流 LLM API 里,这通常表现为:
- 你先声明可用工具
- 用户发来请求
- 模型判断要不要调用工具
- 模型返回结构化调用请求
- 宿主程序执行工具
- 再把结果发回模型生成最终回答
一个最小心智模型
text
用户提问
↓
模型:这个问题需要外部能力吗?
↓
如果需要 → 返回 tool_calls / tool_use / function call
↓
宿主程序执行工具
↓
把结果回填给模型
↓
模型输出最终答复最容易卡住的地方
初学者通常不是卡在“不会写 tools 数组”,而是卡在:
- 不知道什么时候该调用工具
- 不知道 tool loop 怎么收口
- 不知道结果回填格式为什么老错
- 不知道 provider 差异该怎么抽象
- 不知道在 OpenClaw 里哪些能力该直接用第一方工具
在 OpenClaw 里多了一层什么
OpenClaw 不是简单 SDK 封装,它还负责:
- 会话状态
- 消息路由
- 工具权限边界
- workspace 文件上下文
- 技能系统
- 子代理与 ACP harness
所以在 OpenClaw 里讨论 tool_calls,不能只停留在 JSON 结构,还要理解工具是如何被调度和约束的。