架构设计

📎 引用文件

本文引用的文件 - README.md - pyproject.toml - Dockerfile - docker-compose.yml - agent/api_server.py - agent/mcp_server.py - frontend/package.json - frontend/vite.config.ts - frontend/src/router.tsx - agent/src/api/security.py - agent/src/providers/capabilities.py

目录

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

简介

Vibe-Trading 是一个以自然语言驱动的金融研究 AI 智能体系统,提供回测、因子库、多市场数据接入、实时通道(IM/邮件/WebSocket)、MCP 工具服务与 Web UI。系统采用前后端分离、微服务化部署(API + MCP + 可选前端开发服务),并通过插件化的技能/策略/连接器扩展能力;同时引入事件驱动(SSE/WS)与可插拔 LLM Provider 能力层,形成“研究—验证—交付”的闭环工作流。

项目结构

仓库按领域分层组织: - 后端 API(FastAPI):统一入口、安全中间件、路由模块化、会话/运行/通道/设置/上传/Swarm/实盘等模块 - MCP Server:面向外部客户端的工具总线,暴露研究、回测、数据、Swarm、交易读取等工具 - 前端(React/Vite):SPA,懒加载页面,代理到后端 API - 基础设施:Docker/Docker Compose 构建镜像、容器编排、只读根文件系统、资源限制、健康检查 - 配置与依赖:Python 包元数据、可选 extras、前端工程配置

graph TB subgraph "前端" FE["React SPA<br/>Vite 构建"] end subgraph "后端" API["FastAPI 服务<br/>api_server.py"] SEC["安全中间件<br/>security.py"] ROUTES["路由模块<br/>sessions/runs/swarm/live/settings/channels/upload/system/qveris"] MCP["MCP Server<br/>mcp_server.py"] end subgraph "外部集成" LLM["LLM Providers<br/>capabilities.py"] DATA["数据源/连接器<br/>yfinance/akshare/ccxt/tushare/..."] BROKER["券商连接器<br/>IBKR/Alpaca/OKX/Binance/Futu/Longbridge/MT5/..."] end FE --> API API --> SEC API --> ROUTES API --> MCP MCP --> LLM API --> DATA API --> BROKER

图表来源 - agent/api_server.py:163-303 - agent/mcp_server.py:69-117 - frontend/vite.config.ts:21-51 - agent/src/providers/capabilities.py:157-200

章节来源 - agent/api_server.py:163-303 - frontend/vite.config.ts:21-51 - frontend/src/router.tsx:48-66

核心组件

章节来源 - agent/api_server.py:127-183 - agent/src/api/security.py:166-200 - agent/mcp_server.py:131-316 - frontend/src/router.tsx:48-66

架构总览

系统采用“前后端分离 + 微服务 + 插件化 + 事件驱动”的组合模式: - 前后端分离:前端通过 Vite 构建并静态托管,开发期通过代理转发至后端 API - 微服务:API 服务与 MCP 服务解耦,前者承载 Web/UI/REST/SSE,后者暴露工具给任意 MCP 客户端 - 插件化:技能(skills)、因子(factors/zoo)、连接器(broker/data loaders)、Provider(LLM)均可插拔 - 事件驱动:SSE/WS 用于会话流、Swarm 状态、通道消息等实时交互

sequenceDiagram participant U as "用户浏览器" participant FE as "前端 SPA" participant API as "FastAPI" participant SEC as "安全中间件" participant R as "路由模块" participant M as "MCP Server" participant P as "LLM Providers" participant D as "数据/连接器" U->>FE : 打开 /agent FE->>API : GET /sessions (或 POST 发送消息) API->>SEC : 校验 Host/Origin/CORS/票据 SEC-->>API : 通过 API->>R : 路由处理(会话/运行/通道/设置/上传/...) R->>M : 调用工具(如 backtest/factor_analysis) M->>P : 调用 LLM(带能力适配) M->>D : 拉取行情/基本面/新闻 D-->>M : 结构化数据 P-->>M : 模型输出/推理内容 M-->>R : 工具结果 R-->>API : SSE/JSON 响应 API-->>FE : 流式/分页结果 FE-->>U : 渲染聊天/图表/报告

