back
loading skill details...
日语朗读作业AI批改(教师模式)——支持音频转写、CEFR分级评价、纠错与成绩录入。
---
name: japanese-reading-grader
description: "日语朗读作业AI批改(教师模式)——支持音频转写、CEFR分级评价、纠错与成绩录入。"
use_when: 教师批改日语朗读作业录音、朗读测试打分、批量评分与反馈
triggers:
- 日语朗读作业批改
- 日语朗读测试打分
---
## 适用场景
学生提交音频文件(MP3/MP4/M4A/WAV)朗读日语文本,教师需要:
下载 → 转写 → 评分 → 纠错 → 录入成绩 → 生成班级汇总
## 作业基础信息
1. **适用对象**:A1/A2/B1 日语学习者
2. **作业形式**:朗读音频
3. **总分**:10 分
## 工作流程
| 步骤 | 内容 |
|------|------|
| Step 0 | 前置准备(标准答案文本) |
| Step 1 | 音频格式统一转换 |
| Step 2 | Whisper medium 转写 |
| Step 3 | 评分规则(CEFR 分级 + JLPT 级别参考) |
| Step 4 | 录入成绩 |
| Step 5 | 生成班级汇总 + 上传 |
## Step 0:前置准备
1. 标准答案文本存储路径:`./answer/{COURSE_ID}_{ASSIGNMENT_ID}_answer.txt`
2. 文本格式要求:
- 每行 1 个完整句子,无多余空格与换行
- 重点词汇标注假名
- 不含多余标点,便于音频转写对齐
3. 版本校验:批改前确认标准答案与作业要求一致
## Step 1:音频格式统一转换
- 批量转为 wav 格式,统一采样率
- 存放路径:`./audio/{student_id}/`
## Step 2:Whisper 转写
- 本技能音频转写使用 Whisper medium 模型(本地运行),模型已固定,无需手动切换。
```bash
# MP4视频 → 音频预处理
ffmpeg -y -i "input.mp4" -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav
# 固定medium模型日语转写
whisper /tmp/audio.wav --model medium --language ja --output_format txt
```
### 异常处理规则
- 音频损坏/空文件/无法识别 → 标记「转写失败」
- 自动移入 `./error_audio/`,触发人工复核
- 跳过自动评分,不直接判定低分
## Step 3:评分规则(鼓励导向)
### 能力层级说明(双轨分级)
正式口语能力框架遵循 **CEFR(欧洲语言共同参考框架)**;该框架共设A1、A2、B1、B2、C1、C2六个等级,本系统仅采用A1、A2、B1三个等级。
| 正式能力层级 | 操作标签 | 会话评价重点 |
|--------------|----------|--------------|
| A1 | 约对应 JLPT N5级别 | 能围绕熟悉题目作简单、完整回答 |
| A2 | 约对应 JLPT N4级别 | 能围绕日常话题进行较完整简单交流 |
| B1 | 约对应 JLPT N3级别 | 能表达经历、理由和简单观点,注意连贯性 |
> JLPT 没有口语考试;N5/N4/N3 仅作为词汇、语法和课程任务难度参考。
### 计分规则
- **基础分**:10.0 分
- **计分公式**:总分 = 10.0 - 累计扣分
- **约束**:7.0 ≤ 总分 ≤ 10.0
- **扣分上限**:3.0 分(超过不再扣)
### 错误类型与扣分值(仅3类)
| 错误类型 | 扣分 | 说明 |
|----------|------|------|
| 严重发音错误 | -0.5 | 促音、长音、清浊混淆(三者任一出现) |
| 漏读/多读整句 | -0.5 | 漏掉一整句 或 多读一整句 |
| 中途中断/长时间停顿 | -0.5 | 朗读中途放弃,或停顿超过3秒 |
**重要规则**:
- 同一错误类型全篇**只扣一次**,不重复累计
- 上述3类错误若同时出现,累计扣分(最多 -1.5,但扣分上限为 3.0)
### 不扣分的情况
- 句尾拖音、语气词(よ/ね)
- 「は」vs「わ」、「を」vs「お」等微小识别差异
- 语调轻微偏差、声调轻微偏差
- 语速稍慢或稍快
- 轻微卡顿(≤2处,每处<2秒)
- 拨音(ん)偶尔读不到位(N5/N4 宽容)
- 同一错误类型仅出现一次且不影响语义理解
- 转写存疑、不确定是否为错误 → **不扣分**
### SKILL评分维度(CAF三维框架,每题满分10分)
| 维度 | 权重 | 评分要点 |
|------|------|----------|
| C 复杂性(Complexity) | 80% | 内容贴合与表达复杂度 |
| A 准确性(Accuracy) | 10% | 语法、词汇、语音规范 |
| F 流利度(Fluency) | 10% | 话语输出节奏、连贯性、停顿与沉默控制 |
### 等级划分
| 分数区间 | 等级 |
|----------|------|
| 8.0~10.0 | 优秀 |
| 7.0~7.9 | 良好 |
| 6.0~6.9 | 合格 |
| 6.0以下 | 需加强 |
## 分级纠错规则(A1/A2/B1;操作标签参考N5/N4/N3)
### 篇幅定义
- **短篇**:150字以内
- **长篇**:150字以上
### 纠错上限(按水平+篇幅)
| 学生水平 | 短篇 | 长篇 |
|----------|------|------|
| A1 | 1项 | 2项 |
| A2 | 2项 | 3项 |
| B1 | 2项 | 3项 |
### 纠错优先级(超过上限时)
1. 影响语义的错误(清浊、长音、促音)
2. 反复出现的高频错误
3. 语调错误
### 通用纠错原则
- 优先纠正影响语义的关键错误
- 同一错误只纠正一次
- 先表扬优点,再提出改进建议
- 不使用警示符号,语气鼓励为主
- 转写存疑、不确定的地方不纠错
## 强制校验流程(防误判)
### 对齐校验(防止 Whisper 听错导致误判)
批改前,必须逐句比较「Whisper 转写文本」与「标准答案文本」:
- 如果转写文本与标准答案完全一致或仅尾音差异 → 继续批改
- 如果转写文本与标准答案存在假名级别差异(如「学校」→「公園」)→ 该句不扣分,标记「转写存疑,请人工复核」
- 如果转写文本缺失或多余整句 → 跳过该句,标记「可能漏读或多读,请人工复核」
### 错误判定强制引用表
每个潜在错误必须同时满足以下条件才能判定为对应类型:
| 错误类型 | 必须同时满足的条件 |
|----------|-------------------|
| 促音错误 | ① 标准答案中有「っ」 ② 转写文本中该处完全无「っ」或明显替换为其他音 |
| 长音错误 | ① 标准答案中有长音规则(あ段+あ等) ② 转写文本中该处为短音或断成两拍 |
| 清浊混淆 | ① 标准答案为清音(か/さ/た/は行) ② 转写文本为对应浊音(が/ざ/だ/ば行),或反之 |
| 漏读/跳读 | ① 标准答案中有该假名 ② 转写文本中完全无对应音节 |
## Step 4:录入Canvas成绩
```bash
python3 scripts/grade_submission.py COURSE_ID ASSIGNMENT_ID USER_ID GRADE --comment "评语内容"
python3 scripts/grade_submission.py COURSE_ID ASSIGNMENT_ID USER_ID GRADE --comment-file comment.txt
```
## Step 5:生成汇总 + 上传
```bash
# 生成班级汇总文件
python3 scripts/generate_class_summary.py COURSE_ID ASSIGNMENT_ID [--class-name NAME]
# 上传汇总表到Canvas
python3 scripts/send_summary_message.py [--xlsx PATH]
```
## 反馈格式模板(无emoji)
```
学生姓名:{name}
【评分结果】
总分:{score}/10
发音准确性:{pronunciation_score}/10
语调与节奏:{intonation_score}/10
流畅度:{fluency_score}/10
【总体评价】
{positive_comment},{constructive_feedback}。{encouragement}
【发音纠错】
1. 原句:{original}
学生读法:{student_reading}
标准读法:{correct_reading}({kana})
错误类型:{error_type}
【练习建议】
1. {suggestion_1}
2. {suggestion_2}
```
### 输出排版规则
- 评分结果、总体评价、发音纠错、练习建议等所有一级反馈大项,必须单独另起一行
- 发音纠错内部用 1、2 数字序号
- 练习建议用 1、2 数字序号
- 不显示等级标注和纠错等级说明
- 禁用 emoji
- 评语长度 ≤ 1000 字符(适配平台限制)
- 优先展示优点,再提 1–2 条最关键改进建议
### 输出文件
- 输出路径:`./report/{student_id}.txt`
## 批量处理规则
1. 进度文件:`./progress/{course}_{task}_progress.json`
2. 支持中断后继续执行
3. 单次批量 ≤ 50 人,分批处理避免崩溃
4. 失败音频自动标记,不影响整体流程
## 核心原则
1. **鼓励为主**:从 10 分起评,据实扣分,不刻意压低分数
2. **只纠严重错误**:只纠正影响语义的明显发音错误,微小误差不计
3. **同一错误只扣一次**:不重复扣分
4. **不确定时不判错**:转写存疑或判定不确定时,优先选择不判定为错误
5. **保护信心**:总分不低于 7 分,评语先表扬后建议
## 注意事项
- 评分前确认作业为手动发布分数
- 成绩录入使用 submission[posted_grade]
- Whisper 转写仅作参考,必须执行对齐校验
- 鼓励为主,微小误差不扣分
- 同一错误只扣一次
- 严格按 A1/A2/B1 能力层级控制纠错数量(操作标签参考 N5/N4/N3 级别)
- 评语简洁友好,不使用特殊符号
- 所有规则以 references/workflow.md 为准
don't have the plugin yet? install it then click "run inline in claude" again.