快圈 — 技术文档

本页只保留业务后端集成摘要。完整且最新的外部接口规范以 docs/遥测数据分析API列表.docx 为准。


数据流转

  1. 前端上传 VBO,业务后端将原始文件写入对象存储并获得可下载的 file_url。
  2. 业务后端同步调用分析引擎 API 1,等待 metadata 与两圈 telemetry_data 返回。
  3. telemetry_data 整包转存为 JSON 文件放到对象存储(向后兼容,节次详情页使用)。
  4. 同时将 telemetry_data.laps 中每圈单独存为 JSON 文件,每圈的 OSS URL 写入 lap_summaries JSONB 的 telemetry_url 字段。
  5. metadata + lap_summaries(含 telemetry_url)写入关系型数据库。
  6. 详情页做圈层对比时调用 API 2,传入单圈 URL;生成 PDF 报告时调用 API 3.1 或 API 3.2。
高频遥测数组严禁直接塞入 PostgreSQL/MySQL。数据库只保存 telemetry 文件 URL(整包 URL 存 telemetry_data_url 列,单圈 URL 存 lap_summaries JSONB),否则会造成主库容量和查询性能问题。

API 接口

以下端点均由业务后端调用,前端不得直接请求外部分析引擎。供应商规范中 API 1 与 API 3 使用 v2,API 2 当前为 v1。

API 1 — 核心遥测与 AI 分析引擎

POST/api/v2/engine/analyze-vbo
字段类型必填说明
file_urlstring对象存储中的原始 VBO 文件 URL
context.vehicle_typestring车辆型号,供 AI 评价参考
{
  "file_url": "https://your-s3-bucket.com/raw-vbo/session_123.vbo",
  "context": {
    "vehicle_type": "Porsche 911 GT3 RS"
  }
}
字段类型必填说明
statusstring成功固定返回 "success"
data.metadata.session_info.session_time_utcstringVBO GPS 提取的绝对 UTC 时间,用于后端查询天气
data.metadata.session_info.track_idstring分析引擎识别出的赛道 ID
data.metadata.session_info.track_namestring分析引擎识别出的赛道名称
data.metadata.ai_evaluation.summary_textstringAI 驾驶评语
data.metadata.ai_evaluation.radar_scores.driving_technologyobject驾驶技术评分 key-value;当前按规范使用 Braking、Throttle
data.metadata.ai_evaluation.radar_scores.vehicle_performanceobject车辆性能评分 key-value;当前按规范使用 Grip、Aero、Handling
data.metadata.lap_summariesarray固定返回 actual_best 与 theoretical_best 两圈摘要
data.metadata.lap_summaries[].segmentation.indicesnumber[]赛道分段索引,用于 API 2 和前端地图联动
data.telemetry_data.lapsarray两圈高频遥测数据,业务后端需转存到对象存储
{
  "status": "success",
  "data": {
    "metadata": {
      "session_info": {
        "session_time_utc": "2026-04-03T06:30:00Z",
        "track_id": "TRK_SHANGHAI_GP_001",
        "track_name": "Shanghai International Circuit"
      },
      "ai_evaluation": {
        "summary_text": "入弯刹车点控制极佳...",
        "radar_scores": {
          "driving_technology": {
            "Braking": 85.34,
            "Throttle": 90.0
          },
          "vehicle_performance": {
            "Grip": 88.5,
            "Aero": 78.45,
            "Handling": 85
          }
        }
      },
      "lap_summaries": [
        {
          "lap_id": "lap_actual_best",
          "lap_type": "actual_best",
          "lap_time_ms": 135340,
          "max_speed_kph": 265.4,
          "segmentation": { "indices": [0, 320, 580, 890, 1150, 1200] }
        }
      ]
    },
    "telemetry_data": {
      "laps": [
        {
          "lap_id": "lap_actual_best",
          "channels": {
            "time": [0.0, 0.1],
            "lat": [31.3389, 31.3390],
            "lon": [121.2197, 121.2198],
            "speed": [82.1, 84.6]
          }
        }
      ]
    }
  }
}
引擎返回的评分维度 key 由引擎自行定义,当前规范:驾驶维度 car_control、line_precision、braking_technique、consistency;车辆维度 handling、agility、power、braking_power。数据库 score_dimensions 表需与之保持一致。

API 2 — 空间映射与圈层对比

POST/api/v1/engine/compare-laps
字段类型必填说明
reference_lap.telemetry_urlstring参考圈遥测 JSON 文件 URL
reference_lap.segment_indicesnumber[]参考圈分段索引,来自 API 1 metadata
comparison_lap.telemetry_urlstring对比圈遥测 JSON 文件 URL
{
  "reference_lap": {
    "telemetry_url": "https://s3.example.com/lap_actual_best.json",
    "segment_indices": [0, 320, 580, 890, 1150, 1200]
  },
  "comparison_lap": {
    "telemetry_url": "https://s3.example.com/lap_12.json"
  }
}
字段类型必填说明
data.reference_index_lengthnumber参考圈数组长度,用作前端图表 X 轴总刻度
data.segment_analysisarray分段时间差与速度差,用于地图分段染色和悬浮卡片
data.continuous_data.delta_timenumber[]秒差曲线,对比圈时间 - 参考圈时间
data.continuous_data.mapped_comparison_telemetryobject按参考圈 index 重采样后的对比圈遥测数组

API 3.1 — 节次深度分析报告

