服务发现与健康检查

📎 引用文件

本文引用的文件 - agent/src/preflight.py - agent/tests/test_preflight.py - agent/src/channelsui/gateway_services.py - agent/src/ui_services.py - agent/src/session/service.py - agent/src/config/env_schema.py

目录

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

简介

本文件聚焦 Vibe-Trading 的“服务发现与健康检查”机制,围绕启动前预检(preflight)、运行时健康探测、状态管理与告警阈值展开。内容涵盖: - 动态服务扫描与依赖关系管理:通过预检模块对 LLM 提供商、数据源与外部 API 进行连通性检测与可用性判定。 - 版本兼容性提示:基于配置与环境变量推断运行能力与限制。 - 健康检查实现:主动探测(HTTP/网络可达性)、被动监控(事件总线与任务生命周期)、阈值告警(内容过滤阈值等)。 - 预检机制(preflight):数据库连接、外部 API 可达性与资源配额检查的扩展方式。 - 服务状态管理:状态持久化、变更通知与恢复策略。 - 新增检查项:如何添加新的服务检查逻辑、配置告警规则与仪表板集成。 - 高可用实践:故障转移、负载均衡与服务编排建议。

项目结构

Vibe-Trading 将“启动前健康检查”集中在 preflight 模块,结合会话服务的事件总线与 UI 服务的数据聚合,形成从启动到运行时的健康观测闭环。

graph TB A["启动入口"] --> B["预检模块<br/>agent/src/preflight.py"] B --> C["LLM 提供商诊断<br/>provider_diagnostics()"] B --> D["外部 API 可达性<br/>OKX / yfinance / ccxt"] B --> E["可选依赖检测<br/>akshare / tushare"] B --> F["阈值报告<br/>内容过滤阈值"] G["会话服务<br/>agent/src/session/service.py"] --> H["事件总线<br/>SSE 事件"] I["UI 服务<br/>agent/src/ui_services.py"] --> J["运行阶段与指标读取"] K["网关服务<br/>agent/src/channelsui/gateway_services.py"] --> H

图表来源 - agent/src/preflight.py:265-318 - agent/src/session/service.py:158-246 - agent/src/ui_services.py:192-219 - agent/src/channelsui/gateway_services.py:254-293

章节来源 - agent/src/preflight.py:1-318 - agent/src/session/service.py:1-605 - agent/src/ui_services.py:1-640 - agent/src/channelsui/gateway_services.py:1-302

核心组件

章节来源 - agent/src/preflight.py:21-318 - agent/src/session/service.py:53-246 - agent/src/ui_services.py:192-219 - agent/src/channelsui/gateway_services.py:74-133

架构总览

下图展示了从启动预检到运行时健康监控的整体流程:预检模块在启动阶段探测各依赖;会话服务在执行过程中通过事件总线广播状态;UI 服务读取运行产物以呈现健康视图;网关服务为前端提供会话与工作区上下文。

sequenceDiagram participant Boot as "启动" participant Preflight as "预检模块" participant Provider as "LLM 提供商" participant DataAPI as "外部数据 API" participant Session as "会话服务" participant EventBus as "事件总线" participant UI as "UI 服务" Boot->>Preflight : 执行 run_preflight() Preflight->>Provider : 诊断连通性base_url/timeout/retries/proxy Preflight-->>Boot : 返回检查结果ready/error/not_configured/skipped Preflight->>DataAPI : 探测 OKX/yfinance/ccxt 可达性 DataAPI-->>Preflight : 响应或异常 Preflight-->>Boot : 输出健康表与关键失败提示 Boot->>Session : 创建会话/发送消息 Session->>EventBus : 发布 attempt.started/completed/failed/cancelled Session-->>UI : 运行阶段与指标通过 UI 服务读取 UI-->>Boot : 渲染健康面板与运行详情

图表来源 - agent/src/preflight.py:32-134 - agent/src/preflight.py:137-252 - agent/src/session/service.py:158-246 - agent/src/ui_services.py:192-219

