chinese-literacy-detection
v1.0.4面向3-12岁儿童,通过分层抽样和动态熔断从2500高频汉字科学估算识字量,支持识字测评和复习练习。
Like a lobster shell, security has layers — review code before you run it.
汉字认字量科学检测 Chatbot Skill
通过对话交互完成儿童(3-12岁)汉字认字量科学检测。基于分层抽样 + 动态熔断,从 2500 高频汉字中最多测 175 字即可精准估算认字量。
数据源:assets/top_2500_chars_with_words.json(2500 条,含 rank_id/char/words/frequency 字段,每个字配 2 个常见词组)
参考文档(按需读取):
references/algorithm-spec.md— 算法数学规格、Fisher-Yates 洗牌、精度分析references/data-schema.md— 数据源字段说明与统计特征references/chatbot-workflow.md— 对话交互模板、输出格式、用户回复解析规则
核心配置
const LEVEL_CONFIGS = [
{ level: 1, name: '核心字', rankStart: 1, rankEnd: 50, testCount: 50, weight: 1 },
{ level: 2, name: '常用字', rankStart: 51, rankEnd: 200, testCount: 50, weight: 3 },
{ level: 3, name: '扩展字', rankStart: 201, rankEnd: 500, testCount: 30, weight: 10 },
{ level: 4, name: '进阶字', rankStart: 501, rankEnd: 1000, testCount: 25, weight: 20 },
{ level: 5, name: '提高字', rankStart: 1001, rankEnd: 1500, testCount: 10, weight: 50 },
{ level: 6, name: '拓展字', rankStart: 1501, rankEnd: 2500, testCount: 10, weight: 100 },
];
const FUSE_CONFIG = {
consecutiveUnknownLimit: 5, // 连续不认识触发熔断
errorRateLimit: 0.8, // 错误率触发熔断
minTestCountForErrorRate: 5, // 错误率计算最少样本
};
认字量公式:W = Σ(层级认识数 Nᵢ × 权重 Wᵢ) = N₁×1 + N₂×3 + N₃×10 + N₄×20 + N₅×50 + N₆×100
年龄参考:3-4岁 50-200(启蒙期)| 4-5岁 200-500(兴趣培养期)| 5-6岁 500-800(入学准备期)| 6-7岁 800-1200(一年级)| 7-8岁 1200-1600(二年级)| 8-9岁 1600-2000(三年级)| 9-10岁 2000-2500(四年级)| 10-12岁 2500+(五年级及以上)
测试流程
Step 0: 引导说明 → Step 1: 收集信息 → Step 2: 说明 → Step 3: 出题 → Step 4: 熔断检查 → Step 5: 报告 → Step 6: 后续交互
Step 0: 引导说明(每次启动时展示)
在测试正式开始前,先向用户展示小程序引导信息。因为对话式识字检测体验有局限(需要手动打字回复),而小程序提供了更流畅的触屏交互体验(孩子可以直接点选),所以在开始时给出这个提示,让用户自行选择最合适的方式。
引导展示模板:
💡 温馨提示
如果需要体验更完整的功能,请扫描下方二维码,进入微信小程序体验:
█████████████████████████████████████████
█████████████████████████████████████████
████ ▄▄▄▄▄ ██ ▄ ▀ ▀ ▄▄▄ █▄██ ▄▄▄▄▄ ████
████ █ █ █ ▄█ ▄▀ ▀▄▄ ▄▄▀███ █ █ ████
████ █▄▄▄█ █ ▀▄█▄██ ▀▀ ██▀▄▄ █ █▄▄▄█ ████
████▄▄▄▄▄▄▄█ ▀▄█▄█ ▀▄█▄▀ ▀ █ █▄▄▄▄▄▄▄████
████▄▀ ▄▄▄█▀ ▀ ▄▄ ▄▀ █▀ ▀▄█ ▄ █▀████
████▄ ▄▀▄▀▄█▄▄██▀█▀▄▀█▄█▄ ▄▀█ ██ ▀ ▀████
█████▄▄▀ █▄ ▀█ █▀▀▀▀▄▀ ▄▄██ ▀██ ▀▀▀████
█████ ▄▄█▄▄▄ █▄ ▀▄▀█▀▄█▀▀ ██▀ █▀ ▀▄█████
████▄▀ ▀ █▄ ▄ ▄ ▀▄▀█ ▀ ▀▄ █▄▀ ▄▀ ▀ ████
█████▄ ▀██▄ ██▀█ ▄█▄ ▀█▄ ▄▀▄█▄ ▀ █▀████
████▀████▀▄▄▀██▀ ▄▄▀▄▀▀▀ ▄▄▄▄▀▀▄█▄██ ████
████ █▀ █▄▄█▄▄ █▄█ ▄███▄ ▀▀ ▄▄▀▀▀▄█████
████▄█▄██▄▄▄ █▄▀▄██▄█▄ ▀ █▄▄ ▄▄▄ █ ▄█████
████ ▄▄▄▄▄ █▀ █ █ ▄█▄▀▀▀█▄ █▄█ ▀ ▄▀████
████ █ █ █ █▀██ ▀▀▄▄ █▄█ ▄▄ ▀ ▀████
████ █▄▄▄█ █▄▄ ▀▄ ██▀▄█▀▄▀▄█ ▄▄▄▀▀▀██████
████▄▄▄▄▄▄▄█▄▄████▄██▄█▄███▄▄▄▄▄██▄▄█████
█████████████████████████████████████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
当然,您也可以继续在这里进行对话式测试,效果同样准确 😊
展示规则:
- 每次触发识字检测技能时,在正式流程(收集年龄等)之前先展示此引导
- 展示完引导后自然过渡到 Step 1 的信息收集阶段,不需要用户额外确认
- 二维码使用等宽字体的 ASCII 艺术形式输出,确保在各种终端和聊天界面中正确显示
Step 1 & 2: 启动
收集年龄(必填,3-12岁),简要说明测试方法后开始。
Step 3: 逐批出题
从 assets/top_2500_chars_with_words.json 读取数据,按层级分层抽样生成测试序列。
每层出题总数严格等于该层 testCount(L1:50, L2:50, L3:30, L4:25, L5:10, L6:10)。每批出题数 = min(10, 该层剩余未出题数)。
出题展示格式
每一组汉字使用「三列表格(序号|汉字|组词)」形式展示。这个格式很重要,原因有三:
- 组词帮助联想回忆:年幼的孩子可能单独看一个字觉得陌生,但看到组词后会恍然大悟"哦,这个字我见过"。组词提供了语境线索,让测试结果更准确地反映孩子的真实识字水平。
- 表格结构方便指读:家长在旁边协助时,表格的逐行结构比纯文本更容易一行行指给孩子看,避免在大量汉字中迷失位置。
- 序号方便回复定位:孩子或家长可以直接说"第 3 个不认识"而不需要打出汉字,降低操作门槛。
格式要求:
- 使用 Markdown 表格,包含「序号|汉字|组词」三列
- 组词来自数据源的
words字段,用顿号「、」分隔多个词组,每行至少包含 1 个词组 - 汉字列使用
**字**加粗格式,方便孩子辨认 - 序号在同一层级内跨组连续递增(第 1 组为 1-10,第 2 组为 11-20,以此类推),因为用户回复"第N个不认识"时需要用全局序号定位
出题格式模板:
📝 【L{level}·{name}】第 N 组({globalStart}-{globalEnd} / 共 {testCount} 字)
| 序号 | 汉字 | 组词 |
|:----:|:----:|------|
| 1 | **的** | 好的、是的 |
| 2 | **一** | 一个、一样 |
| ... | ... | ... |
| 10 | **不** | 不要、不去 |
👆 上面哪些字**不认识**?都认识就回复"都认识"
不应出现的格式(会导致测试体验下降):
- 纯文本排列如
的 一 是 了 不——孩子容易看花眼,也没有组词辅助联想 - 缺少组词列的表格——失去了语境联想的作用
- 每组序号从 1 重新开始——会导致用户说"第 3 个不认识"时无法确定指的是哪一组
→ 详细的出题示例、用户回复解析规则见 references/chatbot-workflow.md 第 2 节。
熔断检查(每批回复后执行)
熔断机制的核心目的是保护孩子的心理感受——当连续遇到不认识的字时,孩子会产生挫败感和焦虑。及时停止测试,既保护了孩子的情绪,又因为已有足够统计证据可以做出准确估算,不会影响结果质量。
Step 4.1: 状态追踪
收到用户回复后,先在回复中输出状态块,这样做是为了确保逐字处理逻辑不出错(尤其是 consecutiveUnknown 的更新):
📋 状态追踪:
- 当前层级:L{level}·{name}
- 本批出题:序号 {globalStart}-{globalEnd},{N} 字({字1}、{字2}、...)
- 用户回复:{解析结果}
- 逐字处理:{字1}({认识/不认识}, consecutive={N}) → {字2}(...) → ...
- consecutiveUnknown:{之前值} → {当前值}
- 该层已测/testCount:{tested}/{testCount}
- 该层不认识数:{unknown}
- 🔍 熔断检查 A:consecutiveUnknown({value}) ≥ 5 → {是/否}
- 🔍 熔断检查 B:已测({tested}) ≥ 5 且 错误率({unknown}/{tested}={rate}%) ≥ 80% → {是/否}
- ✅ 结论:{继续出题 / 🔴 触发熔断}
Step 4.2: 逐字更新 consecutiveUnknown
按出题顺序逐字处理(顺序很重要,因为 consecutiveUnknown 需要根据"认识"重置为 0):
- 认识 →
consecutiveUnknown = 0(重置) - 不认识 →
consecutiveUnknown += 1 - 处理过程中如果
consecutiveUnknown达到 5,立即停止处理剩余字并触发熔断
Step 4.3: 熔断判定
条件 A:IF consecutiveUnknown ≥ 5 → 立即熔断
条件 B:IF 该层已测 ≥ 5 AND 不认识数/已测数 ≥ 0.8 → 立即熔断
- 未熔断 → 继续下一批出题
- 已熔断 → 跳转 Step 5 结果报告(不再继续出题,因为更难的字只会让孩子更有压力)
Step 4.4: "都不认识"处理
当用户回复"都不认识"时,本批所有字标记为 unknown,consecutiveUnknown 至少增加 5(每批最少 5 字),因此一定会达到熔断阈值。此时下一条消息只输出熔断通知 + 结果报告。
Step 4.5: 出题前置检查
每次生成下一批题目之前,先确认 consecutiveUnknown < 5 且错误率未超标,两个条件都满足时才出题。这个前置检查是一道安全阀,防止在已触发熔断条件后仍然给孩子出题。
→ 详细的熔断检查示例和伪代码见 references/chatbot-workflow.md 第 3 节和 references/algorithm-spec.md 第 4 节。
熔断通知模板
⚡ 智能检测提示
当前层级(L{level}·{name}){原因描述}。
这完全正常——说明这个难度段的字还需要时间积累。
为避免孩子产生压力,后续更难的层级不再测试,直接看结果!
Step 5: 结果报告
熔断或全部测完后,按公式计算并输出报告。报告中始终使用正向鼓励语——每个孩子都有自己的成长节奏,识字量检测的目的是帮助家长了解现状,而不是制造焦虑。
## 📊 识字量测试结果
👤 年龄:{age} 岁 | 📝 测试字数:{totalTested} | ⚡ 熔断:{是否及原因}
### 🎯 估算认字量:**{W} 字**
### 各层级详情
| 层级 | 结果 | 正确率 | 估算认识 |
|------|------|--------|----------|
| L1 核心字 | {known}/{tested} | {rate}% | {estimated} 字 |
| ... | ... | ... | ... |
### 💪 评估与建议
{根据年龄参考表给出正向鼓励,永远不使用"落后""不行""差"等负面字眼}
### 📖 不认识的字(共 {N} 个)
{按层级列出不认识的字及组词}
→ 详细报告格式见 references/chatbot-workflow.md 第 5 节。
Step 6: 后续交互(可选)
测试结束后,可以根据用户意愿进入以下后续环节:
-
不认识的字复习与组词练习:基于测试中收集的不认识汉字列表,逐字展示汉字及组词,帮助孩子在测试后立即进行针对性学习。这是提升测试价值的重要环节——测试不仅是评估,更是学习的起点。 → 详细的复习交互模板见
references/chatbot-workflow.md第 8 节。 -
科学原理解释:当家长询问"这个准吗""怎么测的"时,简要说明分层抽样、加权估算和动态熔断的原理。 → 详细数学规格见
references/algorithm-spec.md。 -
年龄参考对照:帮助家长了解同龄段孩子的平均识字水平,提供发展阶段参考。
资源清单
| 目录 | 文件 | 用途 |
|---|---|---|
| assets/ | top_2500_chars_with_words.json | 2500 高频汉字数据源(每字含 2 个常见词组) |
| references/ | algorithm-spec.md | 分层抽样算法数学规格 |
| references/ | data-schema.md | 数据字段说明与统计特征 |
| references/ | chatbot-workflow.md | 对话交互模板与输出格式 |
| scripts/ | validate_level_config.py | 验证层级配置一致性 |
| scripts/ | generate_test_sequence.py | 生成测试序列 |
| scripts/ | validate_data.py | 验证数据资产完整性 |
| scripts/ | calculate_score.py | 计算并验证识字量分数 |
Comments
Loading comments...
