Files
Edu/docs/architecture/issues/contracts/data-ana_contract.md
SpecialX faaaf29f67 docs: ai 协作文档体系重构与多 ai 仲裁结果落地
1.AI 协作文档体系重构(objections/worklines/contracts+matrix.md)

2.coord 仲裁文档(final-decisions/cross-review/final-rulings/orchestration)

3.各服务 01/02 文档补全

4.共享包初始化(shared-ts/shared-go/hooks/ui-components/ui-tokens)

5.Proto 契约补全

6.004 架构影响地图更新

7.端口分配表

8.设计规格文档
2026-07-10 12:58:22 +08:00

122 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# data-ana 对接契约
> 负责人ai11
> 关联:[matrix.md](./matrix.md)、[analytics.proto](../../../packages/shared-proto/proto/analytics.proto)、[events.proto](../../../packages/shared-proto/proto/events.proto)
---
## §1 我提供什么(对外接口)
### 1.1 gRPC 接口(如有)
| Service | RPC | 请求 | 响应 | 端口 |
| ---------------- | ---------------------- | ----------------------------- | ------------------------- | ----- |
| AnalyticsService | GetClassPerformance | GetClassPerformanceRequest | ClassPerformance | 50055 |
| AnalyticsService | GetStudentWeakness | GetStudentWeaknessRequest | StudentWeakness | 50055 |
| AnalyticsService | GetLearningTrend | GetLearningTrendRequest | LearningTrend | 50055 |
| AnalyticsService | GetTeacherDashboard | GetTeacherDashboardRequest | TeacherDashboard | 50055 |
| AnalyticsService | GetStudentDashboard | GetStudentDashboardRequest | StudentDashboard | 50055 |
| AnalyticsService | GetParentDashboard | GetParentDashboardRequest | ParentDashboard | 50055 |
| AnalyticsService | GetAdminDashboard | GetAdminDashboardRequest | AdminDashboard | 50055 |
| AnalyticsService | GetWarningList | GetWarningListRequest | WarningListResponse | 50055 |
| AnalyticsService | TriggerWarning | TriggerWarningRequest | TriggerWarningResponse | 50055 |
| AnalyticsService | GetMasteryDistribution | GetMasteryDistributionRequest | MasteryDistribution | 50055 |
| AnalyticsService | GetStudentMastery | GetStudentMasteryRequest | StudentMastery | 50055 |
| AnalyticsService | SubscribeMasteryUpdate | SubscribeMasteryUpdateRequest | stream MasteryUpdateEvent | 50055 |
### 1.2 HTTP 端点(如有)
无对外 HTTP 端点,仅 gRPC含 1 个 Server Streaming RPC
### 1.3 GraphQL schema如 BFF
不适用。
### 1.4 Kafka 事件发布(如有)
| Topic | Event | 消费方 |
| --------------------------- | --------------------------------------------------------- | -------------- |
| edu.data_ana.mastery.events | MasteryEventaction: mastery.updated/warning.triggered | core-edu / msg |
> MasteryEvent 豁免 Outbox 模式(派生数据事件,见 004 §12.2 + §15.3 #6
### 1.5 错误码前缀
`DATA_ANA_`(如 DATA_ANA_DASHBOARD_UNAVAILABLE、DATA_ANA_MASTERY_NOT_COMPUTED
---
## §2 我消费什么(依赖上游)
### 2.1 gRPC 调用(同步)
无主动 gRPC 调用上游。data-ana 通过 CDC + Kafka 事件接收数据,计算后发布 MasteryEvent。
### 2.2 Kafka 事件订阅(异步)
| Topic | Event | 发布方 | mock 策略 |
| ---------------------------------- | ------------------- | --------------- | ------------------------------------------------- |
| edu.exam.events | ExamEvent | core-edu (ai08) | core-edu 就绪前使用 CDC 模拟数据 + 本地 stub 事件 |
| edu.homework.events | HomeworkEvent | core-edu (ai08) | 同上 |
| edu.grade.events | GradeEvent | core-edu (ai08) | 同上 |
| edu.class.events | ClassEvent | core-edu (ai08) | 同上 |
| edu.content.knowledge_point.events | KnowledgePointEvent | content (ai09) | content 就绪前使用内置知识点维度表 |
| edu.content.question.events | QuestionEvent | content (ai09) | content 就绪前忽略 |
| edu.ai.usage.events | AIUsageEvent | ai (ai12) | ai 就绪前忽略AI 用量统计为空 |
### 2.3 HTTP 调用(如有)
无。
### 2.4 CDC 数据源(补充)
| 数据源 | 用途 | mock 策略 |
| ----------------------------------------------------- | ------------------------------- | --------------------------------------------------------------------------- |
| core-edu MySQLexams/homework/grades/attendance 表) | Debezium CDC → Kafka 同步读模型 | core-edu 就绪前使用 ClickHouse 内置模拟数据集30 学生 × 5 考试 × 10 作业) |
---
## §3 就绪信号
### 3.1 我依赖的上游就绪标志
- [ ] core-edu gRPC 50053 启用ai08—— 业务事件 + CDC 数据源
- [ ] edu.exam.events / edu.homework.events / edu.grade.events / edu.class.events topic 有事件发布ai08
- [ ] content gRPC 50054 启用ai09—— 知识点维度
- [ ] edu.content.knowledge_point.events topic 有事件发布ai09
- [ ] ai gRPC 50057 启用ai12—— AI 用量统计(可选,仪表盘补全)
### 3.2 我的就绪标志(供下游消费)
- [ ] data-ana gRPC 50055 启用HealthService.Check 返回 SERVING
- [ ] AnalyticsService 12 RPC 可调用(含 4 端 Dashboard + Server Streaming SubscribeMasteryUpdate
- [ ] GetTeacherDashboard / GetStudentDashboard / GetParentDashboard / GetAdminDashboard 返回结构化数据
- [ ] edu.data_ana.mastery.events topic 可发布mastery.updated / warning.triggered
---
## §4 Mock 策略
### 4.1 我提供的 mock
在 data-ana 真实服务就绪前为下游teacher-bff / student-bff / parent-bff / admin-portal / msg提供以下 mock
- **gRPC mock**:使用 grpc-mock 拦截 50055 端口
- GetTeacherDashboard 返回固定仪表盘total_classes=3, class_avg_score=82.5, top_students 5 个, pending_homework_count=8
- GetStudentDashboard 返回固定仪表盘avg_score=85.0, class_rank=5, weak_points 3 个)
- GetParentDashboard 返回固定仪表盘child_avg_score=85.0, child_class_rank=5
- GetAdminDashboard 返回固定仪表盘total_teachers=50, total_students=1200, school_avg_score=80.0
- GetWarningList 返回固定 5 条预警severity: warning/critical
- GetMasteryDistribution 返回固定分布mastered=20, progressing=7, weak=3
- SubscribeMasteryUpdate 返回固定流(每 5 秒推 1 个 MasteryUpdateEvent
- **Kafka mock**data-ana 就绪前不发布真实 MasteryEventmsg 使用本地 stub 预警
### 4.2 我消费的 mock
在真实上游就绪前data-ana 使用以下 mock
- 业务数据ClickHouse 内置模拟数据集30 学生 × 5 考试 × 10 作业 × 30 天出勤),不依赖 core-edu CDC
- 知识点维度:内置固定知识点表(数学 50 个知识点),不依赖 content 事件
- AI 用量AIUsageEvent 为空,仪表盘 AI 用量区块显示"暂无数据"
- CDC 通道core-edu 就绪前 Debezium 不启动,使用 ClickHouse 批量导入模拟数据