# AI 模块审计报告 V2 — 深度可用性分析与行业对标

> 审计范围：基于 V1 审计报告（`ai-module-audit-report.md`）已完成的实现，进行第二轮深度审计。
> 审计日期：2026-06-23
> 审计方法：逐组件可用性走查 + 行业标杆对标（Khanmigo / Duolingo Max / Squirrel AI / Century Tech）+ 多角色用户旅程分析
> 审计依据：`docs/standards/coding-standards.md`、`docs/architecture/004_architecture_impact_map.md`、行业研究

---

## 一、V1 完成度回顾

### 1.1 已完成项

| 编号 | V1 改进项 | 状态 | 实现位置 |
|------|----------|------|---------|
| P0-1 | AI 聊天端点权限校验 | ✅ | [actions.ts](file:///e:/Desktop/CICD/src/modules/ai/actions.ts) `aiChatAction` |
| P0-2 | AI 独立模块 | ✅ | `src/modules/ai/` 完整结构 |
| P0-3 | exam-ai-generator i18n | ✅ | [exam-ai-generator.tsx](file:///e:/Desktop/CICD/src/modules/exams/components/exam-ai-generator.tsx) |
| P0-4 | AI 管线错误消息 i18n | ✅ | [request.ts](file:///e:/Desktop/CICD/src/modules/exams/ai-pipeline/request.ts) |
| P0-5 | ai-suggest.ts 类型安全 | ✅ | [ai-suggest.ts](file:///e:/Desktop/CICD/src/modules/lesson-preparation/ai-suggest.ts) |
| P1-1 | AiService 接口抽象 | ✅ | [types.ts](file:///e:/Desktop/CICD/src/modules/ai/types.ts) |
| P1-2 | 可复用 AI 组件 | ✅ | 9 个组件 |
| P1-3 | AI Error Boundary | ✅ | [ai-error-boundary.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-error-boundary.tsx) |
| P1-4 | 错题集 AI 集成 | ✅ | [ai-error-book-analysis.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-error-book-analysis.tsx) |
| P1-5 | 改题 AI 集成 | ✅ | [ai-grading-assist.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-grading-assist.tsx) |
| P1-6 | AI 使用监控 | ✅ | [usage-tracker.ts](file:///e:/Desktop/CICD/src/modules/ai/services/usage-tracker.ts) |
| P1-7 | 备课 AI 内容生成 | ✅ | [ai-lesson-content-generator.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-lesson-content-generator.tsx) |
| P2-4 | 题目变体生成 | ✅ | [ai-question-variant-generator.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-question-variant-generator.tsx) |
| P2-7 | 架构图同步 | ✅ | 004/005 文档 |

### 1.2 未完成项（V2 重点）

| 编号 | V1 改进项 | 状态 | 原因 |
|------|----------|------|------|
| P2-1 | 流式响应 | ❌ | V1 仅实现非流式 |
| P2-2 | AI 对话历史 | ❌ | 未持久化 |
| P2-3 | Prompt 可配置化 | ⚠️ | 模板已抽取但仍硬编码在 TS 文件中 |
| P2-5 | 多 Provider 对比 | ❌ | 未实现 |
| P2-6 | 内容安全过滤 | ❌ | 未实现 |

---

## 二、深度可用性走查（逐组件）

### 2.1 AiChatPanel — 通用聊天面板

**文件**：[ai-chat-panel.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-chat-panel.tsx)

| 编号 | 问题 | 严重度 | 位置 | 行业对标 | 用户影响 |
|------|------|--------|------|---------|---------|
| U2.1.1 | **无流式响应** — 用户等待完整 AI 回复才看到内容 | P0 | L77-96 | Khanmigo/Duolingo 均使用 SSE 流式输出，逐 token 渲染 | 长文本（>500 字）等待 10-30 秒，用户以为卡死 |
| U2.1.2 | **无 Markdown 渲染** — AI 回复以纯文本显示 | P0 | L139 | 所有主流 AI 产品均渲染 Markdown（代码块、列表、表格） | AI 生成的代码、表格、列表无法正确显示，可读性极差 |
| U2.1.3 | **无复制按钮** — 用户无法复制 AI 回复 | P1 | L132-141 | ChatGPT/Claude 均提供 hover 复制按钮 | 教师想复用 AI 生成的内容需手动选择文本 |
| U2.1.4 | **无停止生成按钮** — 流式时无法中断 | P1 | — | Khanmigo 明确将 stop-generation 列为 K12 必备 | AI 生成不当内容时无法及时止损 |
| U2.1.5 | **无建议提示词** — 空状态无引导 | P1 | L119 | Khanmigo 首屏展示"试试问我..."建议 | 新用户不知道能问什么，首次使用门槛高 |
| U2.1.6 | **无清除对话按钮** — i18n 键 `chat.clear` 存在但无 UI | P1 | — | 所有聊天产品均有清空按钮 | 对话越来越长，上下文窗口爆满后 AI 回复质量下降 |
| U2.1.7 | **无对话历史持久化** — 刷新页面对话丢失 | P1 | L44 | Khanmigo 提供 chat history 面板 | 教师备课时生成的 AI 内容刷新即丢失 |
| U2.1.8 | **无 token/模型指示器** — 用户不知道用了哪个模型 | P2 | — | OpenAI PlayGround 显示模型与 token 用量 | 无法评估 AI 调用成本 |
| U2.1.9 | **aria-live 缺失** — 屏幕阅读器无法感知新消息 | P1 | L121 | WCAG 2.1 AA 要求 | 视障用户无法使用 |

### 2.2 AiGradingAssist — 批改辅助

**文件**：[ai-grading-assist.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-grading-assist.tsx)

| 编号 | 问题 | 严重度 | 位置 | 行业对标 | 用户影响 |
|------|------|--------|------|---------|---------|
| U2.2.1 | **CardDescription 与 CardTitle 使用相同 i18n 键** | P0 | L97 `t("grading.title")` | — | 描述区域显示重复文字，UI 不专业 |
| U2.2.2 | **无批量批改** — 一次只能批改一题 | P1 | — | Khanmigo 的 student work summary 支持批量 | 教师批改 30 人 × 5 道主观题 = 150 次点击 |
| U2.2.3 | **无分数对比** — 不显示教师已给分数 vs AI 建议 | P1 | — | — | 教师无法快速判断 AI 建议是否合理 |
| U2.2.4 | **无置信度阈值配置** — 低置信度建议也直接展示 | P2 | L87 | — | confidence < 0.5 的建议可能误导教师 |
| U2.2.5 | **无 Socratic 模式** — 直接给分而非引导思考 | P2 | — | Khanmigo 的 Socratic 方法不直接给答案 | 教师过度依赖 AI，丧失独立判断 |

### 2.3 AiErrorBookAnalysis — 错题本分析

**文件**：[ai-error-book-analysis.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-error-book-analysis.tsx)

| 编号 | 问题 | 严重度 | 位置 | 行业对标 | 用户影响 |
|------|------|--------|------|---------|---------|
| U2.3.1 | **无"立即练习"按钮** — 相似题生成后只能"选择" | P0 | L150-159 | Duolingo Max 的 "Explain My Answer" 后直接进入练习 | 学生看到相似题但无法直接作答，流程断裂 |
| U2.3.2 | **薄弱点分析不持久化** — 刷新即丢失 | P1 | L59 | Squirrel AI 持续追踪薄弱点变化趋势 | 无法追踪薄弱点改善进度 |
| U2.3.3 | **无 SM2 算法集成** — AI 相似题不进入复习队列 | P1 | — | Squirrel AI 的闭环：诊断→练习→复习→再诊断 | AI 生成的相似题是一次性的，无法形成学习闭环 |
| U2.3.4 | **无趋势可视化** — 薄弱点无历史趋势图 | P2 | — | Century Tech 的 dashboard 展示 mastery 进展 | 学生/家长无法看到进步 |
| U2.3.5 | **无难度递进** — 相似题难度不随掌握度调整 | P2 | L69 `count: 3` | Squirrel AI 的自适应难度 | 掌握度高的学生仍收到简单题，浪费时间 |

### 2.4 AiLessonContentGenerator — 备课内容生成

**文件**：[ai-lesson-content-generator.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-lesson-content-generator.tsx)

| 编号 | 问题 | 严重度 | 位置 | 行业对标 | 用户影响 |
|------|------|--------|------|---------|---------|
| U2.4.1 | **CardDescription 与 CardTitle 使用相同 i18n 键** | P0 | L108 `t("lessonPrep.generateContent")` | — | 描述区域重复 |
| U2.4.2 | **附加上下文 label 使用错误键** | P0 | L131 `t("lessonPrep.generateContent")` | — | 标签显示"生成内容"而非"附加上下文" |
| U2.4.3 | **placeholder 使用错误键** | P0 | L137 `t("lessonPrep.generateContent")` | — | 占位符显示"生成内容" |
| U2.4.4 | **插入按钮使用错误键** | P0 | L178 `t("lessonPrep.generateContent")` | — | 按钮显示"生成内容"而非"插入内容" |
| U2.4.5 | **无内容预览/编辑** — 生成后直接插入 | P1 | L168-180 | Khanmigo 生成的内容可编辑后再插入 | 教师无法微调 AI 生成的内容 |
| U2.4.6 | **无生成历史** — 无法回看之前生成的内容 | P1 | — | Khanmigo 的 chat history | 教师生成了 5 段内容，只能保留最后 1 段 |
| U2.4.7 | **无课程标准对齐** — 生成内容不关联课标 | P2 | — | Khanmigo 与课程标准对齐 | 生成内容可能偏离教学大纲 |

### 2.5 AiQuestionVariantGenerator — 题目变体生成

**文件**：[ai-question-variant-generator.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-question-variant-generator.tsx)

| 编号 | 问题 | 严重度 | 位置 | 行业对标 | 用户影响 |
|------|------|--------|------|---------|---------|
| U2.5.1 | **所有变体类型标签使用相同 i18n 键** | P0 | L87-89 全部 `t("exam.generate")` | — | 三个选项显示相同文字"生成"，无法区分 |
| U2.5.2 | **无批量生成** — 一次只生成 1 个变体 | P1 | — | — | 教师需要 5 个变体需点击 5 次 |
| U2.5.3 | **无难度滑块** — different_difficulty 无法指定目标难度 | P1 | — | — | 教师无法控制变简单还是变难 |
| U2.5.4 | **无知识点映射展示** — 不显示变体覆盖的知识点 | P2 | — | Squirrel AI 的知识图谱可视化 | 教师无法验证变体是否覆盖目标知识点 |

### 2.6 AiSuggestionCard — 相似题建议卡片

**文件**：[ai-suggestion-card.tsx](file:///e:/Desktop/CICD/src/modules/ai/components/ai-suggestion-card.tsx)

| 编号 | 问题 | 严重度 | 位置 | 行业对标 | 用户影响 |
|------|------|--------|------|---------|---------|
| U2.6.1 | **无难度筛选** — 所有难度混合展示 | P2 | — | — | 学生只想练习中等难度题时无法筛选 |
| U2.6.2 | **无"全部添加"按钮** — 需逐题选择 | P2 | — | — | 批量添加效率低 |

### 2.7 全局架构层面

| 编号 | 问题 | 严重度 | 行业对标 | 用户影响 |
|------|------|--------|---------|---------|
| U2.7.1 | **无全局 AI 助手入口** | P0 | Khanmigo 嵌入式助手 / Duolingo 角色触发 | 用户在非集成页面无法获取 AI 帮助 |
| U2.7.2 | **无上下文感知** | P0 | Khanmigo 自动感知当前学习内容 | AI 不知道用户当前在做什么，建议不精准 |
| U2.7.3 | **无内容安全过滤** | P0 | Khanmigo 多层 moderation + Duolingo 人工审核 | 学生可能接触不当内容，违反 COPPA/FERPA |
| U2.7.4 | **无家长 AI 功能** | P1 | Khanmigo 家长可见聊天记录 / Squirrel AI 24/7 家长面板 | 家长无法获取子女学情 AI 摘要 |
| U2.7.5 | **无管理员 AI 仪表盘** | P1 | Khanmigo district dashboard / Century Tech 全校视图 | 管理员无法监控 AI 使用量与成本 |
| U2.7.6 | **无学生学习路径** | P1 | Squirrel AI 纳米级知识图谱 / Century Tech nuggets | 学生缺少个性化学习引导 |
| U2.7.7 | **无每日交互限制** | P1 | Khanmigo 每日上限防止滥用 | 学生可能过度使用 AI 聊天偏离学习 |

---

## 三、行业标杆对标

### 3.1 竞品功能矩阵

| 能力 | Khanmigo | Duolingo Max | Squirrel AI | Century Tech | 本系统 V1 | 本系统 V2 目标 |
|------|----------|-------------|-------------|-------------|----------|--------------|
| **流式输出** | ✅ SSE | ✅ SSE | ✅ | ✅ | ❌ | ✅ |
| **Markdown 渲染** | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| **Socratic 模式** | ✅ 不直接给答案 | — | — | — | ❌ | ✅ |
| **内容安全过滤** | ✅ 多层 moderation | ✅ 人工+AI | ✅ 物理中心 | ✅ 教师监督 | ❌ | ✅ |
| **对话历史** | ✅ 可查看 | ✅ | ✅ | ✅ | ❌ | ✅ |
| **全局助手入口** | ✅ 嵌入式 | ✅ 角色触发 | ✅ 平台级 | ✅ Dashboard | ❌ | ✅ |
| **上下文感知** | ✅ 内容库集成 | ✅ 课程对齐 | ✅ 诊断驱动 | ✅ 自适应 | ❌ | ✅ |
| **学习路径推荐** | — | — | ✅ 纳米级 | ✅ nuggets | ❌ | ✅ |
| **家长面板** | ✅ 聊天记录可见 | — | ✅ 24/7 分析 | — | ❌ | ✅ |
| **管理员仪表盘** | ✅ district | — | ✅ | ✅ 全校 | ❌ | ✅ |
| **每日限制** | ✅ | — | — | — | ❌ | ✅ |
| **停止生成** | ✅ | ✅ | — | — | ❌ | ✅ |
| **批量批改** | ✅ student summary | — | — | ✅ 自标记 | ❌ | ✅ |
| **自适应难度** | — | ✅ | ✅ 核心 | ✅ | ❌ | ✅ |

### 3.2 关键差距分析

#### 差距 1：无流式响应（影响所有 AI 交互）

**行业做法**：
- Khanmigo 和 Duolingo Max 均使用 SSE 流式输出
- 逐 token 渲染模拟"打字效果"，降低感知延迟
- 配合"停止生成"按钮，让用户可控

**我们的差距**：
- 所有 AI 调用等待完整响应才返回
- 长文本生成时用户看到的是空白 + loading spinner
- 无法中断不当内容生成

**影响**：用户体验差，长文本等待 10-30 秒，学生误以为系统卡死

#### 差距 2：无内容安全过滤（影响学生侧）

**行业做法**（Khanmigo 多层防护）：
1. **输入过滤**：Moderation API 分类用户输入，拦截暴力/自残/色情/PII
2. **输出过滤**：AI 回复展示前扫描
3. **行为限制**：每日交互上限
4. **透明审计**：所有聊天记录对家长/教师可见
5. **自动告警**：moderation 触发时邮件通知成人
6. **访问控制**：未成年人仅通过家长/学区订阅

**我们的差距**：
- 学生可直接调用 AI 聊天，无任何过滤
- 无每日限制
- 无聊天记录审计
- 无不当内容告警

**影响**：违反 COPPA/FERPA 合规要求；学生可能接触不当内容；学校无法审计 AI 使用

#### 差距 3：无全局 AI 助手入口

**行业做法**：
- Khanmigo：嵌入式聊天集成在教师/学生 dashboard 中
- Duolingo Max：角色图标触发（Lin, Eddy 等角色）
- 通用模式：右下角悬浮按钮 → 侧边抽屉

**我们的差距**：
- AI 仅嵌入在 4 个特定页面（备课/错题/试卷/批改）
- 用户在其他页面无法获取 AI 帮助
- 无上下文感知（AI 不知道用户当前页面）

**影响**：AI 使用率低；用户在需要时找不到 AI 入口

#### 差距 4：无学习路径推荐

**行业做法**：
- Squirrel AI：纳米级知识分解（10,000+ 节点），诊断驱动路径
- Century Tech：nuggets 微内容 + 自适应路径
- 共同点：诊断 → 路径 → 练习 → 复习 → 再诊断的闭环

**我们的差距**：
- 错题本 AI 分析是一次性的，不持久化
- AI 生成的相似题不进入 SM2 复习队列
- 无知识图谱可视化
- 无自适应难度

**影响**：AI 价值未形成闭环；学生缺少个性化学习引导

#### 差距 5：无家长/管理员 AI 功能

**行业做法**：
- Khanmigo：家长可查看子女聊天记录；学区管理员有 dashboard
- Squirrel AI：24/7 家长分析面板
- Century Tech：全校课程覆盖视图

**我们的差距**：
- 家长端无任何 AI 功能
- 管理员无 AI 使用统计
- 无成本监控

**影响**：家长无法获取子女学情 AI 摘要；管理员无法优化 AI 使用策略

---

## 四、V2 改进优先级

### P0（紧急 — 影响安全与核心体验）

| 编号 | 改进项 | 对标 | 实现方向 |
|------|--------|------|---------|
| V2-P0-1 | **流式响应（SSE）** | Khanmigo/Duolingo | 新增 `aiChatStreamAction` + EventSource API + 停止生成按钮 |
| V2-P0-2 | **Markdown 渲染** | 所有竞品 | 引入 `react-markdown` + `remark-gfm`，AI 回复渲染为富文本 |
| V2-P0-3 | **内容安全过滤** | Khanmigo 多层防护 | 输入/输出双层过滤 + 每日限制 + 学生侧 Socratic 模式 |
| V2-P0-4 | **全局 AI 助手悬浮按钮** | Khanmigo 嵌入式 | 右下角悬浮按钮 → 侧边抽屉，上下文感知 |
| V2-P0-5 | **修复 i18n 键错误** | — | 修复 AiGradingAssist/AiLessonContentGenerator/AiQuestionVariantGenerator 中重复/错误键 |
| V2-P0-6 | **复制按钮 + 清除对话** | ChatGPT/Claude | AiChatPanel 增加 hover 复制 + 清除对话按钮 |
| V2-P0-7 | **建议提示词** | Khanmigo | 空状态展示角色相关的建议问题 |
| V2-P0-8 | **aria-live 无障碍** | WCAG 2.1 AA | 消息列表添加 `aria-live="polite"` |

### P1（重要 — 影响功能完整性）

| 编号 | 改进项 | 对标 | 实现方向 |
|------|--------|------|---------|
| V2-P1-1 | **AI 对话历史持久化** | Khanmigo | localStorage 存储最近 20 条对话 + 历史面板 |
| V2-P1-2 | **家长 AI 学情摘要** | Khanmigo 家长面板 / Squirrel AI | 新增 `AiChildSummary` 组件 + `generateChildSummaryAction` |
| V2-P1-3 | **管理员 AI 使用统计** | Khanmigo district / Century Tech | 新增 `AiUsageDashboard` 组件 + `getAiUsageStatsAction` |
| V2-P1-4 | **学生学习路径推荐** | Squirrel AI / Century Tech | 新增 `AiStudyPath` 组件 + `recommendStudyPathAction` |
| V2-P1-5 | **错题相似题"立即练习"** | Duolingo Max | AiErrorBookAnalysis 增加"练习"按钮，进入答题流程 |
| V2-P1-6 | **备课内容预览/编辑** | Khanmigo | AiLessonContentGenerator 生成后可编辑再插入 |
| V2-P1-7 | **批量 AI 批改** | Khanmigo student summary | 新增 `AiBatchGradingAssist` 组件 |
| V2-P1-8 | **每日交互限制** | Khanmigo | Server Action 层按用户+日期计数，超限返回 429 |

### P2（优化 — 提升体验与扩展性）

| 编号 | 改进项 | 对标 | 实现方向 |
|------|--------|------|---------|
| V2-P2-1 | **自适应难度** | Squirrel AI | 相似题难度根据 masteryLevel 动态调整 |
| V2-P2-2 | **薄弱点趋势可视化** | Century Tech | 薄弱点历史趋势图 |
| V2-P2-3 | **知识点映射展示** | Squirrel AI 知识图谱 | 变体生成后展示覆盖的知识点 |
| V2-P2-4 | **多 Provider 对比** | — | 同一 Prompt 并行调用多 Provider |
| V2-P2-5 | **Prompt 可配置化** | — | Prompt 模板存入数据库，支持版本管理 |
| V2-P2-6 | **token/模型指示器** | OpenAI PlayGround | AiChatPanel 显示模型与 token 用量 |
| V2-P2-7 | **Socratic 模式** | Khanmigo | 学生侧 AI 不直接给答案，引导思考 |

---

## 五、用户旅程分析（多角色）

### 5.1 教师旅程

**场景**：张老师要批改 30 名学生的语文主观题作业

**当前流程（V1）**：
1. 进入作业批改页 → 看到学生列表
2. 点击学生 A → 看到主观题答案
3. 点击"AI 批改建议" → 等待 5 秒 → 看到 AI 建议
4. 点击"应用分数" → 点击"应用反馈"
5. 点击下一个学生 → 重复 2-4
6. **总计**：30 学生 × 3 题 × 4 次点击 = 360 次点击

**行业最佳实践（Khanmigo）**：
1. 进入批改页 → AI 自动扫描所有学生答案
2. AI 批量生成评分建议（student work summary）
3. 教师查看汇总，快速确认/调整
4. **总计**：1 次批量生成 + 30 次确认 = 31 次点击

**差距**：缺少批量批改能力，效率差 10 倍

### 5.2 学生旅程

**场景**：李同学做错了一道数学题，想针对性练习

**当前流程（V1）**：
1. 进入错题本 → 看到错题列表
2. 点击错题 → 打开详情对话框
3. 点击"AI 智能分析" → 等待 → 看到相似题
4. 点击"选择" → 相似题... 然后呢？**流程断裂**
5. 无法直接练习相似题

**行业最佳实践（Duolingo Max）**：
1. 做错题 → "Explain My Answer" 按钮
2. AI 解释为什么错 → 直接进入"再练一题"
3. 相似题难度自适应 → 形成学习闭环

**差距**：相似题生成后无法直接练习，无自适应难度，无学习闭环

### 5.3 家长旅程

**场景**：王家长想了解子女近期学习情况

**当前流程（V1）**：
1. 进入家长 dashboard → 看到成绩/考勤
2. **无任何 AI 功能**
3. 需手动翻阅各科成绩自行分析

**行业最佳实践（Squirrel AI）**：
1. 家长面板 → AI 自动生成子女学情摘要
2. AI 识别薄弱点 → 给出家庭辅导建议
3. 24/7 可查看详细分析

**差距**：家长端完全无 AI 能力

### 5.4 管理员旅程

**场景**：赵校长想了解全校 AI 使用情况

**当前流程（V1）**：
1. **无任何 AI 管理功能**
2. 无法知道哪些教师在用 AI
3. 无法知道 AI 成本
4. 无法知道 AI 效果

**行业最佳实践（Khanmigo district）**：
1. 管理员 dashboard → AI 使用量趋势
2. 按教师/学科/班级分解
3. 成本统计 + 异常告警

**差距**：管理员完全无 AI 可见性

---

## 六、V2 实现方案

### 6.1 流式响应架构

```
客户端 (EventSource)
  └─▶ POST /api/ai/chat/stream (SSE Route)
        └─▶ aiChatStreamAction (Server Action)
              └─▶ AiService.chatStream() (返回 AsyncGenerator)
                    └─▶ createAiChatCompletionStream() (OpenAI SDK stream: true)
```

**关键设计**：
- 使用 Server-Sent Events（SSE）而非 WebSocket（单向足够，更简单）
- 客户端用 `fetch` + `ReadableStream` 消费（EventSource 不支持 POST）
- 支持 `AbortController` 中断生成
- 流式完成后 `withAiTracking` 记录完整 token 用量

### 6.2 全局 AI 助手架构

```
app/(dashboard)/layout.tsx
  └─▶ <AiAssistantWidget /> (全局悬浮按钮)
        ├─▶ usePathname() 感知当前页面
        ├─▶ 根据路由推断上下文（如 /teacher/homework → 批改上下文）
        └─▶ 侧边抽屉 <AiChatPanel>
              ├─▶ systemPrompt 根据上下文动态生成
              └─▶ contextMessage 注入当前页面信息
```

**上下文感知规则**：
| 路由模式 | 上下文 | systemPrompt |
|---------|--------|-------------|
| `/teacher/homework/*` | 作业批改 | "You are a grading assistant..." |
| `/teacher/lesson-plans/*` | 备课 | "You are a lesson planning assistant..." |
| `/teacher/exams/*` | 试卷 | "You are an exam design assistant..." |
| `/student/error-book/*` | 错题本 | "You are a study tutor. Use Socratic method..." |
| `/student/homework/*` | 做作业 | "You are a homework helper. Don't give direct answers..." |
| `/parent/*` | 家长面板 | "You are a family education advisor..." |

### 6.3 内容安全过滤架构

```
aiChatAction (Server Action)
  ├─▶ 1. 输入过滤：filterUserInput(messages)
  │      └─▶ 检查关键词/PII/不当内容 → 拦截返回错误
  ├─▶ 2. 每日限制：checkDailyLimit(userId)
  │      └─▶ 超限返回 429
  ├─▶ 3. 调用 AI：service.chat()
  ├─▶ 4. 输出过滤：filterAiOutput(content)
  │      └─▶ 扫描不当内容 → 替换/拦截
  └─▶ 5. 记录审计：logAiInteraction(userId, messages, response)
```

**学生侧额外限制**：
- Socratic 模式：system prompt 强制不直接给答案
- 每日上限：50 条消息（可配置）
- 关键词过滤：暴力、自残、色情、PII

### 6.4 i18n 新增键结构

```json
{
  "chat": {
    "streaming": "AI is typing...",
    "stopGeneration": "Stop generating",
    "copy": "Copy",
    "copied": "Copied!",
    "clearConfirm": "Clear all messages?",
    "suggestedPrompts": {
      "teacher": ["Help me grade this", "Generate a lesson activity", "Create a quiz question"],
      "student": ["Explain this concept", "Give me a practice question", "Help me study"],
      "parent": ["How is my child doing?", "What should I focus on at home?"],
      "admin": ["Show AI usage stats", "Which teachers use AI most?"]
    }
  },
  "safety": {
    "blocked": "Your message was blocked by safety filter",
    "dailyLimit": "Daily AI usage limit reached. Please try again tomorrow.",
    "studentMode": "AI is in student mode. It will guide you to find the answer."
  },
  "parent": {
    "summary": "AI Learning Summary",
    "generateSummary": "Generate Summary",
    "weaknessHint": "Areas to focus on",
    "suggestion": "Family tutoring suggestion"
  },
  "admin": {
    "usageDashboard": "AI Usage Dashboard",
    "totalCalls": "Total AI Calls",
    "activeUsers": "Active Users",
    "costEstimate": "Estimated Cost",
    "topUsers": "Top Users",
    "byCapability": "By Capability"
  },
  "studyPath": {
    "title": "Your Learning Path",
    "nextSteps": "Recommended Next Steps",
    "mastered": "Mastered",
    "inProgress": "In Progress",
    "needsWork": "Needs Work"
  },
  "lessonPrep": {
    "additionalContext": "Additional context",
    "additionalContextPlaceholder": "Add any specific requirements...",
    "insertContent": "Insert Content",
    "editBeforeInsert": "Edit before insert"
  },
  "exam": {
    "variantType": {
      "same_knowledge_point": "Same knowledge point, different context",
      "different_difficulty": "Different difficulty",
      "different_format": "Different format"
    }
  }
}
```

---

## 七、架构图同步说明

V2 实现后需在 004/005 文档中新增以下节点：

### 7.1 新增导出

| 文档 | 节点 | 内容 |
|------|------|------|
| 005 | `modules.ai.exports.functions` | 新增 `aiChatStreamAction`、`generateChildSummaryAction`、`getAiUsageStatsAction`、`recommendStudyPathAction` |
| 005 | `modules.ai.exports.components` | 新增 `AiAssistantWidget`、`AiMarkdownRenderer`、`AiChildSummary`、`AiUsageDashboard`、`AiStudyPath`、`AiBatchGradingAssist` |
| 005 | `modules.ai.exports.services` | 新增 `filterUserInput`、`filterAiOutput`、`checkDailyLimit`、`logAiInteraction` |
| 004 | AI 模块章节 | 新增 V2 组件清单与安全过滤说明 |

### 7.2 新增路由

| 文档 | 节点 | 内容 |
|------|------|------|
| 005 | `routes` | 新增 `/api/ai/chat/stream`（SSE 端点） |

### 7.3 新增依赖

| 文档 | 节点 | 内容 |
|------|------|------|
| 005 | `dependencyMatrix` | `parent → ai`、`dashboard → ai`（全局 widget） |

---

## 八、总结

V1 完成了 AI 模块的基础架构与四大业务场景集成，但在**用户体验深度**、**安全合规**、**多角色覆盖**三个方面与行业标杆存在显著差距。

V2 的核心目标是：
1. **补齐流式 + Markdown + 安全过滤**三大基础体验
2. **新增全局助手 + 上下文感知**提升 AI 可达性
3. **覆盖家长 + 管理员**两个缺失角色
4. **实现学习路径推荐**形成学习闭环
5. **修复 i18n 键错误**消除 UI 缺陷

实现后，AI 模块将达到 Khanmigo 级别的功能完整度，满足 K12 教育场景的安全合规要求。
