规则精简合并 v3.2 + 项目结构整理

- 将20+个独立规则合并为9个核心规则(00/10/15/20/21/22/30/50/51)
- 旧规则移入90-archive并标注已合并,请勿直接引用
- 拆分新增:21-shorthand.md(速记符号)、22-student-mgmt.md(补课/新学生/转正)
- 升级keping-advanced skill配置:v2.1 → v2.2(自动双轨保存、三段式结构、字数弹性180-350)
- 删除旧skill文件(keping.json、速查卡、使用指南)和CHANGELOG.md
- 删除各周多余的独立出勤统计文件(出勤已嵌入班级汇总)
- SPIKE02班级文件夹名称规范化(去除特殊字符)
- 将学生模板文件移入memory/student/模板/子目录
- 将fix_config.py移入src/,删除根目录test123.txt测试文件

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
qiuyan
2026-05-09 20:45:29 +08:00
parent a048743b0e
commit 079a09d743
88 changed files with 804 additions and 5415 deletions

View File

@@ -1,80 +1,20 @@
{
"skill_name": "keping-advanced",
"version": "2.1.0",
"description": "高级课评生成Skill v2.1 - 支持学期周数自动计算(仅用于后端课程主题匹配)、课程主题自动匹配、课评内容关联当周知识点(不显示周数",
"version": "2.2.0",
"description": "高级课评生成Skill v2.2 - 支持学期周数自动计算(仅用于后端课程主题匹配)、课程主题自动匹配、三段式课评生成、自动双轨保存(班级汇总+个人档案",
"triggers": ["/课评", "/keping", "/写课评", "生成课评"],
"semester_config": {
"baseline_date": "2026-03-02",
"week_calculation": "Floor((current_date - baseline) / 7) + 1",
"total_weeks": 20,
"current_week": 5,
"current_date": "2026-04-02"
"current_week": 10,
"current_date": "2026-05-09"
},
"course_mapping": {
"发现世界": {
"prefix": "DISC",
"week_mapping": {
"1": "DISC-001",
"2": "DISC-002",
"3": "DISC-003",
"4": "DISC-004",
"5": "DISC-005",
"6": "DISC-006",
"7": "DISC-007",
"8": "DISC-008",
"9": "DISC-009",
"10": "DISC-010",
"11": "DISC-011",
"12": "DISC-012",
"13": "DISC-013",
"14": "DISC-014",
"15": "DISC-015",
"16": "DISC-016",
"17": "DISC-017",
"18": "DISC-018",
"19": "DISC-019",
"20": "DISC-020"
}
},
"SPIKE": {
"prefix": "SPIKE",
"week_mapping": {
"1": "SPIKE-001",
"2": "SPIKE-002",
"3": "SPIKE-003",
"4": "SPIKE-004",
"5": "SPIKE-005",
"6": "SPIKE-006",
"7": "SPIKE-007",
"8": "SPIKE-008",
"9": "SPIKE-009",
"10": "SPIKE-010",
"11": "SPIKE-011",
"12": "SPIKE-012",
"13": "SPIKE-013",
"14": "SPIKE-014",
"15": "SPIKE-015",
"16": "SPIKE-016",
"17": "SPIKE-017",
"18": "SPIKE-018",
"19": "SPIKE-019",
"20": "SPIKE-020"
}
},
"AI03": {
"prefix": "AI03",
"week_mapping": {
"1": "AI03-001",
"2": "AI03-002",
"3": "AI03-003",
"4": "AI03-004",
"5": "AI03-005"
}
}
"发现世界": {"prefix": "DISC", "week_mapping": {"1": "DISC-001", "2": "DISC-002", "3": "DISC-003", "4": "DISC-004", "5": "DISC-005", "6": "DISC-006", "7": "DISC-007", "8": "DISC-008", "9": "DISC-009", "10": "DISC-010", "11": "DISC-011", "12": "DISC-012", "13": "DISC-013", "14": "DISC-014", "15": "DISC-015", "16": "DISC-016", "17": "DISC-017", "18": "DISC-018", "19": "DISC-019", "20": "DISC-020"}},
"SPIKE": {"prefix": "SPIKE", "week_mapping": {"1": "SPIKE-001", "2": "SPIKE-002", "3": "SPIKE-003", "4": "SPIKE-004", "5": "SPIKE-005", "6": "SPIKE-006", "7": "SPIKE-007", "8": "SPIKE-008", "9": "SPIKE-009", "10": "SPIKE-010", "11": "SPIKE-011", "12": "SPIKE-012", "13": "SPIKE-013", "14": "SPIKE-014", "15": "SPIKE-015", "16": "SPIKE-016", "17": "SPIKE-017", "18": "SPIKE-018", "19": "SPIKE-019", "20": "SPIKE-020"}},
"AI03": {"prefix": "AI03", "week_mapping": {"1": "AI03-001", "2": "AI03-002", "3": "AI03-003", "4": "AI03-004", "5": "AI03-005", "6": "AI03-006", "7": "AI03-007", "8": "AI03-008", "9": "AI03-009", "10": "AI03-010", "11": "AI03-011", "12": "AI03-012", "13": "AI03-013", "14": "AI03-014", "15": "AI03-015", "16": "AI03-016", "17": "AI03-017", "18": "AI03-018", "19": "AI03-019", "20": "AI03-020"}}
},
"workflow": {
"steps": [
{
@@ -96,14 +36,12 @@
},
{
"id": "step2",
"name": "读取对应课程的课评规则",
"name": "读取课评风格规则(全年龄段统一)",
"action": "read_style_rules",
"input": ["年龄段"],
"output": ["字数要求", "必写模块", "语言风格", "禁用词汇"],
"output": ["字数要求", "三段式结构", "语言风格", "禁用词汇", "Emoji规范"],
"file_mapping": {
"幼儿(2.5-6岁)": ".claude/rules/20-style-building.md",
"小学低(6-8岁)": ".claude/rules/21-style-coding.md",
"小学中高(8-10岁)": ".claude/rules/22-style-robotics.md"
"all_ages": ".claude/rules/10-style.md"
}
},
{
@@ -137,14 +75,20 @@
},
{
"id": "step6",
"name": "生成200-300字个性化课评使用display_name称呼不显示周数",
"name": "生成180-350字三段式个性化课评使用display_name称呼不显示周数",
"action": "generate_evaluation",
"input": ["step1-5的所有数据", "display_name(课评用称呼)", "课程主题", "核心知识点"],
"output": ["课评文本"],
"theme_association": true,
"rules": {
"word_count": {"min": 180, "max": 300, "target": 250},
"modules": ["课程知识点(兴趣度)", "掌握程度(学习表现)", "课堂状态", "成长亮点", "课后建议"],
"word_count": {"min": 180, "max": 350, "target": 250, "note": "弹性范围精简版180-220字标准版220-280字详细版280-350字"},
"paragraph_count": 3,
"structure": {
"paragraph_1": {"name": "课程知识点", "word_range": "30-55字", "emoji_count": 1},
"paragraph_2": {"name": "课堂细节(掌握+环节+亮点)", "word_range": "100-220字弹性", "emoji_count": "1-3"},
"paragraph_3": {"name": "课后建议", "word_range": "30-55字", "emoji_count": 1}
},
"modules": ["课程知识点(兴趣度)", "掌握程度(学习表现)", "课程环节与目标达成", "成长亮点", "课后建议"],
"week_number_in_content": false,
"name_usage": {
"use_display_name": true,
@@ -153,43 +97,17 @@
},
"emoji_usage": {
"enabled": true,
"style": "学龄前版",
"total_count": {"min": 3, "max": 5, "ideal": "3-5"},
"rules": {
"模块1_课程主题": {
"title": "🌟",
"content": "🔍",
"alternatives": ["⭐", "🎯", "📚", "💡", "🏗️"]
},
"模块2_课堂表现": {
"title": "👀",
"content": "✨",
"hands": "✋",
"alternatives": ["🤗", "😊", "🔧", "🏗️", "👍"]
},
"模块3_情绪状态": {
"title": "😊",
"positive": "😄",
"social": "🤝",
"alternatives": ["😢", "😴", "🤗", "💪", "❤️"]
},
"模块4_成长亮点": {
"title": "🌱",
"content": "💪",
"highlight": "🚀",
"alternatives": ["⭐", "✨", "🎉", "👏", "🏆"]
},
"模块5_课后建议": {
"title": "🏠",
"family": "👨‍👩‍👧",
"activity": "🎮",
"alternatives": ["📱", "🧩", "🎨", "🔬"]
}
"paragraph_1_课程知识点": {"count": 1, "recommended": ["🔍", "💡", "⚙️"], "note": "根据课程主题自动适配"},
"paragraph_2_课堂细节": {"count": "1-3", "recommended": ["💪", "✨", "📈", "🌟", "😊", "🤝"], "note": "根据课堂情节亮点数量灵活适配"},
"paragraph_3_课后建议": {"count": 1, "recommended": ["🏠", "🔧"], "note": "根据建议内容适配"}
},
"principles": [
"每段配1-2个表情符号",
"每段末尾添加emoji",
"表情与内容情绪一致",
"相邻段落不用相同表情",
"总计10-15个表情为宜"
"总计3-5个",
"第2段可根据亮点数量使用2-3个表情"
]
},
"personalization": {
@@ -203,39 +121,35 @@
},
{
"id": "step7",
"name": "自动保存到学生对应目录",
"action": "save_evaluation",
"output_path": "memory/student/{班级}/{学生名}/课评/{日期}-{课程代码}.md",
"content": {
"evaluation_text": "{课评正文}",
"metadata": {
"student": "{学生名}",
"course": "{课程代码}",
"week": "{周数}",
"date": "{日期}",
"generated_by": "keping-advanced v2.1.0",
"teacher_input": "{原始输入}"
"name": "自动双轨保存(班级汇总+个人档案)",
"action": "save_evaluation_dual_track",
"outputs": {
"class_summary": {
"path": "memory/class-evaluation-summary/第{周数}周/{班级}.md",
"priority": 1,
"required": true,
"content": "本周所有学生课评汇总(含出勤统计)"
},
"personal_archive": {
"path": "memory/student/{班级}/{学生名}/历史课评记录.md",
"priority": 2,
"required": false,
"content": "个人课评记录(时间倒序,最新在上)",
"on_failure": "加入待补存队列,下次生成前自动补存"
}
}
},
{
"id": "step8",
"name": "更新学生成长记录",
"action": "update_growth_record",
"files": [
"memory/student/{班级}/{学生名}/用户画像.md",
"memory/student/{班级}/{学生名}/历史课评记录.md"
],
"record": {
"date": "{日期}",
"week": "{周数}",
"course": "{课程代码}",
"summary": "{一句话摘要}"
}
},
"student_type_handling": {
"正式学生": "双轨保存(班级汇总+个人档案)",
"本班补课": "双轨保存(班级汇总+个人档案)",
"跨班级补课": "自动双轨保存(补课班级汇总+原班级个人档案)",
"体验学生": "仅班级汇总",
"缺课学生": "仅记录缺席"
},
"auto_save": true,
"no_confirmation_needed": true
}
]
},
"input_templates": {
"single_quick": {
"format": "日期:{date} 班级:{class} {name}:{performance} [情绪:{emotion}]",
@@ -250,40 +164,35 @@
"header": ["学生", "核心表现", "情绪"]
}
},
"quality_standards": {
"word_count": {
"幼儿": {"min": 180, "max": 220, "ideal": 200},
"小学低": {"min": 190, "max": 230, "ideal": 210},
"小学中高": {"min": 200, "max": 300, "ideal": 250}
"min": 180,
"max": 350,
"ranges": {
"精简版": {"min": 180, "max": 220, "trigger": "输入简洁,仅包含基本行为描述"},
"标准版": {"min": 220, "max": 280, "trigger": "输入有具体细节或1-2个亮点"},
"详细版": {"min": 280, "max": 350, "trigger": "输入有精彩瞬间、多个亮点或特殊表现"}
}
},
"paragraph_count": {"min": 4, "max": 5},
"paragraph_count": {"min": 3, "max": 3, "note": "三段式结构:课程知识点+课堂细节+课后建议"},
"emoji_usage": {
"enabled": true,
"count": {"min": 6, "max": 20, "ideal": "10-15"},
"count": {"min": 3, "max": 5, "ideal": "3-5"},
"style_mapping": {
"幼儿(2.5-6岁)": "学龄前版(丰富表情",
"小学低(6-8岁)": "小学版(简洁点缀",
"小学中高(8-10岁)": "小学版(简洁点缀"
"幼儿(2.5-6岁)": "温暖活泼(🔍💪✨🏠",
"小学低(6-8岁)": "简洁专业(💡📈🏠",
"小学中高(8-10岁)": "专业竞技感(⚙️📈🏠"
},
"check_items": [
"模块1使用🌟🔍等",
"模块2使用👀✨✋等",
"模块3使用😊😄🤝等",
"模块4使用🌱💪🚀等",
"模块5使用🏠👨👩👧🎮等",
"相邻段落表情不重复",
"第1段末尾有1个课程主题相关emoji",
"第2段末尾有1-3个课堂情节相关emoji",
"第3段末尾有1个家庭延伸相关emoji",
"总计3-5个emoji",
"表情与内容情绪匹配"
]
},
"forbidden_words": ["宝贝", "小天才", "最棒", "无敌", "超级厉害", "完美", "秒杀", "碾压", "大神"],
"forbidden_patterns": [
"比.*小朋友.*",
"其他.*不好",
"最差",
"最慢",
"最笨"
],
"forbidden_patterns": ["比.*小朋友.*", "其他.*不好", "最差", "最慢", "最笨"],
"name_usage_check": {
"priority": ["小名/昵称", "去姓称名", "叠字称呼"],
"forbidden": ["全名(除非家长要求)"],
@@ -297,67 +206,39 @@
"required_elements": [
"课程知识点(体现兴趣度)",
"掌握程度(体现学习表现)",
"课堂状态(专注度、情绪、互动)",
"课程环节与目标达成",
"成长亮点(纵向对比)",
"课后建议(可操作的家庭活动)"
]
},
"data_sources": {
"student_profile": "memory/student/{班级}/{学生名}/用户画像.md",
"history_reviews": "memory/student/{班级}/{学生名}/历史课评记录.md",
"lesson_content": "memory/lesson/**/{课程代码}.md",
"semester_weeks": ".claude/rules/15-semester-weeks.md",
"style_rules": {
"building": ".claude/rules/20-style-building.md",
"coding": ".claude/rules/21-style-coding.md",
"robotics": ".claude/rules/22-style-robotics.md"
}
"style_rules": ".claude/rules/10-style.md",
"workflow_rules": ".claude/rules/20-workflow.md",
"shorthand_rules": ".claude/rules/21-shorthand.md",
"student_mgmt_rules": ".claude/rules/22-student-mgmt.md",
"student_rules": ".claude/rules/30-student.md",
"output_format_preschool": ".claude/rules/50-output-format-preschool.md",
"output_format_elementary": ".claude/rules/51-output-format-elementary.md"
},
"output_paths": {
"evaluation": "memory/student/{班级}/{学生名}/课评/{日期}-{课程代码}.md",
"growth_record": "memory/student/{班级}/{学生名}/用户画像.md",
"history_append": "memory/student/{班级}/{学生名}/历史课评记录.md"
"class_summary": "memory/class-evaluation-summary/第{周数}周/{班级}.md",
"personal_archive": "memory/student/{班级}/{学生名}/历史课评记录.md"
},
"error_handling": {
"date_not_found": {
"message": "请输入日期4月2日",
"action": "prompt_for_date"
},
"profile_not_found": {
"message": "未找到学生画像,使用通用模板继续。建议后续建立画像以获得更个性化课评。",
"action": "continue_with_default"
},
"name_not_found": {
"message": "无法识别学生姓名,请检查姓名是否正确或建立画像档案。",
"action": "prompt_for_name",
"homophone_correction": {
"enabled": true,
"confidence_threshold": 0.8,
"message": "检测到可能的谐音输入 '{输入}',是否纠正为 '{建议}'"
}
},
"nickname_not_set": {
"message": "学生画像中未设置小名/昵称,将使用去姓称名或叠字称呼。",
"action": "use_fallback_name",
"fallback_order": ["去姓称名", "叠字称呼", "全名"]
},
"lesson_not_found": {
"message": "未找到课程教案,请手动输入知识点或补充教案。",
"action": "prompt_for_manual_input"
},
"insufficient_history": {
"message": "历史课评不足10次使用全部可用记录。",
"action": "use_available_records"
},
"word_count_short": {
"message": "字数偏短,建议补充具体事例。",
"action": "suggest_expansion"
}
"date_not_found": {"message": "请输入日期4月2日", "action": "prompt_for_date"},
"profile_not_found": {"message": "未找到学生画像,使用通用模板继续。建议后续建立画像以获得更个性化课评。", "action": "continue_with_default"},
"name_not_found": {"message": "无法识别学生姓名,请检查姓名是否正确或建立画像档案。", "action": "prompt_for_name", "homophone_correction": {"enabled": true, "confidence_threshold": 0.8, "message": "检测到可能的谐音输入 '{输入}',是否纠正为 '{建议}'"}},
"nickname_not_set": {"message": "学生画像中未设置小名/昵称,将使用去姓称名或叠字称呼。", "action": "use_fallback_name", "fallback_order": ["去姓称名", "叠字称呼", "全名"]},
"lesson_not_found": {"message": "未找到课程教案,请手动输入知识点或补充教案。", "action": "prompt_for_manual_input"},
"insufficient_history": {"message": "历史课评不足10次使用全部可用记录。", "action": "use_available_records"},
"word_count_short": {"message": "字数偏短,建议补充具体事例。", "action": "suggest_expansion"},
"class_summary_save_failed": {"message": "班级汇总保存失败,正在重试...", "action": "retry_3_times", "fallback": "显示错误提示,提供手动重试按钮"},
"personal_archive_save_failed": {"message": "个人档案保存失败,已加入待补存队列。", "action": "add_to_compensation_queue", "fallback": "下次生成课评前自动补存,或教师输入'补存'手动触发"}
},
"created_at": "2026-03-25",
"updated_at": "2026-04-02"
"updated_at": "2026-05-09"
}