5.5 实战:MiniHarness 工具层实现

本节实现一个完整的 MiniHarness 工具层,包括工具协议、注册表、执行流水线和几个内置工具。核心设计原则是“发现、权限、执行、结果”四阶段流水线。

5.5.1 工具抽象与基类

工具层的核心是统一的 Tool 基类,定义了所有工具必须实现的接口。工具的设计遵循“契约优先”原则:

from abc import ABC, abstractmethod

class Tool(ABC):
    """工具基类 - 定义工具的通用契约"""

    @abstractmethod
    async def call(self, params: Dict[str, Any]) -> ToolResult:
        """执行工具的核心逻辑"""
        pass

    @abstractmethod
    def name(self) -> str:
        """工具的唯一标识符"""
        pass

    @abstractmethod
    def description(self) -> str:
        """工具描述"""
        pass

    @abstractmethod
    def input_schema(self) -> Dict[str, Any]:
        """JSON Schema 定义输入约束"""
        pass

    def check_permissions(self, context: Any) -> bool:
        """权限检查钩子 - 可被子类覆盖"""
        return True

关键设计决策:

  1. 异步执行:所有工具使用 async/await,支持 IO 密集型操作

  2. Schema 驱动:通过 JSON Schema 定义输入,实现自文档化和验证

  3. 权限钩子check_permissions() 允许子类实现细粒度权限控制

  4. 统一结果类型ToolResult 封装成功/失败/执行时间等元数据

完整实现参见 lab/mini_harness/tools/builtin.py

5.5.2 工具执行流水线

执行流水线是系统的核心,实现了 4 阶段的工具调用流程:

四阶段设计的优点:

  • 可观测性:每个阶段可独立记录日志和监控

  • 可扩展性:插入速率限制、超时控制、重试逻辑等中间件

  • 安全性:权限检查在执行前进行,防止越权操作

  • 容错性:捕获任意异常并转换为统一的失败结果

完整实现参见 lab/mini_harness/tools/builtin.py 中的 ExecutionPipeline 类。

5.5.3 工具注册表

工具注册表充当服务发现中心和 Schema 缓存:

设计特点:

  • Schema 缓存:减少重复的 Schema 构建,加速工具列表生成

  • 统一发现:LLM 通过 list_tools() 获取全部可用工具及其约束

  • 松耦合:执行流水线仅依赖注册表接口,不需关心工具实现细节

完整实现参见 lab/mini_harness/tools/registry.py

5.5.4 内置工具示例

三个内置工具展示了不同的设计模式:

BashTool:命令执行工具,演示了长时间运行任务的超时处理

FileReadTool 和 FileWriteTool:文件操作工具,演示了错误分类和限制(如 max_bytes)

这些工具的完整实现包括详细的错误处理、参数验证和边界情况处理,参见 lab/mini_harness/tools/builtin.py

5.5.5 扩展路径

  1. 中间件架构:在执行流水线中插入速率限制、重试、缓存层

  2. 权限模型:为不同用户和工具组合配置细粒度权限

  3. 超时和资源限制:为每个工具实例设置 CPU/内存配额

  4. 并发执行:使用 asyncio.gather() 实现多工具并发调用

  5. 工具依赖图:支持工具间的数据流依赖(DAG 执行)

  6. 结果缓存:基于输入哈希缓存工具结果,支持失效策略

5.5.6 本节小结

MiniHarness 工具层的核心贡献:

  1. 清晰的抽象边界:Tool 基类定义统一契约,工具之间互不依赖

  2. 四阶段执行流水线:发现→权限→执行→处理,可观测且可扩展

  3. Schema 驱动设计:工具通过 JSON Schema 自描述,LLM 可直接理解

  4. 错误优先处理:所有失败路径返回统一的 ToolResult 类型

这些原则适用于任何规模的 AI Agent 系统工具层设计。

最后更新于