前两篇讲了 Gateway(前台)和 Agentic Loop(大脑)。
现在问题来了:Agent 怎么干活?
它需要一个"双手"——这就是工具系统。
同时,Agent 连接着真实的社交媒体和本地文件系统,如何确保它不会"乱来"?
这就是安全边界的事了。
一、工具系统:瑞士军刀设计
想象一把瑞士军刀。
它有很多刀片:大刀、小刀、剪刀、开瓶器...每把刀片解决一个特定问题。
OpenClaw 的工具系统也是这样:
• Read 工具 → 读取文件 • Write 工具 → 创建文件 • Edit 工具 → 编辑文件 • Bash 工具 → 执行命令 • Browser 工具 → 控制浏览器 • ...还有更多
Agent 根据任务需要,选择合适的"刀片"来使用。
二、工具的核心定义
每个工具都有一个标准定义:
read | ||
读取文件 | ||
读取指定路径的文件内容 | ||
{"file_path": "string"} | ||
一个简单的工具定义:
{"name":"read","description":"读取指定路径的文件内容","parameters":{"type":"object","properties":{"file_path":{"type":"string","description":"文件的绝对路径"}},"required":["file_path"]}}Agent 看到这个定义,就知道:
• 这个工具叫什么 • 能做什么 • 需要什么参数
三、Schema 标准化:让不同 LLM 都能用
问题来了:不同的 LLM 提供商,对工具定义的格式要求不同。
type: "object" | |
OpenClaw 的解决方案:Schema Normalization Layer
它会自动适配不同提供商的要求:
统一工具定义 │ ▼Schema Normalization Layer │ ├──► Anthropic → 保持原样 ├──► OpenAI → 添加 type: "object" └──► Gemini → 移除不支持的关键字你只需要定义一次工具,OpenClaw 会自动适配所有 LLM。
四、内置工具一览
OpenClaw 内置了丰富的工具:
4.1 文件操作
4.2 系统操作
4.3 网络操作
4.4 通信操作
4.5 Agent 协作
五、定时任务:异步执行
有些任务不需要立刻完成,比如:
• 每天早上发送天气预报 • 每周检查依赖更新 • 定时备份数据
OpenClaw 的定时任务系统(Cron)就是干这个的。
5.1 三种调度模式
5.2 配置示例
{"kind":"every","everyMs":3600000,// 每小时"payload":{"kind":"agentTurn","message":"检查邮件并摘要"}}5.3 关键设计
• 单一定时器:只维护一个定时器,基于最近任务的时间 • 文件持久化:任务保存在 JSON 文件,重启不丢失 • 自动恢复:启动时检测并运行错过的任务 • 错误隔离:一个任务失败不影响其他任务
六、安全机制:Agent 的"护栏"
Agent 很强大,但也可能"乱来"。OpenClaw 有一套完善的安全机制。
6.1 DM 配对:陌生人不能随便聊天
问题: 如果你的 AI 助手在 WhatsApp 上公开,任何人都能发消息给它,怎么办?
解决方案:DM 配对策略
陌生人发消息 │ ▼Gateway 检查:这个人在白名单里吗? │ ├── 不在 → 发送配对码,要求验证 │ │ │ ▼ │ 用户输入正确配对码 → 加入白名单 │ └── 在 → 正常处理消息配置方式:
{"channels":{"whatsapp":{"dmPolicy":"pairing"// 默认:需要配对}}}6.2 Docker 沙箱:给 Agent 一个"安全屋"
问题: 如果 Agent 要执行用户提供的代码,怎么确保不会破坏系统?
解决方案:Docker 沙箱
┌─────────────────────────────────────────┐│ 主机系统 ││ ┌─────────────────────────────────┐ ││ │ Docker 沙箱 │ ││ │ ┌─────────────────────────┐ │ ││ │ │ Agent 执行环境 │ │ ││ │ │ - 受限的文件系统访问 │ │ ││ │ │ - 禁止危险命令 │ │ ││ │ │ - 隔离的网络环境 │ │ ││ │ └─────────────────────────┘ │ ││ └─────────────────────────────────┘ │└─────────────────────────────────────────┘配置方式:
{"agents":{"defaults":{"sandbox":{"mode":"non-main"// 非主会话在沙箱中运行}}}}6.3 工具权限控制
不是所有工具都能随便用。OpenClaw 有细粒度的权限控制:
允许列表:
{"sandbox":{"allowlist":["read","glob","grep"]// 只允许只读工具}}禁止列表:
{"sandbox":{"denylist":["bash","browser"]// 禁止危险工具}}6.4 Elevated 权限:敏感操作需确认
有些操作需要更高的权限,比如修改系统文件。
OpenClaw 提供 Elevated 模式:
普通模式:只能操作用户目录 │ ▼用户请求 elevated 权限 │ ▼系统提示:"Agent 请求提升权限,是否允许?" │ ├── 允许 → 进入 Elevated 模式 │ 可以执行敏感操作 │ └── 拒绝 → 保持普通模式七、安全铁律
OpenClaw 有几个不可违反的安全规则:
0.0.0.0 必须启用认证 | ||
127.0.0.1 | ||
八、如何给 Agent 添加新工具?
如果你想让 Agent 有新的能力,可以自定义工具。
8.1 定义工具
{"name":"weather","description":"获取指定城市的天气信息","parameters":{"type":"object","properties":{"city":{"type":"string","description":"城市名称,如:北京"}},"required":["city"]}}8.2 实现执行函数
asyncdefexecute_weather(city: str):# 调用天气 API response = await fetch_weather(city)return {"city": city,"temperature": response.temp,"condition": response.condition }8.3 注册工具
把工具定义和执行函数注册到 OpenClaw 的工具系统中,Agent 就能使用了。
小结
工具系统是 Agent 的"双手",安全机制是 Agent 的"护栏"。
工具系统要点:
• 瑞士军刀设计:每个工具解决一个特定问题 • Schema 标准化:一次定义,多 LLM 兼容 • 内置丰富:文件、系统、网络、通信、协作
安全机制要点:
• DM 配对:陌生人需要验证 • Docker 沙箱:隔离风险环境 • 权限控制:细粒度的工具访问限制 • 安全铁律:不可违反的底线
理解了工具系统和安全机制,你就理解了 Agent 如何"干活"以及如何"安全地干活"。
夜雨聆风