故障排除

📎 引用文件

本文引用的文件 - agent/src/preflight.py - agent/api_server.py - agent/src/config/env_schema.py - agent/src/core/runner.py - agent/backtest/loaders/base.py - agent/src/channels/telegram.py - agent/src/tools/alpha_bench_tool.py - frontend/src/components/layout/ConnectionBanner.tsx - desktop/electron/src/backend-manager.ts - agent/tests/test_okx_loader_bounded.py - agent/tests/test_error_path_redaction.py

目录

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

简介

本故障排除文档面向 Vibe-Trading 的安装、配置、网络连接与性能问题,提供系统化的诊断方法与解决步骤。内容覆盖: - 启动预检机制与关键依赖健康检查 - 日志采集与分析(后端、前端、SSE、通道) - 网络重试、超时与预算控制 - 内存与资源限制(沙箱子进程) - 调试工具与集成点(API、桌面端、数据源) - 常见故障场景与修复建议

项目结构

Vibe-Trading 由后端 API 服务、Agent 运行器、数据加载器、消息通道、前端界面与桌面端组成。故障排除的关键入口包括: - 启动预检:在 API 服务启动时执行,输出各依赖就绪状态 - 运行器:以受限环境执行回测脚本,收集日志与产物 - 数据加载器:统一的重试与预算控制,避免网络抖动影响 - 通道层:如 Telegram 的发送重试与错误格式化 - 前端连接状态:SSE 重连提示与终端断线处理 - 桌面端守护:后端进程生命周期与错误上报

graph TB A["API 服务<br/>api_server.py"] --> B["启动预检<br/>preflight.py"] A --> C["运行器<br/>core/runner.py"] C --> D["数据加载器重试<br/>backtest/loaders/base.py"] A --> E["通道层<br/>channels/telegram.py"] F["前端界面<br/>ConnectionBanner.tsx"] --> A G["桌面端守护<br/>backend-manager.ts"] --> A

图示来源 - agent/api_server.py:127-143 - agent/src/preflight.py:265-318 - agent/src/core/runner.py:503-620 - agent/backtest/loaders/base.py:184-215 - agent/src/channels/telegram.py:860-880 - frontend/src/components/layout/ConnectionBanner.tsx:10-43 - desktop/electron/src/backend-manager.ts:197-219

章节来源 - agent/api_server.py:127-143 - agent/src/preflight.py:265-318

核心组件

章节来源 - agent/src/preflight.py:32-134 - agent/src/core/runner.py:372-620 - agent/backtest/loaders/base.py:184-215 - agent/src/channels/telegram.py:860-880 - frontend/src/components/layout/ConnectionBanner.tsx:10-43 - desktop/electron/src/backend-manager.ts:197-219

架构总览

下图展示从 API 启动到数据获取、通道通知与前端反馈的整体流程,以及关键故障点与重试策略。

sequenceDiagram participant Client as "客户端" participant API as "API 服务" participant Preflight as "启动预检" participant Runner as "运行器" participant Loader as "数据加载器" participant Channel as "通道(如Telegram)" participant Frontend as "前端" Client->>API : 启动请求 API->>Preflight : 执行预检 Preflight-->>API : 返回检查结果 API-->>Client : 服务就绪/告警 Client->>API : 触发回测/数据任务 API->>Runner : 执行脚本(沙箱化) Runner->>Loader : 拉取数据(带重试/预算) Loader-->>Runner : 结果或超时错误 Runner-->>API : 日志+产物 API->>Channel : 发送通知(重试/限流) Channel-->>API : 成功/失败 API-->>Frontend : SSE 推送状态 Frontend-->>Client : 连接状态提示

图示来源 - agent/api_server.py:127-143 - agent/src/preflight.py:265-318 - agent/src/core/runner.py:503-620 - agent/backtest/loaders/base.py:184-215 - agent/src/channels/telegram.py:860-880 - frontend/src/components/layout/ConnectionBanner.tsx:10-43

详细组件分析

启动预检与关键依赖诊断

flowchart TD Start(["启动预检"]) --> CheckLLM["检查 LLM 提供商"] CheckLLM --> |未配置| LLMWarn["警告: 缺少 provider/model"] CheckLLM --> |已配置| PingURL["Ping base URL / OAuth 状态"] PingURL --> |失败| LLMError["错误: 无法连接"] PingURL --> |成功| LLMReady["就绪"] CheckLLM --> CheckData["检查数据源(OKX/yfinance/Tushare/akshare/ccxt)"] CheckData --> DataReady["就绪/跳过/错误"] LLMReady --> End(["完成"]) LLMError --> End DataReady --> End

图示来源 - agent/src/preflight.py:32-134 - agent/src/preflight.py:137-253 - agent/src/preflight.py:265-318

章节来源 - agent/src/preflight.py:32-134 - agent/src/preflight.py:137-253 - agent/src/preflight.py:265-318

运行器与沙箱安全

