OpenClaw 工具开发实战:从 Tool 定义到执行审批的完整链路 原创

温馨提示:
本文最后更新于 2026-10-26,已超过 1 天没有更新。 若文章内的图片失效(无法正常加载),请留言反馈或直接 联系我。

工具(Tool)在 OpenClaw 中的地位

OpenClaw 的能力以工具为核心:模型通过工具执行文件读写、运行命令、调用外部 API。工具是 Agent 与外界交互的唯一桥梁,理解工具定义、注册与策略控制是开发自定义能力的起点。

工具的定义结构

一个工具通常包含名称、输入参数 Schema 与执行逻辑。OpenClaw 使用 JSON Schema 描述参数,让模型知道该传什么值。

{
  "name": "my_custom_tool",
  "description": "执行自定义业务操作",
  "parameters": {
    "type": "object",
    "properties": {
      "action": {"type": "string", "description": "要执行的动作"}
    },
    "required": ["action"]
  }
}

清晰的 description 能显著提升模型调用的准确率——模型依赖描述判断何时调用该工具。

注册与加载机制

工具通过配置或插件系统注册。OpenClaw 支持在会话配置中声明可用工具,并在模型上下文里暴露给当前会话。

# 会话配置片段
tools:
  - name: my_custom_tool
    source: ./tools/my_custom_tool.js

插件机制允许工具动态注册与热重载,无需重启网关即可新增能力。注册后可通过 tool_search 检索到该工具并实际调用。

策略过滤与审批

工具并非无条件可调。OpenClaw 通过策略(policy)过滤工具调用,并可为敏感命令设置执行审批。这与安全模型直接相关:越危险的工具越需要显式授权。

# 策略配置示例:对删除类命令要求审批
tools:
  exec:
    mode: require-approval

开发者应明确工具的风险等级,将破坏性操作纳入审批流程,而非默认放行。

用脚本实现一个简单工具

以 Node.js 实现一个”查询服务器状态”的工具为例:

// tools/server_status.js
module.exports = async function(args) {
  // args.host 由模型按 Schema 传入
  const data = await fetchStatus(args.host);
  return { ok: true, status: data };
};

定义好 Schema 与实现后注册进会话,即可让模型在合适时机调用它。

调试与最佳实践

开发自定义工具时,用 tool_describe 查看完整 Schema 确认字段正确,用 tool_search 验证工具是否可见。实践要点:

  • 参数 Schema 字段名用简洁英文,避免歧义。
  • description 明确”何时使用、何时不用”,减少误调用。
  • 错误信息返回结构化 JSON,便于模型理解并重试。
  • 涉及密钥与凭据时,通过安全通道注入,切勿硬编码进源码。

工具是 OpenClaw 能力的边界。清晰的 Schema、合理的策略与健壮的实现,共同决定 Agent 能否可靠地替你完成工作。