第五章:工具层设计
章引言
工具(Tools)是智能体与外部世界交互的手段。每一个工具调用都是一次对外部系统的改造、查询或决策。设计良好的工具层决定了智能体系统的能力边界、安全性、可维护性和可扩展性。
如果说智能体循环是“如何思考和行动”,那么工具层就是“用什么工具去行动”。
工具层的三个核心问题
工具抽象:如何定义一个统一的工具接口,使得各种异构的外部能力(Bash、文件系统、网络请求、数据库、API)都能被智能体调用?
工具执行:如何安全地执行工具调用,处理超时、权限、错误,并向智能体反馈结果?
工具发现:如何让智能体知道存在哪些工具、如何使用?在静态工具列表和动态工具发现之间如何平衡?
两个参考系统的工具哲学
Claude Code 的设计
24+内置工具:深度集成,每个工具为特定场景优化
工具类型多样:8个执行工具、3个网络工具、8个Agent工具、5+内置专用工具
Tool<Input,Output,Progress> 泛型接口:类型安全,支持进度报告
buildTool() 工厂函数:动态构造工具
shouldDefer 延迟加载:条件决定是否加载工具
FileStateCache 上下文缓存:工具执行结果的智能缓存
异步执行:StreamingToolExecutor 并发调用多个工具
OpenClaw 的设计
Tools + Skills 双层架构:
Tools:底层能力(Bash、文件、搜索)
Skills:Markdown 指令格式的高级操作
6级技能加载优先级:
固定系统技能
会话上下文技能
用户自定义技能
领域专业技能
通用工具
动态发现技能
工具策略:允许/拒绝/分层权限模型
单线程顺序执行:每个工具一个一个执行,但可序列化结果
本章结构
5.1:工具抽象接口设计
5.2:工具执行流水线
5.3:工具类型体系
5.4:动态发现与加载
5.5:实战——MiniHarness 工具层
本章小结
学习要点
通过本章的学习,你将理解:
如何定义工具的统一接口,支持异步、进度报告、权限检查
工具执行流水线的完整过程:发现 → 验证 → 执行 → 缓存
不同工具类型的实现特点和权衡
动态工具发现的必要性和实现方式
如何在 Python 中实现一个可扩展的工具系统
工具与技能的关系
工具和技能的关系可以用以下层级模型表示:
设计决策速查
工具接口
Tool<I,O,P>
Tool Protocol
Async Protocol
执行模式
并发
顺序
顺序(可扩展)
错误处理
异常捕获
错误即观察
两者结合
权限管理
check_permissions()
工具策略
基础实现
缓存
FileStateCache
会话记忆
简单缓存
发现机制
预定义
6级优先级
注册表
本章将深入这些设计细节,为你建立完整的工具系统设计能力。
最后更新于