图表来源 - agent/api_server.py:163-303 - agent/mcp_server.py:69-117 - agent/src/api/security.py:166-200

详细组件分析

后端 API 服务(FastAPI)

flowchart TD Start(["API 启动"]) --> Preflight["预检与迁移"] Preflight --> Middleware["挂载中间件<br/>CORS/安全头/环回守卫"] Middleware --> Routes["注册路由模块"] Routes --> Serve["启动 Uvicorn 服务"] Serve --> Shutdown{"收到关闭信号?"} Shutdown -- 否 --> Serve Shutdown -- 是 --> Stop["停止通道/计划任务"] Stop --> End(["退出"])

图表来源 - agent/api_server.py:127-183 - agent/api_server.py:187-303 - agent/api_server.py:321-395

章节来源 - agent/api_server.py:127-183 - agent/api_server.py:187-303 - agent/api_server.py:321-395

MCP 服务器(工具总线)

classDiagram class FastMCP { +http_app() +tool() } class HostGuardMiddleware { +__call__() } class OriginGuardMiddleware { +__call__() } class ToolRegistry { +build_registry() +execute(name, params) } class GoalStore { +replace_goal() +append_evidence() +update_status() } FastMCP --> HostGuardMiddleware : "ASGI 中间件" FastMCP --> OriginGuardMiddleware : "ASGI 中间件" FastMCP --> ToolRegistry : "注册/执行工具" FastMCP --> GoalStore : "研究目标管理"

图表来源 - agent/mcp_server.py:131-316 - agent/mcp_server.py:319-344 - agent/mcp_server.py:411-457

章节来源 - agent/mcp_server.py:131-316 - agent/mcp_server.py:319-344 - agent/mcp_server.py:411-457

前端 SPA(React + Vite)

flowchart TD DevStart["npm run dev"] --> Proxy["Vite 代理规则<br/>/auth,/sessions,/swarm,..."] Proxy --> API["后端 API 服务"] Build["npm run build"] --> Dist["前端静态产物"] Dist --> Serve["后端静态托管或 CDN"]

图表来源 - frontend/vite.config.ts:21-51 - frontend/package.json:9-15

章节来源 - frontend/vite.config.ts:21-51 - frontend/package.json:9-15 - frontend/src/router.tsx:48-66

安全与鉴权

章节来源 - agent/src/api/security.py:30-116 - agent/src/api/security.py:166-200 - agent/mcp_server.py:131-316

事件驱动与通道

章节来源 - agent/api_server.py:127-150 - agent/api_server.py:235-253

技术栈与版本兼容性

章节来源 - pyproject.toml:1-69 - pyproject.toml:105-223 - frontend/package.json:1-58 - Dockerfile:1-108 - docker-compose.yml:1-90

依赖关系分析

graph LR API["API 服务"] --> |路由| Modules["会话/运行/Swarm/实盘/设置/上传/系统/QVeris"] API --> |SSE/WS| Channels["通道运行时"] API --> |工具调用| MCP["MCP Server"] MCP --> |能力适配| Providers["LLM Providers"] API --> |数据/订单| Connectors["数据/券商连接器"]

图表来源 - agent/api_server.py:187-303 - agent/mcp_server.py:69-117 - agent/src/providers/capabilities.py:157-200

章节来源 - agent/api_server.py:187-303 - agent/mcp_server.py:69-117 - agent/src/providers/capabilities.py:157-200

性能考虑

[本节为通用指导,不直接分析具体文件]

故障排查指南

章节来源 - agent/api_server.py:127-183 - agent/src/api/security.py:166-200 - agent/mcp_server.py:131-316 - docker-compose.yml:1-90

结论

Vibe-Trading 通过前后端分离、微服务化、插件化与事件驱动,构建了可扩展、可审计、可交付的金融研究平台。其安全设计覆盖 CORS/CSRF/Host/Origin/SSE 票据与 Shell 工具门控;部署层面采用容器化与资源限制保障稳定性;扩展面涵盖 LLM Provider、数据源与券商连接器,满足多市场、多场景的研究与回测需求。

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

附录

[本节为通用指导,不直接分析具体文件]