QuizMe
v1.0.0适用于技术和编码主题的自适应苏格拉底式测验技能。用户输入 `/quizme`,或说“quiz me on X”,“teach me X”,“test my knowledge of X”,“I want to learn X”,或“start a quiz”时激活。该技能一次提问,根据用户的表现自适应难度,并记录每个用户的学习主题。
运行时依赖
安装命令
点击复制技能文档
QuizMe 概述 QuizMe 是一个用于技术和编码主题的自适应、苏格拉底式测验技能。它一次提一个问题,并在每个答案后确认正确或错误,并提供简要的解释。它还会根据用户的表现动态调整难度——正确答案后增加难度,错误答案后降低难度(或保持不变)。它将主题保存到 ~/quizme/topics.json 中,以便在会话之间保持持久性。
支持的主题领域 主题 子主题 Python 基础、面向对象编程、异步/等待、异常、装饰器 JavaScript 闭包、Promise、异步/等待、事件循环 SQL 连接、索引、窗口函数、查询优化 系统设计 缓存、负载均衡、数据库、CAP 定理 算法和数据结构 大 O 表示法、树、图、排序 网络 HTTP、TCP/IP、DNS、Websocket Git 分支、变基、冲突、工作流 Docker / Kubernetes 容器、镜像、Pod、服务 API REST、GraphQL、认证模式(OAuth、JWT) 通用 CS 概念 内存、操作系统基础、编译器、并发性
请参阅 references/topics.md 以获取每个主题的详细概念列表和示例问题。
工作流程 步骤 1 — 启动每个会话 首先询问用户要练习的主题,即使主题已经内联传递。显示保存的列表来自 ~/quizme/topics.json,如果它存在: "今天你想练习什么?" [如果有主题存在] "你的保存主题:
- Python 异步
- SQL 连接(或输入新主题)"
步骤 2 — 初始化题库(如果需要) 检查 ~/quizme/bank/{topic_slug}-{difficulty}.json,其中 topic_slug 是主题的小写形式,空格/特殊字符替换为连字符: 如果文件丢失或有少于 3 个未见过的问题("seen": false):运行 generate_bank.py 创建/重新填充它。 第一次运行(文件丢失):生成 20 个问题(--count 20) 重新填充(文件存在但未见过的问题数量低):生成 10 个问题(--count 10) 告诉用户: "正在为 [主题] 生成 [难度] 的问题..." 在运行时。 生成后,将主题添加到 ~/quizme/topics.json,如果它尚不存在。 使用以下命令运行脚本: python3 ~/.openclaw/workspace/skills/quizme/scripts/generate_bank.py "<主题>" <难度> --count
步骤 3 — 从题库中提问
从题库中选择一个随机的未见过的问题("seen": false)。
在显示问题后,立即在该问题上设置 "seen": true 并保存题库文件。
问题格式规则:
如果 "code" 字段非空:在围栏代码块中包含代码片段,使用 "language" 值
如果 "code" 为空:仅显示纯文本问题
始终显示 "options" 字段中的所有 4 个选项(A/B/C/D)
每个消息仅显示一个问题 —— 从不同时显示两个问题
问题模板(代码主题)
问题 N — [主题] ([难度]) [问题文本]
``[语言] [代码片段]
A) ... B) ... C) ... D) ...
问题模板(概念主题)
问题 N — [主题] ([难度]) [问题文本]
A) ... B) ... C) ... D) ...
步骤 4 — 每个答案后
显示正确/错误并显示题库问题中的 "explanation"(2-3 句)。- 更新题库问题:
- 将 "seen_count" 增加 1
- 如果正确:将 "correct_count" 增加 1
- 保存题库文件。
- 检查毕业: 计算此题库中所有 "seen_count" > 0 的问题。如果有 ≥ 15 个此类问题且(正确计数之和 / 已见计数之和)≥ 0.80 —— 触发毕业(步骤 5)。
检查重新填充: 计算剩余的未见过的问题("seen": false)。如果少于 5 个 —— 在后台默默地运行generate_bank.py --count 10以追加更多。- 提出下一个问题。
步骤 5 — 毕业
当毕业触发时:
公告: "你已经掌握了 [难度] [主题]!升级到 [下一个级别]。"- 删除旧题库文件(~/quizme/bank/{slug}-{difficulty}.json)
更新 ~/quizme/progress.json:将当前难度标记为毕业,并设置今天的日期,设置current_difficulty为下一个级别运行generate_bank.py以获取下一个难度(--count 20)- 以新的难度继续会话
难度顺序:初学者 → 中级 → 高级
在 高级 级别:没有毕业。只是在未见过的问题数量低时继续重新填充题库。
步骤 6 — 结束会话
当用户说 "stop"、"quit"、"done" 或类似时:
显示摘要:主题、此会话回答的问题、正确计数、准确率 %将会话统计数据保存到~/quizme/progress.json`(为此主题 + 难度增加回答/正确计数)
存储布局 ~/quizme/ ├── topics.json # { "topics": ["python async", "SQL joins"] } ├── progress.json # 每个主题的难度 + 统计数据 └── bank/ ├── python-beginner.json ├── sql-joins-intermediate.json └── ... # 每个主题仅存储当前难度
progress.json 格式