Files
ClassFeedback/.workbuddy/skills/课评生成/SKILL.md

949 lines
47 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.
---
name: 课评生成
description: 快速生成个性化课评,你只需提供学生本节课的表现,自动匹配班级风格生成高质量课评
type: skill
---
# 🎯 课评生成器技能包
## 🌟 功能说明
本技能专为穹狼科创编程课程设计,**使用超简单:你只需要告诉我学生的基本信息和本节课表现,我就能自动生成符合班级风格的个性化课评**。
✅ 支持课程:AIAGENT03班 / CSP04班 / CSP00班 / 体验课(2026秋季新学期)
✅ 自动匹配班级专属风格:CSP要求型 / AIAGENT温暖鼓励型 / 体验课转化型
✅ **CSP00/CSP04班课评已升级为 v2 提交诊断式写法**(见下方强制规则;数据源改用全班逐生逐次提交诊断,不再用旧版 OJ 简表)
## ⚠️ CSP 课评强制规则(v2 · 严格执行)
**适用范围**:所有 CSP 班级(CSP00 / CSP04)。**本规则优先级最高,覆盖本技能中其它关于 CSP 与 OJ 的旧写法。**
生成任何 CSP 课评前,**必须先加载并执行**项目技能 `.claude/skills/class-feedback-report/SKILL.md`
(技能名 `class-feedback-report`),按它的「班级课堂反馈与提交诊断」流程产出课评:
1. **数据来源改用提交诊断**:用该技能的 `scripts/fetch-class-data.mjs` 拉取**全班逐生逐次提交**
(代码 + 编译报错 + 状态 + 客观题),不再使用旧版 `scripts/get_student_oj.py` 的单行 OJ 简表。
2. **报告结构必须按该技能的固定模板**(🌟值得表扬 → 📊完成情况 → 💻编程题逐题诊断(第1次提交错在哪…第N次通过)→ 📝选择题/判断题错题分析 → 📖整体分析 → ✅建议)。
3. **必须产出家长版三件套**:`<姓名>-<班组>-<章节号>-反馈报告.{md,html,pdf}`,
HTML 以 `samples/report-sample.html` 为样式基准,`pdf` 用 `scripts/mkpdf.mjs` 生成(单页 660px)。
4. **审核红线**(必须写进每次交付说明):报告是草稿、须教师审核;只写学习习惯不写人身评价;
代码/报错/错题选项只发对应家长、不进班级群;不做学生横向对比排名。
5. **存档结构改用新技能体系**(见下方「CSP 班(v2 存档结构)」):
`Class-2026-X/<班组>/<学生>/` + `Students/<学生>/profile.md`。
> AIAGENT03 班、体验课 **不**适用本规则,仍按本技能原有流程与存档(`.claude/memory/class/...` + `output/课评汇总/`)执行。
>
> **快速触发**:对 AI 说「整理 XX 班的课堂反馈」或「引导我进行操作」即可调用该技能;其脚本自动读取仓库根 `.env`(已配置 OJ 凭据)。
## 🌐 课评网页模版统一规则(一键导出 PDF · 强制执行)
**适用范围**:所有课评网页模版与由本技能生成的课评网页(AIAGENT 结构模板、C++/CSP 结构模板、CSP v2 家长版 `report-sample.html`、课评汇总网页等)。**强制,无例外。**
每张课评网页**必须**带一个**一键导出 PDF** 按钮,统一采用零依赖的 `window.print()` 方案(浏览器原生「另存为 PDF」,离线可用、不依赖任何外部库),并配 `@media print` 打印样式:
1. **按钮**:`🖨️ 导出 PDF`,点击即调起打印面板(用户选「保存为 PDF」即可)。
2. **打印样式必须**(否则家长收到的 PDF 会缺色/错位):
- 隐藏所有悬浮控件:导出按钮、下载按钮、提示 toast(`display:none!important`);
- `* { -webkit-print-color-adjust:exact!important; print-color-adjust:exact!important; }` 保留渐变与配色;
- 卡片 `break-inside:avoid` 避免内容被分页截断;背景置白、去掉多余留白;
- 若有入场动画(`.animate-in` 等)需在打印时强制 `opacity:1; animation:none`。
3. **标准实现直接复用**:参考 `.claude/skills/class-feedback-report/samples/report-sample.html` 的 `.export-btn` + `@media print` 片段,整段拷过去即可,无需重写。
> 已合规模版:`samples/report-sample.html`(CSP v2)。两份结构模板 `output/课评汇总/模板/AIGENT课评结构模板.html`、`output/课评汇总/模板/C++课评结构模板 .html` 本次已补齐「导出 PDF」按钮。今后新增/改写任何课评网页,都先确认带此按钮再交付。
## 💡 使用方式
### 交互式问答(推荐)
输入 `/课评生成`,我会按顺序问你以下信息:
```
📝 问题1:这次写哪个班?(列出当前所有班级选项)
AIAGENT03班:周五下午1700、周六晚上1900、周日早上0845、周日下午1400
CSP04班:周六早上0830、周六下午1400
CSP00班:周五晚上1900(2课时)
体验课
📝 问题2(AIAGENT03班):作品文件夹路径是什么?
📝 问题3(CSP00/CSP04班):OJ题目的token是什么?
📝 问题4:本节课出勤情况如何?(来了哪些学生,谁请假)
```
你回答完所有问题,我就会自动完成整个课评生成流程!
---
## 🔄 自动完成的工作
你提供信息后,我会自动完成:
### 第1阶段:课评准备
1. 使用python-docx读取录音转写文件
2. AI分析录音文本,识别"发言人1,2,3"对应的学生
3. **AIAGENT班**:查看作品文件夹,分析每个学生作品的创意和亮点
4. 读取课程计划,获取5个知识点
5. 读取每个学生的画像
6. **CSP00/CSP04班**:使用token查询OJ做题数据
### 第2阶段:课评生成
1. 读取班级风格指南
2. 为每个学生生成个性化课评(约200字)
- 引用录音中的具体例子
- **AIAGENT班**:描述作品创意和亮点
- **CSP班**:包含OJ做题数据
3. 生成班级总结
### 第3阶段:课评质检+修订(自动,无需确认)
1. 自动调用课评质检系统(证据审计员 + 质量评审员 + 5位家长视角)
2. 质检调度器汇总意见,调用终稿编辑产出修订稿
3. 三档放行规则自动处理:
- **≥85分**:保存原稿
- **70-84分**:直接采用修订稿
- **<70分**:直接采用修订稿(质检系统已做最佳修订)
4. 丰富度评分记录在案
### 第4阶段:保存归档(自动,无需确认)
1. 保存个人课评(保存的是质检后的最佳版本)
2. 保存到周汇总
3. 保存班级总结
4. 更新学生画像
5. 生成课评汇总网页
6. 输出完成报告
---
## 📂 从课堂录音批量生成课评(推荐工作流)
录音转写文件放在 `D:\03-下载` 目录,我会自动查找读取,自动完成以下流程:
### 🤖 交互式问答流程
当橙子输入 `/课评生成` 时,使用 **AskUserQuestion** 工具按顺序询问:
**第1轮:班级**
- 问题1:写哪个班?(单选,列出当前所有班级选项:AIAGENT03 / CSP04 / CSP00 / 体验课)
- 各班级均有固定教案,直接读取课程知识点,不询问课程内容
**第2轮:补充材料**
- 问题2(CSP00/CSP04班):OJ题目的token
- 问题2(AIAGENT03班):作品文件夹路径
- 问题3:出勤情况(文本输入,说明谁来了、谁请假)
**收集完成后**,自动调用流水线的agent完成课评生成(全程自动,无需确认)。
### 🔄 智能体流水线模式
课评生成已拆分为4个阶段,按流水线方式协作完成(全程自动,无需用户确认):
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
│ 课评准备阶段 │ ──→ │ 课评生成阶段 │ ──→ │ 课评质检+修订阶段 │ ──→ │ 保存归档阶段 │
│ (Agent 1) │ │ (Agent 2) │ │ (质检调度器) │ │ (收尾阶段) │
└─────────────────┘ └─────────────────┘ └─────────────────────┘ └─────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
收集所有数据 生成课评内容 自动质检+修订 自动保存+归档
• 确认班型班次 • 读取风格指南 • 证据审计 • 保存个人课评
• 录音解析(AI分析) • 读取课评模板 • 质量评分 • 保存周汇总
• 课程计划匹配 • 生成个人课评 • 5位家长视角检查 • 保存班级总结
• 学生画像读取 • 生成班级总结 • 终稿编辑修订 • 更新学生画像
• OJ数据获取 • 三档自动放行 • 生成汇总网页
```
**优势**:
- 每个阶段职责清晰,便于调试和优化
- 可以单独重跑某个阶段(如只重跑质检)
- 阶段间数据传递标准化,减少错误
---
### 输入文件格式
橙子提供的课堂录音转写文件为 `.docx` 格式,包含整节课的完整录音转写文本。
**录音转写文件特点**:
- 自由文本格式,包含老师和学生的对话
- 只有"发言人1"、"发言人2"、"发言人3"这样的标识,没有具体姓名
- 可能包含时间戳(如"[00:05:30]")
- 内容为整节课的完整记录,需要AI分析识别发言人
**示例内容**:
```
[00:00:15] 发言人1:好,同学们,今天我们来学习循环嵌套...
[00:02:30] 发言人2:老师,我有个问题...
[00:05:45] 发言人1:问得很好,大家注意看...
[00:10:20] 发言人3:老师,我这个程序运行不出来...
```
**AI识别说明**:
- 发言人1通常是老师(讲解知识、提问、点评)
- 发言人2、3等通常是学生(回答问题、提问、讨论)
- 需要根据对话内容判断每个发言人对应的学生
**Word文档格式**:
- 同样包含表格,记录学生姓名、出勤状况和课评描述
- 使用 `python-docx` 库自动读取,无需手动转换
### 工作流程
```
确认班型班次 → 读取录音转写(docx) → AI分析识别发言人 → 获取课程知识点 → 读取学生画像 → 润色生成 → 确认修改 → 课评质检 → 保存
```
### 1. 读取课堂录音转写文件
自动从 `D:\03-下载` 目录读取课堂录音转写文件(`.docx` 格式),查找该目录下最新的 `.docx` 文件:
**⚠️ 关键:docx 中文在终端显示会乱码,必须分两步读取!**
**第一步:用 python-docx 提取文本并保存为 UTF-8 txt 文件**
```python
from docx import Document
def extract_docx_to_txt(docx_path):
"""从docx提取文本,保存为UTF-8 txt文件(避免终端乱码)"""
doc = Document(docx_path)
# 提取所有段落文本
text = '\n'.join([p.text for p in doc.paragraphs if p.text.strip()])
# 保存为UTF-8 txt
txt_path = docx_path.replace('.docx', '_提取.txt')
with open(txt_path, 'w', encoding='utf-8') as f:
f.write(text)
return txt_path
# 对 D:\03-下载 目录下的每个录音文件执行
import glob
for fpath in glob.glob(r'D:\03-下载\*.docx'):
txt_path = extract_docx_to_txt(fpath)
print(f'已提取: {txt_path}')
```
**第二步:用 Read 工具读取 txt 文件**
```
Read 工具直接读取 _提取.txt 文件,中文显示完全正常
```
> **为什么这样做?** python-docx 底层 XML 是 UTF-8 编码,能正确读取中文。但 bash 终端渲染 UTF-8 中文时会产生乱码。保存为 txt 后,用 Read 工具读取即可正常显示。
>
> **清理**:课评保存完成后,删除 `_提取.txt` 临时文件。
**录音文本特点**:
- 语音转文字质量参差不齐,常见同音字、模糊识别
- 整节课的完整转写,包含老师和学生的对话
- 带时间戳(如"发言人 00:04")
- 可能有"发言人1"、"发言人2"等编号(老师通常是发言人1)
- 学生姓名可能被转写为同音字(如"圆振"→"原证"、"艺嘉"→"YGX")
**AI分析提取学生表现**:
直接读取 `_提取.txt` 文件内容,分析时注意:
- 结合学生姓名和可能的同音字变体来定位个体表现
- 语音识别误差大的段落需结合上下文推断
- 关注:被点名回答、主动提问、完成进度、老师评语等关键事件
```python
# 分析提示词
analysis_prompt = f"""
分析以下课堂录音转写文本,提取每个学生的表现信息。
班级学生名单:{student_list}
注意:语音转文字可能存在同音字,请结合上下文推断学生身份(如"原证"可能是"圆振")。
请为每个学生提供:
1. 出勤状况:正常上课 / 请假 / 未到
2. 课堂表现摘要(100-200字):
- 参与度如何
- 哪些知识点掌握得好
- 遇到什么问题
- 有什么亮点表现
录音文本:
{recording_text}
请以JSON格式输出。
"""
```
> **日期规则**:根据用户提供的周次信息推算具体日期,或在交互式问答时直接询问用户确认授课日期。
### 2. 匹配课程计划
根据班级标题中的关键词匹配对应课程计划:
| 班级标题关键词 | 课程计划路径 | 课程编号 |
|---|---|---|
| AIAGENT03 | `.claude/lesson/AIAGENT/AIAGENT-03/2026秋季课程计划.md` | AIAGENT03 |
| CSP00 / CSP04 | `.claude/lesson/CSP/CSP03/课程计划.md` | CSP00 / CSP04 |
| 体验课 | `.claude/lesson/体验课/` | 体验课 |
从课程计划中提取对应课次的:
- **课程名称**(如《进制转换》)
- **教学目标 5个知识点**
> **重要**:教案中的"教学目标"5条直接作为课评的5个知识点,不得修改或编造。
### 3. 读取学生画像
对每个学生,读取其个人画像档案:
**路径**:`.claude/memory/class/[班级]/[姓名]/profile.md`
### 4. 润色生成课评
对录音中提取的**每一个学生**,根据出勤状况处理,确保每个人都有对应记录:
| 出勤状况 | 处理方式 | 保存位置 |
|---|---|---|
| 正常上课 | 读取画像 + 润色表现摘要 → 生成完整课评 | 本班学生feedback目录 |
| 请假 | 生成请假记录 | 本班学生feedback目录 |
| 未上课 | 生成未到课记录 | 本班学生feedback目录 |
| 补课-来自XX班 | 读取画像 + 润色表现摘要 → 生成完整课评 | **补课班级**的`补课/[姓名]/feedback/`目录 |
**润色规则**(对正常上课和补课学生):
- 保留录音中提取的所有事实(不能遗漏任何信息)
- 根据学生画像调整语气和侧重(如内向学生多鼓励,活泼学生提专注)
- 套用对应班级的固定开头(5个知识点)和结尾风格
- 将100-200字的表现摘要扩展为约200字的完整家长信格式课评
- **绝不编造**录音中没有提到的内容
**⚠️ CSP00/CSP04班级专属(已升级为 v2 提交诊断式,见顶部「CSP 课评强制规则 v2 · 严格执行」)**:
CSP 课评**不再使用** `get_student_oj.py` 简表。生成前必须先加载并执行 `.claude/skills/class-feedback-report/SKILL.md`,
用 `scripts/fetch-class-data.mjs` 拉取全班逐生逐次提交(代码+编译报错+状态+客观题),按该技能的
「班级课堂反馈与提交诊断」流程产出课评与家长版 HTML/PDF。下方原 OJ 数据板块格式仅供历史参考,不再使用。
**输出示例**:
```markdown
嘉博家长好,本周学习的内容是《魔幻俄罗斯方块(下)》:
1. 理解"自动化测试"的概念
2. 理解"测试覆盖":每条规则都应有对应测试
3. 功能扩展的增量思维
4. 增量需求文档的编写方法
5. 测试脚本生成与结果解读
嘉博今天表现特别棒~对增量需求文档的理解很到位,能够自己写出清晰的测试用例~
和AI协作完成俄罗斯方块的调试,遇到困难没有放弃,特别有韧性~
要是可以在写需求文档的时候再仔细检查一下边界条件就更好啦~
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
```
### 6. 生成班级总结(所有班级)
录音中提取的**每一个班级**都会生成本节课的班级总结,不局限于特定班级:
**内容来源**:
- 课程名称 + 5个知识点(来自课程计划)
- 该班级所有学生的整体表现(基于录音中提取的表现摘要汇总)
- 亮点学生、共性问题、课堂趣事
**保存路径**:`.claude/memory/class/[班级]/summaries/YYYYMMDD_课程编号-课次_班级反馈.md`
**格式**:使用对应班级自己的模板(`.claude/memory/class/[班级]/summaries/群发文案模板.md`或`班级反馈模板.md`)
### 7. 自动课评质检(橙子无需确认,自动执行)
课评生成后,**直接自动**调用课评质检系统进行质量检查:
**质检流程**(自动执行,无需用户触发):
1. 调用「课评质检调度器」Agent
2. 调度器自动协调9个质检Agent(证据审计员、质量评审员、5位家长、终稿编辑)
3. 输出:质检报告 + 修订稿(如有问题)
**三档放行规则(自动处理)**:
- **直接发送**(≥85分且无硬伤):保持原稿,进入保存流程
- **修订后发送**(70-84分或有改进点):**直接采用终稿编辑的修订稿**,进入保存流程
- **必须重写**(<70分或触发硬伤):**直接采用终稿编辑的修订稿**,进入保存流程
> ⚡ **三种情况均自动进入保存流程,无需橙子确认。**
**质检报告格式**:
```
📋 课评质检报告
【总分】XX / 100
【结论】直接发送 / 修订后发送 / 必须重写
【一、证据审计】
- 已核实:...
- 存疑/风险:...
【二、硬伤检查】
- 触发:无 / 第X项(说明)
【三、主要问题】(按严重程度排)
1. ...
【四、修订稿】
(若结论为"修订后发送"或"必须重写",给出完整修订后的课评)
【五、修改说明】
- 改了什么、为什么改
```
**⚠️ CSP课评质检优先使用 Agents 系统**:
CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质检,该系统包含:
| Agent | 路径 | 功能 |
|-------|------|------|
| **课评质检调度器** | `.claude/agents/课评质检调度器/agent.md` | 协调9个质检Agent的工作流程 |
| **课评证据审计员** | `.claude/agents/课评证据审计员/agent.md` | 事实核对(OJ数据、知识点等) |
| **课评质量评审员** | `.claude/agents/课评质量评审员/agent.md` | 100分制评分 + 硬伤检查 |
| **课评终稿编辑** | `.claude/agents/课评终稿编辑/agent.md` | 根据反馈生成修订稿 |
| **家长-忙碌实用型** | `.claude/agents/家长-忙碌实用型/agent.md` | 快速扫读体验 |
| **家长-结果导向型** | `.claude/agents/家长-结果导向型/agent.md` | 信息缺口检查 |
| **家长-细节核对型** | `.claude/agents/家长-细节核对型/agent.md` | 文内一致性检查 |
| **家长-焦虑保护型** | `.claude/agents/家长-焦虑保护型/agent.md` | 情绪风险检查 |
| **家长-成长陪伴型** | `.claude/agents/家长-成长陪伴型/agent.md` | 成长性反馈 |
**质检执行方式**:
```
调用 课评质检调度器 → 调度器自动协调9个Agent → 输出质检报告 + 修订稿
```
**核心原则**(来自Agents系统):
1. **事实以证据审计员为准**:家长视角的数字意见一律忽略
2. **不做学生横向比较**:揪出"最高/最快/分水岭/紧随XX"等比较词
3. **术语家长能懂**:OLE/CE/WA/SJF/AC这类缩写要解释或换成白话
4. **结合学生性格**:完美主义型先肯定韧性再谈方法;佛系型正向收尾不施压
5. **老师是最终决策者**:给建议和修订稿,老师决定用不用(但默认直接采用修订版)
### 8. 保存归档(自动保存质检后的最佳版本)
**无需橙子确认**,质检完后直接自动保存:
| 质检结论 | 保存的版本 | 说明 |
|---------|-----------|------|
| 直接发送(≥85分) | 原稿(已通过质检) | 原稿本身就是高质量的,直接保存 |
| 修订后发送(70-84分) | **修订稿**(质检后修改版) | 质检发现问题 → 终稿编辑修订 → **自动保存修订版** |
| 必须重写(<70分) | **修订稿**(质检后修改版) | 质检发现问题 → 终稿编辑修订 → **自动保存修订版** |
1. 保存到学生个人单次课评文件
2. **保存到统一周课评汇总**(`E:/cc/4work_project/ClassFeedback/output/课评汇总/`),**后写的课评放在最前面**
3. 保存班级总结
4. 更新学生画像
### 9. 更新学生画像(自动)
保存课评的同时,根据本节课表现**适当更新**学生画像 `profile.md`:
**更新原则**:
- 只记录**新发现**或**明显变化**,不重复已有信息
- 更新位置:在 profile.md 的"近期表现"或"课堂观察"部分追加
**触发更新的典型情况**:
- 展现出新的兴趣点(如"首次表现出对XX的浓厚兴趣")
- 能力有明显进步(如"打字速度比上学期快了很多")
- 性格/态度变化(如"从内向变得愿意主动提问")
- 需要持续关注的问题(如"近两次课专注力有所下降")
- 特殊事件(如"第一次独立完成完整作品")
**不更新的情况**:
- 表现和画像中已有描述一致
- 只是常规课堂表现,无特殊变化
- 一次性的小问题(如"今天迟到")
更新格式示例:
```markdown
**2026-05-14 第11课观察**:
- 对增量需求文档的理解力有提升,能自己写出测试用例
- 遇到困难时不再马上求助,会先尝试独立调试
```
---
## 📊 课评质量评分标准(生成时必须遵循)
> 总分 100 分 = 规范性(50 分) + 丰富度(50 分)
> **生成课评时必须按照此标准自检,确保每条课评都达到高质量要求!**
### 一、规范性(自动检测,合计 50 分)
| 评分项目 | 分值 | 满分判定规则 | 扣分规则 |
|----------|------|--------------|----------|
| **字数合规** | 10 | 正文字数区间:180–350 字 | 超出 / 低于区间按梯度扣分 |
| **禁用词检查** | 10 | 全文无禁用词汇 | 每出现 1 个禁用词扣 2 分,扣完本项为止 |
| **结构完整性** | 10 | 评语必须包含三要素:知识点总结 + 学情反馈 + 教师签名 | 缺任一要素酌情扣分 |
| **Emoji 使用** | 10 | 全篇使用数量 3–5 个 | 过少 / 过多酌情扣分 |
| **称呼规范** | 10 | 使用学生小名、或去掉姓氏直呼名字 | 称呼格式不规范扣分 |
**禁用词清单**(生成时必须避免):
- 笼统空泛词:表现不错、继续努力、很好、很棒(无具体细节时)
- 敷衍词:还可以、一般、还行
- 批评词:太差、不认真、不用心、态度有问题
**自检要点**:
- ✅ 字数:课评正文(不含知识点和OJ数据)在 180–350 字之间
- ✅ 禁用词:不使用上述禁用词,用具体描述代替笼统评价
- ✅ 结构:必须有知识点总结(固定开头)+ 学情反馈(主体)+ 教师签名(结尾)
- ✅ Emoji:全篇 3–5 个,分布在夸奖、建议、结尾等位置
- ✅ 称呼:三字姓名去掉姓氏(如"陈圆振"→"圆振"),两字姓名直呼名字
### 二、丰富度(AI 语义分析,合计 50 分)
| 评分项目 | 分值 | 高分评判标准 |
|----------|------|--------------|
| **具体化程度** | 15 | 评语包含具体行为细节,描述有画面感,不笼统空泛 |
| **课后建议质量** | 15 | 给出可落地、可执行的个性化课后练习 / 提升方案,不是套话建议 |
| **个性化纵向对比** | 10 | 结合学生过往学情画像,对比本次表现,体现进步 / 退步追踪 |
| **专业知识点体现** | 10 | 紧扣课程核心知识点点评,体现授课专业度,不泛泛闲聊 |
**丰富度提升技巧**:
**具体化程度(15分)**:
- ❌ "嘉博今天表现不错"(笼统,0分)
- ✅ "嘉博今天自己一字一字打字,和AI聊了一节课,特别专注"(具体行为,15分)
- ✅ "嘉博今天主动问老师'内层循环每执行完一次,外层循环的变量会变吗?',说明在认真思考"(引用原话,15分)
- 技巧:引用学生在录音中的原话,或描述具体行为,让家长看到孩子真实的课堂表现
**课后建议质量(15分)**:
- ❌ "继续加油"、"多练习"(套话,0分)
- ✅ "课后可以试着用AI生成一个故事,然后自己改编结尾,锻炼创意表达"(可执行,15分)
- 技巧:给出"做什么"、"怎么做"、"达到什么效果"
**个性化纵向对比(10分)**:
- ❌ 不提过往表现(0分)
- ✅ "比上节课专注力明显提升,能完整听完讲解再动手"(有对比,10分)
- 技巧:读取学生画像,对比上次表现,指出进步/需要保持的地方
**专业知识点体现(10分)**:
- ❌ "今天学了新知识"(泛泛,0分)
- ✅ "对角色设置+限制条件+输出格式的系统提示词优化,有一定了解"(专业,10分)
- 技巧:紧扣本节课教案中的知识点,用专业术语点评
---
## ⚙️ 核心生成逻辑(全程自动,无需人工确认)
```
1. 确认班型和班次 → 2. 读取参考资料 → 3. AIAGENT班分析作品 / CSP班拉取OJ数据 → 4. 生成个性化课评 → 5. 自动质检+修订 → 6. 自动保存
```
### 1. 自动读取参考资料
我会自动找到以下资料用于生成课评:
- **学生画像**:`.claude/memory/class/[班级]/[姓名]/profile.md`(了解学生性格特点和适用风格)
- **班级风格指南**:根据课程类型读取对应规则(`.claude/rules/[课程].md`)
- **课评格式模板**:根据课程类型选择对应模板(`.claude/templates/[课程].md`),包含标准版和极简版
- **本节课教案**:AIAGENT03班到 `.claude/lesson/AIAGENT/AIAGENT-03/2026秋季课程计划.md` 按课次查找对应教案;**CSP00/CSP04班到 `.claude/lesson/CSP/CSP03/课程计划.md`**
- **过往课评**:读取该学生的历史课评,避免重复用词
- **课堂录音转写**:`.docx`格式,使用python-docx库读取,AI分析提取学生表现
- **AIAGENT班作品**:查看作品文件夹,分析每个学生作品的创意和亮点
> 💡 **模板库路径**:`../../templates/`
> - `AIAGENT.md`:AIAGENT创意编程课评模板(标准版 + 极简版)
> - `CSP.md`:C++/CSP课程课评模板
> - `KITTEN.md`:Kitten课程课评模板
> - `课评汇总网页.html`:家长版课评汇总HTML网页模板(翻页浏览、温暖画册风格)
### 2. AIAGENT班级专属:查看作品文件夹(必须执行)
**⚠️ 这是强制步骤,AIAGENT课评必须包含作品创意描述!**
**执行时机**:在生成每个AIAGENT学生的课评**之前**,先查看该学生的作品文件夹。
**执行流程**:
1. 识别出AIAGENT班级的学生
2. 查看作品文件夹(橙子提供的本地路径)
3. 分析每个学生作品的:
- 创意点:有什么独特的想法
- 技术点:用了什么技术实现
- 亮点:有什么特别出彩的地方
4. 将作品分析**用中文写进课评**中
**示例**(生成陈嘉博的AIAGENT课评):
```
嘉博今天表现特别棒~主动问老师关于循环嵌套的问题,说明在认真思考~
自己完成了课堂练习,特别专注!作品是一个猜数字游戏,用了独特的渐变色背景,
还添加了音效和暂停功能,创意很棒!
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
```
### 3. CSP班级专属:自动获取OJ做题数据(必须执行 · 已升级为 v2,见顶部规则)
> ⚠️ **CSP 课评已改用 `.claude/skills/class-feedback-report` 的提交诊断式流程**:不再用
> `get_student_oj.py` 简表,改为 `fetch-class-data.mjs` 拉全班逐生逐次提交后,按该技能模板写诊断报告。
> 本小节的旧命令仅作历史参考。
**⚠️ 这是强制步骤,CSP课评必须包含OJ数据!**
**执行时机**:在生成每个CSP学生的课评**之前**,先查询该学生的OJ数据。
**查询命令**(对每个CSP学生执行):
```bash
python scripts/get_student_oj.py \
--homework-id <作业ID> \
--student "<学生姓名>"
```
**执行流程**:
1. 识别出CSP班级的学生
2. 对每个CSP学生,运行上述命令获取OJ数据
3. 命令会输出该学生的OJ数据Markdown(包含A包每道题的完成情况)
4. 将返回的OJ数据Markdown**直接拼接**到该学生的课评内容中
**示例**(生成杨林轩的CSP课评):
```bash
# 第1步:获取OJ数据
python scripts/get_student_oj.py \
--homework-id 6a2bbd65aeff4da880b8f01d \
--student "杨林轩"
# 第2步:把返回的OJ数据整合到课评中
```
**返回格式示例**:
```markdown
## 【OJ做题数据】
**完成情况**: 4/5 (共8次提交)
| 题目 | 状态 | 提交次数 | 错误类型 |
|------|------|----------|----------|
| CSP0409A1 银行叫号模拟 | ✅ 通过 | 1 | — |
| CSP0409A2 模拟发牌 | ✅ 通过 | 2 | WA×1 |
...
**📊 分析**: 完成4题,第5题有尝试但尚未通过...
```
**注意事项**:
- 作业ID需要从OJ系统获取(如 `6a2bbd65aeff4da880b8f01d`)
- 如果学生姓名在OJ系统中不匹配,会返回空数据
- 返回的Markdown直接拼接到课评正文后面,不要修改格式
**docx文件处理注意事项**:
- 确保已安装python-docx库:`pip install python-docx`
- docx文件中的表格会自动转换为Markdown表格格式
- 文件编码问题已解决,无需担心乱码
### 3. 自动生成课评(统一格式,所有课程通用)
**固定格式(必须严格遵守)**:
```markdown
【学生姓名】家长好,我们本周上课的课程是《XXX》
课程目标:
1. 【知识点1】
2. 【知识点2】
3. 【知识点3】
课评反馈:
【具体课评内容,约200字,包含优点、建议、期望】
老师签名:橙子
```
生成规则:
- 课程目标从本节课教案中提取真实知识点,禁止编造
- 课评反馈包含:优点表扬 + 温和建议 + 鼓励期望
- **表情包丰富原则**:课评正文中适当穿插表情符号,让文字更生动有温度,每个课评至少使用3-5个表情,分布在夸奖、建议、结尾等位置
- **CSP班级专属要求**:必须查询OJ系统的**A包作业完成情况**,进行详细分析(包含完成率、思考模式、错误分布、改进建议),【OJ做题数据】板块放在课评反馈的最后部分
- 称呼规则:三字姓名默认去掉姓氏,直呼后两个字(如"陈圆振"→"圆振"),更亲切
- 内容完全基于从录音中提取的表现信息和教案知识点,不编造内容
- **⚠️ 质量自检(必须执行)**:每条课评生成后,按照「课评质量评分标准」自检:
- 字数:正文 180–350 字 ✓
- 禁用词:无笼统空泛词 ✓
- 结构:知识点总结 + 学情反馈 + 教师签名 ✓
- Emoji:3–5 个 ✓
- 称呼:去掉姓氏直呼名字 ✓
- 具体化:有具体行为细节 ✓
- 建议质量:可落地执行的个性化建议 ✓
- 纵向对比:结合画像对比过往表现 ✓
- 专业点评:紧扣课程知识点 ✓
---
### 📋 生成后流程(自动执行,无需确认)
1. 课评全部生成后,**直接自动启动质检流程**
2. 质检后自动选择最佳版本(≥85分用原稿,<85分用终稿编辑的修订稿)
3. 自动保存归档(个人课评 + 周汇总 + 班级总结 + 汇总网页)
4. 自动更新学生画像
5. 输出完成报告
---
## 🎨 各班级风格规范(自动匹配)
### AIAGENT03班 - 家长信格式·温暖鼓励型
- 固定开头:"【学生名】家长好,本周学习的内容是《...》" + 5个知识点(开头加学生称呼,如"嘉博家长好",与 CSP04 一致)
- 课程目标后空一行,再写"课评反馈:"正文
- 多用"很棒"、"特别棒"、"超棒"和波浪号"~"
- 描述具体行为:"一字一字打字"、"和AI聊了一节课"
- 温和建议用"要是...就更好啦~"
- **必须描述作品创意和亮点**:用中文描述学生作品的创意、技术点、亮点
- **表情包使用**:课评正文中适当穿插表情,让文字更生动温暖
- 夸奖时:🌟✨🎉👍
- 鼓励时:💪🔥🚀
- 温和建议时:😊💡🌸
- 结尾固定:"老师会继续关注【姓名】的表现,期待看到更多精彩!🌟💡"
**⚠️ AIAGENT03班强制要求**:
- **必须查看作品文件夹**,了解每个学生作品的创意和亮点
- **必须用中文描述作品**,写进课评中
- 描述技巧:
- ❌ "嘉博的作品做得不错"(笼统)
- ✅ "嘉博的作品是一个猜数字游戏,用了独特的渐变色背景,还添加了音效和暂停功能,创意很棒!"(具体描述)
#### AIAGENT班作品描述示例
```markdown
嘉博今天表现特别棒~对循环嵌套的理解很到位,能快速理解并动手尝试~
自己完成了课堂练习,特别专注!作品是一个猜数字游戏,用了独特的渐变色背景,
还添加了音效和暂停功能,创意很棒!
要是可以在代码注释上再详细一点就更好啦~
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
```
### CSP00/CSP04班 - 家长信格式·要求型
- 固定开头:"【学生名】家长好,本周学习的内容是《...》" + 5个知识点(开头加学生称呼,如"圆振家长好")
- 表扬积极:"状态在线"、"早早到校等候超积极"
- 期望要求:"希望多思考"、"理解为什么这么写,不只是抄完就好~"
- **表情包使用**:CSP班学生偏大,表情偏励志和认可风格
- 表扬状态时:💪✨🎯🔥
- 肯定进步时:📈👏🌟
- 提出期望时:💡📝😊
- 结尾固定:"加油呀!💪✨"
**⚠️ CSP00/CSP04班强制要求**:
- **必须查询OJ做题数据**,没有OJ数据的CSP课评是不完整的
- 执行命令:`python scripts/get_student_oj.py --homework-id <作业ID> --student "<姓名>"`
- OJ数据板块放在课评正文后面,格式见下方模板
#### CSP00/CSP04班 OJ数据板块格式(自动生成 · 已弃用,v2 见顶部规则)
> ⚠️ 此简表为旧版写法,**CSP 课评现已改用 `.claude/skills/class-feedback-report` 的提交诊断式报告**
> (🌟表扬→逐次提交诊断→整体分析→建议)。保留仅为历史参考。
**OJ作业包定位说明**:
- A包 = 课堂练习(**包含5道具体题目,必须全部列出**)
- B包 = 必须完成的课后家庭作业(未完成会明确提醒家长督促)
- C包 = 拓展训练(学有余力的同学可挑战)
```markdown
## 【OJ做题数据】
**A包(课堂练习)完成情况**: 4/5 (共8次提交)
| 题目 | 类型 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|------|----------|----------|----------|
| CSP04-XXA1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
| CSP04-XXA2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
| CSP04-XXA3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
| CSP04-XXA4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
| CSP04-XXA5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
---
| CSP04-XXB | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
| CSP04-XXC | 拓展训练(选做) | ⬜ 未提交 | 0 | — | — |
**📊 分析**: A包5道题完成了4道,基础题全部掌握,提高题第5道考察的是边界条件处理,还需要加强;B包必做课后作业已完成,知识点巩固得不错;C包拓展题未提交,学有余力可以尝试挑战。
**错误分布**: 编译错误1次,答案错误4次,主要是边界条件考虑不周全,建议课后多练类似题目。
```
**自动判断规则**:
- ✅ A包所有5道题必须全部列出,不管是否完成,不能只显示1个A包
- ✅ 如果B包未完成/未通过:明确标注"【重要提醒】B包是必须完成的课后家庭作业,麻烦家长督促孩子在本周内完成提交"
- ✅ 如果B包已完成:表扬"课后作业完成及时,知识点巩固得不错"
- ✅ 如果C包完成了:重点表扬"主动完成拓展训练,探索精神值得鼓励"
- ✅ 如果C包未完成:不做硬性要求,只提"学有余力可以尝试挑战"
- ✅ 对A包中未完成的题目,给出具体的知识点建议,帮助孩子针对性提高
### 体验课 - 家长信格式·转化导向型
- 固定开头:"【学生名】家长好,今天体验的是《...》课程" + 课程价值介绍(开头加学生称呼,如"小明家长好")
- 突出"第一次":强调新体验,降低焦虑,突出潜力
- 建立愿景:描述继续学习后孩子能达到的水平
- 自然引导报课:用期待和相信引导,不硬推销
- **表情包使用**:体验课要展示活力和吸引力,表情丰富但不过度
- 欢迎首次体验时:🎉👋✨🌟
- 展示潜力时:💡🚀🎯💪
- 建立愿景时:📈🌈🔮
- 结尾固定:"期待在正式课堂上再次见到【姓名】!💻✨"
---
## 💾 保存规则(你确认后自动执行)
你确认课评没问题后,我会自动保存到多个位置,严格遵守课评规范V1.0要求:
### 📌 命名规范(必须严格遵守)
- **课程编号规则**:C++竞赛班统一用`CSP`,AI编程班统一用`AIAGENT`,不得使用`AI`、`C++`等缩写
- **文件名规则**:`YYYYMMDD_课程编号-课次.md`(如`20260418_CSP04-07.md`、`20260330_AIAGENT03-02.md`)
- **日期要求**:根据用户提供的周次信息推算具体日期,或询问用户确认
- **特殊状态文件**:
- 请假:`YYYYMMDD_课程编号-课次(请假).md`
- 未上课:`YYYYMMDD_课程编号-课次(未到).md`
- 补课:正常文件名 `YYYYMMDD_课程编号-课次.md`,放在补课班级下的 `补课/` 目录中
### ⚠️ CSP 班(v2 存档结构 · 覆盖上方通用规则)
CSP00 / CSP04 课评**不**使用 `.claude/memory/class/...` 与 `output/课评汇总/` 路径,统一改用
`.claude/skills/class-feedback-report` 的归档体系(详见该技能 SKILL.md):
- **家长版三件套**(发给家长):`Class-2026-X/<班组>/<学生>/<姓名>-<班组>-<章节号>-反馈报告.{md,html,pdf}`
- 例:`Class-2026-C/克力周日0830CSP02/王凯平/王凯平-克力周日0830CSP02-03-反馈报告.md`
- `Class-2026-X`:A春 / B暑 / C秋 / D寒(2026秋季班用 `Class-2026-C`)
- HTML 以 `samples/report-sample.html` 为样式基准;PDF 用 `scripts/mkpdf.mjs` 单页 660px 生成
- **内部课评正本**(校宝核查用):`Class-2026-X/<班组>/<学生>/feedback/YYYYMMDD_课程编号-课次.md`
- **学生画像**:`Students/<学生>/profile.md`(跨学期连续,按学生名扁平存放)
- **班级汇总**:`Class-2026-X/<班组>/summaries/<班组>-<章节号>-反馈汇总-<日期>.md`
> AIAGENT03 班、体验课仍按下方通用规则(`.claude/memory/class/...` + `output/课评汇总/`)保存。
### 1. 保存到学生个人单次课评文件(必须,用于自动化统计)
为每位学生生成单独的单次课评文件,这是课评完成率统计的依据:
**路径**:`.claude/memory/class/[班级]/[姓名]/feedback/YYYYMMDD_课程编号-课次.md`
**格式**:
```markdown
# 课程名称:[课程名称]
**授课日期**: [YYYY-MM-DD]
**课评内容**:
[生成的课评正文]
---
**老师签名:橙子**
```
### 2. 保存到统一周课评汇总(后写的放上面)
同时保存到统一的课评汇总目录,同一周的课评放在同一个文件里,新生成的放在最顶部:
**根目录**:`E:/cc/4work_project/ClassFeedback/output/课评汇总/`
**文件名规则**:`202X年第X周课评汇总.md`(比如「2026年第18周课评汇总.md」)
**排序规则**:最新生成的课评放在文件的最前面,旧的课评在后面,倒序排列
**班级分组**:同一个班级的课评放在一起,按班级分组展示
### 4. 补课学生处理
> 核心原则:学生来哪个班补课,课评就保存在**那个班的 `补课/` 目录下**。
- **保存路径**:`.claude/memory/class/[补课班级]/补课/[学生姓名]/feedback/`
- **文件名**:`YYYYMMDD_课程编号-课次.md`
- 这里的**课程编号**使用补课班级本身的编号(如去CSP04班补课,就用 `CSP04`)
- 文件内容正常写课评,无需特殊标记
### 5. 班级总结保存
为每个班级保存本节课的班级总结:
**路径**:`.claude/memory/class/[班级]/summaries/YYYYMMDD_课程编号-课次_班级反馈.md`
**格式**:使用课评规范V1.0中的班级群发文案模板
### 6. 未到课记录生成
学生请假或未上课(人没到且无请假),都要生成记录文件:
**请假**:
- **路径**:`.claude/memory/class/[班级]/[姓名]/feedback/YYYYMMDD_课程编号-课次(请假).md`
- **格式**:使用课评规范V1.0中的请假记录模板
**未上课**:
- **路径**:`.claude/memory/class/[班级]/[姓名]/feedback/YYYYMMDD_课程编号-课次(未到).md`
- **格式**:简要记录本次未到课,无课评内容
---
### 7. 生成课评汇总网页(新增)
为每个班级生成本节课的**家长版课评汇总HTML网页**,方便橙子直接发给家长浏览。
**执行时机**:在所有课评保存完成后执行(无论是否已有Markdown汇总)。
**判断逻辑**:
1. 计算本节课所属的教学周次(第X周)
2. 构造文件名:`第{X}周{星期时间}{课程编号}课评.html`
- 星期时间从用户提供的班次信息中提取(如"周日下午"、"周六早上")
- 课程编号如 `AIAGENT03`、`CSP04`、`CSP00`
- 示例:`第14周周日下午AIAGENT03课评.html`
3. 检查 `output/课评汇总/` 目录下是否已存在该文件
4. 如果**已存在**,**跳过不覆盖**(避免误删橙子手动修改过的网页)
5. 如果**不存在**,基于模板生成新的HTML文件
**模板路径**:`.claude/templates/课评汇总网页.html`
**生成规则**(基于模板,替换以下动态内容):
| 模板位置 | 替换内容 | 数据来源 |
|---------|---------|---------|
| `<title>`、顶部标题 | 第X周 · [课程编号]班课评 | 周次 + 课程编号 |
| 顶部副标题、封面日期 | YYYY年M月D日 · 《课程名称》 · 橙子老师 | 用户提供的日期 + 课程计划 |
| 封面大标题 | 《课程名称》 | 课程计划 |
| 封面副标题 | 课程领域 · 第X课 | 课程计划 |
| 封面信息区 | 📅日期、⏰时间、👩‍🏫老师 | 用户提供的数据 |
| 知识点列表 | 5条知识点 | 课程计划中的教学目标 |
| 学生卡片 | 每张卡片一个学生 | 本节课所有学生的课评 |
| 状态标签 | 正常上课/补课/请假/未到 | 出勤记录 |
| 页脚 | 穹狼科创 · [课程编号]班 · 橙子老师 | 课程编号 |
| JS totalCards | 学生总数 | 实际学生数量 |
| 进度点 | N个,对应N个学生 | 学生数量 |
| 导出内容 | 课程信息和知识点 | 同上 |
**学生卡片生成规则**:
- 为**每个学生**生成一张 `.student-card`
- 第一张卡片必须有 `active` 类,其余没有
- 课评正文中的换行符 `\n` 替换为 `<br>`
- 评价指标根据班级风格选取2~4个:
- AIAGENT班:课堂互动、专注度、作品完成、知识点掌握
- CSP班:课堂互动、专注度、OJ完成情况、知识点掌握
- 评价指标根据班级风格选取2~4个:
- AIAGENT03班:课堂互动、专注度、作品完成、知识点掌握
- CSP00/CSP04班:课堂互动、逻辑思维、OJ完成情况、代码能力
- 请假/未到课的学生也要生成卡片,课评内容写简短说明,状态标签用 `badge-absent`
**保存路径**:
```
output/课评汇总/第{X}周{星期时间}{课程编号}课评.html
```
**保存完成后额外提示**:
```
✅ 课评汇总网页已生成:output/课评汇总/第X周[星期时间][课程编号]课评.html
可直接用浏览器打开,发给家长浏览
```
**如果文件已存在则提示**:
```
⏭️ 课评汇总网页已存在(第X周[星期时间][课程编号]课评.html),跳过生成
如需更新,请手动删除后重新生成
```
---
### 保存完成后我会告诉你:
✅ 已保存X条课评
✅ 周汇总已更新:[周数]周汇总文件已更新,新课评已放在最顶部
✅ 课评汇总网页:output/课评汇总/第X周[星期时间][课程编号]课评.html(如已存在则跳过)
---
## 📝 示例课评(参考)
**从课堂录音转写生成课评示例**:
```
用户提供:第15课录音转写.docx(任意路径)
↓
系统自动:检测到docx格式 → 使用python-docx读取录音文本 → AI分析提取学生表现
↓
后续流程:匹配课程计划 → 读取学生画像 → 生成课评
```
**AIAGENT课程 - 鼓励型**
> 李明今天虽然是第一次接触AI绘画,但我看到了你眼里的好奇,这就是最好的开始。你的描述很有画面感,"想要一个会眨眼的可爱猫咪",这就是好的Prompt。虽然操作还有点生疏,但老师注意到你一直在尝试,这份坚持比做对题目更珍贵。下次可以把想法先写在便签纸上,分点列出,跟AI沟通会更顺畅。记住,编程最大的门槛不是英文或数学,是敢于尝试的勇气,你已经有了。继续和你的"AI搭档"对话吧,它会越来越懂你的。
**CSP04班 - 家长信格式·要求型(含OJ数据)**
> 子煜家长好,本周学习的内容是《字符串处理》:
> 1. string 类型的声明与使用
> 2. 字符串的输入输出(cin / getline)
> 3. 字符串的拼接与比较操作
> 4. 常用字符串函数(size / substr / find)
> 5. 培养独立调试与耐心排查错误的能力
>
> 子煜状态在线,课堂互动积极,能够跟上老师的节奏。对于字符串的基本操作掌握得不错,在讲解 substr 和 find 函数时能迅速理解并动手尝试。
>
> ## 【OJ做题数据】
>
> **A包(课堂练习)完成情况**: 4/5 (共8次提交)
>
> | 题目 | 类型 | 状态 | 提交次数 | 思考模式 | 错误类型 |
> |------|------|------|----------|----------|----------|
> | CSP04-07A1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
> | CSP04-07A2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
> | CSP04-07A3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
> | CSP04-07A4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
> | CSP04-07A5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
>
> ---
> | CSP04-07B | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
> | CSP04-07C | 拓展训练(选做) | ⬜ 未提交 | 0 | — | — |
>
> **📊 分析**: A包5道题完成了4道,基础题全部掌握,提高题第5道考察的是字符串边界处理,还需要加强;B包必做课后作业已完成,知识点巩固得不错;C包拓展题未提交,学有余力可以尝试挑战。
> **错误分布**: 编译错误1次,答案错误4次,主要是边界条件考虑不周全,建议课后多练类似题目。
>
> A包前4题完成得都不错,说明课堂知识点吸收得很好。第5题虽然没做出来但也尝试了2次,调试能力在进步。希望课后能抽时间把第5题搞明白,理解边界条件的处理方法,而不是放着不管~加油呀!💪✨