POST/api/v2/engine/reports/session-summary
字段类型必填说明
file_urlstring原始 VBO 文件 URL
context.driver_namestring用于 PDF 页眉或封面
context.vehicle_namestring用于 PDF 封面
context.track_namestring用于 PDF 封面
context.report_languagestring报告语言,如 zh-CN
成功响应为 application/pdf 二进制流;失败响应为 application/json。

API 3.2 — 深度对比分析报告

POST/api/v2/engine/reports/lap-comparison
字段类型必填说明
reference_lap.telemetry_urlstring参考圈遥测 JSON 文件 URL
reference_lap.lap_time_textstring参考圈圈速展示文本
reference_lap.segment_indicesnumber[]参考圈分段索引,必须和 API 1 返回保持一致
comparison_lap.telemetry_urlstring对比圈遥测 JSON 文件 URL
comparison_lap.lap_time_textstring对比圈圈速展示文本
成功响应为 application/pdf 二进制流;业务后端负责计费、调用引擎、转存 PDF、再把下载 URL 返回给前端。

异常处理

字段类型必填说明
400 / 422HTTP文件 URL 无法访问、下载失败或 VBO 格式非法
404HTTPVBO GPS 坐标无法匹配到已知赛道
500HTTPAI 评估、解析算法或 PDF 生成失败
{
  "status": "failed",
  "error": {
    "code": "TRACK_UNRECOGNIZED",
    "message": "The GPS coordinates in the VBO file do not match any known track."
  }
}

基础设施采购清单(阿里云)

以下为在阿里云华东 2(上海)地域部署完整系统所需的云服务、选购时的具体配置项及参考价格(2026-04)。

1. ECS 云服务器

前往采购 →

运行 Next.js 业务后端 + Python VBO 分析引擎,两个服务同机部署。

字段类型必填说明
付费模式选择包年包月(新用户年付最优惠)
地域 / 可用区选择华东 2(上海),任选一个可用区
实例规格选择通用型 g7 或 u1,4 核 CPU / 8GB 内存
操作系统选择Ubuntu 22.04 LTS 64 位(和 macOS 最接近的 Linux,包管理器 apt 与 Homebrew 类似)
系统盘选择ESSD Entry,80GB(够用,后续可在线扩容)
公网带宽选择按固定带宽 5Mbps(小规模足够,大流量时走 CDN)
安全组选择开放 22(SSH)、80(HTTP)、443(HTTPS)、3000(调试用,上线后关闭)
登录凭证选择选「密钥对」而非密码,Mac 终端可直接 ssh -i 登录

参考价格:¥400–500/年(新用户首年)

2. RDS PostgreSQL 数据库

前往采购 →

存储用户、赛道、节次、成绩、积分等全部业务数据。

字段类型必填说明
系列选择基础版(单节点,初期够用;上线后可一键升级高可用版)
数据库引擎选择PostgreSQL 16(和本地开发版本一致)
实例规格选择2 核 CPU / 4GB 内存
存储空间选择100GB ESSD(按需扩容,无需停机)
地域 / 可用区选择华东 2(上海),与 ECS 同可用区(内网互通,延迟最低)
网络类型选择专有网络 VPC(和 ECS 放在同一个 VPC 下)
白名单配置添加 ECS 内网 IP,禁止公网直连(用 SSH 隧道从 Mac 管理)

参考价格:¥118/年(新用户首年)

迁移方式:Supabase 控制台导出 pg_dump → RDS 控制台导入,然后把 .env 里的 DATABASE_URL 换成 RDS 内网地址即可。

3. OSS 对象存储

前往采购 →

存储 VBO 原始文件、遥测 JSON(整包 + 单圈)、PDF 报告、用户头像等二进制资源。替代当前的 Supabase Storage。

字段类型必填说明
Bucket 地域选择华东 2(上海),与 ECS/RDS 同地域
存储类型选择标准存储(热数据,随时读取)
读写权限选择私有(通过后端签名 URL 或 CDN 鉴权访问)
资源包选择40GB 存储包(初期足够,超出按 ¥0.09/GB/月 计费)
Bucket 数量建议建 3 个:telemetry-vbo(原始文件)、telemetry-json(遥测 JSON)、reports-pdf(报告)

参考价格:¥9/年(40GB 资源包),上传免费,下载流量走 CDN

迁移改动仅 1 个文件 src/lib/storage/supabase.ts,将 Supabase REST 调用替换为 OSS SDK(@ali-oss/client),接口返回格式不变,调用方无需修改。

4. CDN 内容分发

前往采购 →

加速 OSS 文件下载(遥测 JSON、PDF 报告),同时降低 OSS 直出流量费用。

字段类型必填说明
加速域名配置如 cdn.kuaiquan.cn,CNAME 指向阿里云分配的域名
源站配置选择 OSS 域名作为源站(控制台有一键关联)
资源包选择100GB / 半年流量包

参考价格:¥6/半年(100GB 流量包)

5. SSL 证书

前往采购 →
字段类型必填说明
证书类型选择免费个人测试证书(DV 单域名),每账号每年 20 张
有效期说明90 天,到期前在控制台续签即可(免费)
部署位置配置下载证书文件,配置到 ECS 上的 Nginx

参考价格:¥0

费用汇总

服务新用户首年
ECS 4 核 8GB¥400–500
RDS PostgreSQL¥118
OSS 40GB 资源包¥9
CDN 100GB 流量包¥12
SSL 证书¥0
合计~¥540–640/年
价格为新用户首年优惠价,以阿里云官网实际结算为准。所有服务选同一地域(华东 2 上海)、同一 VPC,确保内网互通。续费价格会显著上涨。
快圈 Doc · Source: docs/遥测数据分析API列表.docx