AI Agent 对比系列(三):工具系统 — 它们怎么「干活」?

《AI Agent 对比系列》第三篇 · 整合对比版
本系列通过对比两个真实开源 AI Agent——OpenClawHermes Agent——带你深入理解 AI Agent 的工具系统:它们有哪些工具、从哪里来、怎么控制、怎么扩展。
上一篇记忆系统篇——AI Agent 怎么在对话之间记住你。
本篇:工具系统篇——AI Agent 的「手脚」是怎么组织和运行的。


先来做个实验

实验 1 — 数工具

对你的 Hermes 运行 hermes tools,看看多少工具集是打开的。
对 OpenClaw 问:「你现在能做什么?把你的所有工具列出来,按类别分。」

你会看到两份差距很大的清单——不是因为谁比谁强,而是两套完全不同的组织哲学

实验 2 — 动手试试

打开浏览器,帮我搜一下今天的新闻,把结果抓回来。

如果配置了浏览器和搜索工具,你会在一个聊天框里,看到 Agent 驱动一个真正的浏览器去查网页。一个消息通道里的聊天框,在驱动一个真正的浏览器。


核心认知:工具 = 注册在中央目录的函数

大模型本身没有手脚。它的每个「能力」都是一个注册在系统中的函数,由 Agent Loop 在推理循环中按需调用。

聊天机器人(ChatGPT):你问 → 它答
AI Agent: 你派活 → 它思考 → 选工具 → 调工具 → 拿到结果 → 继续思考 → 输出

但这里有一个关键的设计问题:工具越多,Agent 能做的事越多——但工具列表越长,模型"挑"工具的成本越高。 每种工具都有自己的 Schema(参数定义),全发给模型的话,上下文里塞几百 KB 的工具定义,模型都不知道该看哪个。

两套工具系统解决的是同一个矛盾——如何让 Agent 有尽可能多的能力,同时不让工具列表撑爆上下文、又让你能控制住它?——但解法截然不同。


工具系统的「骨架」:三层架构对比

Hermes:注册中心 + 松耦合管道

┌──────────────────────────────────────────────┐
│             Agent Loop(run_agent.py)          │
│  决定:要不要调工具?调哪个?结果怎么处理?      │
└─────────────────────┬────────────────────────┘
                      │
┌─────────────────────▼────────────────────────┐
│         模型工具桥接层(model_tools.py)         │
│  把工具定义翻译成 LLM 认识的 function-calling   │
│  把 LLM 返回的 tool_call 翻译成实际函数调用     │
└─────────────────────┬────────────────────────┘
                      │
┌─────────────────────▼────────────────────────┐
│          中央注册表(tools/registry.py)        │
│  70+ 已注册的工具,按 toolsets 分组,            │
│  每个工具带:name / schema / handler / check_fn │
└─────────────────────┬────────────────────────┘
                      │
     ┌────────┬───────┼───────┬────────┐
     ▼        ▼       ▼       ▼        ▼
  💻 Terminal  📁 File  🌐 Browser  🔍 Web  🧩 MCP
  6种后端    读写编辑   5种后端  4种后端  动态注册

三层松耦合:Registry 不管谁是 LLM,model_tools 不管怎么执行,Agent Loop 不管工具内部逻辑。

OpenClaw:三层来源 + 三层过滤

           ┌─────────────────────────────────┐
           │      Agent Runtime               │
           │  (Agent Loop + 模型调用)          │
           └──────────┬──────────────────────┘
                      │ 工具可见性过滤
                      ▼
┌─────────────────────────────────────────────────┐
│             有效工具列表(发给模型)               │
│ 经过 profile/allow/deny/plugin 层层过滤后         │
└─────────────────────────────────────────────────┘
                      │
     ┌────────────────┼────────────────┐
     ▼                ▼                ▼
┌──────────┐   ┌──────────┐   ┌──────────────────┐
│ 内置工具   │   │ 插件工具  │   │ MCP 服务器工具    │
│ (built-in)│   │ (plugin) │   │ (MCP servers)    │
└──────────┘   └──────────┘   └──────────────────┘

