回测运行列表

📎 引用文件

本文引用的文件 - runs_routes.py - models.py - ui_services.py - README_zh.md

目录

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

简介

本章节面向 Vibe-Trading 的“回测运行列表”API,聚焦 GET /runs 端点。该接口用于列出最近的回测运行记录(RunInfo),支持分页参数 limit,并返回每条运行的关键摘要信息,包括运行标识、状态、创建时间、提示词、收益与风险指标、标的代码及起止日期等。

项目结构

GET /runs 的实现位于后端 API 路由模块中,数据模型定义在共享模型文件中,运行上下文解析由 UI 服务模块提供。整体调用链为:HTTP 请求 -> FastAPI 路由 -> 读取 runs 目录与元数据 -> 组装 RunInfo 列表 -> 返回 JSON。

graph TB Client["客户端"] --> API["FastAPI 应用"] API --> Routes["runs_routes.list_runs"] Routes --> FS["文件系统<br/>runs/ 目录"] Routes --> UI["ui_services.load_run_context"] Routes --> Models["models.RunInfo"] FS --> |读取 state.json / artifacts / review_report.json| Routes UI --> |codes/start_date/end_date| Routes Routes --> Models Models --> Client

图表来源 - runs_routes.py:345-444 - models.py:42-54 - ui_services.py:100-146

章节来源 - runs_routes.py:345-444 - models.py:42-54 - ui_services.py:100-146

核心组件

章节来源 - runs_routes.py:23-49 - runs_routes.py:345-444 - models.py:42-54 - ui_services.py:100-146

架构总览

下图展示了 GET /runs 的核心处理流程:参数校验与限制、按目录倒序排序、逐条运行解析状态与时间戳、提取 prompt 与指标、加载上下文并构建 RunInfo 列表。

sequenceDiagram participant C as "客户端" participant R as "FastAPI 路由 list_runs" participant F as "文件系统" participant U as "ui_services.load_run_context" participant M as "models.RunInfo" C->>R : GET /runs?limit=... R->>R : 校验并限制 limit ∈ [1,100] R->>F : 读取 runs/ 目录并按名称倒序 loop 对每个 run_dir R->>F : 读取 state.json alt state.json 存在且 status 有效 R->>R : 设置 status else 不存在 R->>F : 检查 artifacts/equity.csv alt 存在 R->>R : status = success else 不存在 R->>F : 检查 review_report.json alt 存在 R->>R : status = success else R->>R : status = unknown end end end R->>R : 解析 created_atrun_id 格式 R->>F : 读取 req.json / planner_output.json / user_prompt.txt 获取 prompt R->>F : 读取 artifacts/metrics.csv 获取 total_return/sharpe R->>U : load_run_context(run_dir) U-->>R : {codes, start_date, end_date} R->>M : 构造 RunInfo end R-->>C : 返回 RunInfo[]

图表来源 - runs_routes.py:345-444 - ui_services.py:100-146 - models.py:42-54

详细组件分析

端点:GET /runs

章节来源 - runs_routes.py:345-354 - runs_routes.py:356-360

数据模型:RunInfo

章节来源 - models.py:42-54

运行状态判断逻辑

章节来源 - runs_routes.py:366-375

运行时间戳解析规则

章节来源 - runs_routes.py:376-393

Prompt 提取顺序

章节来源 - runs_routes.py:395-416

指标与上下文加载

章节来源 - runs_routes.py:417-442 - ui_services.py:84-97 - ui_services.py:100-146

类图:RunInfo 与其他模型的关系

classDiagram class RunInfo { +string run_id +string status +string created_at +string prompt +float total_return +float sharpe +string[] codes +string start_date +string end_date } class BacktestMetrics { +float final_value +float total_return +float annual_return +float max_drawdown +float sharpe +float win_rate +int trade_count } class Artifact { +string name +string path +string type +int size +bool exists } RunInfo <.. BacktestMetrics : "指标字段对应" RunInfo <.. Artifact : "列表接口不直接包含"

图表来源 - models.py:20-54

依赖关系分析

章节来源 - runs_routes.py:226-259 - runs_routes.py:345-444

性能考虑

故障排查指南

章节来源 - runs_routes.py:302-325 - runs_routes.py:366-393 - runs_routes.py:417-429

结论

GET /runs 提供了轻量而稳定的回测运行列表能力,通过严格的 limit 限制与健壮的状态推断逻辑,确保前端能够高效展示最近运行概览。RunInfo 模型清晰表达了关键字段,结合上下文解析与指标读取,满足常见的使用场景。

附录:请求与响应示例

章节来源 - runs_routes.py:345-354 - runs_routes.py:302-325 - README_zh.md:956-959