0003-系统架构与工程规范基线 » 历史记录 » 版本 1
Huarui Lin, 2026-04-12 17:10
| 1 | 1 | Huarui Lin | # 系统架构与工程规范基线 |
|---|---|---|---|
| 2 | |||
| 3 | > **文档属性**:技术真相源 |
||
| 4 | > **同步规则**:若 `src/` 下的架构发生变更,此文档必须同步更新,否则将触发 CI 软预警。 |
||
| 5 | |||
| 6 | ## 1. 计算引擎防火墙 |
||
| 7 | |||
| 8 | 系统数据处理严格遵循 `DuckDB ↔ Polars` 职责防火墙,这是防止 OOM 和性能劣化的核心铁律: |
||
| 9 | |||
| 10 | | 引擎 | 职责边界 | 严禁事项 | |
||
| 11 | | :--- | :--- | :--- | |
||
| 12 | | **DuckDB** | Parquet 读写、跨表 JOIN(如关联 fund_basic_info)、行列过滤、COUNT/SUM 审计 | **严禁**执行任何滚动窗口函数(如 `rolling`、`window` 子句) | |
||
| 13 | | **Polars** | 滚动窗口计算、EWM 指数加权、截面 Z-Score、标签向量化生成、共线性筛选 | 严禁直接读取多年份大表,必须按年份串行提取 Arrow | |
||
| 14 | |||
| 15 | **内存安全底线**:DuckDB → Polars 的数据交割,单次 Arrow 转换必须 ≤ 单年数据量(约 300 万行)。 |
||
| 16 | |||
| 17 | ## 2. 全局工程约束 |
||
| 18 | |||
| 19 | - **依赖隔离**:全局严禁显式 `import pandas`(仅允许 LightGBM `.fit()` 内部隐式调用)。CI 层已部署 AST 级拦截红线。 |
||
| 20 | - **消除魔法数字**:所有涉及业务逻辑的参数(如 150周、20%止盈、0.90共线性阈值)必须声明于 `config/config.yaml`。代码中仅允许存在 `0, 1, -1` 等基础索引数字。CI 层已部署 AST 扫描红线。 |
||
| 21 | - **类型约束**:所有自定义函数必须具备完整的 Python Type Hints(参数类型 + 返回值类型)。 |
||
| 22 | |||
| 23 | ## 3. 双轨制协作体系 |
||
| 24 | |||
| 25 | 本项目采用 Redmine(管理中枢) + Gitea(技术真相)双轨制,杜绝文档与代码脱节: |
||
| 26 | |||
| 27 | - **Gitea (技术侧)**:所有架构设计、数据流向、特征字典必须以 Markdown 形式沉淀在仓库根目录的 `/docs` 下,与代码同版本回溯。 |
||
| 28 | - **Redmine (管理侧)**:任务的拆解以交付物为导向。规约条款被拆解为 Redmine 任务的【自定义字段-验收标准】,开发人员不得自行降低验收标准。 |
||
| 29 | - **联动规则**:若 Gitea PR 检测到仅修改了 `src/` 而未修改 `docs/`,CI 将输出 Warning,PM 视情况有权在 Redmine 打回任务。 |
||
| 30 | |||
| 31 | ## 4. 数据血缘与质量追溯 |
||
| 32 | |||
| 33 | 为保证每周“全量刷盘重训”的可追溯性: |
||
| 34 | - 任何步骤产出 Parquet 文件时,必须计算其 SHA-256 并追加至 `data/metadata/*.json`。 |
||
| 35 | - Pipeline 启动时比对 Hash:若上游原始数据 Hash 变更,将触发 WARNING 级别日志,提示需关注数据源异常,但不强制中断流水线(避免因微小修正导致全链路不可用)。 |