详细组件分析

预检模块(Preflight)

flowchart TD Start(["开始"]) --> LLM["检查 LLM 提供商"] LLM --> OKX["检查 OKX API"] OKX --> YF["检查 yfinance"] YF --> TS["检查 Tushare"] TS --> AK["检查 akshare"] AK --> CCXT["检查 ccxt"] CCXT --> CF["检查内容过滤阈值"] CF --> Table["生成结果表"] Table --> Critical{"有关键失败?"} Critical --> |是| Block["阻断启动并提示"] Critical --> |否| Ready["统计就绪数量并继续"] Block --> End(["结束"]) Ready --> End

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

章节来源 - agent/src/preflight.py:1-318 - agent/tests/test_preflight.py:1-120

会话服务(SessionService)

sequenceDiagram participant Client as "客户端" participant Service as "会话服务" participant Store as "存储" participant Bus as "事件总线" participant Agent as "AgentLoop" Client->>Service : send_message(session_id, content) Service->>Store : 追加消息/创建尝试 Service->>Bus : 发布 message.received / attempt.created Service->>Agent : 后台执行尝试 Agent-->>Service : 返回结果status/metrics/run_dir Service->>Store : 更新尝试状态/写入回复消息 Service->>Bus : 发布 attempt.completed/failed/cancelled Service-->>Client : 返回 message_id / attempt_id

图表来源 - agent/src/session/service.py:158-246 - agent/src/session/service.py:248-345 - agent/src/session/service.py:346-440

章节来源 - agent/src/session/service.py:1-605

UI 服务(UI Services)

章节来源 - agent/src/ui_services.py:192-219 - agent/src/ui_services.py:222-254 - agent/src/ui_services.py:355-486

网关服务(GatewayServices)

章节来源 - agent/src/channelsui/gateway_services.py:74-133 - agent/src/channelsui/gateway_services.py:153-168 - agent/src/channelsui/gateway_services.py:171-224 - agent/src/channelsui/gateway_services.py:227-293

依赖关系分析

graph LR Preflight["预检模块"] --> Config["配置访问器"] Preflight --> Providers["LLM 提供商诊断"] Preflight --> External["外部 API/库"] Session["会话服务"] --> Store["存储"] Session --> Bus["事件总线"] Session --> Tools["工具与模型"] UI["UI 服务"] --> FS["文件系统"] UI --> Data["数据处理"] Gateway["网关服务"] --> WS["WebSocket 通道"] Gateway --> Workspace["工作区作用域"]

图表来源 - agent/src/preflight.py:18-318 - agent/src/session/service.py:158-440 - agent/src/ui_services.py:100-486 - agent/src/channelsui/gateway_services.py:74-293

章节来源 - agent/src/preflight.py:1-318 - agent/src/session/service.py:1-605 - agent/src/ui_services.py:1-640 - agent/src/channelsui/gateway_services.py:1-302

性能考量

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

故障排查指南

章节来源 - agent/src/preflight.py:32-134 - agent/src/preflight.py:137-252 - agent/src/session/service.py:158-246 - agent/src/ui_services.py:222-254

结论

Vibe-Trading 通过预检模块在启动阶段快速定位关键依赖的健康状况,并结合会话服务的事件总线与 UI 服务的运行状态聚合,形成完整的健康观测体系。该设计具备良好的可扩展性:新增检查项只需遵循 CheckResult 规范并接入 run_preflight;告警阈值可通过环境变量配置;仪表板集成则依赖事件总线与 UI 服务的数据接口。在高可用方面,建议配合故障转移、负载均衡与服务编排的最佳实践,进一步提升系统的稳定性与可维护性。

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

附录

如何添加新的服务检查项

章节来源 - agent/src/preflight.py:21-318 - agent/tests/test_preflight.py:1-120

健康检查阈值与配置

章节来源 - agent/src/config/env_schema.py:332-359

高可用最佳实践

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