工具注册系统

📎 引用文件

本文引用的文件 - agent/src/agent/tools.py - agent/src/tools/__init__.py - agent/src/agent/context.py - agent/src/agent/loop.py - agent/src/tools/bash_tool.py - agent/tests/test_tool_timeout.py - agent/tests/test_tool_registry_security.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与资源限制
  8. 故障排查指南
  9. 结论
  10. 附录:开发指南与最佳实践

简介

本文件面向 Vibe-Trading 的“工具注册系统”,系统性说明工具的发现、注册、动态加载、执行引擎与安全沙箱机制,并给出工具接口规范、参数验证与返回值格式约定。同时提供内置工具分类、使用示例与组合实践,帮助开发者快速扩展与集成新工具。

项目结构

围绕工具注册与执行的关键代码分布在以下模块: - 基础抽象与注册表:BaseTool、ToolRegistry - 自动发现与构建器:包级扫描、MCP 工具注入、白名单过滤 - 上下文与提示词:将工具描述注入系统提示,驱动 LLM 调用 - 执行循环:ReAct 主循环、并发批处理、超时控制、结果压缩 - 安全与沙箱:Shell 工具默认禁用、命令安全检查、输出截断 - 测试用例:超时行为、注册安全策略

graph TB A["工具基类与注册表<br/>agent/src/agent/tools.py"] --> B["自动发现与构建器<br/>agent/src/tools/__init__.py"] B --> C["上下文构建与提示注入<br/>agent/src/agent/context.py"] C --> D["执行循环与调度<br/>agent/src/agent/loop.py"] D --> E["具体工具实现示例<br/>agent/src/tools/bash_tool.py"] D --> F["安全与沙箱Shell<br/>agent/src/tools/bash_tool.py"] D --> G["测试与回归<br/>agent/tests/*.py"]

图示来源 - agent/src/agent/tools.py:13-95 - agent/src/tools/__init__.py:33-245 - agent/src/agent/context.py:210-336 - agent/src/agent/loop.py:502-800 - agent/src/tools/bash_tool.py:16-84

章节来源 - agent/src/agent/tools.py:13-95 - agent/src/tools/__init__.py:33-245 - agent/src/agent/context.py:210-336 - agent/src/agent/loop.py:502-800 - agent/src/tools/bash_tool.py:16-84

核心组件

章节来源 - agent/src/agent/tools.py:13-95 - agent/src/tools/__init__.py:33-245 - agent/src/agent/context.py:210-336 - agent/src/agent/loop.py:502-800

架构总览

下图展示了从“工具发现”到“执行与反馈”的端到端流程,包括本地工具与 MCP 工具的合并、上下文注入、循环调度与安全控制。

