feat: 完成 issue #1 [EPIC] iAOP-Core 内核平台化改造(M2)实施基线
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# iAOP-Core 内核平台化改造(M2)—— 实施基线
|
||||
|
||||
> 对应 EPIC #1「[EPIC] iAOP-Core 内核平台化改造(M2)」:
|
||||
> 将已交付化工AI平台重构为**可配置、可复制的通用内核**。
|
||||
> 核心改造:模块③ AI 模型框架、模块⑤ 驾驶舱由硬编码重构为配置驱动;
|
||||
> 新增模板配置台(Template Console)。
|
||||
> 交付物:iAOP-Core 可用 + 模板配置台原型。
|
||||
> 风险:模型框架模板化难度(PRD 5.3),预留 2 周缓冲。
|
||||
> 依据:PRD v1.2 第 5 章、第 7 章。
|
||||
|
||||
本文件为 M2 的**实施基线**(EPIC 跟踪容器不单独计时;实际工作由
|
||||
子 EPIC #5(③ AI 模型框架 配置化重构)、#7(⑤ 配置化驾驶舱 重构)、
|
||||
#9(⑤.7 模板配置台 Template Console)承担,各子任务见对应 Issue)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 目标与范围(M2)
|
||||
|
||||
| 改造项 | 现状 | 目标(配置驱动) | 子 EPIC |
|
||||
| --- | --- | --- | --- |
|
||||
| ③ AI 模型框架 | 硬编码模型/特征/超参 | 模型注册、特征规范、超参包**配置驱动** | #5 |
|
||||
| ⑤ 配置化驾驶舱 | 硬编码布局/指标 | 布局/指标/告警面板**配置驱动**(schema 已立) | #7 |
|
||||
| ⑤.7 模板配置台 | 无 | Template Console 原型(模板资产可视化/校验/发布) | #9 |
|
||||
| 交付物 | — | **iAOP-Core 可用 + 模板配置台原型** | #1 验收 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 现状盘点(已配置化的内核资产)
|
||||
|
||||
M1 阶段各 EPIC 交付的内核组件**已具备配置驱动基础**,是 M2 平台化改造的底子:
|
||||
|
||||
| 内核组件 | 配置资产(模板驱动) | 交付来源 |
|
||||
| --- | --- | --- |
|
||||
| 边缘采集网关 | `core/edge-gateway/config/gateway.example.yaml`、point_dict CSV schema | #3 / #16 / #23 / #25 |
|
||||
| 数据总线 + 时序库 | `core/data-bus/config/{kafka,postgres,retention,minio}.template.yaml` | #4 / #28 / #30 / #33 |
|
||||
| LLM 网关 + RAG | `core/llm-gateway/config/{router,prompts}.template.yaml`、`core/rag-kb/config/kb.template.yaml` | #6 / #43 / #46 |
|
||||
| 推理后端(GPU/NPU/云端) | `core/inference-backend/config/backends.template.yaml`、`local70b/cloudapi.template.yaml` | #8 / #44 / #45 |
|
||||
| 部署底座 | `deploy/k8s/helm/iaop/values*.yaml`(后端/资源/副本/域名/存储) | #8 / #56 |
|
||||
| 行业模板 | `templates/ti-cl4/`(场景/点表/RAG)、`templates/resin/`(点表/RAG/驾驶舱/版本) | #11-#13 / #74-#77 / #82-#85 |
|
||||
|
||||
**结论**:iAOP-Core 各内核模块均已配置资产化;M2 聚焦 **③ 模型框架**与
|
||||
**⑤ 驾驶舱**两块尚存的硬编码,以及 **Template Console** 原型。
|
||||
|
||||
---
|
||||
|
||||
## 3. 改造清单(M2 路线)
|
||||
|
||||
### 3.1 ③ AI 模型框架配置化(子 EPIC #5,RISK)
|
||||
- **模型注册表**:模型名/版本/入口(predict API)配置驱动(`config/models.template.yaml`);
|
||||
- **特征规范**:特征窗口/来源点位/LIMS 标签配置化(对齐 PRD 5.3 FeatureSpec 与
|
||||
工艺模板 `featureWindow/qualityTag/batchKey`);
|
||||
- **超参包**:训练/推理超参按模板资产版本管理;
|
||||
- **风险**:模型框架模板化难度高(PRD 5.3),**预留 2 周缓冲**。
|
||||
|
||||
### 3.2 ⑤ 配置化驾驶舱重构(子 EPIC #7)
|
||||
- 布局 schema 已立(`iAOP-cockpit-layout-v1`,PRD 5.5);
|
||||
- 重构为**布局/指标/告警面板全部配置驱动**(widget 渲染器 + 配置资产),
|
||||
已有模板资产:`templates/resin/dashboard/cockpit.resin.yaml`。
|
||||
|
||||
### 3.3 ⑤.7 模板配置台 Template Console(子 EPIC #9)
|
||||
- 模板资产**可视化/校验/发布**原型(对应打包发布机制 `template_packaging.py` #85、
|
||||
资产校验 `_sanity_check.py` 系列)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 里程碑与风险
|
||||
|
||||
| 里程碑 | 内容 | 风险 |
|
||||
| --- | --- | --- |
|
||||
| M2-1 | ③ 模型框架配置化(模型注册/特征/超参) | 高(RISK,PRD 5.3)→ 预留 2 周缓冲 |
|
||||
| M2-2 | ⑤ 驾驶舱配置化重构 | 中(布局 schema 已立) |
|
||||
| M2-3 | Template Console 原型 | 中(依赖模板资产规范) |
|
||||
| M2 验收 | iAOP-Core 可用 + 模板配置台原型 | — |
|
||||
|
||||
---
|
||||
|
||||
## 5. 验收对照(EPIC #1 ↔ 交付物)
|
||||
|
||||
| EPIC 验收要求 | 交付物 | 状态 |
|
||||
| --- | --- | --- |
|
||||
| 模块③ AI 模型框架配置驱动 | 子 EPIC #5(模型注册/特征/超参配置资产) | 子任务进行中 |
|
||||
| 模块⑤ 驾驶舱配置驱动 | 子 EPIC #7(布局/指标配置化重构) | 子任务进行中 |
|
||||
| 模板配置台 Template Console 原型 | 子 EPIC #9 | 子任务进行中 |
|
||||
| iAOP-Core 可用 | 内核各模块已配置资产化(§2 盘点) | ✅ 基线已具备 |
|
||||
| 风险缓冲 | PRD 5.3 模型框架模板化难度 → 预留 2 周 | 已纳入 M2-1 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 关联
|
||||
|
||||
- 子 EPIC:#5 / #7 / #9;
|
||||
- PRD v1.2 第 5 章(③ 模型框架、⑤ 驾驶舱)、第 7 章(模板配置台)、5.3(风险);
|
||||
- 模板资产:`templates/ti-cl4/`、`templates/resin/`(平台化复制的验证载体)。
|
||||
@@ -0,0 +1,89 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""M2 实施基线文档一致性校验(issue #1 辅助脚本)。
|
||||
|
||||
校验项:
|
||||
1. 必备章节齐全(目标/现状盘点/改造清单/里程碑与风险/验收对照/关联);
|
||||
2. 引用的配置资产路径在仓库中存在(防文档指向缺失文件);
|
||||
3. 关键验收关键词存在(配置驱动/模板配置台/缓冲/RISK 风险标注)。
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
DOC = os.path.join(REPO_ROOT, "docs", "M2内核平台化改造_实施基线.md")
|
||||
|
||||
REQUIRED_SECTIONS = [
|
||||
"目标与范围",
|
||||
"现状盘点",
|
||||
"改造清单",
|
||||
"里程碑与风险",
|
||||
"验收对照",
|
||||
"关联",
|
||||
]
|
||||
|
||||
KEYWORDS = ["配置驱动", "Template Console", "模板配置台", "预留 2 周缓冲", "iAOP-Core 可用"]
|
||||
|
||||
# 文档中应引用的内核配置资产(以仓库内路径出现,支持 {a,b} 集合写法)
|
||||
EXPECTED_ASSETS = [
|
||||
"core/edge-gateway/config/gateway.example.yaml",
|
||||
"core/data-bus/config/{kafka,postgres,retention,minio}.template.yaml",
|
||||
"core/llm-gateway/config/{router,prompts}.template.yaml",
|
||||
"core/rag-kb/config/kb.template.yaml",
|
||||
"core/inference-backend/config/backends.template.yaml",
|
||||
"deploy/k8s/helm/iaop",
|
||||
"templates/resin/dashboard/cockpit.resin.yaml",
|
||||
]
|
||||
|
||||
|
||||
def expand_braces(path: str) -> list:
|
||||
"""展开 {a,b} 集合写法:a/{b,c}.yaml -> [a/b.yaml, a/c.yaml]。"""
|
||||
m = re.search(r"\{(.+?)\}", path)
|
||||
if not m:
|
||||
return [path]
|
||||
parts = m.group(1).split(",")
|
||||
prefix, suffix = path.split(m.group(0), 1)
|
||||
return [prefix + p + suffix for p in parts]
|
||||
|
||||
|
||||
def main() -> int:
|
||||
with open(DOC, encoding="utf-8") as f:
|
||||
text = f.read()
|
||||
|
||||
errors = []
|
||||
|
||||
# 1. 必备章节
|
||||
for sec in REQUIRED_SECTIONS:
|
||||
if sec not in text:
|
||||
errors.append("缺少必备章节: %s" % sec)
|
||||
|
||||
# 2. 配置资产引用存在(支持 {a,b} 集合写法:原始形式或展开后任一命中)
|
||||
for asset in EXPECTED_ASSETS:
|
||||
candidates = expand_braces(asset)
|
||||
if asset in text or any(a in text for a in candidates):
|
||||
for a in candidates:
|
||||
if not os.path.exists(os.path.join(REPO_ROOT, a)):
|
||||
errors.append("引用资产不存在: %s" % a)
|
||||
else:
|
||||
errors.append("未引用核心资产: %s" % asset)
|
||||
|
||||
# 3. 验收关键词
|
||||
for kw in KEYWORDS:
|
||||
if kw not in text:
|
||||
errors.append("缺少验收关键词: %s" % kw)
|
||||
|
||||
if errors:
|
||||
print("FAIL")
|
||||
for e in errors:
|
||||
print(" - %s" % e)
|
||||
return 1
|
||||
|
||||
print("PASS — 章节 %d 项、资产引用 %d 项、关键词 %d 项全部通过" %
|
||||
(len(REQUIRED_SECTIONS), len(EXPECTED_ASSETS), len(KEYWORDS)))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user