203 lines
7.2 KiB
Markdown
203 lines
7.2 KiB
Markdown
# 05 · 步骤四:AI协同模型设计与逻辑闭环验证
|
||
|
||
> 目标:在写代码前,用AI验证从战略指标到数据执行的全链路逻辑完整性,发现并修复断点。 `[Echo+Delta]`
|
||
>
|
||
> FDE角色:这是"先想清楚再动手"的关键步骤。Echo层定义业务逻辑闭环,Delta层用AI验证技术可行性。逻辑断点在这一步修复,成本远低于编码后返工。
|
||
|
||
## 1. 模型设计框架
|
||
|
||
### 1.1 三层模型映射
|
||
|
||
```
|
||
指挥层模型(战略→指标)
|
||
战略目标 → 核心指标 → 展示形式 → 预警规则
|
||
↓
|
||
本体层模型(数据→指标)
|
||
原始表 → 物化视图 → API字段 → 前端变量
|
||
↓
|
||
执行层模型(指标→任务→闭环)
|
||
指标偏差 → 预警触发 → 任务生成 → 执行反馈 → 效果检验
|
||
```
|
||
|
||
### 1.2 AI协同设计流程
|
||
|
||
```
|
||
1. 输入:指标体系 + 数据现状 + 岗位矩阵
|
||
2. AI生成:完整的数据模型设计草案
|
||
- 每个指标的计算公式
|
||
- 数据源映射
|
||
- 物化视图设计
|
||
- API设计
|
||
- 预警规则
|
||
- 任务模板
|
||
3. 人工审查:业务逻辑是否正确
|
||
4. AI验证:逻辑闭环是否完整
|
||
5. 输出:可执行的技术方案
|
||
```
|
||
|
||
## 2. 指标计算模型
|
||
|
||
### 2.1 核心指标公式
|
||
|
||
| 指标 | 公式 | 数据源 | 注意事项 |
|
||
|------|------|--------|---------|
|
||
| 营业收入 | `sum(consumption)` | bill_fact.consumption | — |
|
||
| 优惠 | `sum(discount_total)` | bill_fact.discount_total | — |
|
||
| 实收 | `sum(received_total)` | bill_fact.received_total | — |
|
||
| 客单价 | `sum(received) / sum(bill_count)` | bill_fact | 注意:不是avg(received_total) |
|
||
| 优惠率 | `avg(discount_total / consumption * 100)` | bill_fact | 逐单计算再平均 |
|
||
| 理论毛利率 | `sum(theoretical_profit) / sum(received) * 100` | bill_fact | — |
|
||
| 会员占比 | `sum(received) FILTER(member_id非空) / sum(received) * 100` | bill_fact | — |
|
||
| 食材成本率 | `sum(actual_food_cost) / sum(matched_received) * 100` | mv_store_operating_expense_monthly | 分母必须用matched口径 |
|
||
| 人工费率 | `sum(wage_expense) / sum(matched_received) * 100` | 同上 | 同上 |
|
||
| 贡献利润 | `sum(received) FILTER(has_expense) - food_cost - operating_expense` | 多表JOIN | FILTER vs COALESCE口径要统一 |
|
||
|
||
### 2.2 口径一致性规则
|
||
|
||
**核心原则**:同一指标在多个页面展示时,必须使用同一数据源和同一计算方式。
|
||
|
||
```sql
|
||
-- 正确:费用率分母统一为matched_received
|
||
sum(operating_expense) / sum(received) FILTER(WHERE has_expense) * 100
|
||
|
||
-- 错误:分母包含无费用门店
|
||
sum(operating_expense) / sum(received) * 100
|
||
```
|
||
|
||
**FILTER vs COALESCE**:
|
||
- `sum(x) FILTER(WHERE has_expense)` — 排除无费用门店的整行
|
||
- `sum(COALESCE(x, 0))` — 无费用门店的x视为0,但received仍计入分母
|
||
- 两者在计算金额时结果相同,但在计算比率时分母不同
|
||
|
||
## 3. 物化视图模型
|
||
|
||
### 3.1 设计原则
|
||
|
||
1. **预聚合到月度+门店粒度**:原始表千万级,API不能直接查
|
||
2. **一个视图服务多个API**:避免为每个API建一个视图
|
||
3. **字段命名统一**:`received`、`consumption`、`bill_count`在各视图中保持一致
|
||
4. **刷新机制明确**:每个视图有对应的刷新脚本
|
||
|
||
### 3.2 核心视图清单
|
||
|
||
| 视图 | 粒度 | 用途 | 关键字段 |
|
||
|------|------|------|---------|
|
||
| mv_store_risk_rating_monthly | 月×门店 | 门店评级 | risk_level, received, bill_count |
|
||
| mv_store_operating_expense_monthly | 月×门店 | 费用分析 | food_cost, wage, rent, utility |
|
||
| mv_store_platform_economics_monthly | 月×门店 | 平台经济性 | meituan_received, eleme_cost_rate |
|
||
| mv_bill_hourly | 月×门店×小时 | 客流分析 | bills, avg_guests |
|
||
| mv_overview_daily | 日 | 日度概览 | received, bill_count |
|
||
| mv_overview_monthly | 月 | 月度概览 | received, bill_count, avg_bill_value |
|
||
| mv_risk_anomaly | 月×门店×账单 | 异常账单 | anomaly_reason, consumption |
|
||
| mv_risk_cashier | 月×门店×收银员 | 收银员风险 | bill_count, anomaly_bills |
|
||
|
||
### 3.3 AI协同验证
|
||
|
||
```
|
||
AI Prompt示例:
|
||
"请检查以下物化视图设计是否覆盖了指标体系中的所有L0和L1指标。
|
||
指标体系:[附上指标体系文档]
|
||
物化视图清单:[附上视图清单]
|
||
输出:覆盖度矩阵 + 缺失指标 + 建议"
|
||
```
|
||
|
||
## 4. 逻辑闭环验证
|
||
|
||
### 4.1 闭环图
|
||
|
||
```
|
||
数据采集 → 物化视图 → API查询 → 前端展示 → 人工决策
|
||
↑ ↓
|
||
效果检验 ← 任务关闭 ← 执行反馈 ← 任务接收 ← 预警触发
|
||
```
|
||
|
||
### 4.2 AI验证清单
|
||
|
||
| 验证项 | 检查内容 | 方法 |
|
||
|--------|---------|------|
|
||
| 数据覆盖度 | 每个指标是否有数据源 | 指标→视图→表→字段 逐项追溯 |
|
||
| 计算正确性 | 公式是否正确 | 用已知数据验证计算结果 |
|
||
| 口径一致性 | 跨页面同一指标是否一致 | 对比不同API的返回值 |
|
||
| 预警完整性 | 每个预警是否有触发条件和任务模板 | 逐条检查预警规则 |
|
||
| 任务闭环 | 任务从生成到关闭是否有完整流程 | 模拟走一遍流程 |
|
||
| 权限正确性 | 各角色是否只看到应有数据 | 模拟不同角色登录验证 |
|
||
| 空状态处理 | 无数据时是否优雅降级 | 测试新月份/新门店场景 |
|
||
|
||
### 4.3 逻辑断点示例
|
||
|
||
**断点1**:预警"食材成本率>45%"已配置,但没有对应的任务模板
|
||
```
|
||
修复:添加任务模板"食材成本率超标整改"
|
||
```
|
||
|
||
**断点2**:任务"排班优化"已配置,但系统没有客流-人力匹配数据
|
||
```
|
||
修复:补充attendance_records解析逻辑,生成客流-人力匹配指标
|
||
```
|
||
|
||
**断点3**:店长能看到本店数据,但无法看到区域均值对标
|
||
```
|
||
修复:在/stores/:code API中增加区域均值字段
|
||
```
|
||
|
||
**断点4**:利润瀑布图的received包含无费用门店,导致费率偏低
|
||
```
|
||
修复:received改为FILTER(WHERE has_expense)口径
|
||
```
|
||
|
||
## 5. AI协同设计输出
|
||
|
||
### 5.1 技术方案文档
|
||
|
||
```
|
||
1. 数据模型设计
|
||
- 原始表ER图
|
||
- 物化视图清单和SQL
|
||
- 门店名映射表
|
||
|
||
2. API设计
|
||
- 路由清单
|
||
- 每个API的SQL查询
|
||
- 请求参数和响应格式
|
||
- 数据权限规则
|
||
|
||
3. 前端设计
|
||
- 页面清单
|
||
- 每个页面的组件布局
|
||
- 指标卡配置
|
||
- 图表配置
|
||
|
||
4. 预警与任务设计
|
||
- 预警规则清单
|
||
- 任务模板库
|
||
- 闭环健康度指标
|
||
```
|
||
|
||
### 5.2 验证报告
|
||
|
||
```
|
||
1. 覆盖度报告
|
||
- 指标覆盖率:X/Y
|
||
- 数据覆盖率:哪些指标有数据,哪些缺数据
|
||
|
||
2. 口径一致性报告
|
||
- 跨页面指标对比表
|
||
- 不一致项及修复方案
|
||
|
||
3. 闭环验证报告
|
||
- 预警→任务→执行→反馈 全链路测试结果
|
||
- 发现的断点及修复方案
|
||
|
||
4. 性能预估
|
||
- 各API预估响应时间
|
||
- 物化视图刷新耗时
|
||
```
|
||
|
||
## 6. 关键注意事项
|
||
|
||
1. **先验证再编码**:这一步的目的是在写代码前发现逻辑问题,避免返工
|
||
2. **AI是协同不是替代**:AI生成方案,人审查业务合理性
|
||
3. **闭环比单点重要**:一个指标算错了是bug,一个闭环断了是系统失效
|
||
4. **口径要从一开始统一**:后期修复口径不一致的成本远高于初期统一
|
||
5. **留出迭代空间**:第一版不需要覆盖所有指标,先跑通核心闭环
|