Skip to content

Tool Calling 最佳实践

1. 工具设计:短、小、稳

一个好工具通常具备三个特征:

  • :名称和 schema 不冗长
  • :职责单一
  • :参数稳定、结果结构稳定

好例子

json
{
  "name": "search_docs",
  "description": "搜索文档并返回标题、链接和摘要",
  "parameters": {
    "type": "object",
    "properties": {
      "query": {"type": "string"},
      "limit": {"type": "integer", "minimum": 1, "maximum": 10}
    },
    "required": ["query"]
  }
}

坏例子

json
{
  "name": "do_everything",
  "description": "执行各种操作",
  "parameters": {
    "type": "object",
    "properties": {
      "payload": {"type": "string"}
    }
  }
}

2. 副作用操作必须可审计

发送消息、执行命令、修改文件、调用外部 API,这些都是副作用行为。

至少要有:

  • 参数记录
  • 执行结果记录
  • 失败原因记录
  • 必要时用户确认

3. 错误结构要统一

推荐至少包含:

json
{
  "ok": false,
  "error_code": "INVALID_ARGUMENT",
  "message": "field city is required",
  "retryable": false
}

4. 工具结果尽量对模型友好

不要只把底层异常栈扔回去。更好的做法是返回:

  • 简洁状态
  • 核心字段
  • 必要解释
  • 下一步建议

5. 对并行与重试保持克制

并行不是越多越好,重试也不是越猛越好。

要先确认:

  • 工具是否无共享状态
  • 上游是否有限流
  • 操作是否幂等
  • 失败是否值得重试

6. 给工具命名留长期空间

工具名一旦进入 prompt / schema / 代码 / 监控体系,就不适合频繁改动。

所以:

  • 名称要清楚
  • 不要过度品牌化
  • 不要把临时实现细节写进工具名

聚焦 OpenClaw、tool_calls、function calling 与 agent 实战。