Files
Edu/services/ai/docs/01-understanding.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

36 KiB
Raw Permalink Blame History

模块理解确认书 — ai

AI 标识ai12复核与长期演进接手← ai06初稿2026-07-09 负责模块aiP5— 按 ai-allocation.md §3.2 v1.0 最新分配ai 由 ai12 专责 语言Python 3.12+ / FastAPI 0.115+ 阶段:架构设计外包 · 阶段 1全局理解ai06 初稿 + ai12 长期演进复核) 日期2026-07-09ai06 初稿)/ 2026-07-09ai12 复核与补充) 关联文档:ai-allocation.md004 架构影响地图pending-features.mdcoord 交叉审查报告known-issues.md

ai12 接手说明:本确认书初稿由 ai06 在 ai-allocation v0.x 阶段ai06 同时负责 data-ana + ai撰写。ai-allocation.md v1.0 将 ai 模块独立分配给 ai12。ai12 在 ai06 初稿基础上执行作者归属更正、长期架构演进补充、P5 交付物覆盖度核对、向前兼容性铺垫。所有 ai12 新增内容用「ai12 增补」标注ai06 原文保留并标注「ai06 初稿」。


阶段 1 必读清单完成确认

按 ai-allocation.md §4ai12 必读 7 份全局文档 + 全部 .proto + services/data-ana/services/ai/ 骨架源码:

