OpenClaw 作为一个功能强大的 AI 助手平台,其核心能力来自于两个关键系统:Tools(工具) 和 Skills(技能)。工具为 Agent 提供了与外部世界交互的能力,而技能则是教会 Agent 如何组合使用这些工具完成复杂任务的知识库。
本文将深入探讨:
- OpenClaw 设计了哪些工具及其功能
- Skills 的注入时机和完整流程
- Tools 与 Skills 的协作关系
OpenClaw 的工具系统遵循以下设计原则:
核心理念:
- 最小权限原则:工具按功能分组,支持细粒度权限控制
- 组合优于单体:小而专注的工具,通过组合实现复杂功能
- 安全第一:多层策略过滤,防止滥用
- 可扩展性:插件系统支持自定义工具
工具定义:
OpenClaw 提供了 28 个核心工具,按 8 个功能类别组织:
📁 文件系统工具(File System)
设计考量:
- 和 是最基础的操作
- 提供精确的字符串替换(避免覆盖整个文件)
- 支持复杂的多文件编辑(仅限特定模型)
安全机制:
⚙️ 运行时工具(Runtime)
关键特性:
- 支持超时、信号中断、输出捕获
- 支持后台守护进程
- 默认拒绝:HTTP网关默认禁止这两个工具(安全考虑)
使用示例:
🌐 网络工具(Web)
多提供商支持:
- :支持 Tavily、Brave、Perplexity 等
- :自动转换HTML为Markdown,提取主要内容
返回格式:
🧠 内存工具(Memory)
核心能力:
- 向量搜索 + 关键词搜索混合
- 支持 MEMORY.md、memory/.md、sessions/.jsonl
- RRF(Reciprocal Rank Fusion)融合算法
查询流程:
详细机制参考:
💬 会话工具(Sessions)
会话架构:
子代理限制:
🎨 UI工具(User Interface)
browser 工具能力:
- Playwright 驱动
- 支持导航、点击、输入、截图
- JavaScript 执行
canvas 工具能力:
- HTML/SVG → PNG/JPEG
- 支持 Chart.js、D3.js 等库
- 自定义尺寸和样式
示例:
📧 消息工具(Messaging)
支持的渠道:
- Discord、Telegram、Slack
- WhatsApp、Signal、iMessage
- Line、GoogleChat 等
使用示例:
🤖 自动化工具(Automation)
cron 工具示例:
gateway 工具功能:
- 重启网关
- 重新加载配置
- 查看系统状态
- 清理缓存
📦 其他工具
OpenClaw 提供了 4 个预定义配置文件,简化工具权限配置:
1. minimal - 最小配置
包含工具:
- (仅会话状态)
适用场景:
- 受限环境
- 只读监控
2. coding - 编程配置 ⭐
包含工具:
- 文件系统:read, write, edit, apply_patch
- 运行时:exec, process
- 内存:memory_search, memory_get
- 会话:sessions_list, sessions_send, sessions_spawn
- 自动化:cron
- 媒体:image
适用场景:
- 代码开发
- 自动化脚本
- 技术支持
3. messaging - 消息配置
包含工具:
- sessions_list, sessions_send
- session_status
- message
适用场景:
- 客服机器人
- 通知助手
- 会话管理
4. full - 完整配置
包含工具:所有工具(无限制)
适用场景:
- 开发环境
- 超级管理员
- 完全信任的环境
OpenClaw 使用多层策略控制工具访问:
策略应用顺序
策略配置示例
工具组(Tool Groups)
使用示例:
OpenClaw 支持通过插件注册自定义工具:
插件工具注册
启用插件工具
定义:Skill 是 Markdown 格式的知识文档,教会 Agent 如何组合使用工具完成复杂任务。
核心组成:
示例:
与 Tool 的本质区别:
时间线概览
加载位置和优先级
位置:
合并策略:
- 同名技能:后加载的覆盖先加载的
- 允许工作空间覆盖捆绑技能
- 实现自定义和扩展
运行时资格检查
位置:
资格检查示例:
检查逻辑:
检查逻辑:
技能块格式化
位置:
生成示例:
系统提示构建
位置:
技能部分构建:
最终系统提示:
关键点:
- Skills部分在Tools部分之后
- 包含明确的选择指令(”scan”, “read”, “follow”)
- 使用 “mandatory” 强调重要性
- 限制只读取一个技能(避免过度加载)
LLM 自主选择流程
关键点:
- LLM 自主判断是否需要技能
- LLM 自主选择使用哪个技能
- 技能文档通过 工具动态获取
- 技能只是指导,最终执行仍依赖工具
用户显式调用(Slash Commands)
关键点:
- 用户通过 显式调用
- 支持 tool-dispatch(直接调用工具)
- 不经过LLM推理(确定性执行)
- 仍受Tool策略约束
1. Tool 必须提前注册
证明:
2. Tool策略不影响Skill可见性
原因:
- Tool过滤和Skill过滤是独立的
- Skill可见性不受Tool策略影响
- 但Skill执行依赖Tool可用性
3. 配置一致性很重要
反例(会失败):
所有这些技能都依赖 ,会执行失败。
正例(一致):
或者使用元数据声明依赖:
1. 使用配置文件简化管理
2. 为Skill声明工具依赖
这样技能会在依赖不满足时自动不加载。
3. 使用 tool-dispatch 确保一致性
用户输入 时:
- 直接调用 工具
- 绕过LLM推理
- 确保行为一致
4. 监控技能执行失败
如果用户报告”技能不工作”,检查清单:
目标:自动审查代码变更
配置:
工作流:
目标:每天生成销售报告
配置:
自定义技能:
触发:
目标:支持Python、Node.js、Go开发
配置:
智能选择:
- 工具是能力,技能是智慧
- 工具:28个核心工具 + 插件扩展
- 技能:Markdown文档,教学如何使用工具
- 注入发生在启动和会话开始
- 启动时:加载技能和工具
- 会话时:构建系统提示
- 运行时:LLM读取和执行
- 工具和技能独立但关联
- 独立注册和加载
- 技能引用工具名称
- 技能执行依赖工具可用性
- 多层策略确保安全
- 工具策略:控制工具可用性
- 技能策略:控制技能可见性
- 两者配合保证系统安全
- 灵活性:工具和技能分离,易于扩展
- 安全性:多层策略控制,细粒度权限
- 可组合性:小工具组合成复杂功能
- 可维护性:技能是文档,易于更新
“Give the agent tools to do things, and skills to know how to do them well.”
“给代理工具去做事,给技能教它如何做好。”
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/226950.html