工具系统

📎 引用文件

本文引用的文件 - agent/src/tools/__init__.py - agent/src/agent/tools.py - agent/src/tools/market_data_tool.py - agent/src/tools/backtest_tool.py - agent/src/tools/factor_analysis_tool.py - agent/src/security/scanner.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 Vibe-Trading 工具系统,系统性阐述工具的注册机制、调用流程、参数校验与执行环境隔离;梳理内置工具的分类与能力(回测、市场数据、因子分析等);提供自定义工具开发范式(参数 schema 定义与返回值规范);说明安全控制(提示注入扫描、沙箱执行与权限管理);解释工具与 Agent 核心的集成方式(工具发现、动态加载、错误处理);并给出调试方法与性能监控建议。

项目结构

工具系统围绕“基类 + 注册表 + 自动发现”的架构组织: - 基类与注册表:定义统一的工具接口与集中式注册、查找与执行能力。 - 自动发现:按包内模块扫描,收集所有 BaseTool 子类并注册到 ToolRegistry。 - 工具实现:每个工具以独立模块形式存在,声明 name/description/parameters/repeatable/is_readonly,并实现 execute。 - 安全层:对外部内容做提示注入扫描与特殊 token 中和,保障下游 Agent 安全消费。

graph TB A["BaseTool<br/>统一接口"] --> B["ToolRegistry<br/>注册/查询/执行"] C["tools/__init__.py<br/>自动发现与构建"] --> B D["market_data_tool.py<br/>市场数据工具"] --> B E["backtest_tool.py<br/>回测工具"] --> B F["factor_analysis_tool.py<br/>因子分析工具"] --> B G["security/scanner.py<br/>安全扫描与中和"] -.-> D G -.-> E G -.-> F

图表来源 - agent/src/agent/tools.py:13-95 - agent/src/tools/__init__.py:33-63 - agent/src/tools/market_data_tool.py:11-104 - agent/src/tools/backtest_tool.py:77-95 - agent/src/tools/factor_analysis_tool.py:108-152 - agent/src/security/scanner.py:145-220

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

核心组件

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

架构总览

下图展示从 Agent 侧发起工具调用到具体工具执行的端到端流程,包括注册、发现、参数校验、执行与安全扫描。

sequenceDiagram participant Agent as "Agent 核心" participant Reg as "ToolRegistry" participant Tool as "具体工具(BaseTool)" participant Sec as "安全扫描器" Agent->>Reg : 获取工具定义(get_definitions) Reg-->>Agent : OpenAI函数schema列表 Agent->>Reg : 执行(name, params) Reg->>Tool : execute(**params) Tool->>Sec : 可选:对返回内容扫描/中和 Sec-->>Tool : 安全标记/修正 Tool-->>Reg : JSON字符串结果 Reg-->>Agent : 标准化JSON结果(含错误包装)

图表来源 - agent/src/agent/tools.py:68-84 - agent/src/security/scanner.py:177-220

详细组件分析

工具注册与发现机制

flowchart TD Start(["开始"]) --> Scan["扫描src/tools模块"] Scan --> Collect["收集BaseTool子类"] Collect --> Filter{"是否包含shell工具?"} Filter -- 否 --> SkipShell["跳过bash/background/cancel"] Filter -- 是 --> Register["实例化并注册"] SkipShell --> Register Register --> MergeMCP{"是否配置MCP服务器?"} MergeMCP -- 是 --> AppendMCP["追加远程工具(失败隔离)"] MergeMCP -- 否 --> Done(["完成"]) AppendMCP --> Done

图表来源 - agent/src/tools/__init__.py:33-63 - agent/src/tools/__init__.py:66-245

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

工具调用流程与参数验证

sequenceDiagram participant LLM as "LLM/Agent" participant Reg as "ToolRegistry" participant T as "MarketDataTool" LLM->>Reg : execute("get_market_data", {codes,start_date,end_date,...}) Reg->>T : execute(**kwargs) T-->>Reg : fetch_market_data_json(...) -> JSON Reg-->>LLM : 标准化JSON(成功或错误)

图表来源 - agent/src/agent/tools.py:72-84 - agent/src/tools/market_data_tool.py:11-104

章节来源 - agent/src/agent/tools.py:72-84 - agent/src/tools/market_data_tool.py:11-104

执行环境隔离与安全控制

flowchart TD A["外部内容进入工具"] --> B["scan_prompt_injection<br/>匹配规则集合"] B --> C{"命中规则?"} C -- 否 --> D["neutralize_special_tokens<br/>插入零宽空格破坏控制符"] C -- 是 --> D D --> E["with_security_warnings<br/>写入security_warnings"] E --> F["返回带安全标记的payload"]

图表来源 - agent/src/security/scanner.py:145-220

章节来源 - agent/src/tools/backtest_tool.py:15-74 - agent/src/security/scanner.py:145-220

内置工具分类与功能

章节来源 - agent/src/tools/backtest_tool.py:15-74 - agent/src/tools/market_data_tool.py:11-104 - agent/src/tools/factor_analysis_tool.py:19-105

自定义工具开发示例

章节来源 - agent/src/agent/tools.py:13-51 - agent/src/tools/market_data_tool.py:11-104 - agent/src/tools/backtest_tool.py:77-95 - agent/src/tools/factor_analysis_tool.py:108-152

与 Agent 核心的集成

章节来源 - agent/src/tools/__init__.py:33-63 - agent/src/tools/__init__.py:66-245 - agent/src/agent/tools.py:72-84

依赖关系分析

graph LR BT["BaseTool"] --> TR["ToolRegistry"] MDT["MarketDataTool"] --> TR BKT["BacktestTool"] --> TR FAT["FactorAnalysisTool"] --> TR SEC["Security Scanner"] -.-> MDT SEC -.-> BKT SEC -.-> FAT

图表来源 - agent/src/agent/tools.py:13-95 - agent/src/tools/market_data_tool.py:11-104 - agent/src/tools/backtest_tool.py:77-95 - agent/src/tools/factor_analysis_tool.py:108-152 - agent/src/security/scanner.py:177-220

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

性能考量

故障排查指南

章节来源 - agent/src/tools/__init__.py:33-63 - agent/src/agent/tools.py:72-84 - agent/src/tools/backtest_tool.py:15-74 - agent/src/tools/market_data_tool.py:11-104 - agent/src/tools/factor_analysis_tool.py:19-105 - agent/src/security/scanner.py:145-220

结论

Vibe-Trading 工具系统通过统一的 BaseTool 接口与 ToolRegistry 注册表,结合自动发现与动态加载,实现了高扩展性与易维护性。内置工具覆盖回测、市场数据与因子分析等核心场景,并通过安全扫描与沙箱执行保障稳定性与安全性。开发者可按规范快速扩展自定义工具,借助参数 schema 与标准返回格式与 Agent 无缝集成。

附录