P5 课程设计段向导 — 验证报告
日期:2026-08-22
目录:/home/zyw/Downloads/ai-lesson-prep
依据:《v0.2修订执行计划》P5 范围/DoD/演示;A7/A9/B6;《设计说明书-v0.2》§5.1/§8.2/§6.3
========================================================================
1. 环境
========================================================================
Node:v20.15.1(构建时 Next 14.2.35)
Prisma:5.22.0
模型:deepseek-v4-flash
BASE_URL:https://api.deepseek.com
API Key:已配置(不回写明文)
种子:2024级法学1班 id=2;法学模板 LAW;第七章「舆情分析与立场检测」lesson id=12
画像:verified_at=null(待验证)
npm scripts:p5:test / p5:demo
========================================================================
2. 实现清单(课程设计段)
========================================================================
页面
/prepare 班级选择卡;待验证班显著标注锁定文案
/prepare/[classId] 三栏向导(课时列表 | 步骤主区 | 操作)
导航「备课」;工作台/班级卡/班级详情可进入
步骤(A7/A9 首段)
1. 班级画像:模板 + content_depth 意向;分布只读;verified_at 为空时
显著标注「基于问卷的待验证假设,需首月课堂观察修正」
P4 上下文 assembleContextBlocks 已改为携带该锁定文案
2. 本班课程目标:POST /api/tasks type=curriculum(或 objectives)
输入=公共 course_outcomes + 法学模板 + 画像分布;教师可编辑后保存
3. 考核方案:type=outline focus=assessment;形成性/终结性节点+权重提示
4. 周进度:type=outline focus=weekly_schedule;按章节骨架;保存入 course_outlines
确认:status draft→confirmed,已确认后再保存则 version+1 新草稿
5. 主案例 3 选 1(A7):AI type=case_select;知识点匹配失败时库内补位
教师选 1 写入 lesson_plans.draft_content.main_case_id
6. 确认页 + 右侧栏:六条质量标准标题骨架(B6;完整校验 P6)
课时列表
全课程课时 + 七态徽章(灰未开始 / 蓝生成中 / 黄草稿 / 绿已确认)
基于 lesson_plans.status
任务
复用 P4 /api/tasks;新增 type:curriculum / objectives / case_select
便捷封装 POST /api/lesson-plans/generate(step 映射)
失败展示 P4 结构化 error(code/message)
闸门 G2
生成 lesson_plan 且课型为案例型(请求 lessonType 或模板偏好全为案例/辩论/模拟法庭)
且无 main_case_id / caseId → 拒绝,文案「案例型课须先选主案例」
UI 按钮在无主案例时 disabled;API 同样拦截(P6 无法绕过)
========================================================================
3. 主案例选择与 G2 前置
========================================================================
存储:lesson_plans.draft_content.main_case_id(不改 Prisma 表,避免动 P1)
推荐:CaseKnowledgePoint 计分 + 模板关联补位 + 案例库补足 3 条;
AI 从候选里选出恰好 3 条(含 teaching_note 摘要);AI 失败则用库匹配。
G2 判定:
- 显式 lessonType 为案例型 → 必须已选主案例
- 未指定 lessonType 且模板 preferred_lesson_type 全部为案例型 → 必须已选
- 讲授等非案例型不拦截
生成教案时优先读所选主案例 teaching_note(不再静默用库内第一条顶替)
curl 实测(lessonId=12, lessonType=案例讨论, 无主案例):
{"error":"案例型课须先选主案例","code":"g2_no_main_case"}
脚本实测:无主案例 ok=false;传入流浪狗案例 id=1 则 ok=true
========================================================================
4. 真实生成(type=curriculum 课程目标草稿)
========================================================================
任务 id=3 status=done 耗时≈46s
model=deepseek-v4-flash
usage≈ prompt 3072 + completion 6331 = 9403 tokens(含 reasoning_tokens 5240)
class_outcomes=7(编码全部沿用公共 O1-1…O5-1 / O3-2)
1. O1-1 概念理解 — 结合司法 AI / 生成责任澄清能力边界;点出编程基础薄弱(待验证)
2. O1-2 概念理解 — 舆情流程中标出人工判断环节;流浪狗情境
3. O2-1 应用与人机协作 — 公开工具检索+人工核验,向导式操作
4. O3-1 批判评价 — 误判/反讽等出错场景
5. O3-2 批判评价 — 比较治理方案,破「算法中立」迷思(待验证)
6. O4-1 伦理与治理 — AI 输出能否作处置/裁判依据
7. O5-1 专业情境迁移 — 名誉权/舆情处置可操作建议
rationale 明确写:画像来自教师预填、需首月课堂观察修正。
当时 flagged=true:课程设计产物被教案对齐自检(要求 objectives≥3)误伤;
随后 generate.ts 仅对 lesson_plan/materials 启用对齐标红,课程设计段不再误伤。
原始任务结果保留在 generation_tasks.id=3,不以样例 JSON 冒充模型输出。
========================================================================
5. 单测 / 构建 / 冒烟
========================================================================
npx tsx scripts/test-p5.ts passed=33 failed=0
npx tsx scripts/test-p4.ts passed=48 failed=0(P4 未破坏)
npm run build exit 0;新增
/prepare /prepare/[classId]
/api/course-outlines /api/course-outlines/confirm
/api/lesson-plans /api/lesson-plans/generate /api/lesson-plans/main-case
/api/lessons/[id]/case-candidates
curl(next start :3010,admin / Admin@123456):
未登录 GET /prepare 307 → /login
登录后 GET /prepare 200 含「2024级法学1班」与待验证
登录后 GET /prepare/2 200 课程设计段;锁定文案;六条标题;
课时列表(七态)/ 本班目标 / 考核 / 周进度 / 主案例
POST /api/lesson-plans/generate step=plan lessonType=案例讨论 无主案例
400 g2_no_main_case
本环境无浏览器 MCP,未做点击级 UI 巡检;页面行为以 RSC HTML + API 冒烟代替。
========================================================================
6. 遗留问题
========================================================================
1. 课时开发段(课时目标/教案/PPT/材料确认闭环)属 P6;本 P 只前置 G2 与主案例。
2. 六条标准仅标题骨架;adaptation_log / 按失败条目再生成 / 学时比对在 P6。
3. 主案例存在 draft_content JSON,无独立列;P6 写 plan 时须 merge 不得覆盖 main_case_id。
4. 模型 JSON 仍可能截断或改字段名;课程设计段沿用 P4 重试+标红。
5. 已确认大纲上再点「确认」会先另存 version+1 草稿再确认(符合 version 递增,但无编辑也会 +1)。
6. 占位章知识点少,主案例推荐多靠模板/案例库补位;第七章三课匹配最完整。
7. generation_tasks 中断卡在 running 仍无回收(P4 遗留,MVP 可接受)。