Files
ClassFeedback/.claude/skills/课评生成/skill.md
chengzi 52de1c0317 feat: 课评生成技能新增API出勤数据获取步骤
在写课评之前先调用公司API获取橙子老师的出勤数据,
使用API返回的teaching_date作为课评文件名日期,确保日期准确性。
2026-05-27 09:57:58 +08:00

25 KiB
Raw Blame History

name, description, type
name description type
课评生成 快速生成个性化课评,你只需提供学生本节课的表现,自动匹配班级风格生成高质量课评 skill

🎯 课评生成器技能包

🌟 功能说明

本技能专为穹狼科创编程课程设计,使用超简单:你只需要告诉我学生的基本信息和本节课表现,我就能自动生成符合班级风格的个性化课评

支持四大课程C++/AICODE/Kitten/体验课 自动匹配班级专属风格AICODE03温暖鼓励型/K4温和鼓励型/CSP03要求型/体验课转化型 CSP班级必须查询OJ做题数据自动调用API获取A包答题情况

💡 使用方式(超简单)

你只需要提供以下信息:

学生姓名_______
班级_______
课程名称_______
课次第_______课
日期YYYY-MM-DD
表现描述_______越具体越好比如"掌握了循环嵌套主动调试bug专注力比上节课好"

我会自动完成剩下的所有工作:

  1. 读取学生画像、班级风格指南、本节课教案
  2. CSP班级必须先调用OJ API查询该学生的A包做题数据
  3. 生成约200字的个性化课评CSP课评必须包含OJ数据板块

📂 从笔记文件批量生成课评(推荐工作流)

橙子平时在 E:\cc\3笔记\第N课.md 中记录学生出勤和简短课评,写完后提供文件路径给我,我会自动完成以下流程:

输入文件格式

橙子提供的笔记文件格式如下(示例):

# 课评记录表 — 2026年05月14日周三

### AICODE03橙子周六1900
| 姓名 | 出勤状况 | 课评 |
|------|----------|------|
| 陈嘉博 | 正常上课 | 表现积极,掌握了循环嵌套 |
| 王子墨 | 请假 | |

工作流程

获取API出勤数据 → 读取笔记 → 匹配课程计划 → 读取学生画像 → 润色生成 → 确认 → 保存

0. 获取API出勤数据必须第一步执行

⚠️ 这是强制步骤,必须在读取笔记之前执行!

在开始处理任何课评之前,必须先调用公司API获取橙子老师近期的出勤数据,用于:

  1. 确认橙子老师实际带了哪些班级
  2. 获取每个班级的真实授课日期teaching_date),用于课评文件名

执行命令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_nametime 匹配笔记中的班级:

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. 读取笔记文件

