# 问题陈述 将 `question` 拆分为可演进的习题/作业/批改核心域,并在同一计划中处理错题复习、费曼讲解、推荐闭环与小程序学生端作业可见规则。 ## 当前状态(已确认) * 架构与 API 已定义 `question` 为核心业务域,覆盖题库、作业、提交、批改、复习。参考 `docs/architecture/api-design.md (42-61)`、`docs/architecture/logical-view.md (58-66)`。 * 当前后端尚无 `question` 服务代码,能力主要体现在 `init/pg/question` 表结构。参考 `backend/pom.xml (11-20)`、`init/pg/question/10_create_question_tables.sql (1-1272)`。 * SQL 已覆盖题库/作业/批改/错题/复习/讲解评估,并把推荐与画像并入 `question.rc_*`。参考 `init/pg/question/10_create_question_tables.sql (1041-1272)`。 * 复习策略已有租户级默认种子(E1-E6)。参考 `init/pg/question/20_init_question_seed.sql (8-56)`。 * 功能清单对错题、变式题、费曼评估、复习提醒、推荐闭环都有明确诉求。参考 `docs/AI智能学习系统功能清单.md (11-24)`、`docs/AI智能学习系统功能清单.md (91-108)`。 ## 模块拆分与设计细节 ### 1) 子模块边界 * `question-bank`:题库、题目、题目知识点关联。 * `question-assignment`:试卷、作业、投放对象、提交与答案。 * `question-grading`:批改任务、答案评分、错因标签、知识点分析。 * `question-review`:错题沉淀、艾宾浩斯计划与执行。 * `question-explanation`:费曼讲解提交、评估与维度评分。 * `question-recommendation-bridge`:保留 `rc_*` 闭环数据(中期可再独立 recommendation 服务)。 ### 2) 小程序学生端规则 * 小程序仅面向学生,`assignment` 查询必须限制为“学生所在班级 + 已发布 + 节点类型为课堂练习/课后作业”。 * 对应教师创建课程中的课件节点,不在学生端作业列表和详情返回。 * 通过 `course.cl_node_homework_rel.relation_type(IN_CLASS/AFTER_CLASS)` 与班级成员关系联合过滤。 ### 3) 数据与契约修正 * 强化 `hw_assignment_target.target_ref_id` 的对象完整性(按 `target_type` 校验 class_id/student_id 存在且同租户)。 * 补充“变式题生成任务”数据结构(任务、来源错题、生成题、命中策略),连接功能清单中的举一反三链路。 * `gd_answer_grade` 继续作为统一批改结果主表,避免客观/主观分表回退。 * 推荐闭环暂存于 `question` 时,需定义清晰子包边界,避免与习题核心耦合扩散。 ### 4) 租户隔离策略 * 所有 `hw_* / gd_* / rc_*` 读写统一按 `tenant_id` 强过滤。 * 跨表关联(submission->student、assignment->class、recommendation->user)均执行租户一致性断言。 * 对 AI 生成、图检索、向量检索调用记录 tenant 维度与来源对象,便于追溯越权风险。 ## 问题点与风险 * `question` 当前“超大域”承载习题+复习+讲解+推荐,若不先做包级拆分,后续维护成本会快速上升。 * 目前无运行时代码,尽管 SQL 完整,但缺业务规则执行层,容易出现“表有字段、行为缺失”。 * `target_ref_id` 弱关联容易引发错投放与越权读取。 * 功能清单的变式题追踪链路在现有表中仍缺专门任务模型。 ## 需确认的设计决策 * 推荐相关 `rc_*` 是短期保留在 `question`,还是本阶段即拆到 `recommendation` 独立服务。 * 变式题生成首期是否强依赖 AI 服务,或先以规则模板生成保障可交付。 * 费曼评估通过阈值与回流规则(与系统文档口径)是否纳入一期强约束。