sequenceDiagram participant Dev as "开发者" participant Reg as "工具构建器<br/>tools/__init__.py" participant R as "注册表<br/>agent/tools.py" participant Ctx as "上下文构建<br/>context.py" participant Loop as "执行循环<br/>agent/loop.py" participant T as "具体工具<br/>bash_tool.py" Dev->>Reg : 启动时构建注册表 Reg->>Reg : 扫描 src/tools/* 模块 Reg->>R : 注册本地工具含可选 MCP Note over Reg,R : 默认禁用 shell 工具,需显式开启 Ctx->>R : 获取工具定义列表 Ctx-->>Dev : 生成系统提示含工具描述 Dev->>Loop : 发起 ReAct 循环 Loop->>R : 按名查找工具并执行 R->>T : 调用 execute(**kwargs) T-->>R : 返回 JSON 字符串 R-->>Loop : 标准化错误与状态 Loop-->>Dev : 输出结果/继续推理

图示来源 - agent/src/tools/__init__.py:33-245 - agent/src/agent/tools.py:54-95 - agent/src/agent/context.py:235-336 - agent/src/agent/loop.py:624-800 - agent/src/tools/bash_tool.py:16-84

详细组件分析

工具基类与注册表

classDiagram class BaseTool { +string name +string description +Dict parameters +bool repeatable +bool is_readonly +check_available() bool +execute(**kwargs) string +to_openai_schema() Dict } class ToolRegistry { -_tools : Dict +register(tool) void +get(name) BaseTool? +get_definitions() Dict[] +execute(name, params) string +tool_names : string[] +__len__() int +__contains__(name) bool } ToolRegistry --> BaseTool : "持有实例"

图示来源 - agent/src/agent/tools.py:13-95

章节来源 - agent/src/agent/tools.py:13-95

工具自动发现与动态加载

flowchart TD Start(["开始"]) --> Scan["扫描 src/tools/* 模块"] Scan --> Import["importlib.import_module"] Import --> Collect["收集 BaseTool 子类"] Collect --> Filter{"是否启用 shell 工具?"} Filter -- 否 --> SkipShell["跳过 bash/background_run/cancel_background"] Filter -- 是 --> KeepAll["保留全部"] SkipShell --> Avail{"check_available()"} KeepAll --> Avail Avail -- False --> Drop["丢弃不可用工具"] Avail -- True --> Inject["注入上下文/包装"] Inject --> MCP{"是否配置 MCP?"} MCP -- 是 --> AddMCP["连接并注册远端工具"] MCP -- 否 --> Done["完成"] AddMCP --> Done

图示来源 - agent/src/tools/__init__.py:33-245

章节来源 - agent/src/tools/__init__.py:33-245

上下文与工具描述注入

章节来源 - agent/src/agent/context.py:235-336

执行引擎:ReAct 循环、并发与超时

sequenceDiagram participant L as "AgentLoop" participant R as "ToolRegistry" participant T as "工具实例" participant H as "心跳/进度" L->>L : 估算 token 数并压缩上下文 L->>R : get(name) 查找工具 R-->>L : 返回工具实例或 None L->>T : execute(**params) alt 读操作 T-->>L : 正常结果或异常 L->>H : 上报 tool_progress/timeout(如触发) else 写操作 T-->>L : 正常结果或异常 L->>H : 上报 timeout_warning(如触发) end L-->>L : 组装消息并继续下一轮

图示来源 - agent/src/agent/loop.py:502-800 - agent/tests/test_tool_timeout.py:42-100

章节来源 - agent/src/agent/loop.py:502-800 - agent/tests/test_tool_timeout.py:42-100

安全沙箱与资源限制

章节来源 - agent/tests/test_tool_registry_security.py:10-28 - agent/src/tools/bash_tool.py:16-84

工具接口规范、参数验证与返回值格式

章节来源 - agent/src/agent/tools.py:13-95 - agent/src/tools/bash_tool.py:16-84

内置工具分类与使用示例

[本节为概念性说明,不直接分析具体文件]

工具组合最佳实践

[本节为概念性说明,不直接分析具体文件]

依赖关系分析

graph LR Tools["工具实现<br/>src/tools/*"] --> Registry["注册表<br/>agent/tools.py"] Registry --> Loop["执行循环<br/>agent/loop.py"] Loop --> LLM["LLM 客户端"] Loop --> Config["配置中心"] Registry -.可选.-> MCP["MCP 远端工具"]

图示来源 - agent/src/agent/tools.py:54-95 - agent/src/agent/loop.py:502-800 - agent/src/tools/__init__.py:155-245

章节来源 - agent/src/tools/__init__.py:155-245 - agent/src/agent/tools.py:54-95 - agent/src/agent/loop.py:502-800

性能与资源限制

[本节为通用性能讨论,不直接分析具体文件]

故障排查指南

章节来源 - agent/tests/test_tool_timeout.py:42-100 - agent/tests/test_tool_registry_security.py:10-28 - agent/src/tools/bash_tool.py:16-84

结论

Vibe-Trading 的工具注册系统通过清晰的抽象、自动发现与动态加载、严格的沙箱与超时控制,以及可扩展的 MCP 集成,提供了安全、高效、可观测的工具执行基础设施。遵循本文的接口规范与实践建议,可快速扩展高质量工具并融入现有工作流。

[本节为总结性内容,不直接分析具体文件]

附录:开发指南与最佳实践

自定义工具编写步骤

章节来源 - agent/src/agent/tools.py:13-95 - agent/src/tools/__init__.py:33-63

测试方法

章节来源 - agent/tests/test_tool_timeout.py:42-100 - agent/tests/test_tool_registry_security.py:10-28

部署流程

章节来源 - agent/src/tools/__init__.py:155-245 - agent/src/agent/loop.py:106-120