会话测试形式与录音要求
对话模式:师生对话 教师根据课文内容编写5~6道提问。提前录制提问音频,每题之间预留固定作答时长。学生跟随音频参考课文内容回答,结束后提交音频文件。
标准答案与题目标注
- 标准答案存储路径:
./answer/{COURSE_ID}_{ASSIGNMENT_ID}_answer.txt - 题目标注格式要求
- 每道题以
[Q1]、[Q2]……格式标注,便于音频转写后逐题对齐 - 每题标注参考回答要点(关键词/句式),不要求逐字匹配
专有名词白名单配置
路径:./answer/{COURSE_ID}_{ASSIGNMENT_ID}_proper_noun.txt
每行1个名词,读音变体用|分隔,无专有名词则文件可不提供。
规则:
- 白名单内人名、地名、作品名,AI不自动判错、不自动扣分;
- ASR识别小偏差直接过滤;
- 专有名词严重读错,仅允许教师人工复核后扣分。
工作流程概览
Step1 音频预处理 → Step2 音频质量检测 → Step3 ASR转写 → Step4 ASR可靠性检测(置信度分级)→ Step5 三维AI评分 → Step6 教师复核 → Step7 成绩录入与反馈生成
Step 1:音频预处理
- 批量转为 wav 格式,统一采样率
- 存放路径:
./audio/{student_id}/
Step 2:音频质量检测
检测项:
- 有效语音比例
- 音量范围
- 背景噪声
- 是否存在多人声音
异常处理:音频质量不足 → 不评分 → 请求重新上传。
Step 3:ASR 转写
转写工具规格(强制)
- 唯一转写工具:
faster-whisper - 仅允许模型:
large-v3 fp16/medium;禁用small/base/tiny及全部其他规格 - 硬件调度:有充足 GPU 用
large-v3 fp16;无 GPU 自动降级medium - 固定开启
word_timestamps=True输出词级时间戳
# 音频预处理
ffmpeg -y -i "input.mp4" -vn -acodec pcm_s16le -ar 16000 -ac 1 /tmp/audio.wav
# faster-whisper 日语转写
faster-whisper /tmp/audio.wav --model large-v3 --language ja --output_format txt --word_timestamps True
异常处理规则
- 音频损坏/空文件/无法识别 → 标记「转写失败」
- 自动移入
./error_audio/,触发人工复核 - 跳过自动评分,不直接判定低分
Step 4:ASR 可靠性检测
系统综合判断以下方面:
- 文本匹配程度
- 音频质量
- ASR 置信度
- 对齐情况
输出:高 / 中 / 低置信度(用于 Step 6 教师复核的投入分级)。
置信度分级判定标准
| 置信度 | 判定条件 |
|---|---|
| 高 | 转写完整率 ≥80% 且 ASR 平均置信度 ≥0.8 且 音频信噪比 ≥20dB |
| 中 | 转写完整率 ≥60% 且 <80%,ASR 平均置信度 ≥0.5 且 <0.8 |
| 低 | 转写完整率 <60%,或 ASR 平均置信度 <0.5,或音频质量检测不通过 |
置信度‑AI评分衔接规则
- 高、中置信度:CAF三维AI加权分数作为正式预评分,教师仅做异常修正;
- 低置信度:AI三维加权分数仅作为后台诊断参考,不计入、不对外展示,最终成绩完全由教师人工给出。
Step 5:三维 AI 评分
能力层级说明
遵循 CEFR(欧洲语言共同参考框架);本系统采用 A1、A2、B1 三个等级。
| 能力层级 | 操作标签 | 会话评价重点 |
|---|---|---|
| A1 | 约对应 JLPT N5 | 能围绕熟悉题目作简单、完整回答 |
| A2 | 约对应 JLPT N4 | 能围绕日常话题进行较完整简单交流 |
| B1 | 约对应 JLPT N3 | 能表达经历、理由和简单观点,注意连贯性 |
JLPT 没有口语考试;N5/N4/N3 仅作为词汇、语法和课程任务难度参考。
评分原则
- 内容切题比语法完美更重要
- A1/A2(N5/N4)阶段轻微语法偏差以反馈为主,不扣分
- 不确定错误不扣分
- 鼓励为主,微小误差不扣分
准确性维度重要说明 准确性维度占20%权重参与AI加权运算,但该维度输出仅为趋势预估值,不能直接等价于发音或语法错误;系统不会依靠该维度自动判定发音或语法对错;所有错误必须经教师复核确认后方可扣分。
评分前置过滤规则(评分前必须执行)
计算任何维度分数前,先筛除以下情况,排除出扣分范围:
- ASR 误识别——不进入评分计算
- 同音词差异、语气词误识别
- 系统标记为"ASR疑似误识别"的项
- 转写存疑——不进入评分计算
- 系统置信度 < 0.5 的识别结果
- 学习者自然偏差——反馈但不扣分
- A1/A2 阶段轻微语法偏差
- 句尾语气词添加或省略
- 白名单专有名词——不进入AI自动扣分计算
- 匹配白名单内的人名、地名、作品名;识别出现字形、读音轻微偏差,AI不自动判定词汇错误
- 专有名词的严重误读,仅可由教师人工复核确认后扣分
AI 自动评分模型(三维加权·主线)
| 评价维度 | 权重 | 数据来源 | 评分要点 |
|---|---|---|---|
| 内容完整性 (Content) | 50% | 内容匹配度 + 关键词覆盖 | 回答是否切题、关键词覆盖、回答完整度 |
| 准确性 (Accuracy) | 20% | ASR + 文本分析 | 语法正确性、词汇选用规范、发音清晰可辨 |
| 流利度 (Fluency) | 30% | 停顿时长、语速 | 语速适中、停顿合理、语句衔接连贯 |
权重设计理念(鼓励为主,内容重于语法):
- 内容完整性权重最高(50%),确保"回答切题"是核心底线
- 准确性(20%)权重调低,A1/A2阶段不强求语法完美,降低准确度对总分的拖累
- 流利度(30%)支撑表达流畅度
跑题判罚宽松规则(Step5 应用):
- 仅"完全偏离题意"才判跑题扣分;"部分偏题但答及背景信息"不扣或轻扣
- 关键词缺失:仅当"核心要点缺失1个"才扣;非核心细节缺漏不扣
- 误读、认知性偏差(如课文段落张冠李戴)不单独重扣,反馈为主
计算方式:
单题得分 = 内容完整性×50% + 准确性×20% + 流利度×30%总分 = 各题得分之和 ÷ 题目数(换算为10分制,保留1位小数)
各维度判定规则
| 发现的问题 | 归属维度 | 扣分规则 |
|---|---|---|
| 回答不切题/跑题 | 内容完整性 | 扣分 |
| 关键词缺失(≥3个关键词) | 内容完整性 | 扣分 |
| 明显语法错误(影响理解) | 准确性 | 扣分 |
| 发音错误(影响理解) | 准确性 | 经教师确认后扣分 |
| 长时间停顿(≥3秒) | 流利度 | 扣分 |
| 语速过慢或过快 | 流利度 | 反馈但不扣分 |
| ASR未识别出但音频有回答 | - | 不扣分,标记ASR误识别 |
| 轻微发音/语法偏差 | - | 反馈但不扣分 |
不扣分的情况
- 句尾语气词使用(よ/ね)
- 轻微发音偏差(A1/A2阶段容错空间大)
- 轻微卡顿(单次停顿<3秒)
- 转写存疑、不确定是否为错误 → 不扣分
等级划分
| 分数区间 | 等级 | 能力描述 |
|---|---|---|
| 8.0~10.0 | 优秀 | 完全符合目标会话能力要求,流畅完成沟通 |
| 6.0~7.9 | 良好 | 符合中阶会话能力,核心沟通无明显障碍 |
| 4.0~5.9 | 达标 | 达到基础会话要求,可完成核心信息传递 |
| <4.0 | 待加强 | 未达到基础要求,需强化核心能力 |
低置信度规则:低置信下AI预评分仅后台留存,不对外展示,最终成绩完全来自教师人工评分。
Step 6:教师复核
人工复核调整规则
| 错误类型 | 调整分值 | 单类上限 | 说明 |
|---|---|---|---|
| 确认内容跑题 | -0.5 | -1.5 | 教师确认回答内容偏离题意 |
| 确认语法/发音错误 | -0.5 | -1.5 | 教师确认的明显语法或发音错误 |
| 确认断句/停顿异常 | -0.5 | -1.5 | 影响表达的明显停顿或中断 |
调整原则
- 人工调整仅用于修正AI评分异常,不替代AI综合评分
- 以下情况不得扣分:ASR误识别、同音词差异、语气词偏差
- 只有满足以下条件才扣分:音频证据明确、非ASR单独判断、对内容或理解产生影响
- 同类错误最多调整1.5分
- 教师仅在 AI 未扣或扣分不合理时调整,确认 AI 已扣的项不再重复扣
最终成绩口径
- 高/中置信度 → 教师仅确认、不逐项重打全部分数,最终成绩 = AI评分
- 低置信度 → 教师综合判断,AI三维分数仅做后台诊断参考,不计入最终得分,最终成绩 = 教师评分
分级纠错规则(A1/A2/B1)
注:纠错上限为 AI 内部生成约束,学生反馈报告中不展示纠错计数、上限数字,仅按上限筛选输出错误点。
纠错上限(按水平)
| 学生水平 | 纠错上限 |
|---|---|
| A1 | 2项 |
| A2 | 3项 |
| B1 | 4项 |
纠错优先级(超过上限时)
- 影响语义的关键错误
- 反复出现的高频错误
- 语法/表达不当
通用纠错原则
- 优先纠正影响语义的关键错误
- 同一错误只纠正一次
- 先表扬优点,再提出改进建议
- 不使用emoji(如⚠),语气鼓励为主
- 转写存疑、不确定的地方不纠错,一律不扣分
学生反馈配置(可配置,默认值如下)
反馈字段:
带每题得分: 可选 # 学生版是否展示 Q1~Q5 各题分数;默认关闭(更精简/鼓励)
总评长度: 2-3句 # 默认;可改为1句(极简)
练习建议: 2条 # 默认;可改为1条或4条
带学生原话: 否 # 学生版默认不展示学生原话转录
等级标注: 是 # 是否附 优秀/良好/达标
此配置为全局可调,使用老师可按需覆盖;不改则用默认值。
Step 7:成绩录入与反馈生成
双产物原则
每次批改产出两套独立产物:
- 老师版(详细)——默认输出到聊天窗口,供教师复核、确认、人工修正。
- 学生版(逐人简洁)——每位学生一份,单独生成,用于反馈给对应学生本人(不含批改内部判定细节)。
平台无关输出(可插拔适配器)
本技能为通用批改内核,不绑定任何一家课程平台。不同院校可通过实现对应适配器、填入本校课程平台 API 凭证,实现自动拉取作业、自动批改、自动向学生推送反馈,批改业务逻辑无需改动;没有平台 API 的学校,可直接使用 CSV 导出手工导入。
技能不绑定任何课程平台,输出方式由适配器决定:
japanese-conversation-grader/
SKILL.md # 通用:只描述批核与双产物,不含平台绑定
adapters/
csv_adapter.py # 通用:导出CSV,老师导入任意平台(默认,全平台通用)
canvas_adapter.py # Canvas:读submission_map→API拉取/逐人反馈(可选)
moodle_adapter.py # 其他学校课程网站(可选)
feishu_adapter.py # 飞书:逐人发送(可选)
scripts/
download_audio_submissions.py # 平台专用下载脚本(Canvas等),生成submission_map.json
config.json # 本地机密配置(含API Token),绝不随技能共享
report/
detailed/{student_id}.txt # 老师版详细报告(本地归档)
student/{student_id}.txt # 学生版简洁反馈(每位学生一份)
summary.csv # 批量汇总(如需)
- 默认输出:通用
CSV 导出(任何平台老师都能自己导入)。 - 具体平台(Canvas/自家课程网站/飞书等)作为可选适配器,由配置
platform指定启用。 - 技能只管生成"老师版报告 + 学生版反馈"两个标准产物,发到哪由适配器决定,从而适配不同学校的不同平台。
凭证与 Token 安全(强制)
- API Token 绝不写入 SKILL.md、不写入共享代码、不上传 ClawHub。
- Token 只存本地
config.json的字段(如CANVAS_API_TOKEN),或使用环境变量CANVAS_API_TOKEN。 config.json必须加入.gitignore,不得入库、不得随技能分发。- SKILL.md 只写"读取 config.json / 环境变量中的 Token",不出现任何真实 Token 值。
下载层与批核层分离
- 下载层(平台专用):
scripts/download_audio_submissions.py调平台 API(如 Canvas)拉取学生作业,依赖 Token,产出标准中间产物submission_map.json(含 user_id / student_id / name / file_name / local_path / file_type / assignment_id / course_id 等字段)。 - 批核层(通用):技能本体只消费
submission_map.json这个标准结构,不关心它来自哪个平台。 - 好处:新增平台只需新增下载脚本(适配层),主技能零改动;不同学校各用自己的私有下载层,通用部分共享。
输出文件
- 老师版详细报告:
./report/detailed/{student_id}.txt(本地归档) - 学生版简洁反馈:
./report/student/{student_id}.txt(每位学生一份) - 批量汇总:
./report/summary.csv(如需) - 默认同时输出到聊天窗口(老师版)
老师版详细报告模板(聊天框)
学生姓名:{name}({student_id})
评分结果:{total_score}/10
【总体评价】
{positive_comment},{constructive_feedback}。{encouragement}
【逐题评分】
[Q1]:{question_1}
学生回答:{transcript_1}
评语:{comment_1}(简短提示)
得分:{score_1}/10
[Q2]:{question_2}
学生回答:{transcript_2}
评语:{comment_2}
得分:{score_2}/10
……(按实际题目数重复)
学生版简洁反馈模板(逐人,发/导入课程平台)
学生姓名:{name}({student_id})
评分结果:{total_score}/10 (如需可附等级)
【总评】(默认2-3句,鼓励为主)
{一个优点},{1~2个关键改进}。{鼓励收尾}
【练习建议】
1. {suggestion_1}
2. {suggestion_2}
(若配置"带每题得分=是",在此追加一行:Q1 x | Q2 x | …)
输出排版规则
- 老师版/学生版所有一级反馈大项必须单独另起一行
- 老师版总体评价:80‑150 汉字,优点 + 1‑2 条关键改进 + 鼓励收尾,不得与练习建议重复
- 学生版总评:默认 2-3 句,简明鼓励为主(可配1句极简)
- 问题编号用 Q1、Q2、Q3……
- 老师版单题评语:80‑150 汉字;仅针对本题作答表现,写本题的内容、语法、表达问题及简短提示,不输出全局性练习建议
- 练习建议共 2 条(可配),每条 30‑80 汉字,为跨题全局训练方向
- 禁用emoji、⚠等特殊符号
平台反馈(Canvas 等逐人反馈)
- 每位学生单独一份,只发给该生本人,不混入他人成绩。
- 学生版内容 = 总分 + 总评 + 练习建议(按反馈配置)。
- 批量时按 adapter 逐人推送/导出。
批量处理规则
- 进度文件:
./progress/{course}_{task}_progress.json - 支持中断后继续执行
- 分批处理建议≤50人/批
- 失败音频记录于
./progress/{course}_{task}_failed.json,含学生ID、失败原因、时间戳
核心原则
- 综合评分:AI依据内容完整性、准确性、流利度生成基础预评分;准确性维度仅为趋势参考,错误依靠教师确认
- 教师修正:教师根据课堂目标进行最终调整
- 不确定时不判错:转写存疑或判定不确定时,优先不判定为错误
- 鼓励为主:从鼓励出发,微小误差不扣分
- 数据诚实:准确性维度数据源(ASR置信度)非专业评价模型,不确定时标记"待复核"交由教师确认
- 低置信度规则:低置信下AI预评分仅后台留存,不对外展示,最终成绩完全来自教师人工评分
注意事项
- 成绩录入使用
submission[posted_grade] - Whisper转写仅作参考,必须执行对齐校验
- 严格按A1/A2/B1能力层级控制纠错数量
- 评语简洁友好,不使用特殊符号
