Files
ClassFeedback/.claude/skills/课评生成/skill.md

982 lines
43 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
---
# 🎯 课评生成器技能包
## 🌟 功能说明
本技能专为穹狼科创编程课程设计,**使用超简单:你只需要告诉我学生的基本信息和本节课表现,我就能自动生成符合班级风格的个性化课评**。
✅ 支持四大课程C++/AICODE/Kitten/体验课
✅ 自动匹配班级专属风格AICODE03温暖鼓励型/K4温和鼓励型/CSP03要求型/体验课转化型
**CSP班级必须查询OJ做题数据**自动调用API获取A包答题情况
## 💡 使用方式
### 方式一:交互式问答(推荐)
输入 `/课评生成`,我会使用**选择题**的方式问你所有问题:
```
📝 问题1课堂录音文件路径是什么.docx格式
- [ ] 稍后提供
- [ ] 还没有录音
📝 问题2这是哪个班级的课
- [ ] AICODE03橙子周六1900需要作品文件夹
- [ ] AICODE03橙子周日0845
- [ ] AICODE03橙子周日1400
- [ ] CSP03橙子周六0830需要OJ数据
- [ ] CSP03橙子周六1400
- [ ] CSP03橙子周日1030
- [ ] K4橙子周五1900
- [ ] K4橙子周日1900
📝 问题3这是第几课题目是什么
- [ ] 稍后提供
- [ ] 还不确定
📝 问题4作品文件夹路径仅AICODE班需要
- [ ] 稍后提供
- [ ] 不需要CSP/K4班
```
你选择或填写完所有问题,我就会自动完成整个课评生成流程!
### 方式二:直接提供信息
如果你已经知道所有信息,可以直接告诉我:
```
课堂录音文件第11课录音转写.docx
班级AICODE03橙子周六1900
课次第11课
题目《AI训练师》
出勤:来了陈嘉博、王子墨,请假谭俊研
作品文件夹D:\作品\第11课
```
---
## 🔄 自动完成的工作
你提供信息后,我会自动完成:
### 第1阶段课评准备
1. 获取API出勤数据
2. 使用python-docx读取录音转写文件
3. AI分析录音文本识别"发言人1,2,3"对应的学生
4. **AICODE班**:查看作品文件夹,分析每个学生作品的创意和亮点
5. 读取课程计划获取5个知识点
6. 读取每个学生的画像
7. **CSP班**调用OJ API查询A包做题数据
### 第2阶段课评生成
1. 读取班级风格指南
2. 为每个学生生成个性化课评约200字
- 引用录音中的具体例子
- **AICODE班**:描述作品创意和亮点
- **CSP班**包含OJ做题数据
3. 生成班级总结
4. 展示给你确认
### 第3阶段课评收尾
1. 课评质检CSP班调用证据审计员
2. 丰富度评分(告诉你每个学生的分数)
3. 保存归档(个人课评 + 周汇总 + 班级总结)
4. 更新学生画像
5. 输出完成报告
---
## 📂 从课堂录音批量生成课评(推荐工作流)
橙子提供课堂录音转写文件(`.docx`格式),文件路径会直接告诉我,我会自动完成以下流程:
### 🤖 交互式问答流程
当橙子输入 `/课评生成` 时,使用 **AskUserQuestion** 工具一次性问完所有问题:
**第1轮收集基本信息**
- 问题1录音文件路径文本输入
- 问题2班级单选AICODE03/CSP03/K4的各个时间段
- 问题3课次和题目文本输入
- 问题4出勤情况单选全部到齐/有人请假)
**第2轮根据班级类型追问**
- 如果是AICODE班追问作品文件夹路径
- 如果是CSP班无需追问OJ数据自动获取
- 如果是K4班无需追问
**收集完成后**自动调用三个阶段的agent完成课评生成。
### 🔄 智能体流水线模式
课评生成已拆分为3个独立智能体按流水线方式协作完成
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 课评准备阶段 │ ──→ │ 课评生成阶段 │ ──→ │ 课评收尾阶段 │
│ (Agent 1) │ │ (Agent 2) │ │ (Agent 3) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
收集所有数据 生成课评内容 质检+保存+归档
• API授课数据 • 读取风格指南 • 课评质检
• 录音解析(AI分析) • 读取课评模板 • 保存课评
• 课程计划匹配 • 生成个人课评 • 保存班级总结
• 学生画像读取 • 生成班级总结 • 更新学生画像
• 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` 库自动读取,无需手动转换
### 工作流程
```
获取API授课数据 → 读取录音转写(docx) → AI分析识别发言人 → 获取课程知识点 → 读取学生画像 → 润色生成 → 确认修改 → 课评质检 → 保存
```
### 0. 获取API授课数据必须第一步执行
**⚠️ 这是强制步骤,必须在读取笔记之前执行!**
在开始处理任何课评之前,**必须先调用公司API获取橙子老师近期的授课数据**,用于:
1. 确认橙子老师实际带了哪些班级
2. 获取每个班级的**真实授课日期**`teaching_date`),用于课评文件名
**执行命令**Python
```python
import urllib.request
import json
from datetime import datetime, timedelta
API_BASE_URL = "https://api.qonnwolf.com/api/v1"
AUTHORIZATION = "Bearer <从.env文件读取>"
# 计算最近7天的日期范围
end_date = datetime.now()
start_date = end_date - timedelta(days=7)
# 查询橙子老师的出勤数据
dates_to_query = []
current = start_date
while current <= end_date:
dates_to_query.append(current.strftime('%Y-%m-%d'))
current += timedelta(days=1)
results = []
for date in dates_to_query:
url = f"{API_BASE_URL}/reports/teaching-schedule?teaching_date={date}"
req = urllib.request.Request(url)
req.add_header('Authorization', AUTHORIZATION)
try:
with urllib.request.urlopen(req) as response:
data = json.loads(response.read().decode('utf-8'))
for item in data['data']['items']:
teacher = item.get('teacher_name', '')
if '橙子' in teacher or '程城' in teacher:
results.append({
'teaching_date': item['teaching_date'], # API返回的真实授课日期
'class_name': item['class_name'],
'time': item['teaching_time_period'],
'lesson': item['lesson_name'],
'student_count': item['student_count'],
'attendance': item['attendance'],
'students': item.get('student_names', [])
})
except Exception as e:
print(f"查询 {date} 失败: {e}")
# 输出结果
for r in results:
print(f"日期:{r['teaching_date']} 班级:{r['class_name']} 时间:{r['time']} 课程:{r['lesson']}")
```
**返回数据说明**
| 字段 | 说明 | 用途 |
|------|------|------|
| `teaching_date` | API返回的真实授课日期 | **必须用此日期作为课评文件名中的YYYYMMDD** |
| `class_name` | 班级名称 | 用于确认班级目录名 |
| `time` | 上课时间段 | 用于确认班级如19:00-20:30对应晚上班 |
| `lesson_name` | 课程名称 | 用于匹配课程计划 |
| `student_count` | 学生数 | 用于确认班级人数 |
| `attendance` | 出勤统计 | 到课/请假/缺课人数 |
| `students` | 学生名单 | 用于确认学生 |
**日期规则(重要)**
-**必须使用API返回的 `teaching_date`** 作为课评文件名中的日期
- ✅ 如果笔记中的日期与API返回的 `teaching_date` 不一致,**以API为准**
- ✅ 文件名格式:`{API返回的teaching_date}_课程编号-课次.md`
**班级匹配规则**
根据API返回的 `class_name``time` 匹配笔记中的班级:
| API返回的class_name | 对应班级目录 | 识别依据 |
|---------------------|-------------|----------|
| AICODE03... | AICODE03橙子周六1900 / AICODE03橙子周日0845 / AICODE03橙子周日1400 | class_name含"AICODE03" + time判断 |
| CSP03... | CSP03橙子周六0830 / CSP03橙子周六1400 / CSP03橙子周日1030 | class_name含"CSP03" + time判断 |
| KITTEN04... | K4橙子周五1900 / K4橙子周日1900 | class_name含"KITTEN04" + time判断 |
### 1. 读取课堂录音转写文件
解析用户提供的课堂录音转写文件(`.docx` 格式):
**使用python-docx库读取**
```python
from docx import Document
def read_recording_docx(file_path):
"""读取课堂录音转写的docx文件"""
doc = Document(file_path)
content = []
for para in doc.paragraphs:
text = para.text.strip()
if text:
content.append(text)
return '\n'.join(content)
# 使用示例
file_path = r"课堂录音转写文件路径" # 例如第15课录音转写.docx
recording_text = read_recording_docx(file_path)
```
**录音文本特点**
- 整节课的完整录音转写,包含老师和学生的对话
- 可能包含时间戳(如"[00:05:30]"
- 可能包含说话人标识(如"老师:"、"学生:"
- 内容为自由文本,不是结构化的表格
**AI分析提取学生表现**
由于录音是自由文本格式需要使用AI分析提取每个学生的表现信息
```python
# 分析提示词
analysis_prompt = f"""
分析以下课堂录音转写文本,提取每个学生的表现信息。
班级学生名单:{student_list}
请为每个学生提供:
1. 出勤状况:正常上课 / 请假 / 未到
2. 课堂表现摘要100-200字
- 参与度如何
- 哪些知识点掌握得好
- 遇到什么问题
- 有什么亮点表现
录音文本:
{recording_text}
请以JSON格式输出。
"""
```
> **日期规则**:批量流程中,所有日期(文件名 `YYYYMMDD`、授课日期)**统一以API返回的teaching_date为准**,不使用录音文件中的日期。
### 2. 匹配课程计划
根据班级标题中的关键词匹配对应课程计划:
| 班级标题关键词 | 课程计划路径 | 课程编号 |
|---|---|---|
| AICODE03 | `.claude/lesson/AICODE/课程计划.md` | AICODE03 |
| CSP03 | `.claude/lesson/CSP03/课程计划.md` | CSP03 |
| Kitten04 / K4 | `.claude/lesson/Kitten04/课程计划.md` | Kitten04 |
从课程计划中提取对应课次的:
- **课程名称**(如《进制转换》)
- **教学目标 5个知识点**
> **重要**:教案中的"教学目标"5条直接作为课评的5个知识点不得修改或编造。
### 3. 读取学生画像
对每个学生,读取其个人画像档案:
**路径**`.claude/memory/class/[班级]/[姓名]/profile.md`
### 4. 润色生成课评
对录音中提取的**每一个学生**,根据出勤状况处理,确保每个人都有对应记录:
| 出勤状况 | 处理方式 | 保存位置 |
|---|---|---|
| 正常上课 | 读取画像 + 润色表现摘要 → 生成完整课评 | 本班学生feedback目录 |
| 请假 | 生成请假记录 | 本班学生feedback目录 |
| 未上课 | 生成未到课记录 | 本班学生feedback目录 |
| 补课-来自XX班 | 读取画像 + 润色表现摘要 → 生成完整课评 | **补课班级**的`补课/[姓名]/feedback/`目录 |
**润色规则**(对正常上课和补课学生):
- 保留录音中提取的所有事实(不能遗漏任何信息)
- 根据学生画像调整语气和侧重(如内向学生多鼓励,活泼学生提专注)
- 套用对应班级的固定开头5个知识点和结尾风格
- 将100-200字的表现摘要扩展为约200字的完整家长信格式课评
- **绝不编造**录音中没有提到的内容
**⚠️ CSP班级专属必须执行**
对每个CSP学生**在生成课评之前**必须先查询OJ做题数据
```bash
python scripts/get_student_oj.py \
--homework-id <作业ID> \
--student "<学生姓名>"
```
将返回的OJ数据Markdown拼接到课评内容中。**没有OJ数据的CSP课评是不完整的**
**输出示例**
```markdown
家长好,本周学习的内容是《魔幻俄罗斯方块(下)》:
1. 理解"自动化测试"的概念
2. 理解"测试覆盖":每条规则都应有对应测试
3. 功能扩展的增量思维
4. 增量需求文档的编写方法
5. 测试脚本生成与结果解读
嘉博今天表现特别棒~对增量需求文档的理解很到位,能够自己写出清晰的测试用例~
和AI协作完成俄罗斯方块的调试遇到困难没有放弃特别有韧性
要是可以在写需求文档的时候再仔细检查一下边界条件就更好啦~
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
```
### 6. 生成班级总结(所有班级)
录音中提取的**每一个班级**都会生成本节课的班级总结,不局限于特定班级:
**内容来源**
- 课程名称 + 5个知识点来自课程计划
- 该班级所有学生的整体表现(基于录音中提取的表现摘要汇总)
- 亮点学生、共性问题、课堂趣事
**保存路径**`.claude/memory/class/[班级]/summaries/YYYYMMDD_课程编号-课次_班级反馈.md`
**格式**:使用对应班级自己的模板(`.claude/memory/class/[班级]/summaries/群发文案模板.md``班级反馈模板.md`
### 7. 确认流程(橙子检查)
所有课评和班级总结生成后,**先展示给橙子看,不保存**
- 按班级分组展示:个人课评 + 班级总结
- 等待橙子确认或提出修改意见
- 如有修改,即时调整后再次展示,直到橙子满意
### 8. 课评质检(橙子确认修改后执行)
**橙子确认课评内容无误后**,自动调用课评质检系统进行最终质检:
**触发条件**:橙子说"可以了"、"没问题"、"确认"等表示确认的语句
**质检流程**
1. 调用「课评质检调度器」Agent
2. 输入:橙子确认后的班级总结 + 所有学生的个人课评
3. 调度器自动协调9个质检Agent证据审计员、质量评审员、5位家长、终稿编辑
4. 输出:质检报告 + 修订稿(如有问题)
**三档放行规则**
- **直接发送**≥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` | 成长性反馈 |
**CSP质检执行方式**
```
调用 课评质检调度器 → 调度器自动协调9个Agent → 输出质检报告 + 修订稿
```
**核心原则**来自Agents系统
1. **事实以证据审计员为准**:家长视角的数字意见一律忽略
2. **不做学生横向比较**:揪出"最高/最快/分水岭/紧随XX"等比较词
3. **术语家长能懂**OLE/CE/WA/SJF/AC这类缩写要解释或换成白话
4. **结合学生性格**:完美主义型先肯定韧性再谈方法;佛系型正向收尾不施压
5. **老师是最终决策者**:给建议和修订稿,老师决定用不用
### 9. 保存归档
橙子最终确认后,执行以下保存操作:
1. 保存到学生个人单次课评文件
2. **保存到统一周课评汇总**`E:/cc/4work_project/ClassFeedback/output/课评汇总/`**后写的课评放在最前面**
3. 保存班级总结
4. 更新学生画像
### 10. 更新学生画像(自动)
保存课评的同时,根据本节课表现**适当更新**学生画像 `profile.md`
**更新原则**
- 只记录**新发现**或**明显变化**,不重复已有信息
- 更新位置:在 profile.md 的"近期表现"或"课堂观察"部分追加
**触发更新的典型情况**
- 展现出新的兴趣点(如"首次表现出对XX的浓厚兴趣"
- 能力有明显进步(如"打字速度比上学期快了很多"
- 性格/态度变化(如"从内向变得愿意主动提问"
- 需要持续关注的问题(如"近两次课专注力有所下降"
- 特殊事件(如"第一次独立完成完整作品"
**不更新的情况**
- 表现和画像中已有描述一致
- 只是常规课堂表现,无特殊变化
- 一次性的小问题(如"今天迟到"
更新格式示例:
```markdown
**2026-05-14 第11课观察**
- 对增量需求文档的理解力有提升,能自己写出测试用例
- 遇到困难时不再马上求助,会先尝试独立调试
```
---
## 📊 课评质量评分标准(生成时必须遵循)
> 总分 100 分 = 规范性50 分) + 丰富度50 分)
> **生成课评时必须按照此标准自检,确保每条课评都达到高质量要求!**
### 一、规范性(自动检测,合计 50 分)
| 评分项目 | 分值 | 满分判定规则 | 扣分规则 |
|----------|------|--------------|----------|
| **字数合规** | 10 | 正文字数区间180350 字 | 超出 / 低于区间按梯度扣分 |
| **禁用词检查** | 10 | 全文无禁用词汇 | 每出现 1 个禁用词扣 2 分,扣完本项为止 |
| **结构完整性** | 10 | 评语必须包含三要素:知识点总结 + 学情反馈 + 教师签名 | 缺任一要素酌情扣分 |
| **Emoji 使用** | 10 | 全篇使用数量 35 个 | 过少 / 过多酌情扣分 |
| **称呼规范** | 10 | 使用学生小名、或去掉姓氏直呼名字 | 称呼格式不规范扣分 |
**禁用词清单**(生成时必须避免):
- 笼统空泛词:表现不错、继续努力、很好、很棒(无具体细节时)
- 敷衍词:还可以、一般、还行
- 批评词:太差、不认真、不用心、态度有问题
**自检要点**
- ✅ 字数课评正文不含知识点和OJ数据在 180350 字之间
- ✅ 禁用词:不使用上述禁用词,用具体描述代替笼统评价
- ✅ 结构:必须有知识点总结(固定开头)+ 学情反馈(主体)+ 教师签名(结尾)
- ✅ Emoji全篇 35 个,分布在夸奖、建议、结尾等位置
- ✅ 称呼:三字姓名去掉姓氏(如"陈圆振"→"圆振"),两字姓名直呼名字
### 二、丰富度AI 语义分析,合计 50 分)
| 评分项目 | 分值 | 高分评判标准 |
|----------|------|--------------|
| **具体化程度** | 15 | 评语包含具体行为细节,描述有画面感,不笼统空泛 |
| **课后建议质量** | 15 | 给出可落地、可执行的个性化课后练习 / 提升方案,不是套话建议 |
| **个性化纵向对比** | 10 | 结合学生过往学情画像,对比本次表现,体现进步 / 退步追踪 |
| **专业知识点体现** | 10 | 紧扣课程核心知识点点评,体现授课专业度,不泛泛闲聊 |
**丰富度提升技巧**
**具体化程度15分**
- ❌ "嘉博今天表现不错"笼统0分
- ✅ "嘉博今天自己一字一字打字和AI聊了一节课特别专注"具体行为15分
- ✅ "嘉博今天主动问老师'内层循环每执行完一次,外层循环的变量会变吗?',说明在认真思考"引用原话15分
- 技巧:引用学生在录音中的原话,或描述具体行为,让家长看到孩子真实的课堂表现
**课后建议质量15分**
- ❌ "继续加油"、"多练习"套话0分
- ✅ "课后可以试着用AI生成一个故事然后自己改编结尾锻炼创意表达"可执行15分
- 技巧:给出"做什么"、"怎么做"、"达到什么效果"
**个性化纵向对比10分**
- ❌ 不提过往表现0分
- ✅ "比上节课专注力明显提升,能完整听完讲解再动手"有对比10分
- 技巧:读取学生画像,对比上次表现,指出进步/需要保持的地方
**专业知识点体现10分**
- ❌ "今天学了新知识"泛泛0分
- ✅ "对角色设置+限制条件+输出格式的系统提示词优化,有一定了解"专业10分
- 技巧:紧扣本节课教案中的知识点,用专业术语点评
---
## ⚙️ 核心生成逻辑(自动完成,你不需要操作)
```
1. 读取参考资料 → 2. AICODE班分析作品/CSP班拉取OJ数据 → 3. 生成个性化课评 → 4. 橙子确认修改 → 5. 自动质检 → 6. 自动保存
```
### 1. 自动读取参考资料
我会自动找到以下资料用于生成课评:
- **学生画像**`.claude/memory/class/[班级]/[姓名]/profile.md`(了解学生性格特点和适用风格)
- **班级风格指南**:根据课程类型读取对应规则(`.claude/rules/[课程].md`
- **课评格式模板**:根据课程类型选择对应模板(`.claude/templates/[课程].md`),包含标准版和极简版
- **本节课教案**:到 `.claude/lesson/` 目录下查找对应班级、对应课次的教案,确保课评内容与实际教学一致,不编造内容
- **过往课评**:读取该学生的历史课评,避免重复用词
- **课堂录音转写**`.docx`格式使用python-docx库读取AI分析提取学生表现
- **AICODE班作品**:查看作品文件夹,分析每个学生作品的创意和亮点
> 💡 **模板库路径**`../../templates/`
> - `AICODE.md`AICODE创意编程课评模板标准版 + 极简版)
> - `CSP.md`C++/CSP课程课评模板
> - `KITTEN.md`Kitten课程课评模板
> - `课评汇总网页.html`家长版课评汇总HTML网页模板翻页浏览、温暖画册风格
### 2. AICODE班级专属查看作品文件夹必须执行
**⚠️ 这是强制步骤AICODE课评必须包含作品创意描述**
**执行时机**在生成每个AICODE学生的课评**之前**,先查看该学生的作品文件夹。
**执行流程**
1. 识别出AICODE班级的学生
2. 查看作品文件夹(橙子提供的本地路径)
3. 分析每个学生作品的:
- 创意点:有什么独特的想法
- 技术点:用了什么技术实现
- 亮点:有什么特别出彩的地方
4. 将作品分析**用中文写进课评**中
**示例**生成陈嘉博的AICODE课评
```
嘉博今天表现特别棒~主动问老师关于循环嵌套的问题,说明在认真思考~
自己完成了课堂练习,特别专注!作品是一个猜数字游戏,用了独特的渐变色背景,
还添加了音效和暂停功能,创意很棒!
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
```
### 3. CSP班级专属自动获取OJ做题数据必须执行
**⚠️ 这是强制步骤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次提交)
| 题目 | 状态 | 提交次数 | 错误类型 |
|------|------|----------|----------|
| CSP0309A1 银行叫号模拟 | ✅ 通过 | 1 | — |
| CSP0309A2 模拟发牌 | ✅ 通过 | 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做题数据】板块放在课评反馈的最后部分
- 称呼规则:三字姓名默认去掉姓氏,直呼后两个字(如"陈圆振"→"圆振"),更亲切
- 内容完全基于从录音中提取的表现信息和教案知识点,不编造内容
- **⚠️ 质量自检(必须执行)**:每条课评生成后,按照「课评质量评分标准」自检:
- 字数:正文 180350 字 ✓
- 禁用词:无笼统空泛词 ✓
- 结构:知识点总结 + 学情反馈 + 教师签名 ✓
- Emoji35 个 ✓
- 称呼:去掉姓氏直呼名字 ✓
- 具体化:有具体行为细节 ✓
- 建议质量:可落地执行的个性化建议 ✓
- 纵向对比:结合画像对比过往表现 ✓
- 专业点评:紧扣课程知识点 ✓
---
### 📋 生成后确认流程(必须遵守)
1. 一批课评全部生成后,我会先把所有课评展示给你,不保存
2. 等待你确认没问题后,再执行保存操作
3. 如果你需要修改,我会根据你的要求修改后再次给你确认,直到你满意再保存
---
## 🎨 各班级风格规范(自动匹配)
### AICODE03班 - 家长信格式·温暖鼓励型
- 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点与 CSP03 一致)
- 课程目标后空一行,再写"课评反馈:"正文
- 多用"很棒"、"特别棒"、"超棒"和波浪号""
- 描述具体行为:"一字一字打字"、"和AI聊了一节课"
- 温和建议用"要是...就更好啦~"
- **必须描述作品创意和亮点**:用中文描述学生作品的创意、技术点、亮点
- **表情包使用**:课评正文中适当穿插表情,让文字更生动温暖
- 夸奖时:🌟✨🎉👍
- 鼓励时:💪🔥🚀
- 温和建议时:😊💡🌸
- 结尾固定:"老师会继续关注【姓名】的表现,期待看到更多精彩!🌟💡"
**⚠️ AICODE03班强制要求**
- **必须查看作品文件夹**,了解每个学生作品的创意和亮点
- **必须用中文描述作品**,写进课评中
- 描述技巧:
- ❌ "嘉博的作品做得不错"(笼统)
- ✅ "嘉博的作品是一个猜数字游戏,用了独特的渐变色背景,还添加了音效和暂停功能,创意很棒!"(具体描述)
#### AICODE03班作品描述示例
```markdown
嘉博今天表现特别棒~对循环嵌套的理解很到位,能快速理解并动手尝试~
自己完成了课堂练习,特别专注!作品是一个猜数字游戏,用了独特的渐变色背景,
还添加了音效和暂停功能,创意很棒!
要是可以在代码注释上再详细一点就更好啦~
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
```
### K4班 - 家长信格式·温和鼓励型
- 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点
- 肯定创意:"能够有自己的创意"
- 温和指出:"不过老师发现...专注力有些下降"
- **表情包使用**K4班学生年龄小多用可爱活泼的表情增加亲和力
- 表扬创意时:🎨🌈✨🌟
- 鼓励坚持时:💪🐱🚀
- 提醒专注时:👀💡😊
- 结尾可用:"继续加油哦!🌟"、"相信你会把程序做得更完整!🚀"
### CSP03班 - 家长信格式·要求型
- 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点
- 表扬积极:"状态在线"、"早早到校等候超积极"
- 期望要求:"希望多思考"、"理解为什么这么写,不只是抄完就好~"
- **表情包使用**CSP班学生偏大表情偏励志和认可风格
- 表扬状态时:💪✨🎯🔥
- 肯定进步时:📈👏🌟
- 提出期望时:💡📝😊
- 结尾固定:"加油呀!💪✨"
**⚠️ CSP03班强制要求**
- **必须查询OJ做题数据**没有OJ数据的CSP课评是不完整的
- 执行命令:`python scripts/get_student_oj.py --homework-id <作业ID> --student "<姓名>"`
- OJ数据板块放在课评正文后面格式见下方模板
#### CSP03班 OJ数据板块格式自动生成
**OJ作业包定位说明**
- A包 = 课堂练习(**包含5道具体题目必须全部列出**
- B包 = 必须完成的课后家庭作业(未完成会明确提醒家长督促)
- C包 = 拓展训练(学有余力的同学可挑战)
```markdown
## 【OJ做题数据】
**A包课堂练习完成情况**: 4/5 (共8次提交)
| 题目 | 类型 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|------|----------|----------|----------|
| CSP03-XXA1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
| CSP03-XXA2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
| CSP03-XXA3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
| CSP03-XXA4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
| CSP03-XXA5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
---
| CSP03-XXB | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
| CSP03-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编程班统一用`AICODE`,不得使用`AI``C++`等缩写
- **文件名规则**`YYYYMMDD_课程编号-课次.md`(如`20260418_CSP05-07.md``20260330_AICODE03-02.md`
- **日期要求**:文件名中的`YYYYMMDD`必须与校宝`teaching_date`完全一致,不得使用编写/提交日期
- **特殊状态文件**
- 请假:`YYYYMMDD_课程编号-课次(请假).md`
- 未上课:`YYYYMMDD_课程编号-课次(未到).md`
- 补课:正常文件名 `YYYYMMDD_课程编号-课次.md`,放在补课班级下的 `补课/` 目录中
### 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`
- 这里的**课程编号**使用补课班级本身的编号如去CSP03班补课就用 `CSP03`
- 文件内容正常写课评,无需特殊标记
### 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`
- 星期时间从API数据中提取如"周日下午"、"周六早上"
- 课程编号如 `AICODE03``CSP03``K4`
- 示例:`第14周周日下午AICODE03课评.html`
3. 检查 `output/课评汇总/` 目录下是否已存在该文件
4. 如果**已存在****跳过不覆盖**(避免误删橙子手动修改过的网页)
5. 如果**不存在**基于模板生成新的HTML文件
**模板路径**`.claude/templates/课评汇总网页.html`
**生成规则**(基于模板,替换以下动态内容):
| 模板位置 | 替换内容 | 数据来源 |
|---------|---------|---------|
| `<title>`、顶部标题 | 第X周 · [课程编号]班课评 | 周次 + 课程编号 |
| 顶部副标题、封面日期 | YYYY年M月D日 · 《课程名称》 · 橙子老师 | API的teaching_date + 课程计划 |
| 封面大标题 | 《课程名称》 | 课程计划 |
| 封面副标题 | 课程领域 · 第X课 | 课程计划 |
| 封面信息区 | 📅日期、⏰时间、👩‍🏫老师 | API数据 |
| 知识点列表 | 5条知识点 | 课程计划中的教学目标 |
| 学生卡片 | 每张卡片一个学生 | 本节课所有学生的课评 |
| 状态标签 | 正常上课/补课/请假/未到 | 出勤记录 |
| 页脚 | 穹狼科创 · [课程编号]班 · 橙子老师 | 课程编号 |
| JS totalCards | 学生总数 | 实际学生数量 |
| 进度点 | N个对应N个学生 | 学生数量 |
| 导出内容 | 课程信息和知识点 | 同上 |
**学生卡片生成规则**
- 为**每个学生**生成一张 `.student-card`
- 第一张卡片必须有 `active` 类,其余没有
- 课评正文中的换行符 `\n` 替换为 `<br>`
- 评价指标根据班级风格选取2~4个
- AICODE班课堂互动、专注度、作品完成、知识点掌握
- CSP班课堂互动、专注度、OJ完成情况、知识点掌握
- K4班课堂互动、创意表达、作品完成、专注度
- 请假/未到课的学生也要生成卡片,课评内容写简短说明,状态标签用 `badge-absent`
**保存路径**
```
output/课评汇总/第{X}周{星期时间}{课程编号}课评.html
```
**保存完成后额外提示**
```
✅ 课评汇总网页已生成output/课评汇总/第X周[星期时间][课程编号]课评.html
可直接用浏览器打开,发给家长浏览
```
**如果文件已存在则提示**
```
⏭️ 课评汇总网页已存在第X周[星期时间][课程编号]课评.html跳过生成
如需更新,请手动删除后重新生成
```
---
### 保存完成后我会告诉你:
✅ 已保存X条课评
✅ 周汇总已更新:[周数]周汇总文件已更新,新课评已放在最顶部
✅ 课评汇总网页output/课评汇总/第X周[星期时间][课程编号]课评.html如已存在则跳过
---
## 📝 示例课评(参考)
**从课堂录音转写生成课评示例**
```
用户提供第15课录音转写.docx任意路径
系统自动检测到docx格式 → 使用python-docx读取录音文本 → AI分析提取学生表现
后续流程:匹配课程计划 → 读取学生画像 → 生成课评
```
**AICODE课程 - 鼓励型**
> 李明今天虽然是第一次接触AI绘画但我看到了你眼里的好奇这就是最好的开始。你的描述很有画面感"想要一个会眨眼的可爱猫咪"这就是好的Prompt。虽然操作还有点生疏但老师注意到你一直在尝试这份坚持比做对题目更珍贵。下次可以把想法先写在便签纸上分点列出跟AI沟通会更顺畅。记住编程最大的门槛不是英文或数学是敢于尝试的勇气你已经有了。继续和你的"AI搭档"对话吧,它会越来越懂你的。
**CSP03班 - 家长信格式·要求型含OJ数据**
> 家长好,本周学习的内容是《字符串处理》:
> 1. string 类型的声明与使用
> 2. 字符串的输入输出cin / getline
> 3. 字符串的拼接与比较操作
> 4. 常用字符串函数size / substr / find
> 5. 培养独立调试与耐心排查错误的能力
>
> 子煜状态在线,课堂互动积极,能够跟上老师的节奏。对于字符串的基本操作掌握得不错,在讲解 substr 和 find 函数时能迅速理解并动手尝试。
>
> ## 【OJ做题数据】
>
> **A包课堂练习完成情况**: 4/5 (共8次提交)
>
> | 题目 | 类型 | 状态 | 提交次数 | 思考模式 | 错误类型 |
> |------|------|------|----------|----------|----------|
> | CSP03-07A1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
> | CSP03-07A2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
> | CSP03-07A3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
> | CSP03-07A4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
> | CSP03-07A5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
>
> ---
> | CSP03-07B | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
> | CSP03-07C | 拓展训练(选做) | ⬜ 未提交 | 0 | — | — |
>
> **📊 分析**: A包5道题完成了4道基础题全部掌握提高题第5道考察的是字符串边界处理还需要加强B包必做课后作业已完成知识点巩固得不错C包拓展题未提交学有余力可以尝试挑战。
> **错误分布**: 编译错误1次答案错误4次主要是边界条件考虑不周全建议课后多练类似题目。
>
> A包前4题完成得都不错说明课堂知识点吸收得很好。第5题虽然没做出来但也尝试了2次调试能力在进步。希望课后能抽时间把第5题搞明白理解边界条件的处理方法而不是放着不管加油呀💪✨