# 文档 状态
1 README.md 已读
2 MIGRATION_GUIDE.md 已读
3 004 架构影响地图 已读(重点 §1.2/§4.1/§4.2/§7.2/§9.3/§11.5/§12.2/§15
4 pending-features.md 已读(重点 P5 沟通与 AI 阶段)
5 project_rules.md 已读workspace 规则,重点 §3.6 Python/§6 事件驱动/§9 问题记录/§10 AI 工作流程)
6 coding-standards.md 已读(重点 §4 Python 规范)
7 multi-ai-collaboration.md 已读
8 packages/shared-proto/proto/*.proto8 份) 已读(重点 ai.proto/analytics.proto/content.proto/events.proto
9 services/ai/src/ 全部源码main.py/config.py/llm_client.py/health/health.py 已读
10 services/data-ana/src/ 全部源码(参考 Python 服务实现模式 + 跨服务 gRPC 契约对齐) 已读ai12 增补:跨服务 gRPC 契约对齐用)
11 coord 交叉审查报告 已读ai12 增补:理解 7 项已仲裁共性问题)

ai12 与 ai06 不同ai-allocation.md v1.0 §4 矩阵 ai06 列对黄金模板为 "—"ai12 列同为 "—"Python 服务无需对照 TS 黄金模板),但需对照 services/data-ana/ 作为 Python 服务实现参考lifespan/structlog/OTel/metrics 模式)。


1. 我在架构中的位置

1.1 架构定位ai06 初稿 + ai12 增补)

  • 层级业务微服务层L5D6 智能洞察领域004 §1.1b,与 data-ana 共享领域)
  • 领域细分ai12 增补D6 内部分两个子域
    • D6.a 分析子域data-ana 负责):基于历史数据计算学情、掌握度、趋势
    • D6.b 生成子域ai 负责):基于学情上下文 + LLM 推理生成教学内容
    • 两子域通过 gRPC 同步查询耦合,构成"分析→生成"闭环
  • 上游
    • api-gateway 直接 HTTP 代理 /api/v1/ai/* → ai:3008api-gateway main.go
    • teacher-bff 聚合 AI 出题/优化能力004 §4.1BFF → aiP5 起转 gRPC
    • ai12 增补student-bffP3+/ parent-bffP4+)未来可能调用 AI 服务用于学生自适应学习、家长学情报告 AI 解读
  • 下游
    • content 服务gRPC 查询知识点 / 题库004 §4.1AI → Content gRPC
    • data-ana 服务gRPC 查询学情数据004 §4.1AI → DataAna gRPC
    • LLM Provider外部 HTTPOpenAI 兼容 REST API
    • ai12 增补iam 服务gRPC 查询 GetEffectiveDataScope,用于多租户/多学校用量配额校验;当前 iam.proto 未提供此 RPCcoord 已仲裁 P4 补全)
    • ai12 增补msg 服务Kafka 事件 edu.notification.events 由 msg 消费ai 不直接调用;但 AI 异常告警可能走 msg 推送给管理员,长期可考虑)
  • 通信方式
    • 入口:当前 REST/ai/chat/ai/chat/stream/ai/generate/question/ai/optimize/expression目标态ai.protogRPC 暴露 AiService(含 StreamChat 流式 RPC004 §4.2 明确 P5 启用
    • 出口gRPC 调 content / data-ana当前未实现,仅 LLM HTTP 调用SSE 流式对前端Kafka 事件外发用量计费
  • 端口3008HTTP+ 50058gRPCai12 增补004 §1.2 gRPC 端口规则 HTTP+10050,需在 §1.2 端口矩阵补登,提请 coord 同步)

1.2 服务边界与无状态原则ai12 增补)

ai 是严格无状态服务,这与 data-ana 的"无 MySQL 写但有 ClickHouse 读模型"形成鲜明对比。无状态原则的含义与边界:

维度 ai无状态 data-ana有读模型
持久化存储 无独占 DB ClickHouse 宽表(读模型)
会话状态 单次请求内(无跨请求会话,聊天历史由前端维护)
缓存 RedisPrompt 模板、限流计数、响应缓存) RedisDataScope 缓存)
事件发布 AIUsageRecorded(派生数据,豁免 Outbox004 §12.2 MasteryUpdated(派生数据,豁免 Outbox
水平扩展 直接加副本,无状态同步问题 CDC 消费者需 consumer group 协调

无状态原则的例外(需 coord 长期跟踪):

  • 长运行工作流(备课工作流的"教师审核"步骤可能跨越数小时甚至数天的状态需持久化不能依赖内存。ai12 提请 coord 在 P6 评估引入 Temporal 或自建 workflow_state 表(详见 02-architecture-design.md §2.4

2. 我的限界上下文

2.1 聚合职责ai06 初稿 + ai12 增补)

  • 聚合职责LLM 调用网关 + 教学场景 AI 编排(备课 / 出题 / 表达优化),承载 D6 智能洞察领域的"生成"子域
  • 聚合根 / 实体
    • ChatConversation(聊天会话,待实现,当前无状态)
    • GeneratedQuestion(生成的题目,待审核入库)
    • PromptTemplatePrompt 模板,待实现
    • UsageRecord(用量计费记录,待实现,通过事件外发不落本服务 DB
    • ai12 增补LessonPreparationWorkflow(备课工作流实例,长运行状态需持久化)
    • ai12 增补EvaluationResult(生成结果质量评估结果,待实现,用于 RLHF 数据收集与质量门禁)
  • 业务领域D6 智能洞察(与 data-ana 共享data-ana 偏"分析"ai 偏"生成"
  • 我不负责
    • 不负责题库存储(→ content 服务ai 生成后调 content.CreateQuestions 入库)
    • 不负责学情计算(→ data-ana 服务ai 查询学情用于个性化出题)
    • 不负责通知投递(→ msg 服务)
    • 不负责用户身份认证(→ iam + Gatewayai 信任 x-user-id/x-user-roles 头)
    • ai12 增补:不负责教学大纲管理(→ content 服务的 Textbook/Chapter/KnowledgePoint
    • ai12 增补:不负责学生作业批改(→ core-eduai 仅生成题目与解析,不批改学生作答)
  • 数据自治无独占数据库(设计上无状态;用量计费通过 Kafka 事件外发;长运行工作流状态待 P6 决策是否引入持久化)

2.2 ai12 增补:与 content / data-ana / msg 的边界精细化

为避免未来跨服务职责漂移,明确以下边界(参考 004 §1.1b D6/D4/D5 划分):

业务能力 归属服务 边界说明
题目生成LLM 调用) ai ai 调 LLM 生成题目文本,返回给 BFF不入 content 题库
题目入库 content BFF 拿 ai 生成的题目 → 调 content.CreateQuestions 入库
知识点前置依赖查询 content ai 调 content.KnowledgeGraphService.GetPrerequisites
学生学情查询 data-ana ai 调 data-ana.AnalyticsService.GetStudentWeakness
班级整体学情查询 data-ana ai 调 data-ana.AnalyticsService.GetClassPerformance
生成结果质量评估 ai ai 内部 LLM-as-judge / 规则校验,不外发
用量计费落库 data-ana ai 发 edu.insight.ai.usage 事件data-ana 消费落 ClickHouse
AI 异常告警通知 msg ai 异常 → 日志 + metrics告警由 Prometheus Alertmanager 触发 msg
教师审核备课结果 BFF + 前端 ai 仅生成与暂存Redis 短期),审核状态由 BFF 编排

3. 我与外部的契约

3.1 消费的 proto messageai06 初稿 + ai12 增补)

来源 message / service 用途 状态
content.proto KnowledgeGraphService.GetPrerequisites 查询知识点前置依赖用于出题上下文 proto 已定义
content.proto KnowledgeGraphService.GetLearningPath 查询学生学习路径用于个性化出题 proto 已定义
content.proto TextbookService.ListTextbooks 查询教材上下文(章节关联知识点) proto 已定义ai12 增补)
analytics.proto AnalyticsService.GetStudentWeakness 查询学生薄弱知识点用于靶向出题 proto 已定义
analytics.proto AnalyticsService.GetLearningTrend 查询学习趋势用于难度调节 proto 已定义
analytics.proto AnalyticsService.GetClassPerformance 查询班级整体学情用于备课工作流 proto 已定义ai12 增补)
iam.proto IamService.GetEffectiveDataScope待 coord P4 补全 查询用户 DataScope 用于多学校用量配额校验 proto 待补全ai12 增补)
ai.proto ChatRequest gRPC 暴露契约(待实现 gRPC server proto 已定义

3.2 暴露的 API / 事件

HTTP 端点(当前实现,见 main.py

method path 说明
GET /healthz liveness
GET /readyz readiness含 LLM 是否配置)
GET /metrics Prometheus 指标
POST /ai/chat LLM 聊天(非流式)
POST /ai/chat/stream LLM 流式聊天SSE
POST /ai/generate/question 生成题目
POST /ai/optimize/expression 优化表达

ai12 增补:待新增 HTTP 端点P5 交付):

method path 说明
POST /ai/lesson/preparation 备课工作流启动(分析学情→推荐知识点→生成题目)
GET /ai/lesson/preparation/{id} 查询备课工作流状态(异步流程)
POST /ai/lesson/preparation/{id}/confirm 教师确认入库(触发 content.CreateQuestions
GET /ai/prompts Prompt 模板列表CRUD
POST /ai/prompts 创建 Prompt 模板
PUT /ai/prompts/{id} 更新 Prompt 模板(版本化)
GET /ai/usage/me 当前用户用量统计(短期查询,长期查 data-ana

gRPC 契约ai.proto待实现 server

  • Chat(ChatRequest) → ChatResponse
  • StreamChat(ChatRequest) → stream ChatChunk(流式 RPC
  • GenerateQuestion(GenerateQuestionRequest) → GeneratedQuestion
  • OptimizeExpression(OptimizeExpressionRequest) → OptimizedExpression

ai12 增补proto 待补全项(提请 coord 在 P5 前补全):

  • GenerateLessonPlan(GenerateLessonPlanRequest) → LessonPlanResponse:备课工作流 RPC
  • StreamGenerateQuestion(...) → stream GeneratedQuestionChunk:题目逐字流式生成(满足 ai-allocation.md §5 "题目逐字生成"
  • ChatRequest 增加可选字段:user_id(透传,用于个性化)、session_id(用于多轮对话上下文)、data_scope(透传 DataScope 元数据)
  • GenerateQuestionRequest 增加字段:gradeknowledge_point_idsquestion_typecount

ai12 增补:发布的领域事件

  • 当前无发布ai06 初稿)

  • 设计上发布 AIUsageRecorded 事件(用量计费),由 data-ana 消费落 ClickHouse。004 §7.2 已确认 topic edu.insight.ai.usagecoord 仲裁已通过§15.3 #4

  • ai12 增补:长期可发布事件P6+ 评估):

    • AIContentGeneratedtopic: edu.insight.ai.generated):生成内容审计事件,供 data-ana 落库用于质量分析
    • AIFeedbackRecordedtopic: edu.insight.ai.feedback):教师对生成结果的反馈(采纳/拒绝/修改),用于 RLHF 数据集构建
  • 错误码前缀AI_*(详见阶段 2 §6.2

  • 降级策略LLM API key 为空或调用失败时返回 degraded: true 骨架响应(见 llm_client.py

3.3 ai12 增补:响应信封对齐

按 004 §11.5 强制约束coord 仲裁Python 服务信封必须改为 ActionState禁止 {success, data, degraded} 偏离结构):

  • 当前 ai 实现违反约束main.py 返回 {success: true, data: ..., degraded: false}
  • P5 实施必须改为 ActionState
    • 成功:{success: true, data: T}
    • 失败:{success: false, error: {code, message, details?, traceId?}}
    • 降级:details: {degraded: true}degraded 作为 details 子字段,非顶层字段)
  • 提请 coord 在 known-issues.md §2.9 ai-gateway 分区记录此约束

4. 我的技术栈

4.1 当前技术栈ai06 初稿)

  • 语言Python 3.12+
  • 框架FastAPI 0.115+ / uvicorn
  • LLM 客户端:httpx 异步直接调 OpenAI 兼容 REST API不依赖 openai SDK,见 llm_client.py:1-7
  • 配置:pydantic-settings BaseSettingsenv_prefix=""
  • 可观测:
    • 日志:structlog
    • 指标:prometheus-client + make_asgi_app()
    • 链路:opentelemetry-sdk + OTLPSpanExporter + FastAPIInstrumentordev_mode=true 时跳过 exporter 初始化避免本地无 collector 报错)
  • 流式响应FastAPI StreamingResponse + AsyncGeneratorSSE 格式 data: <chunk>\n\n
  • 测试pytest当前 0% 覆盖率

4.2 ai12 增补:长期技术栈演进路线

为支撑 P5 交付物 + 未来多模态/RAG/Agent 演进,规划如下技术栈演进:

类别 当前 P5M14-M16 P6+(长期演进) 选型理由
LLM 客户端 httpx 直连 LLMProvider 抽象 + 4 适配器 + Embedding Provider + Multimodal Provider 抽象隔离 Provider API 差异,便于切换
工作流编排 FastAPI BackgroundTasks Temporal如 coord 仲裁引入) 简单 4 步用 BackgroundTasks长运行教师审核需 Temporal
RAG 检索 gRPC 调 content 查询 + 向量库pgvector / Chroma+ Embedding P5 复用 contentP6+ 评估独立向量库支持语义检索
模板管理 硬编码 YAML 文件 + Jinja2 + DB 持久化 + 版本化 + A/B 测试 P5 用文件简单P6+ 评估迁移 DB 支持动态更新
缓存 Redishash + 令牌桶) + 语义缓存embedding 相似度) P5 用 hash 缓存P6+ 评估语义缓存减少重复 LLM 调用
限流 Redis 令牌桶(用户/IP + 学校级配额 + token 级预算 P5 用户/IP 级P6+ 多租户配额管理
评估 规则校验 + LLM-as-judge + 人工评估 + 在线指标 + RLHF 数据集 P5 自动化校验P6+ 闭环反馈持续提升质量
测试 0% pytest ≥ 80% + 集成测试 + 契约测试 + LLM 评估测试 P5 单元 + 集成P6+ 评估测试保证生成质量

关键选型决策记录ai12 增补,供 coord 备案):

  1. 不引入 openai SDK:保持 httpx 直连,避免 SDK 版本绑定 + 减少 attack surfaceOpenAI 兼容 REST API 已成为事实标准(百川/Ollama/vLLM 均兼容)
  2. P5 不引入 LangChainLangChain 抽象过重,与 LLMProvider 抽象层职责重叠;按 004 §2.3 列出的 LangGraph 待 P6+ 评估时再决定
  3. P5 不引入向量库RAG 检索复用 content 服务的 Neo4j + EScontent 已规划 ES避免数据冗余
  4. 不引入 openai SDK 但保留兼容性:所有 LLM Provider 适配器实现 OpenAI 兼容 REST 接口,便于切换;非兼容 Provider如 Anthropic 原生 API在适配器内部转换

5. 我的阶段归属

5.1 阶段定位ai06 初稿 + ai12 增补)

  • P5 沟通与 AI 阶段M14-M16:建 AI 网关 + LLM Provider 适配 + 流式 SSE + 用量计费
  • 退出标准pending-features P5
    • AI 辅助出题流式返回
    • 题库全文检索 < 200msES 部分由 content 服务承担ai 不直接负责)
    • AI 网关流式 SSE 三层透传AI → BFF → 前端)
    • ai12 增补细化(基于 ai-allocation.md §5 ai12 交付清单):
      • LLM Provider 适配器模式OpenAI/百川/本地模型,统一接口)
      • SSE 流式响应(题目逐字生成 + 前端打字机效果)
      • 出题 Prompt 模板管理(模板 CRUD + 参数注入:年级/学科/难度/知识点)
      • 备课工作流编排(分析学情 → 推荐知识点 → 生成题目 → 教师审核 → 入库)
      • 用量计费/频率限制(按用户/按 IP/按 token 消耗)
  • 依赖上游
    • P1 地基api-gateway 路由
    • P2 身份iam 服务(鉴权 + DataScope
    • P4 内容分析content 服务gRPC 查询知识点 / 题库)+ data-ana 服务gRPC 查询学情)
    • 外部LLM Provider API keyOpenAI / Anthropic / 百川 / 本地模型 Ollama
  • 下游依赖我
    • P5 teacher-bff 聚合 AI 出题 mutation004 §9.3:教师用 AI 出题并发布到班级)
    • P5 teacher-portal SSE 流式 AI 对话(前端)
    • ai12 增补P5+ student-bff学生自适应学习未来阶段
    • ai12 增补P5+ parent-bff家长学情报告 AI 解读,未来阶段)

5.2 ai12 增补:阶段交付里程碑细分

将 P5M14-M163 个月)细分为 3 个里程碑,便于优先级排序:

里程碑 时间 交付内容 退出标准
M14 第1月 LLMProvider 抽象 + OpenAI/百川/Ollama 适配器 + gRPC serverChat/StreamChat+ Redis 限流 gRPC 流式 RPC 可调通,多 Provider 切换可用
M15 第2月 Prompt 模板管理YAML + Jinja2+ 出题工作流 + 题目逐字流式生成 + 用量计费事件 教师可发起 AI 出题,流式返回,用量落 ClickHouse
M16 第3月 备课工作流 4 步编排 + 教师审核 + 入库 + 评估框架(规则 + LLM-as-judge 备课工作流端到端跑通,质量门禁生效

6. 我需要对齐的黄金模板项(对照 classes 服务 + Python 规范)

6.1 对齐清单ai06 初稿 + ai12 增补)

  • 权限装饰器等价物:当前 HTTP 端点全部裸露,无权限校验。阶段 2 需设计 FastAPI Depends 权限依赖AI 出题需 AI_QUESTION_GENERATE 权限,表达优化需 AI_EXPRESSION_OPTIMIZE
  • 错误码前缀统一:当前无错误码体系,降级时返回 degraded: true 但无业务错误码。阶段 2 需定义 AI_* 错误码清单
  • logger / metrics / tracer 三支柱(已具备)
  • /healthz + /readyz 健康检查已具备readyz 含 LLM 配置状态)
  • 优雅关闭 SIGTERM当前 lifespan 无显式 drainLLM 流式请求需等待完成)
  • 测试覆盖率 ≥ 80%当前 0%,无 tests/ 目录
  • Dockerfile 多阶段构建:当前单阶段FROM python:3.12-slim
  • Pydantic 输入验证:当前仅 ChatRequest 是 BaseModelgenerate/questionoptimize/expression 直接接收 prompt: str / text: str query param无请求体模型。阶段 2 需补完整 Pydantic 请求/响应模型
  • 配置通过 pydantic-settings 管理(已具备)
  • 异步优先httpx async + AsyncGenerator stream
  • 类型注解强制已基本符合main.py 函数返回值已标注)
  • LLM Provider 适配器模式:当前仅 OpenAI 兼容 REST,未抽象 Provider 接口。阶段 2 需设计 LLMProvider 抽象 + OpenAI/Anthropic/百川/本地 多适配器
  • Prompt 模板管理:当前 Prompt 硬编码在 main.py,阶段 2 需设计模板管理DB 或文件)
  • 用量计费 / 频率限制:当前无用量记录和限流,阶段 2 需设计Kafka 事件 + Redis 限流)
  • 备课工作流:当前未实现pending-features P5 要求"分析学情 → 推荐知识点 → 生成题目 → 教师审核 → 入库"完整工作流
  • ruff check 零错误:需阶段 2 验证

6.2 ai12 增补响应信封对齐P0 强制)

  • 响应信封改为 ActionState004 §11.5 强制约束)
    • 当前违反:{success: true, data: ..., degraded: false} 顶层 degraded 字段
    • 必须改为:{success: true, data: ...} + 失败时 {success: false, error: {code, message, details: {degraded: true}, traceId}}
    • 影响:所有 HTTP 端点 + gRPC RPC 返回值
    • 提请 coord 在 known-issues §2.9 记录

6.3 ai12 增补:长期架构对齐项

  • API 版本化策略:当前无版本前缀,建议 P5 加 /ai/v1/* 前缀,便于未来破坏性变更
  • gRPC server interceptor 透传 trace context:当前 HTTP 用 FastAPIInstrumentor 自动埋点gRPC server 需补 grpc.aio.ServerInterceptor 透传 W3C traceparent
  • 下游 gRPC client interceptor:调 content / data-ana 的 gRPC client 需补 client interceptor 注入 trace context + 失败重试 + 熔断
  • PII 脱敏:学生姓名、家长手机号等 PII 数据在写入 prompt 前必须脱敏(防止泄露给 LLM Provider
  • Prompt 注入防御:用户输入的 prompt 必须经 sanitize去除 SQL/HTML/JS 注入模式)后再拼入 system prompt
  • 输出内容审核LLM 输出必须经敏感词过滤 + 安全校验后再返回(防止生成不当内容)
  • 生成结果质量门禁:题目生成必须经规则校验(题型匹配/答案非空/解析合理)+ LLM-as-judge质量评分不达标重新生成或降级
  • 多租户用量配额:按学校/年级/教师维度配置 token 预算,超额拒绝调用(避免单一学校耗尽预算)

服务审计表 — ai12ai 部分)

对照 ai-allocation.md §10 审计模板。ai 为 Python/FastAPI黄金模板对齐按 Python 规范coding-standards §4评估。 符号说明: 已实现 | 缺失 | ⚠️ 部分实现 | 📋 P5 待实现 | 🔮 P6+ 长期演进

服务 权限校验 错误码前缀 logger metrics tracer /healthz /readyz 优雅关闭 测试覆盖率 Dockerfile 响应信封 gRPC server Provider 适配 Prompt 模板 限流/计费 备课工作流 PII 脱敏 质量门禁
ai structlog prometheus OTeldev 跳过) (含 LLM 状态) ⚠️ 仅 lifespan 关闭 0% 单阶段 偏离 待实现 待实现 硬编码 待实现 待实现 缺失 缺失

审计发现的关键差距(按优先级)

P0 阻塞 P5 交付ai06 初稿 + ai12 增补)

  1. P0 权限校验缺失:所有 /ai/* 端点裸露AI 出题等敏感操作无权限校验
  2. P0 gRPC server 未实现ai.proto 定义了 AiService(含 StreamChat 流式 RPC但 ai 当前仅 HTTP。阶段 2 需引入 grpc.aio 实现 gRPC server + 流式 RPC
  3. P0 gRPC client 未实现004 §4.1 明确 AI → Content / AI → DataAna 走 gRPC当前未实现。阶段 2 需设计 gRPC client 调用 content / data-ana
  4. P0 响应信封偏离 ActionStateai12 增补004 §11.5 强制约束,当前违反
  5. P0 LLM Provider 适配器缺失:当前 llm_client.py 仅 OpenAI 兼容 REST未抽象 Provider 接口。pending-features P5 + ai-allocation.md §5 要求"LLM Provider 适配OpenAI/百川/本地模型)"
  6. P0 Prompt 模板管理缺失system prompt 硬编码在 main.py无模板管理。ai-allocation.md §5 要求"模板 CRUD + 参数注入:年级/学科/难度/知识点"
  7. P0 备课工作流缺失pending-features P5 + ai-allocation.md §5 要求"分析学情 → 推荐知识点 → 生成题目 → 教师审核 → 入库"完整工作流,当前仅"生成题目"单步
  8. P0 用量计费 / 频率限制缺失无用量记录token 消耗)、无频率限制(用户可无限调用 LLM。ai-allocation.md §5 要求"按用户/按 IP/按 token 消耗"

P1 P5 阶段需补齐ai12 增补)

  1. P1 题目逐字流式生成缺失:当前 /ai/chat/stream 仅支持聊天流式未实现题目生成的逐字流式ai-allocation.md §5 "题目逐字生成 + 前端打字机效果"
  2. P1 Prompt 模板 CRUD API 缺失ai-allocation.md §5 要求"模板 CRUD",当前无 API
  3. P1 多维度限流缺失ai-allocation.md §5 要求"按用户/按 IP/按 token 消耗"三维度,当前仅设计用户级
  4. P1 测试覆盖率 0%:无 tests/ 目录
  5. P1 Dockerfile 单阶段:未做多阶段构建
  6. P1 Pydantic 输入验证不完整generate/questionoptimize/expression 直接接收 query param无请求体模型

P2 P6+ 长期演进ai12 增补)

  1. P2 PII 脱敏缺失:学生姓名/家长手机号等写入 prompt 前未脱敏,存在数据泄露风险
  2. P2 Prompt 注入防御缺失:用户输入未 sanitize存在 SQL/HTML 注入风险
  3. P2 输出内容审核缺失LLM 输出未过滤敏感词,存在生成不当内容风险
  4. P2 生成结果质量门禁缺失:题目未校验题型/答案/解析合理性,可能生成不可用题目
  5. P2 多租户用量配额缺失:无学校/年级级配额,单一学校可能耗尽预算
  6. P2 评估框架缺失:无 LLM-as-judge / 人工评估机制,无法持续提升生成质量
  7. P2 RAG 语义检索缺失:当前仅基于 content 知识点查询,无向量库语义检索
  8. P2 多模态支持缺失:未规划图片/音频题目生成(数学几何题/英语听力题)
  9. P2 语义缓存缺失:仅 hash 缓存,无基于 embedding 相似度的语义缓存
  10. P2 A/B 测试基础设施缺失:无法对比不同 prompt/模型的效果
  11. P2 RLHF 数据收集缺失:无教师反馈(采纳/拒绝/修改)记录机制
  12. P2 长运行工作流持久化缺失:备课工作流的"教师审核"步骤可能跨数小时/天,无持久化机制

阶段 1 待 coord 交叉审查的跨模块契约对齐项

ai06 初稿提请项(已在 coord 交叉审查报告中仲裁)

# 议题 涉及方 仲裁结论
2 ai 是否发布 edu.insight.ai.usage 用量事件 ai → data-ana 已仲裁coord 补登 topic见 004 §7.2events.proto 待补 AIUsageEvent messagecoord 负责)
3 data-ana / ai 是否需要实现 gRPC server data-ana / ai ← teacher-bff / student-bff / ai 已仲裁:分阶段启用,见 004 §4.2 gRPC 启用阶段矩阵ai 在 P5 启用(含 StreamChat
6 ai 备课工作流是否引入 Temporal ai + coord ⚠️ 部分仲裁004 §2.3 列出 Temporal 用于"工作流编排考试生命周期、AI 编排)"P3 已引入试点ai12 建议简单工作流用 BackgroundTasks长运行评估 Temporal待 P6 决策
7 LLM Provider 切换的配置化 ai + coord ⚠️ 部分仲裁ai12 设计 LLMProvider 抽象 + 配置化路由(按 model 名路由);本地模型走 Ollama REST API待 P6 评估是否提取到 shared-py

ai12 新增提请项(待 coord 仲裁)

# 议题 涉及方 ai12 建议
A1 ai gRPC 端口 50058004 §1.2 端口矩阵需补登 ai + coord ai HTTP 3008 + gRPC 50058HTTP+10050 规则);提请 coord 同步 004 §1.2 + 全局端口表 infra/port-allocation.md
A2 ai.proto 待补全:备课工作流 RPC + 题目逐字流式 RPC + ChatRequest/GenerateQuestionRequest 字段扩展 ai + coord 见 §3.2 ai12 增补待补全项;建议 coord 在 P5 启动前完成 proto 升级到 v1 完整版
A3 events.proto 待补 AIUsageEvent message004 §7.2 已确认 topic 但 proto 未定义 ai + coord + data-ana 协调 data-ana ai11 共同定义 payload schemaai12 已在 02-architecture-design.md §5.2 给出建议 schema
A4 iam GetEffectiveDataScope gRPC RPCai 需查询用户 DataScope 用于多租户配额校验 ai + coord + iam coord 已仲裁 P4 补全§15.3 #5ai12 在 P5 实施时调用
A5 响应信封偏离 ActionState 强制整改004 §11.5 已约束ai 当前违反 ai + coord P5 实施时必须整改;提请 coord 在 known-issues §2.9 记录
A6 Prompt 模板存储位置YAML 文件 vs DB ai + coord ai12 建议 P5 用 YAML 文件(services/ai/src/ai/prompts/*.yamlP6+ 评估迁移 DB与 ai06 初稿一致
A7 长运行工作流持久化:备课工作流"教师审核"步骤可能跨数小时/天 ai + coord ai12 建议 P5 用 Redis 暂存(短期 24h TTL+ BFF 编排审核状态P6 评估迁移 Temporal 或自建 workflow_state 表
A8 多模态支持规划:图片/音频题目生成(数学几何/英语听力) ai + coord ai12 建议 P5 仅文本P6+ 评估多模态proto v2 预留 multimodal_content 字段
A9 评估框架归属LLM-as-judge 在 ai 内部 vs 独立 evaluation 服务 ai + coord ai12 建议 P5/P6 在 ai 内部实现避免服务拆分过早P7+ 评估独立
A10 RLHF 数据收集:教师反馈事件 AIFeedbackRecorded 是否新增 topic ai + coord + data-ana ai12 建议 P6+ 评估topic: edu.insight.ai.feedbackdata-ana 落 ClickHouse 供未来 fine-tune

AI Agent: ai12 (ai) ← ai06初稿 Branch: 单仓库并行模式(直接提交 main Coordinator: coord-ai