补全9月11日至13日课评:为13名学生创建请假文档,为5个班级创建总结文档
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
name: 课评生成
|
||||
description: 快速生成个性化课评,你只需提供学生本节课的表现,自动匹配班级风格生成高质量课评
|
||||
type: skill
|
||||
agent_created: true
|
||||
---
|
||||
|
||||
# 🎯 课评生成器技能包
|
||||
@@ -10,53 +9,68 @@ agent_created: true
|
||||
## 🌟 功能说明
|
||||
本技能专为穹狼科创编程课程设计,**使用超简单:你只需要告诉我学生的基本信息和本节课表现,我就能自动生成符合班级风格的个性化课评**。
|
||||
|
||||
✅ 支持四大课程:C++/AICODE/Kitten/体验课
|
||||
✅ 自动匹配班级专属风格:AICODE03温暖鼓励型/K4温和鼓励型/CSP03要求型/体验课转化型
|
||||
✅ **CSP班级必须查询OJ做题数据**(自动调用API获取A包答题情况)
|
||||
✅ 支持课程: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:课堂录音文件路径是什么?(.docx格式)
|
||||
- [ ] 稍后提供
|
||||
- [ ] 还没有录音
|
||||
📝 问题1:这次写哪个班?(列出当前所有班级选项)
|
||||
AIAGENT03班:周五下午1700、周六晚上1900、周日早上0845、周日下午1400
|
||||
CSP04班:周六早上0830、周六下午1400
|
||||
CSP00班:周五晚上1900(2课时)
|
||||
体验课
|
||||
|
||||
📝 问题2:这是哪个班级的课?
|
||||
- [ ] AICODE03橙子周六1900(需要作品文件夹)
|
||||
- [ ] AICODE03橙子周日0845
|
||||
- [ ] AICODE03橙子周日1400
|
||||
- [ ] CSP03橙子周六0830(需要OJ数据)
|
||||
- [ ] CSP03橙子周六1400
|
||||
- [ ] CSP03橙子周日1030
|
||||
- [ ] K4橙子周五1900
|
||||
- [ ] K4橙子周日1900
|
||||
📝 问题2(AIAGENT03班):作品文件夹路径是什么?
|
||||
|
||||
📝 问题3:这是第几课?题目是什么?
|
||||
- [ ] 稍后提供
|
||||
- [ ] 还不确定
|
||||
📝 问题3(CSP00/CSP04班):OJ题目的token是什么?
|
||||
|
||||
📝 问题4:作品文件夹路径?(仅AICODE班需要)
|
||||
- [ ] 稍后提供
|
||||
- [ ] 不需要(CSP/K4班)
|
||||
📝 问题4:本节课出勤情况如何?(来了哪些学生,谁请假)
|
||||
```
|
||||
|
||||
你选择或填写完所有问题,我就会自动完成整个课评生成流程!
|
||||
|
||||
### 方式二:直接提供信息
|
||||
|
||||
如果你已经知道所有信息,可以直接告诉我:
|
||||
```
|
||||
课堂录音文件:第11课录音转写.docx
|
||||
班级:AICODE03橙子周六1900
|
||||
课次:第11课
|
||||
题目:《AI训练师》
|
||||
出勤:来了陈嘉博、王子墨,请假谭俊研
|
||||
作品文件夹:D:\作品\第11课
|
||||
```
|
||||
你回答完所有问题,我就会自动完成整个课评生成流程!
|
||||
|
||||
---
|
||||
|
||||
@@ -65,70 +79,76 @@ agent_created: true
|
||||
你提供信息后,我会自动完成:
|
||||
|
||||
### 第1阶段:课评准备
|
||||
1. 获取API出勤数据
|
||||
2. 使用python-docx读取录音转写文件
|
||||
3. AI分析录音文本,识别"发言人1,2,3"对应的学生
|
||||
4. **AICODE班**:查看作品文件夹,分析每个学生作品的创意和亮点
|
||||
5. 读取课程计划,获取5个知识点
|
||||
6. 读取每个学生的画像
|
||||
7. **CSP班**:调用OJ API查询A包做题数据
|
||||
1. 使用python-docx读取录音转写文件
|
||||
2. AI分析录音文本,识别"发言人1,2,3"对应的学生
|
||||
3. **AIAGENT班**:查看作品文件夹,分析每个学生作品的创意和亮点
|
||||
4. 读取课程计划,获取5个知识点
|
||||
5. 读取每个学生的画像
|
||||
6. **CSP00/CSP04班**:使用token查询OJ做题数据
|
||||
|
||||
### 第2阶段:课评生成
|
||||
1. 读取班级风格指南
|
||||
2. 为每个学生生成个性化课评(约200字)
|
||||
- 引用录音中的具体例子
|
||||
- **AICODE班**:描述作品创意和亮点
|
||||
- **AIAGENT班**:描述作品创意和亮点
|
||||
- **CSP班**:包含OJ做题数据
|
||||
3. 生成班级总结
|
||||
4. 展示给你确认
|
||||
|
||||
### 第3阶段:课评收尾
|
||||
1. 课评质检(CSP班调用证据审计员)
|
||||
2. 丰富度评分(告诉你每个学生的分数)
|
||||
3. 保存归档(个人课评 + 周汇总 + 班级总结)
|
||||
### 第3阶段:课评质检+修订(自动,无需确认)
|
||||
1. 自动调用课评质检系统(证据审计员 + 质量评审员 + 5位家长视角)
|
||||
2. 质检调度器汇总意见,调用终稿编辑产出修订稿
|
||||
3. 三档放行规则自动处理:
|
||||
- **≥85分**:保存原稿
|
||||
- **70-84分**:直接采用修订稿
|
||||
- **<70分**:直接采用修订稿(质检系统已做最佳修订)
|
||||
4. 丰富度评分记录在案
|
||||
|
||||
### 第4阶段:保存归档(自动,无需确认)
|
||||
1. 保存个人课评(保存的是质检后的最佳版本)
|
||||
2. 保存到周汇总
|
||||
3. 保存班级总结
|
||||
4. 更新学生画像
|
||||
5. 输出完成报告
|
||||
5. 生成课评汇总网页
|
||||
6. 输出完成报告
|
||||
|
||||
---
|
||||
|
||||
## 📂 从课堂录音批量生成课评(推荐工作流)
|
||||
|
||||
橙子提供课堂录音转写文件(`.docx`格式),文件路径会直接告诉我,我会自动完成以下流程:
|
||||
录音转写文件放在 `D:\03-下载` 目录,我会自动查找读取,自动完成以下流程:
|
||||
|
||||
### 🤖 交互式问答流程
|
||||
|
||||
当橙子输入 `/课评生成` 时,使用 **AskUserQuestion** 工具一次性问完所有问题:
|
||||
当橙子输入 `/课评生成` 时,使用 **AskUserQuestion** 工具按顺序询问:
|
||||
|
||||
**第1轮:收集基本信息**
|
||||
- 问题1:录音文件路径(文本输入)
|
||||
- 问题2:班级(单选:AICODE03/CSP03/K4的各个时间段)
|
||||
- 问题3:课次和题目(文本输入)
|
||||
- 问题4:出勤情况(单选:全部到齐/有人请假)
|
||||
**第1轮:班级**
|
||||
- 问题1:写哪个班?(单选,列出当前所有班级选项:AIAGENT03 / CSP04 / CSP00 / 体验课)
|
||||
- 各班级均有固定教案,直接读取课程知识点,不询问课程内容
|
||||
|
||||
**第2轮:根据班级类型追问**
|
||||
- 如果是AICODE班:追问作品文件夹路径
|
||||
- 如果是CSP班:无需追问(OJ数据自动获取)
|
||||
- 如果是K4班:无需追问
|
||||
**第2轮:补充材料**
|
||||
- 问题2(CSP00/CSP04班):OJ题目的token
|
||||
- 问题2(AIAGENT03班):作品文件夹路径
|
||||
- 问题3:出勤情况(文本输入,说明谁来了、谁请假)
|
||||
|
||||
**收集完成后**,自动调用三个阶段的agent完成课评生成。
|
||||
**收集完成后**,自动调用流水线的agent完成课评生成(全程自动,无需确认)。
|
||||
|
||||
### 🔄 智能体流水线模式
|
||||
|
||||
课评生成已拆分为3个独立智能体,按流水线方式协作完成:
|
||||
课评生成已拆分为4个阶段,按流水线方式协作完成(全程自动,无需用户确认):
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||
│ 课评准备阶段 │ ──→ │ 课评生成阶段 │ ──→ │ 课评收尾阶段 │
|
||||
│ (Agent 1) │ │ (Agent 2) │ │ (Agent 3) │
|
||||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
收集所有数据 生成课评内容 质检+保存+归档
|
||||
• API授课数据 • 读取风格指南 • 课评质检
|
||||
• 录音解析(AI分析) • 读取课评模板 • 保存课评
|
||||
• 课程计划匹配 • 生成个人课评 • 保存班级总结
|
||||
• 学生画像读取 • 生成班级总结 • 更新学生画像
|
||||
• OJ数据获取 • 质量自检 • 更新学生画像
|
||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
|
||||
│ 课评准备阶段 │ ──→ │ 课评生成阶段 │ ──→ │ 课评质检+修订阶段 │ ──→ │ 保存归档阶段 │
|
||||
│ (Agent 1) │ │ (Agent 2) │ │ (质检调度器) │ │ (收尾阶段) │
|
||||
└─────────────────┘ └─────────────────┘ └─────────────────────┘ └─────────────────┘
|
||||
│ │ │ │
|
||||
▼ ▼ ▼ ▼
|
||||
收集所有数据 生成课评内容 自动质检+修订 自动保存+归档
|
||||
• 确认班型班次 • 读取风格指南 • 证据审计 • 保存个人课评
|
||||
• 录音解析(AI分析) • 读取课评模板 • 质量评分 • 保存周汇总
|
||||
• 课程计划匹配 • 生成个人课评 • 5位家长视角检查 • 保存班级总结
|
||||
• 学生画像读取 • 生成班级总结 • 终稿编辑修订 • 更新学生画像
|
||||
• OJ数据获取 • 三档自动放行 • 生成汇总网页
|
||||
```
|
||||
|
||||
**优势**:
|
||||
@@ -166,119 +186,57 @@ agent_created: true
|
||||
|
||||
### 工作流程
|
||||
```
|
||||
获取API授课数据 → 读取录音转写(docx) → AI分析识别发言人 → 获取课程知识点 → 读取学生画像 → 润色生成 → 确认修改 → 课评质检 → 保存
|
||||
确认班型班次 → 读取录音转写(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` 格式):
|
||||
自动从 `D:\03-下载` 目录读取课堂录音转写文件(`.docx` 格式),查找该目录下最新的 `.docx` 文件:
|
||||
|
||||
**使用python-docx库读取**:
|
||||
**⚠️ 关键:docx 中文在终端显示会乱码,必须分两步读取!**
|
||||
|
||||
**第一步:用 python-docx 提取文本并保存为 UTF-8 txt 文件**
|
||||
```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)
|
||||
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
|
||||
|
||||
# 使用示例
|
||||
file_path = r"课堂录音转写文件路径" # 例如:第15课录音转写.docx
|
||||
recording_text = read_recording_docx(file_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:05:30]")
|
||||
- 可能包含说话人标识(如"老师:"、"学生:")
|
||||
- 内容为自由文本,不是结构化的表格
|
||||
- 语音转文字质量参差不齐,常见同音字、模糊识别
|
||||
- 整节课的完整转写,包含老师和学生的对话
|
||||
- 带时间戳(如"发言人 00:04")
|
||||
- 可能有"发言人1"、"发言人2"等编号(老师通常是发言人1)
|
||||
- 学生姓名可能被转写为同音字(如"圆振"→"原证"、"艺嘉"→"YGX")
|
||||
|
||||
**AI分析提取学生表现**:
|
||||
由于录音是自由文本格式,需要使用AI分析提取每个学生的表现信息:
|
||||
直接读取 `_提取.txt` 文件内容,分析时注意:
|
||||
- 结合学生姓名和可能的同音字变体来定位个体表现
|
||||
- 语音识别误差大的段落需结合上下文推断
|
||||
- 关注:被点名回答、主动提问、完成进度、老师评语等关键事件
|
||||
|
||||
```python
|
||||
# 分析提示词
|
||||
@@ -286,6 +244,7 @@ analysis_prompt = f"""
|
||||
分析以下课堂录音转写文本,提取每个学生的表现信息。
|
||||
|
||||
班级学生名单:{student_list}
|
||||
注意:语音转文字可能存在同音字,请结合上下文推断学生身份(如"原证"可能是"圆振")。
|
||||
|
||||
请为每个学生提供:
|
||||
1. 出勤状况:正常上课 / 请假 / 未到
|
||||
@@ -302,16 +261,16 @@ analysis_prompt = f"""
|
||||
"""
|
||||
```
|
||||
|
||||
> **日期规则**:批量流程中,所有日期(文件名 `YYYYMMDD`、授课日期)**统一以API返回的teaching_date为准**,不使用录音文件中的日期。
|
||||
> **日期规则**:根据用户提供的周次信息推算具体日期,或在交互式问答时直接询问用户确认授课日期。
|
||||
|
||||
### 2. 匹配课程计划
|
||||
根据班级标题中的关键词匹配对应课程计划:
|
||||
|
||||
| 班级标题关键词 | 课程计划路径 | 课程编号 |
|
||||
|---|---|---|
|
||||
| AICODE03 | `.claude/lesson/AICODE/课程计划.md` | AICODE03 |
|
||||
| CSP03 | `.claude/lesson/CSP03/课程计划.md` | CSP03 |
|
||||
| Kitten04 / K4 | `.claude/lesson/Kitten04/课程计划.md` | Kitten04 |
|
||||
| AIAGENT03 | `.claude/lesson/AIAGENT/AIAGENT-03/2026秋季课程计划.md` | AIAGENT03 |
|
||||
| CSP00 / CSP04 | `.claude/lesson/CSP/CSP03/课程计划.md` | CSP00 / CSP04 |
|
||||
| 体验课 | `.claude/lesson/体验课/` | 体验课 |
|
||||
|
||||
从课程计划中提取对应课次的:
|
||||
- **课程名称**(如《进制转换》)
|
||||
@@ -340,18 +299,14 @@ analysis_prompt = f"""
|
||||
- 将100-200字的表现摘要扩展为约200字的完整家长信格式课评
|
||||
- **绝不编造**录音中没有提到的内容
|
||||
|
||||
**⚠️ CSP班级专属(必须执行)**:
|
||||
对每个CSP学生,**在生成课评之前**必须先查询OJ做题数据:
|
||||
```bash
|
||||
python scripts/get_student_oj.py \
|
||||
--homework-id <作业ID> \
|
||||
--student "<学生姓名>"
|
||||
```
|
||||
将返回的OJ数据Markdown拼接到课评内容中。**没有OJ数据的CSP课评是不完整的!**
|
||||
**⚠️ 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. 功能扩展的增量思维
|
||||
@@ -376,29 +331,21 @@ python scripts/get_student_oj.py \
|
||||
|
||||
**格式**:使用对应班级自己的模板(`.claude/memory/class/[班级]/summaries/群发文案模板.md`或`班级反馈模板.md`)
|
||||
|
||||
### 7. 确认流程(橙子检查)
|
||||
### 7. 自动课评质检(橙子无需确认,自动执行)
|
||||
|
||||
所有课评和班级总结生成后,**先展示给橙子看,不保存**:
|
||||
- 按班级分组展示:个人课评 + 班级总结
|
||||
- 等待橙子确认或提出修改意见
|
||||
- 如有修改,即时调整后再次展示,直到橙子满意
|
||||
课评生成后,**直接自动**调用课评质检系统进行质量检查:
|
||||
|
||||
### 8. 课评质检(橙子确认修改后执行)
|
||||
|
||||
**橙子确认课评内容无误后**,自动调用课评质检系统进行最终质检:
|
||||
|
||||
**触发条件**:橙子说"可以了"、"没问题"、"确认"等表示确认的语句
|
||||
|
||||
**质检流程**:
|
||||
**质检流程**(自动执行,无需用户触发):
|
||||
1. 调用「课评质检调度器」Agent
|
||||
2. 输入:橙子确认后的班级总结 + 所有学生的个人课评
|
||||
3. 调度器自动协调9个质检Agent(证据审计员、质量评审员、5位家长、终稿编辑)
|
||||
4. 输出:质检报告 + 修订稿(如有问题)
|
||||
2. 调度器自动协调9个质检Agent(证据审计员、质量评审员、5位家长、终稿编辑)
|
||||
3. 输出:质检报告 + 修订稿(如有问题)
|
||||
|
||||
**三档放行规则**:
|
||||
- **直接发送**(≥85分且无硬伤):保持原稿,附质检报告供参考,进入保存流程
|
||||
- **修订后发送**(70-84分或有改进点):展示质检报告和修订稿给橙子,橙子确认后进入保存流程
|
||||
- **必须重写**(<70分或触发硬伤):展示质检报告给橙子,橙子决定如何修改
|
||||
**三档放行规则(自动处理)**:
|
||||
- **直接发送**(≥85分且无硬伤):保持原稿,进入保存流程
|
||||
- **修订后发送**(70-84分或有改进点):**直接采用终稿编辑的修订稿**,进入保存流程
|
||||
- **必须重写**(<70分或触发硬伤):**直接采用终稿编辑的修订稿**,进入保存流程
|
||||
|
||||
> ⚡ **三种情况均自动进入保存流程,无需橙子确认。**
|
||||
|
||||
**质检报告格式**:
|
||||
```
|
||||
@@ -424,12 +371,6 @@ python scripts/get_student_oj.py \
|
||||
- 改了什么、为什么改
|
||||
```
|
||||
|
||||
**质检报告位置**:质检报告附在课评后面,供橙子参考,但不发给家长。
|
||||
|
||||
**质检后流程**:
|
||||
- 如果质检通过(直接发送):自动执行保存操作
|
||||
- 如果质检发现问题:展示给橙子,橙子确认后再保存
|
||||
|
||||
**⚠️ CSP课评质检优先使用 Agents 系统**:
|
||||
|
||||
CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质检,该系统包含:
|
||||
@@ -446,7 +387,7 @@ CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质
|
||||
| **家长-焦虑保护型** | `.claude/agents/家长-焦虑保护型/agent.md` | 情绪风险检查 |
|
||||
| **家长-成长陪伴型** | `.claude/agents/家长-成长陪伴型/agent.md` | 成长性反馈 |
|
||||
|
||||
**CSP质检执行方式**:
|
||||
**质检执行方式**:
|
||||
```
|
||||
调用 课评质检调度器 → 调度器自动协调9个Agent → 输出质检报告 + 修订稿
|
||||
```
|
||||
@@ -456,17 +397,24 @@ CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质
|
||||
2. **不做学生横向比较**:揪出"最高/最快/分水岭/紧随XX"等比较词
|
||||
3. **术语家长能懂**:OLE/CE/WA/SJF/AC这类缩写要解释或换成白话
|
||||
4. **结合学生性格**:完美主义型先肯定韧性再谈方法;佛系型正向收尾不施压
|
||||
5. **老师是最终决策者**:给建议和修订稿,老师决定用不用
|
||||
5. **老师是最终决策者**:给建议和修订稿,老师决定用不用(但默认直接采用修订版)
|
||||
|
||||
### 9. 保存归档
|
||||
### 8. 保存归档(自动保存质检后的最佳版本)
|
||||
|
||||
**无需橙子确认**,质检完后直接自动保存:
|
||||
|
||||
| 质检结论 | 保存的版本 | 说明 |
|
||||
|---------|-----------|------|
|
||||
| 直接发送(≥85分) | 原稿(已通过质检) | 原稿本身就是高质量的,直接保存 |
|
||||
| 修订后发送(70-84分) | **修订稿**(质检后修改版) | 质检发现问题 → 终稿编辑修订 → **自动保存修订版** |
|
||||
| 必须重写(<70分) | **修订稿**(质检后修改版) | 质检发现问题 → 终稿编辑修订 → **自动保存修订版** |
|
||||
|
||||
橙子最终确认后,执行以下保存操作:
|
||||
1. 保存到学生个人单次课评文件
|
||||
2. **保存到统一周课评汇总**(`E:/cc/4work_project/ClassFeedback/output/课评汇总/`),**后写的课评放在最前面**
|
||||
3. 保存班级总结
|
||||
4. 更新学生画像
|
||||
|
||||
### 10. 更新学生画像(自动)
|
||||
### 9. 更新学生画像(自动)
|
||||
保存课评的同时,根据本节课表现**适当更新**学生画像 `profile.md`:
|
||||
|
||||
**更新原则**:
|
||||
@@ -496,83 +444,68 @@ CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质
|
||||
|
||||
## 📊 课评质量评分标准(生成时必须遵循)
|
||||
|
||||
> 总分 95 分 = 规范性(40 分) + 丰富度(55 分)
|
||||
> 总分 100 分 = 规范性(50 分) + 丰富度(50 分)
|
||||
> **生成课评时必须按照此标准自检,确保每条课评都达到高质量要求!**
|
||||
|
||||
### 一、规范性(自动检测,合计 40 分)
|
||||
### 一、规范性(自动检测,合计 50 分)
|
||||
|
||||
| 评分项目 | 分值 | 满分判定规则 | 扣分规则 |
|
||||
|----------|------|--------------|----------|
|
||||
| **字数合规** | 10 | 正文字数区间:180–350 字 | 低于 150 字扣 6-10 分;低于 180 字扣 3-5 分;超 400 字扣 1-3 分 |
|
||||
| **禁用词** | 10 | 全文无禁用词汇 | 每出现 1 个禁用词扣 2 分,扣完本项为止 |
|
||||
| **结构完整** | 10 | 评语必须包含三要素:知识点总结 + 学情反馈 + 教师签名 | 缺任一要素扣 4-6 分;三要素齐全但比例失衡扣 1-3 分 |
|
||||
| **Emoji 使用** | 5 | 全篇使用数量 3–5 个 | 0 个扣 5 分,1 个扣 3 分,2 个扣 1 分;超 8 个扣 1-2 分 |
|
||||
| **称呼规范** | 5 | 使用去掉姓氏的小名直呼学生 | 用全名扣 3 分;用"同学"后缀扣 2 分;称呼不统一(前后不一致)扣 1-2 分 |
|
||||
| **字数合规** | 10 | 正文字数区间:180–350 字 | 超出 / 低于区间按梯度扣分 |
|
||||
| **禁用词检查** | 10 | 全文无禁用词汇 | 每出现 1 个禁用词扣 2 分,扣完本项为止 |
|
||||
| **结构完整性** | 10 | 评语必须包含三要素:知识点总结 + 学情反馈 + 教师签名 | 缺任一要素酌情扣分 |
|
||||
| **Emoji 使用** | 10 | 全篇使用数量 3–5 个 | 过少 / 过多酌情扣分 |
|
||||
| **称呼规范** | 10 | 使用学生小名、或去掉姓氏直呼名字 | 称呼格式不规范扣分 |
|
||||
|
||||
**禁用词清单**(生成时必须避免):
|
||||
- 笼统空泛词:表现不错、继续努力、很好、很棒(无具体细节时)
|
||||
- 敷衍词:还可以、一般、还行、差不多
|
||||
- 批评词:太差、不认真、不用心、态度有问题、懒
|
||||
- 比较词:最(最认真/最快/最好)、比其他同学、全班第一
|
||||
- AI味浓词:总体来说、综上所述、相信在未来的学习中
|
||||
- 敷衍词:还可以、一般、还行
|
||||
- 批评词:太差、不认真、不用心、态度有问题
|
||||
|
||||
**自检要点**:
|
||||
- ✅ **字数**:课评正文(不含知识点和OJ数据)在 180–350 字之间。低于 150 字严重不足,低于 180 字偏短
|
||||
- ✅ **禁用词**:不使用上述禁用词,用具体描述代替笼统评价;不做学生横向比较
|
||||
- ✅ **结构**:必须有知识点总结(固定开头)+ 学情反馈(主体)+ 教师签名(结尾)。缺少任何一个要素都是严重扣分项
|
||||
- ✅ **Emoji**:全篇 3–5 个,分布在夸奖、建议、结尾等位置。没有 Emoji 是重扣分项(扣 5 分),这是本维度最容易拿的回分项
|
||||
- ✅ **称呼**:三字姓名去掉姓氏(如"陈圆振"→"圆振"),两字姓名直呼名字,课评全文称呼保持一致。这是当前最短板,务必重视
|
||||
- ✅ 字数:课评正文(不含知识点和OJ数据)在 180–350 字之间
|
||||
- ✅ 禁用词:不使用上述禁用词,用具体描述代替笼统评价
|
||||
- ✅ 结构:必须有知识点总结(固定开头)+ 学情反馈(主体)+ 教师签名(结尾)
|
||||
- ✅ Emoji:全篇 3–5 个,分布在夸奖、建议、结尾等位置
|
||||
- ✅ 称呼:三字姓名去掉姓氏(如"陈圆振"→"圆振"),两字姓名直呼名字
|
||||
|
||||
### 二、丰富度(AI 语义分析,合计 55 分)
|
||||
### 二、丰富度(AI 语义分析,合计 50 分)
|
||||
|
||||
| 评分项目 | 分值 | 高分评判标准 |
|
||||
|----------|------|--------------|
|
||||
| **具体化程度** | 15 | 评语包含具体行为细节、课堂互动片段、原话引用,有画面感,不笼统空泛 |
|
||||
| **课后建议质量** | 10 | 给出可落地、可执行的个性化课后练习 / 提升方案,不是套话建议 |
|
||||
| **个性化纵向对比** | 15 | 结合学生过往学情画像,对比本次表现,体现进步 / 退步追踪,有具体参照点 |
|
||||
| **专业知识点体现** | 15 | 紧扣课程核心知识点点评,用专业术语诊断学生卡点,体现授课专业度 |
|
||||
| **具体化程度** | 15 | 评语包含具体行为细节,描述有画面感,不笼统空泛 |
|
||||
| **课后建议质量** | 15 | 给出可落地、可执行的个性化课后练习 / 提升方案,不是套话建议 |
|
||||
| **个性化纵向对比** | 10 | 结合学生过往学情画像,对比本次表现,体现进步 / 退步追踪 |
|
||||
| **专业知识点体现** | 10 | 紧扣课程核心知识点点评,体现授课专业度,不泛泛闲聊 |
|
||||
|
||||
**丰富度提升技巧**:
|
||||
|
||||
**具体化程度(15分)—— 当前得分 11.0,核心提升项**:
|
||||
- 不只是写"表现不错",要让家长「看到」孩子在课堂上的样子。
|
||||
- **课堂行为描写三要素**(每条课评至少包含 2 项):
|
||||
1. **具体动作**:做了什么、说了什么、写了什么代码
|
||||
2. **互动细节**:问了什么问题、回答了什么问题、和同学怎么协作
|
||||
3. **情绪状态**:遇到困难时的反应、攻克后的小表情、专注时的状态
|
||||
**具体化程度(15分)**:
|
||||
- ❌ "嘉博今天表现不错"(笼统,0分)
|
||||
- ✅ "嘉博今天自己一字一字打字,和AI聊了一节课,特别专注"(具体动作 + 状态,12分)
|
||||
- ✅ "嘉博今天主动问老师'内层循环每执行完一次,外层循环的变量会变吗?',问完之后自己打开IDE验证,验证成功时回头冲我笑了一下"(原话引用 + 动作 + 情绪,15分)
|
||||
- ✅ "嘉博今天自己一字一字打字,和AI聊了一节课,特别专注"(具体行为,15分)
|
||||
- ✅ "嘉博今天主动问老师'内层循环每执行完一次,外层循环的变量会变吗?',说明在认真思考"(引用原话,15分)
|
||||
- 技巧:引用学生在录音中的原话,或描述具体行为,让家长看到孩子真实的课堂表现
|
||||
|
||||
**课后建议质量(10分)—— 当前得分 8.1,稳中提升**:
|
||||
**课后建议质量(15分)**:
|
||||
- ❌ "继续加油"、"多练习"(套话,0分)
|
||||
- ✅ "课后可以试着用AI生成一个故事,然后自己改编结尾,锻炼创意表达"(可执行,10分)
|
||||
- 技巧:给出"做什么" + "怎么做" + "达到什么效果",三步缺一不可
|
||||
- ✅ "课后可以试着用AI生成一个故事,然后自己改编结尾,锻炼创意表达"(可执行,15分)
|
||||
- 技巧:给出"做什么"、"怎么做"、"达到什么效果"
|
||||
|
||||
**个性化纵向对比(15分)—— 当前得分 8.7,重点提升项**:
|
||||
- 不只是和上节课比,要给出具体的参照点。
|
||||
- **纵向对比三层次**(每条课评至少包含 1 层):
|
||||
1. **能力对比**:之前不会 XX,本节课掌握了 XX
|
||||
2. **习惯对比**:之前上课容易分心,本节课能全程专注
|
||||
3. **心态对比**:之前不敢问问题,本节课主动提问 N 次
|
||||
**个性化纵向对比(10分)**:
|
||||
- ❌ 不提过往表现(0分)
|
||||
- ❌ "比之前有进步"(模糊对比,3分)
|
||||
- ✅ "上节课讲到循环时还需要老师反复提醒,这节课自己主动说'老师我能用两层循环做吗',独立思考的意愿明显增强了"(有参照点 + 有具体行为,15分)
|
||||
- 技巧:读取学生画像,找到至少 1 个明确的对比参照点,写进课评
|
||||
- ✅ "比上节课专注力明显提升,能完整听完讲解再动手"(有对比,10分)
|
||||
- 技巧:读取学生画像,对比上次表现,指出进步/需要保持的地方
|
||||
|
||||
**专业知识点体现(15分)—— 当前得分 11.9,稳定优势项**:
|
||||
**专业知识点体现(10分)**:
|
||||
- ❌ "今天学了新知识"(泛泛,0分)
|
||||
- ❌ "对循环嵌套有一定了解"(只有一个知识点名词,5分)
|
||||
- ✅ "对角色设置+限制条件+输出格式的系统提示词优化,有一定了解"(专业术语 + 具体应用,12分)
|
||||
- ✅ "本节课的 substr 和 find 函数,子煜能准确说出两者的参数含义和返回值类型,在课堂练习中处理字符查找的场景时直接用了 find,没有走弯路"(术语精准 + 行为印证,15分)
|
||||
- 技巧:紧扣本节课教案中的知识点,用专业术语点评,并用学生的实际操作来印证理解程度
|
||||
- ✅ "对角色设置+限制条件+输出格式的系统提示词优化,有一定了解"(专业,10分)
|
||||
- 技巧:紧扣本节课教案中的知识点,用专业术语点评
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 核心生成逻辑(自动完成,你不需要操作)
|
||||
## ⚙️ 核心生成逻辑(全程自动,无需人工确认)
|
||||
```
|
||||
1. 读取参考资料 → 2. AICODE班分析作品/CSP班拉取OJ数据 → 3. 生成个性化课评 → 4. 橙子确认修改 → 5. 自动质检 → 6. 自动保存
|
||||
1. 确认班型和班次 → 2. 读取参考资料 → 3. AIAGENT班分析作品 / CSP班拉取OJ数据 → 4. 生成个性化课评 → 5. 自动质检+修订 → 6. 自动保存
|
||||
```
|
||||
|
||||
### 1. 自动读取参考资料
|
||||
@@ -580,25 +513,25 @@ CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质
|
||||
- **学生画像**:`.claude/memory/class/[班级]/[姓名]/profile.md`(了解学生性格特点和适用风格)
|
||||
- **班级风格指南**:根据课程类型读取对应规则(`.claude/rules/[课程].md`)
|
||||
- **课评格式模板**:根据课程类型选择对应模板(`.claude/templates/[课程].md`),包含标准版和极简版
|
||||
- **本节课教案**:到 `.claude/lesson/` 目录下查找对应班级、对应课次的教案,确保课评内容与实际教学一致,不编造内容
|
||||
- **本节课教案**:AIAGENT03班到 `.claude/lesson/AIAGENT/AIAGENT-03/2026秋季课程计划.md` 按课次查找对应教案;**CSP00/CSP04班到 `.claude/lesson/CSP/CSP03/课程计划.md`**
|
||||
- **过往课评**:读取该学生的历史课评,避免重复用词
|
||||
- **课堂录音转写**:`.docx`格式,使用python-docx库读取,AI分析提取学生表现
|
||||
- **AICODE班作品**:查看作品文件夹,分析每个学生作品的创意和亮点
|
||||
- **AIAGENT班作品**:查看作品文件夹,分析每个学生作品的创意和亮点
|
||||
|
||||
> 💡 **模板库路径**:`../../templates/`
|
||||
> - `AICODE.md`:AICODE创意编程课评模板(标准版 + 极简版)
|
||||
> - `AIAGENT.md`:AIAGENT创意编程课评模板(标准版 + 极简版)
|
||||
> - `CSP.md`:C++/CSP课程课评模板
|
||||
> - `KITTEN.md`:Kitten课程课评模板
|
||||
> - `课评汇总网页.html`:家长版课评汇总HTML网页模板(翻页浏览、温暖画册风格)
|
||||
|
||||
### 2. AICODE班级专属:查看作品文件夹(必须执行)
|
||||
### 2. AIAGENT班级专属:查看作品文件夹(必须执行)
|
||||
|
||||
**⚠️ 这是强制步骤,AICODE课评必须包含作品创意描述!**
|
||||
**⚠️ 这是强制步骤,AIAGENT课评必须包含作品创意描述!**
|
||||
|
||||
**执行时机**:在生成每个AICODE学生的课评**之前**,先查看该学生的作品文件夹。
|
||||
**执行时机**:在生成每个AIAGENT学生的课评**之前**,先查看该学生的作品文件夹。
|
||||
|
||||
**执行流程**:
|
||||
1. 识别出AICODE班级的学生
|
||||
1. 识别出AIAGENT班级的学生
|
||||
2. 查看作品文件夹(橙子提供的本地路径)
|
||||
3. 分析每个学生作品的:
|
||||
- 创意点:有什么独特的想法
|
||||
@@ -606,7 +539,7 @@ CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质
|
||||
- 亮点:有什么特别出彩的地方
|
||||
4. 将作品分析**用中文写进课评**中
|
||||
|
||||
**示例**(生成陈嘉博的AICODE课评):
|
||||
**示例**(生成陈嘉博的AIAGENT课评):
|
||||
```
|
||||
嘉博今天表现特别棒~主动问老师关于循环嵌套的问题,说明在认真思考~
|
||||
|
||||
@@ -616,7 +549,11 @@ CSP课评必须使用 `.claude/agents/` 目录下的质检Agent系统进行质
|
||||
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
|
||||
```
|
||||
|
||||
### 3. CSP班级专属:自动获取OJ做题数据(必须执行)
|
||||
### 3. CSP班级专属:自动获取OJ做题数据(必须执行 · 已升级为 v2,见顶部规则)
|
||||
|
||||
> ⚠️ **CSP 课评已改用 `.claude/skills/class-feedback-report` 的提交诊断式流程**:不再用
|
||||
> `get_student_oj.py` 简表,改为 `fetch-class-data.mjs` 拉全班逐生逐次提交后,按该技能模板写诊断报告。
|
||||
> 本小节的旧命令仅作历史参考。
|
||||
|
||||
**⚠️ 这是强制步骤,CSP课评必须包含OJ数据!**
|
||||
|
||||
@@ -653,8 +590,8 @@ python scripts/get_student_oj.py \
|
||||
|
||||
| 题目 | 状态 | 提交次数 | 错误类型 |
|
||||
|------|------|----------|----------|
|
||||
| CSP0309A1 银行叫号模拟 | ✅ 通过 | 1 | — |
|
||||
| CSP0309A2 模拟发牌 | ✅ 通过 | 2 | WA×1 |
|
||||
| CSP0409A1 银行叫号模拟 | ✅ 通过 | 1 | — |
|
||||
| CSP0409A2 模拟发牌 | ✅ 通过 | 2 | WA×1 |
|
||||
...
|
||||
|
||||
**📊 分析**: 完成4题,第5题有尝试但尚未通过...
|
||||
@@ -705,16 +642,20 @@ python scripts/get_student_oj.py \
|
||||
- 专业点评:紧扣课程知识点 ✓
|
||||
|
||||
---
|
||||
### 📋 生成后确认流程(必须遵守)
|
||||
1. 一批课评全部生成后,我会先把所有课评展示给你,不保存
|
||||
2. 等待你确认没问题后,再执行保存操作
|
||||
3. 如果你需要修改,我会根据你的要求修改后再次给你确认,直到你满意再保存
|
||||
### 📋 生成后流程(自动执行,无需确认)
|
||||
|
||||
1. 课评全部生成后,**直接自动启动质检流程**
|
||||
2. 质检后自动选择最佳版本(≥85分用原稿,<85分用终稿编辑的修订稿)
|
||||
3. 自动保存归档(个人课评 + 周汇总 + 班级总结 + 汇总网页)
|
||||
4. 自动更新学生画像
|
||||
5. 输出完成报告
|
||||
|
||||
---
|
||||
|
||||
## 🎨 各班级风格规范(自动匹配)
|
||||
### AICODE03班 - 家长信格式·温暖鼓励型
|
||||
- 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点(与 CSP03 一致)
|
||||
### AIAGENT03班 - 家长信格式·温暖鼓励型
|
||||
|
||||
- 固定开头:"【学生名】家长好,本周学习的内容是《...》" + 5个知识点(开头加学生称呼,如"嘉博家长好",与 CSP04 一致)
|
||||
- 课程目标后空一行,再写"课评反馈:"正文
|
||||
- 多用"很棒"、"特别棒"、"超棒"和波浪号"~"
|
||||
- 描述具体行为:"一字一字打字"、"和AI聊了一节课"
|
||||
@@ -726,14 +667,14 @@ python scripts/get_student_oj.py \
|
||||
- 温和建议时:😊💡🌸
|
||||
- 结尾固定:"老师会继续关注【姓名】的表现,期待看到更多精彩!🌟💡"
|
||||
|
||||
**⚠️ AICODE03班强制要求**:
|
||||
**⚠️ AIAGENT03班强制要求**:
|
||||
- **必须查看作品文件夹**,了解每个学生作品的创意和亮点
|
||||
- **必须用中文描述作品**,写进课评中
|
||||
- 描述技巧:
|
||||
- ❌ "嘉博的作品做得不错"(笼统)
|
||||
- ✅ "嘉博的作品是一个猜数字游戏,用了独特的渐变色背景,还添加了音效和暂停功能,创意很棒!"(具体描述)
|
||||
|
||||
#### AICODE03班作品描述示例
|
||||
#### AIAGENT班作品描述示例
|
||||
```markdown
|
||||
嘉博今天表现特别棒~对循环嵌套的理解很到位,能快速理解并动手尝试~
|
||||
|
||||
@@ -745,18 +686,8 @@ python scripts/get_student_oj.py \
|
||||
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡
|
||||
```
|
||||
|
||||
### K4班 - 家长信格式·温和鼓励型
|
||||
- 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点
|
||||
- 肯定创意:"能够有自己的创意"
|
||||
- 温和指出:"不过老师发现...专注力有些下降"
|
||||
- **表情包使用**:K4班学生年龄小,多用可爱活泼的表情增加亲和力
|
||||
- 表扬创意时:🎨🌈✨🌟
|
||||
- 鼓励坚持时:💪🐱🚀
|
||||
- 提醒专注时:👀💡😊
|
||||
- 结尾可用:"继续加油哦!🌟"、"相信你会把程序做得更完整!🚀"
|
||||
|
||||
### CSP03班 - 家长信格式·要求型
|
||||
- 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点
|
||||
### CSP00/CSP04班 - 家长信格式·要求型
|
||||
- 固定开头:"【学生名】家长好,本周学习的内容是《...》" + 5个知识点(开头加学生称呼,如"圆振家长好")
|
||||
- 表扬积极:"状态在线"、"早早到校等候超积极"
|
||||
- 期望要求:"希望多思考"、"理解为什么这么写,不只是抄完就好~"
|
||||
- **表情包使用**:CSP班学生偏大,表情偏励志和认可风格
|
||||
@@ -765,12 +696,15 @@ python scripts/get_student_oj.py \
|
||||
- 提出期望时:💡📝😊
|
||||
- 结尾固定:"加油呀!💪✨"
|
||||
|
||||
**⚠️ CSP03班强制要求**:
|
||||
**⚠️ CSP00/CSP04班强制要求**:
|
||||
- **必须查询OJ做题数据**,没有OJ数据的CSP课评是不完整的
|
||||
- 执行命令:`python scripts/get_student_oj.py --homework-id <作业ID> --student "<姓名>"`
|
||||
- OJ数据板块放在课评正文后面,格式见下方模板
|
||||
|
||||
#### CSP03班 OJ数据板块格式(自动生成)
|
||||
#### CSP00/CSP04班 OJ数据板块格式(自动生成 · 已弃用,v2 见顶部规则)
|
||||
|
||||
> ⚠️ 此简表为旧版写法,**CSP 课评现已改用 `.claude/skills/class-feedback-report` 的提交诊断式报告**
|
||||
> (🌟表扬→逐次提交诊断→整体分析→建议)。保留仅为历史参考。
|
||||
**OJ作业包定位说明**:
|
||||
- A包 = 课堂练习(**包含5道具体题目,必须全部列出**)
|
||||
- B包 = 必须完成的课后家庭作业(未完成会明确提醒家长督促)
|
||||
@@ -783,15 +717,15 @@ python scripts/get_student_oj.py \
|
||||
|
||||
| 题目 | 类型 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|
||||
|------|------|------|----------|----------|----------|
|
||||
| CSP03-XXA1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
| CSP03-XXA2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
| CSP03-XXA3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
| CSP03-XXA4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
| CSP03-XXA5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
|
||||
| CSP04-XXA1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
| CSP04-XXA2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
| CSP04-XXA3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
| CSP04-XXA4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
| CSP04-XXA5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
|
||||
|
||||
---
|
||||
| CSP03-XXB | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
|
||||
| CSP03-XXC | 拓展训练(选做) | ⬜ 未提交 | 0 | — | — |
|
||||
| CSP04-XXB | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
|
||||
| CSP04-XXC | 拓展训练(选做) | ⬜ 未提交 | 0 | — | — |
|
||||
|
||||
**📊 分析**: A包5道题完成了4道,基础题全部掌握,提高题第5道考察的是边界条件处理,还需要加强;B包必做课后作业已完成,知识点巩固得不错;C包拓展题未提交,学有余力可以尝试挑战。
|
||||
**错误分布**: 编译错误1次,答案错误4次,主要是边界条件考虑不周全,建议课后多练类似题目。
|
||||
@@ -806,7 +740,7 @@ python scripts/get_student_oj.py \
|
||||
- ✅ 对A包中未完成的题目,给出具体的知识点建议,帮助孩子针对性提高
|
||||
|
||||
### 体验课 - 家长信格式·转化导向型
|
||||
- 固定开头:"家长好,今天体验的是《...》课程" + 课程价值介绍
|
||||
- 固定开头:"【学生名】家长好,今天体验的是《...》课程" + 课程价值介绍(开头加学生称呼,如"小明家长好")
|
||||
- 突出"第一次":强调新体验,降低焦虑,突出潜力
|
||||
- 建立愿景:描述继续学习后孩子能达到的水平
|
||||
- 自然引导报课:用期待和相信引导,不硬推销
|
||||
@@ -822,14 +756,29 @@ python scripts/get_student_oj.py \
|
||||
你确认课评没问题后,我会自动保存到多个位置,严格遵守课评规范V1.0要求:
|
||||
|
||||
### 📌 命名规范(必须严格遵守)
|
||||
- **课程编号规则**:C++竞赛班统一用`CSP`,AI编程班统一用`AICODE`,不得使用`AI`、`C++`等缩写
|
||||
- **文件名规则**:`YYYYMMDD_课程编号-课次.md`(如`20260418_CSP05-07.md`、`20260330_AICODE03-02.md`)
|
||||
- **日期要求**:文件名中的`YYYYMMDD`必须与校宝`teaching_date`完全一致,不得使用编写/提交日期
|
||||
- **课程编号规则**: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`
|
||||
@@ -859,7 +808,7 @@ python scripts/get_student_oj.py \
|
||||
|
||||
- **保存路径**:`.claude/memory/class/[补课班级]/补课/[学生姓名]/feedback/`
|
||||
- **文件名**:`YYYYMMDD_课程编号-课次.md`
|
||||
- 这里的**课程编号**使用补课班级本身的编号(如去CSP03班补课,就用 `CSP03`)
|
||||
- 这里的**课程编号**使用补课班级本身的编号(如去CSP04班补课,就用 `CSP04`)
|
||||
- 文件内容正常写课评,无需特殊标记
|
||||
|
||||
### 5. 班级总结保存
|
||||
@@ -889,9 +838,9 @@ python scripts/get_student_oj.py \
|
||||
**判断逻辑**:
|
||||
1. 计算本节课所属的教学周次(第X周)
|
||||
2. 构造文件名:`第{X}周{星期时间}{课程编号}课评.html`
|
||||
- 星期时间从API数据中提取(如"周日下午"、"周六早上")
|
||||
- 课程编号如 `AICODE03`、`CSP03`、`K4`
|
||||
- 示例:`第14周周日下午AICODE03课评.html`
|
||||
- 星期时间从用户提供的班次信息中提取(如"周日下午"、"周六早上")
|
||||
- 课程编号如 `AIAGENT03`、`CSP04`、`CSP00`
|
||||
- 示例:`第14周周日下午AIAGENT03课评.html`
|
||||
3. 检查 `output/课评汇总/` 目录下是否已存在该文件
|
||||
4. 如果**已存在**,**跳过不覆盖**(避免误删橙子手动修改过的网页)
|
||||
5. 如果**不存在**,基于模板生成新的HTML文件
|
||||
@@ -903,10 +852,10 @@ python scripts/get_student_oj.py \
|
||||
| 模板位置 | 替换内容 | 数据来源 |
|
||||
|---------|---------|---------|
|
||||
| `<title>`、顶部标题 | 第X周 · [课程编号]班课评 | 周次 + 课程编号 |
|
||||
| 顶部副标题、封面日期 | YYYY年M月D日 · 《课程名称》 · 橙子老师 | API的teaching_date + 课程计划 |
|
||||
| 顶部副标题、封面日期 | YYYY年M月D日 · 《课程名称》 · 橙子老师 | 用户提供的日期 + 课程计划 |
|
||||
| 封面大标题 | 《课程名称》 | 课程计划 |
|
||||
| 封面副标题 | 课程领域 · 第X课 | 课程计划 |
|
||||
| 封面信息区 | 📅日期、⏰时间、👩🏫老师 | API数据 |
|
||||
| 封面信息区 | 📅日期、⏰时间、👩🏫老师 | 用户提供的数据 |
|
||||
| 知识点列表 | 5条知识点 | 课程计划中的教学目标 |
|
||||
| 学生卡片 | 每张卡片一个学生 | 本节课所有学生的课评 |
|
||||
| 状态标签 | 正常上课/补课/请假/未到 | 出勤记录 |
|
||||
@@ -920,9 +869,11 @@ python scripts/get_student_oj.py \
|
||||
- 第一张卡片必须有 `active` 类,其余没有
|
||||
- 课评正文中的换行符 `\n` 替换为 `<br>`
|
||||
- 评价指标根据班级风格选取2~4个:
|
||||
- AICODE班:课堂互动、专注度、作品完成、知识点掌握
|
||||
- AIAGENT班:课堂互动、专注度、作品完成、知识点掌握
|
||||
- CSP班:课堂互动、专注度、OJ完成情况、知识点掌握
|
||||
- K4班:课堂互动、创意表达、作品完成、专注度
|
||||
- 评价指标根据班级风格选取2~4个:
|
||||
- AIAGENT03班:课堂互动、专注度、作品完成、知识点掌握
|
||||
- CSP00/CSP04班:课堂互动、逻辑思维、OJ完成情况、代码能力
|
||||
- 请假/未到课的学生也要生成卡片,课评内容写简短说明,状态标签用 `badge-absent`
|
||||
|
||||
**保存路径**:
|
||||
@@ -962,11 +913,11 @@ output/课评汇总/第{X}周{星期时间}{课程编号}课评.html
|
||||
后续流程:匹配课程计划 → 读取学生画像 → 生成课评
|
||||
```
|
||||
|
||||
**AICODE课程 - 鼓励型**
|
||||
**AIAGENT课程 - 鼓励型**
|
||||
> 李明今天虽然是第一次接触AI绘画,但我看到了你眼里的好奇,这就是最好的开始。你的描述很有画面感,"想要一个会眨眼的可爱猫咪",这就是好的Prompt。虽然操作还有点生疏,但老师注意到你一直在尝试,这份坚持比做对题目更珍贵。下次可以把想法先写在便签纸上,分点列出,跟AI沟通会更顺畅。记住,编程最大的门槛不是英文或数学,是敢于尝试的勇气,你已经有了。继续和你的"AI搭档"对话吧,它会越来越懂你的。
|
||||
|
||||
**CSP03班 - 家长信格式·要求型(含OJ数据)**
|
||||
> 家长好,本周学习的内容是《字符串处理》:
|
||||
**CSP04班 - 家长信格式·要求型(含OJ数据)**
|
||||
> 子煜家长好,本周学习的内容是《字符串处理》:
|
||||
> 1. string 类型的声明与使用
|
||||
> 2. 字符串的输入输出(cin / getline)
|
||||
> 3. 字符串的拼接与比较操作
|
||||
@@ -981,15 +932,15 @@ output/课评汇总/第{X}周{星期时间}{课程编号}课评.html
|
||||
>
|
||||
> | 题目 | 类型 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|
||||
> |------|------|------|----------|----------|----------|
|
||||
> | CSP03-07A1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
> | CSP03-07A2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
> | CSP03-07A3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
> | CSP03-07A4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
> | CSP03-07A5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
|
||||
> | CSP04-07A1 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
> | CSP04-07A2 | 基础题 | ✅ 通过 | 1 | 一气呵成 | — |
|
||||
> | CSP04-07A3 | 基础题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
> | CSP04-07A4 | 提高题 | ✅ 通过 | 2 | 调试改进 | WA×1 |
|
||||
> | CSP04-07A5 | 提高题 | ❌ 未通过 | 2 | 遇到困难 | CE×1, WA×1 |
|
||||
>
|
||||
> ---
|
||||
> | CSP03-07B | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
|
||||
> | CSP03-07C | 拓展训练(选做) | ⬜ 未提交 | 0 | — | — |
|
||||
> | CSP04-07B | 课后作业(必做) | ✅ 已完成 | 3 | 反复调试 | WA×2 |
|
||||
> | CSP04-07C | 拓展训练(选做) | ⬜ 未提交 | 0 | — | — |
|
||||
>
|
||||
> **📊 分析**: A包5道题完成了4道,基础题全部掌握,提高题第5道考察的是字符串边界处理,还需要加强;B包必做课后作业已完成,知识点巩固得不错;C包拓展题未提交,学有余力可以尝试挑战。
|
||||
> **错误分布**: 编译错误1次,答案错误4次,主要是边界条件考虑不周全,建议课后多练类似题目。
|
||||
|
||||
Reference in New Issue
Block a user