classDiagram class Runner { +timeout int +execute(entry_script, run_dir, cwd, cli_args) RunResult -_build_runtime_env(run_dir, pythonpath_extra) dict -_run_sandboxed(cmd, run_kwargs) CompletedProcess -_pick_python_interpreter() str } class RunResult { +success bool +exit_code int +stdout str +stderr str +artifacts dict } Runner --> RunResult : "返回"

图示来源 - agent/src/core/runner.py:372-620

章节来源 - agent/src/core/runner.py:372-620

数据加载器的重试与预算控制

flowchart TD S(["开始"]) --> Try["调用 fn()"] Try --> Ok{"成功?"} Ok --> |是| Return["返回结果"] Ok --> |否| Budget{"剩余预算>0?"} Budget --> |否| Wrap["包装为 TimeoutError"] Budget --> |是| Backoff["计算退避=min(backoff, 剩余预算)"] Backoff --> Sleep["sleep 退避时间"] Sleep --> Try Wrap --> End(["结束"]) Return --> End

图示来源 - agent/backtest/loaders/base.py:184-215 - agent/tests/test_okx_loader_bounded.py:85-122

章节来源 - agent/backtest/loaders/base.py:184-215 - agent/tests/test_okx_loader_bounded.py:85-122

通道层错误处理与重试(以 Telegram 为例)

sequenceDiagram participant App as "应用" participant TG as "Telegram 通道" App->>TG : 发送消息 TG->>TG : 尝试发送 alt 超时 TG-->>App : 记录警告并重试(指数退避) else 限流 TG-->>App : 记录警告并重试(按 retry_after) else 成功 TG-->>App : 返回成功 end

图示来源 - agent/src/channels/telegram.py:860-880 - agent/src/channels/telegram.py:1591-1620

章节来源 - agent/src/channels/telegram.py:860-880 - agent/src/channels/telegram.py:1591-1620

前端连接状态与重连提示

stateDiagram-v2 [*] --> 已连接 已连接 --> 重连中 : "SSE 断开" 重连中 --> 已连接 : "重连成功" 重连中 --> 已断开 : "重试次数≥5" 已断开 --> 已连接 : "用户刷新页面"

图示来源 - frontend/src/components/layout/ConnectionBanner.tsx:10-43

章节来源 - frontend/src/components/layout/ConnectionBanner.tsx:10-43

桌面端守护与后端生命周期

章节来源 - desktop/electron/src/backend-manager.ts:197-219

依赖关系分析

graph LR API["API 服务"] --> Preflight["预检"] API --> Runner["运行器"] Runner --> Loader["数据加载器"] API --> Channel["通道层"] Frontend["前端"] --> API Desktop["桌面端"] --> API

图示来源 - agent/api_server.py:127-143 - agent/src/core/runner.py:503-620 - agent/backtest/loaders/base.py:184-215 - agent/src/channels/telegram.py:860-880 - frontend/src/components/layout/ConnectionBanner.tsx:10-43 - desktop/electron/src/backend-manager.ts:197-219

章节来源 - agent/api_server.py:127-143 - agent/src/core/runner.py:503-620

性能注意事项

[本节为通用指导,无需特定文件引用]

故障排查指南

安装问题

章节来源 - agent/src/preflight.py:165-253 - agent/src/config/env_schema.py:153-198

配置问题

章节来源 - agent/src/preflight.py:32-134 - agent/src/config/env_schema.py:122-146

网络连接问题

章节来源 - agent/backtest/loaders/base.py:184-215 - agent/src/channels/telegram.py:860-880 - agent/tests/test_okx_loader_bounded.py:85-122

性能问题

章节来源 - agent/src/core/runner.py:33-111 - agent/src/core/runner.py:503-620

内存分析与调试

章节来源 - agent/src/core/runner.py:33-111

网络调试

章节来源 - frontend/src/components/layout/ConnectionBanner.tsx:10-43 - desktop/electron/src/backend-manager.ts:197-219

调试工具与日志分析

章节来源 - agent/src/preflight.py:265-318 - agent/src/core/runner.py:503-620 - agent/src/channels/telegram.py:1591-1620 - desktop/electron/src/backend-manager.ts:197-219

与其他组件的调试集成

章节来源 - agent/api_server.py:127-143 - desktop/electron/src/backend-manager.ts:197-219 - frontend/src/components/layout/ConnectionBanner.tsx:10-43

常见故障场景与解决方案

章节来源 - agent/src/preflight.py:32-134 - agent/backtest/loaders/base.py:184-215 - agent/src/channels/telegram.py:860-880 - frontend/src/components/layout/ConnectionBanner.tsx:10-43

结论

Vibe-Trading 提供了完善的启动预检、沙箱化执行、有界重试与预算控制、通道层错误处理与前端连接状态提示。通过这些机制,大多数安装、配置、网络与性能问题可快速定位与解决。建议结合预检输出、运行器日志、通道日志与桌面端守护日志进行综合诊断,并根据实际场景调整超时、预算与资源限制参数。

附录

章节来源 - agent/src/config/env_schema.py:1-200 - agent/tests/test_okx_loader_bounded.py:85-122 - agent/tests/test_error路径脱敏.py:81-104