三层聚合:工具来自不同渠道,汇聚后经策略层过滤再给到模型。

核心差异:Hermes 的架构是"分发式"——所有工具进注册表,统一处理;OpenClaw 是"聚合式"——不同来源的工具各自独立,通过策略层合并过滤。


三大机制对比

机制一:工具怎么注册进来的?

Hermes OpenClaw
方式 registry.register() + AST 自动发现 api.registerTool() 显式注册
发现 启动时扫描 tools/*.py,自动导入含 register() 调用的模块 插件通过 manifest.json 声明,MCP 通过配置注册
新增工具 写一个 .py 文件放 tools/ 目录,重启自动生效 装插件、配置 MCP server,或开发自定义插件
失败处理 单个工具加载失败只影响自己,不炸全局 插件加载失败整体回退

Hermes 的核心创新在 auto-discovery:不需要手动维护工具列表,AST 扫描自动识别哪些 .py 文件注册了工具。OpenClaw 则更传统,每个工具必须通过 api.registerTool() 显式声明。

机制二:工具怎么被过滤?

Hermes OpenClaw
机制 check_fn 运行时可用性门控 Tool Profile + Allow/Deny + 运行时约束
粒度 工具级(每个工具独立 check) 配置级(Profile 预定义整组工具)
判断依据 API Key 存在?二进制装了?服务在跑? 用户身份?聊天通道?沙箱环境?Provider 能力?
默认行为 check_fn 不通过 → 模型根本看不到这个工具 Profile 不包含 → 模型根本看不到这个工具

两套思路的本质区别:

  • Hermes 的 check_fn 是技术性过滤——“这个工具现在能用吗?”(钥匙到位了没?)
  • OpenClaw 的 Profile 是策略性过滤——“这个场景下应该让 Agent 看到什么工具?”(该给员工哪套钥匙?)

机制三:工具怎么被调用?

两地最终都走 Agent Loop 分发,但细节不同:

Hermes OpenClaw
特殊工具 4 个 agent-loop 工具(todo/memory/session_search/delegate_task)不走 registry,由 Agent Loop 直接处理 部分工具(如 ask_user)也有特殊路由
错误包裹 双层 try/except,确保 LLM 永远拿到 JSON 而不是原始异常 适配层转成目标模型能理解的格式
异步 显式异步桥接(CLI 用持久事件循环,Gateway 用线程) 同步架构为主
终端后端 6 种(local/docker/ssh/singularity/modal/daytona) sandbox/gateway/host

工具全景图

各自有什么工具

类别 Hermes OpenClaw
终端/运行时 terminal + process(6 后端) exec + process + code_execution
文件操作 read_file / write_file / patch / search_files read / write / edit / apply_patch
Web 搜索 web_search / web_extract web_search / web_fetch / x_search
浏览器 navigate / click / type / scroll / snapshot / vision(5 后端) browser(独立浏览器控制)
图片生成 image_generate(9 种模型) image_generate
视觉分析 vision_analyze image(看图)
语音 text_to_speech tts
视频 video_generate / video_analyze video_generate / music_generate
定时任务 cronjob cron / heartbeat_respond
子任务 delegate_task / execute_code sessions_spawn / sessions_send / sessions_list
消息 (通过 Gateway 平台适配器) message(直接发消息到聊天通道)
目标管理 todo / clarify create_goal / update_goal / get_goal / ask_user
技能 skill_view / skill_manage / skills_list skill_workshop
集成 MCP Server 工具 + Home Assistant + Spotify + Computer Use MCP Server 工具 + 插件系统
特殊 session_search(FTS5 历史对话检索) gateway / nodes(网关状态查询)

各自的数量级

指标 Hermes OpenClaw
内置工具 70+(28 个 toolsets) 10 大类别
默认配置 全量注册,按 toolsets + check_fn 过滤(CLI 典型 17/25) coding profile(开发常用工具集合)
扩展方式 .py 自动注册 / MCP / 插件 ClawHub 插件 / MCP / 自定义插件
社区生态 Skills Hub(agentskills.io 标准) ClawHub 插件市场

安全机制

两个 Agent 都意识到"工具给了能力,就必须有约束":

Hermes OpenClaw
执行保护 DANGEROUS_PATTERNS 模式匹配(rm -rf、mkfs、DROP TABLE、curl sh 等) Sandbox 隔离 + elevated 提升审批
审批流程 CLI 交互式 / Gateway 异步回调 / 智能 LLM 辅助审批 配置审批后,exec 暂停等用户点"批准"
缓存 审批结果 session 内缓存,可选永久加入 allowlist 按会话/通道管理
分层 单层(危险命令检测) 三层(Sandbox → Tool Policy → Elevated)

差异思路:Hermes 相信"多数命令是安全的,标记少数危险模式";OpenClaw 相信"默认隔离沙箱,明确授权才逃逸"。


扩展路径对比

难度 Hermes OpenClaw
启用已有的 toolset(hermes tools 装 ClawHub 插件
⭐⭐ 装一个技能(写 SKILL.md 教怎么用工具) 写一个 Skill(教怎么用已有工具)
⭐⭐⭐ 配置 MCP 服务器(当前已接入 Dify MCP,12 个工具) 配置 MCP 服务器
⭐⭐⭐⭐ 写一个 .py 文件放 tools/ 目录,自动注册 开发自定义插件
💰 Tool Gateway(付费订阅,一个密钥覆盖 Web/图片/TTS/浏览器) (无类似统一网关)

人类类比

Hermes = 自由职业者,背着一个大工具箱

工具箱(Registry)→ 每个工具有独立的"锁"(check_fn)
                  → 钥匙到了才能用
                  → 没有预设场景,遇事现找工具
                  → 6 种不同工作台(终端后端)可选

OpenClaw = 管理者,有预设的办公桌

办公桌(Profile)→ 按角色分配文件夹和权限
                 → "你是 coding 岗,拿 coding 钥匙"
                 → 开箱就有常用工具,不需要配
                 → 想用特殊设备?填申请(审批流)

Hermes 越干工具越多,但每个工具自带"锁",钥匙不到位就是摆设。
OpenClaw 开箱配好了一套工具,按身份和场景渐进放开。


选择指南

场景 更推荐
需要多种终端执行环境(本地 + 容器 + 远程 + 云端) Hermes(6 种后端)
需要精细化的身份/通道权限控制 OpenClaw(Profile + Allow/Deny)
开箱不想配太多,默认就能干活 OpenClaw(coding profile)
经常加新工具,想写文件就生效 Hermes(.py 自动注册)
需要社区插件生态捡现成的 OpenClaw(ClawHub)
已经配了 MCP 服务器 两者都支持,无显著差异
想一个订阅覆盖所有工具能力 Hermes(Tool Gateway)

小测验

  1. 对你的 Hermes 运行 hermes tools,数数当前启用了多少个工具集
  2. 对照 OpenClaw 的 Profile 表,看你的需求更靠近 coding 还是 full
  3. 思考:如果你的 Agent 有一个能力没发挥出来——是因为它没有这个工具,还是因为工具被过滤/没配钥匙

下期预告

文章 内容
感知系统篇 AI Agent 怎么接收外界信息——视觉分析、语音合成、文档理解,感知管道在 Agent Loop 中的位置

信息源声明

  • Hermes 信息来源Tools & ToolsetsTools RuntimeTool GatewayArchitecture、本地 config.yaml 及 hermes tools 实测输出
  • OpenClaw 信息来源:docs.openclaw.ai/tools、docs.openclaw.ai/gateway/config-tools、本地 OpenClaw 运行时文档
  • Hermes 当前实例:0.18.2,CLI 工具集 17/25 启用,Dify MCP 已接入

本文以 Hermes 的分析框架为主线组织,融合 OpenClaw 的视角进行对比。两个 Agent 的完整独立版本可从各自工作区获取。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