解析 E:\cc\3笔记\第N课.md

  • 从文件名提取课次(如"第11课"
  • API获取的teaching_date确定日期(不使用笔记文件头的日期)
  • 按班级区块解析,提取每个学生:
    • 姓名、出勤状况、课评描述(用户写的简短描述)

日期规则:笔记批量流程中,所有日期(文件名 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个知识点和结尾风格
  • 将简短描述扩展为约200字的完整家长信格式课评
  • 绝不编造用户没有提到的内容

⚠️ CSP班级专属必须执行 对每个CSP学生在生成课评之前必须先查询OJ做题数据

python scripts/update_feedback_with_oj.py \
  --course CSP03-<课次编号> \
  --get-student-oj "<学生姓名>"

将返回的OJ数据Markdown拼接到课评内容中。没有OJ数据的CSP课评是不完整的

输出示例

家长好,本周学习的内容是《魔幻俄罗斯方块(下)》:
1. 理解"自动化测试"的概念
2. 理解"测试覆盖":每条规则都应有对应测试
3. 功能扩展的增量思维
4. 增量需求文档的编写方法
5. 测试脚本生成与结果解读

嘉博今天表现特别棒~对增量需求文档的理解很到位,能够自己写出清晰的测试用例~
和AI协作完成俄罗斯方块的调试遇到困难没有放弃特别有韧性
要是可以在写需求文档的时候再仔细检查一下边界条件就更好啦~
老师会继续关注嘉博的表现,期待看到更多精彩!🌟💡

6. 生成班级总结(所有班级)

笔记中列出的每一个班级都会生成本节课的班级总结,不局限于特定班级:

内容来源

  • 课程名称 + 5个知识点来自课程计划
  • 该班级所有学生的整体表现(基于笔记中课评描述汇总)
  • 亮点学生、共性问题、课堂趣事

保存路径.claude/memory/class/[班级]/summaries/YYYYMMDD_课程编号-课次_班级反馈.md

格式:使用对应班级自己的模板(.claude/memory/class/[班级]/summaries/群发文案模板.md班级反馈模板.md

7. 确认流程

所有课评和班级总结生成后,先展示给橙子看,不保存

  • 按班级分组展示:个人课评 + 班级总结
  • 等待橙子确认或提出修改意见
  • 如有修改,即时调整后再次展示,直到橙子满意

橙子确认无误后,才执行以下保存操作

  1. 保存到学生个人单次课评文件
  2. 保存到统一周课评汇总E:/cc/4work_project/ClassFeedback/output/课评汇总/后写的课评放在最前面
  3. 保存班级总结
  4. 更新学生画像

8. 更新学生画像(自动)

保存课评的同时,根据本节课表现适当更新学生画像 profile.md

更新原则

  • 只记录新发现明显变化,不重复已有信息
  • 更新位置:在 profile.md 的"近期表现"或"课堂观察"部分追加

触发更新的典型情况

  • 展现出新的兴趣点(如"首次表现出对XX的浓厚兴趣"
  • 能力有明显进步(如"打字速度比上学期快了很多"
  • 性格/态度变化(如"从内向变得愿意主动提问"
  • 需要持续关注的问题(如"近两次课专注力有所下降"
  • 特殊事件(如"第一次独立完成完整作品"

不更新的情况

  • 表现和画像中已有描述一致
  • 只是常规课堂表现,无特殊变化
  • 一次性的小问题(如"今天迟到"

更新格式示例:

**2026-05-14 第11课观察**
- 对增量需求文档的理解力有提升,能自己写出测试用例
- 遇到困难时不再马上求助,会先尝试独立调试

⚙️ 核心生成逻辑(自动完成,你不需要操作)

1. 读取参考资料 → 2. CSP班级自动拉取OJ数据 → 3. 生成个性化课评 → 4. 自动保存

1. 自动读取参考资料

我会自动找到以下资料用于生成课评:

  • 学生画像.claude/memory/class/[班级]/[姓名]/profile.md(了解学生性格特点和适用风格)
  • 班级风格指南:根据课程类型读取对应规则(.claude/rules/[课程].md
  • 课评格式模板:根据课程类型选择对应模板(.claude/templates/[课程].md),包含标准版和极简版
  • 本节课教案:到 .claude/lesson/ 目录下查找对应班级、对应课次的教案,确保课评内容与实际教学一致,不编造内容
  • 过往课评:读取该学生的历史课评,避免重复用词

💡 模板库路径../../templates/

  • AICODE.mdAICODE创意编程课评模板标准版 + 极简版)
  • CSP.mdC++/CSP课程课评模板
  • KITTEN.mdKitten课程课评模板
  • 出勤登记-2026春季.md:出勤登记表模板

2. CSP班级专属自动获取OJ做题数据必须执行

⚠️ 这是强制步骤CSP课评必须包含OJ数据

执行时机在生成每个CSP学生的课评之前先查询该学生的OJ数据。

查询命令对每个CSP学生执行

python scripts/update_feedback_with_oj.py \
  --course CSP03-<课次编号> \
  --get-student-oj "<学生姓名>"

执行流程

  1. 识别出CSP班级的学生
  2. 对每个CSP学生运行上述命令获取OJ数据
  3. 命令会输出该学生的OJ数据Markdown包含A包每道题的完成情况
  4. 将返回的OJ数据Markdown直接拼接到该学生的课评内容中

示例生成杨林轩的CSP课评

# 第1步获取OJ数据
python scripts/update_feedback_with_oj.py \
  --course CSP03-09 \
  --get-student-oj "杨林轩"

# 第2步把返回的OJ数据整合到课评中

返回格式示例

## 【OJ做题数据】

**完成情况**: 4/5 (共8次提交)

| 题目 | 状态 | 提交次数 | 思考模式 | 错误类型 |
|------|------|----------|----------|----------|
| CSP0309A1 银行叫号模拟 | ✅ 通过 | 1 | 一气呵成 | — |
| CSP0309A2 模拟发牌 | ✅ 通过 | 2 | 调试改进 | WA×1 |
...

**📊 分析**: 完成4题第5题有尝试但尚未通过...

注意事项

  • 必须先在 config/hw_dict.json 中配置好课程的作业ID
  • 如果学生姓名在OJ系统中不匹配会返回空数据
  • 返回的Markdown直接拼接到课评正文后面不要修改格式

3. 自动生成课评(统一格式,所有课程通用)

固定格式(必须严格遵守)

【学生姓名】家长好我们本周上课的课程是《XXX》

课程目标:
1. 【知识点1】
2. 【知识点2】
3. 【知识点3】

课评反馈:
【具体课评内容约200字包含优点、建议、期望】

生成规则:

  • 课程目标从本节课教案中提取真实知识点,禁止编造
  • 课评反馈包含:优点表扬 + 温和建议 + 鼓励期望
  • 表情包丰富原则课评正文中适当穿插表情符号让文字更生动有温度每个课评至少使用3-5个表情分布在夸奖、建议、结尾等位置
  • CSP班级专属要求必须查询OJ系统的A包作业完成情况进行详细分析包含完成率、思考模式、错误分布、改进建议【OJ做题数据】板块放在课评反馈的最后部分
  • 称呼规则:三字姓名默认去掉姓氏,直呼后两个字(如"陈圆振"→"圆振"),更亲切
  • 内容完全基于你提供的表现描述和教案知识点,不编造内容

📋 生成后确认流程(必须遵守)

  1. 一批课评全部生成后,我会先把所有课评展示给你,不保存
  2. 等待你确认没问题后,再执行保存操作
  3. 如果你需要修改,我会根据你的要求修改后再次给你确认,直到你满意再保存

🎨 各班级风格规范(自动匹配)

AICODE03班 - 家长信格式·温暖鼓励型

  • 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点与 CSP03 一致)
  • 课程目标后空一行,再写"课评反馈:"正文
  • 多用"很棒"、"特别棒"、"超棒"和波浪号""
  • 描述具体行为:"一字一字打字"、"和AI聊了一节课"
  • 温和建议用"要是...就更好啦~"
  • 表情包使用:课评正文中适当穿插表情,让文字更生动温暖
    • 夸奖时:🌟🎉👍
    • 鼓励时:💪🔥🚀
    • 温和建议时:😊💡🌸
    • 结尾固定:"老师会继续关注【姓名】的表现,期待看到更多精彩!🌟💡"

K4班 - 家长信格式·温和鼓励型

  • 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点
  • 肯定创意:"能够有自己的创意"
  • 温和指出:"不过老师发现...专注力有些下降"
  • 表情包使用K4班学生年龄小多用可爱活泼的表情增加亲和力
    • 表扬创意时:🎨🌈🌟
    • 鼓励坚持时:💪🐱🚀
    • 提醒专注时:👀💡😊
    • 结尾可用:"继续加油哦!🌟"、"相信你会把程序做得更完整!🚀"

CSP03班 - 家长信格式·要求型

  • 固定开头:"家长好,本周学习的内容是《...》" + 5个知识点
  • 表扬积极:"状态在线"、"早早到校等候超积极"
  • 期望要求:"希望多思考"、"理解为什么这么写,不只是抄完就好~"
  • 表情包使用CSP班学生偏大表情偏励志和认可风格
    • 表扬状态时:💪🎯🔥
    • 肯定进步时:📈👏🌟
    • 提出期望时:💡📝😊
    • 结尾固定:"加油呀!💪"

⚠️ CSP03班强制要求

  • 必须查询OJ做题数据没有OJ数据的CSP课评是不完整的
  • 执行命令:python scripts/update_feedback_with_oj.py --course CSP03-<课次> --get-student-oj "<姓名>"
  • OJ数据板块放在课评正文后面格式见下方模板

CSP03班 OJ数据板块格式自动生成

OJ作业包定位说明

  • A包 = 课堂练习(包含5道具体题目必须全部列出
  • B包 = 必须完成的课后家庭作业(未完成会明确提醒家长督促)
  • C包 = 拓展训练(学有余力的同学可挑战)
## 【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++竞赛班统一用CSPAI编程班统一用AICODE,不得使用AIC++等缩写
  • 文件名规则YYYYMMDD_课程编号-课次.md(如20260418_CSP05-07.md20260330_AICODE03-02.md
  • 日期要求:文件名中的YYYYMMDD必须与校宝teaching_date完全一致,不得使用编写/提交日期
  • 特殊状态文件
    • 请假:YYYYMMDD_课程编号-课次(请假).md
    • 未上课:YYYYMMDD_课程编号-课次(未到).md
    • 补课:正常文件名 YYYYMMDD_课程编号-课次.md,放在补课班级下的 补课/ 目录中

1. 保存到学生个人单次课评文件(必须,用于自动化统计)

为每位学生生成单独的单次课评文件,这是课评完成率统计的依据: 路径.claude/memory/class/[班级]/[姓名]/feedback/YYYYMMDD_课程编号-课次.md

格式

# 课程名称:[课程名称]

**授课日期**: [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
  • 格式:简要记录本次未到课,无课评内容

保存完成后我会告诉你:

已保存X条课评 周汇总已更新:[周数]周汇总文件已更新,新课评已放在最顶部


📝 示例课评(参考)

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题搞明白理解边界条件的处理方法而不是放着不管加油呀💪