@rookiestar/eng-lang-tutor 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.claude/settings.local.json +22 -0
  2. package/.gitignore +32 -0
  3. package/CHANGELOG.md +37 -0
  4. package/CLAUDE.md +275 -0
  5. package/README.md +369 -0
  6. package/SKILL.md +613 -0
  7. package/bin/eng-lang-tutor.js +177 -0
  8. package/docs/OPENCLAW_DEPLOYMENT.md +241 -0
  9. package/examples/sample_keypoint_a1.json +112 -0
  10. package/examples/sample_keypoint_a2.json +124 -0
  11. package/examples/sample_keypoint_b1.json +135 -0
  12. package/examples/sample_keypoint_b2.json +137 -0
  13. package/examples/sample_keypoint_c1.json +134 -0
  14. package/examples/sample_keypoint_c2.json +141 -0
  15. package/examples/sample_quiz_a1.json +94 -0
  16. package/examples/sample_quiz_a2.json +94 -0
  17. package/examples/sample_quiz_b1.json +92 -0
  18. package/examples/sample_quiz_b2.json +94 -0
  19. package/examples/sample_quiz_c1.json +94 -0
  20. package/examples/sample_quiz_c2.json +104 -0
  21. package/package.json +41 -0
  22. package/references/resources.md +292 -0
  23. package/requirements.txt +16 -0
  24. package/scripts/__init__.py +28 -0
  25. package/scripts/audio/__init__.py +23 -0
  26. package/scripts/audio/composer.py +367 -0
  27. package/scripts/audio/converter.py +331 -0
  28. package/scripts/audio/feishu_voice.py +404 -0
  29. package/scripts/audio/tts/__init__.py +30 -0
  30. package/scripts/audio/tts/base.py +166 -0
  31. package/scripts/audio/tts/manager.py +306 -0
  32. package/scripts/audio/tts/providers/__init__.py +12 -0
  33. package/scripts/audio/tts/providers/edge.py +111 -0
  34. package/scripts/audio/tts/providers/xunfei.py +205 -0
  35. package/scripts/audio/utils.py +63 -0
  36. package/scripts/cli/__init__.py +7 -0
  37. package/scripts/cli/cli.py +229 -0
  38. package/scripts/cli/command_parser.py +336 -0
  39. package/scripts/core/__init__.py +30 -0
  40. package/scripts/core/constants.py +125 -0
  41. package/scripts/core/error_notebook.py +308 -0
  42. package/scripts/core/gamification.py +405 -0
  43. package/scripts/core/scorer.py +295 -0
  44. package/scripts/core/state_manager.py +814 -0
  45. package/scripts/eng-lang-tutor +16 -0
  46. package/scripts/scheduling/__init__.py +6 -0
  47. package/scripts/scheduling/cron_push.py +229 -0
  48. package/scripts/utils/__init__.py +12 -0
  49. package/scripts/utils/dedup.py +331 -0
  50. package/scripts/utils/helpers.py +82 -0
  51. package/templates/keypoint_schema.json +420 -0
  52. package/templates/prompt_templates.md +73 -0
  53. package/templates/prompts/display_guide.md +106 -0
  54. package/templates/prompts/initialization.md +350 -0
  55. package/templates/prompts/keypoint_generation.md +272 -0
  56. package/templates/prompts/output_rules.md +106 -0
  57. package/templates/prompts/quiz_generation.md +190 -0
  58. package/templates/prompts/responses.md +339 -0
  59. package/templates/prompts/shared_enums.md +252 -0
  60. package/templates/quiz_schema.json +214 -0
  61. package/templates/state_schema.json +277 -0
package/README.md ADDED
@@ -0,0 +1,369 @@
1
+ # eng-lang-tutor
2
+
3
+ **地道美式英语导师** - 一个用于学习地道美式英语表达的 OpenClaw Skill。
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ ## 功能特性
8
+
9
+ - 📚 **每日知识点** - 地道美式表达,包含场景语境、可替换说法和中式英语陷阱
10
+ - 🔊 **语音版知识点** - 支持 Edge-TTS 语音合成,免费高质量,可调节语速
11
+ - 📝 **测验系统** - 4种题型:选择题、填空题、对话补全、中式英语修正
12
+ - 🎮 **多邻国风格游戏化** - XP经验值、等级、连胜、徽章、宝石
13
+ - ⏰ **可自定义推送时间** - 通过 cron 设置您偏好的推送时间
14
+ - 🌐 **双语支持** - 命令同时支持中英文
15
+
16
+ ## 快速开始
17
+
18
+ ### 前置条件
19
+
20
+ - 服务器上已安装 OpenClaw Gateway
21
+ - Python 3.8+
22
+ - ffmpeg(用于音频合成)
23
+ - Discord Bot(或其他 IM 通道)
24
+
25
+ **系统依赖:**
26
+
27
+ ```bash
28
+ # macOS
29
+ brew install ffmpeg python3
30
+
31
+ # Ubuntu/Debian
32
+ sudo apt-get install ffmpeg python3 python3-venv
33
+ ```
34
+
35
+ ### 安装步骤
36
+
37
+ **方式一:npm 安装(推荐)**
38
+
39
+ ```bash
40
+ npm install -g @rookiestar/eng-lang-tutor
41
+ ```
42
+
43
+ 安装会自动执行,skill 将被安装到 `~/.openclaw/skills/eng-lang-tutor/`。
44
+
45
+ **方式二:从源码安装**
46
+
47
+ ```bash
48
+ cd ~/.openclaw/skills/
49
+ git clone --depth 1 --filter=blob:none --sparse https://github.com/rookiestar/Skills.git temp-skills
50
+ cd temp-skills
51
+ git sparse-checkout set eng-lang-tutor
52
+ mv eng-lang-tutor ../eng-lang-tutor
53
+ cd .. && rm -rf temp-skills
54
+ pip install -r eng-lang-tutor/requirements.txt
55
+ ```
56
+
57
+ **手动安装依赖(如需要):**
58
+
59
+ ```bash
60
+ # 创建 Python 虚拟环境
61
+ python3 -m venv ~/.venvs/eng-lang-tutor
62
+ source ~/.venvs/eng-lang-tutor/bin/activate # Linux/macOS
63
+
64
+ # 安装依赖
65
+ pip install -r ~/.openclaw/skills/eng-lang-tutor/requirements.txt
66
+ ```
67
+
68
+ **验证安装:**
69
+
70
+ ```bash
71
+ openclaw skills list
72
+ openclaw skills info eng-lang-tutor
73
+ ```
74
+
75
+ **重启 Gateway:**
76
+
77
+ ```bash
78
+ openclaw gateway restart
79
+ ```
80
+
81
+ **配置渠道:**
82
+
83
+ **Discord 配置:**
84
+ ```bash
85
+ openclaw config set discord.token YOUR_BOT_TOKEN
86
+ openclaw config set discord.guildId YOUR_SERVER_ID
87
+ ```
88
+
89
+ 4. **完成配对:**
90
+
91
+ 首次向 Bot 发送消息时,您会收到一个配对码。批准它:
92
+
93
+ ```bash
94
+ openclaw pairing approve discord YOUR_PAIRING_CODE
95
+ ```
96
+
97
+ ### 首次使用
98
+
99
+ 首次与 Bot 交互时,它会引导您完成 7 步引导流程:
100
+
101
+ 1. 选择您的 CEFR 等级(A1-C2)
102
+ 2. 选择您的兴趣主题
103
+ 3. 选择导师风格(幽默/严谨/随意/专业)
104
+ 4. 设置口语/书面语比例
105
+ 5. 配置推送时间(知识点和测验时间)
106
+ 6. **语音教学配置** - 选择是否启用语音版知识点
107
+ - 如启用,选择语速(0.5-1.7,默认 0.9)
108
+ - 默认使用 Edge-TTS(免费,无需配置)
109
+ - 如需使用讯飞,请先在服务器上设置环境变量:
110
+ ```bash
111
+ export TTS_PROVIDER=xunfei
112
+ export XUNFEI_APPID=your_appid
113
+ export XUNFEI_API_KEY=your_api_key
114
+ export XUNFEI_API_SECRET=your_api_secret
115
+ ```
116
+ 7. 确认您的设置并创建定时任务
117
+
118
+ ## TTS 语音配置
119
+
120
+ 本 Skill 默认使用 **Edge-TTS**(Microsoft Edge 语音合成服务),完全免费且无需 API 密钥。
121
+
122
+ ### 支持的 TTS Provider
123
+
124
+ | Provider | 说明 | 配置方式 |
125
+ |----------|------|----------|
126
+ | **edge-tts** (默认) | Microsoft Edge TTS,免费高质量 | 无需配置 |
127
+ | xunfei | 讯飞 TTS,国内稳定 | 需设置环境变量 |
128
+
129
+ 切换 Provider:
130
+ ```bash
131
+ # 使用 Edge-TTS(默认)
132
+ export TTS_PROVIDER=edge-tts
133
+
134
+ # 使用讯飞(需先配置密钥)
135
+ export TTS_PROVIDER=xunfei
136
+ export XUNFEI_APPID=xxx
137
+ export XUNFEI_API_KEY=xxx
138
+ export XUNFEI_API_SECRET=xxx
139
+ ```
140
+
141
+ ### 可用音色
142
+
143
+ **Edge-TTS (en-US):**
144
+
145
+ | 角色 | 默认音色 | 说明 |
146
+ |------|----------|------|
147
+ | 旁白 (Narrator) | JennyNeural | 女声,友好亲切 |
148
+ | 对话 A | EricNeural | 男声,专业理性 |
149
+ | 对话 B | JennyNeural | 女声,友好亲切 |
150
+
151
+ **XunFei (美式英语):**
152
+
153
+ | 角色 | 默认音色 | 说明 |
154
+ |------|----------|------|
155
+ | 旁白 (Narrator) | catherine | 女声,自然流畅 |
156
+ | 对话 A | henry | 男声,沉稳专业 |
157
+ | 对话 B | catherine | 女声,自然流畅 |
158
+
159
+ ### 语速选项
160
+
161
+ 在引导流程中可选择语速:
162
+
163
+ | 语速 | 值 | 适用场景 |
164
+ |------|-----|----------|
165
+ | 非常慢 | 0.5 | 初学者跟读 |
166
+ | 慢速 | 0.7 | 学习发音 |
167
+ | **正常(推荐)** | **0.9** | 日常学习 |
168
+ | 快速 | 1.3 | 听力挑战 |
169
+ | 非常快 | 1.7 | 进阶训练 |
170
+
171
+ ## 命令列表
172
+
173
+ | 命令 | 别名 | 描述 |
174
+ |---------|---------|-------------|
175
+ | `start` | `开始`, `初始化` | 启动引导配置 |
176
+ | `keypoint` | `知识点`, `today` | 查看今日知识点 |
177
+ | `keypoint history` | `知识点 历史` | 查看历史知识点 |
178
+ | `quiz` | `测验`, `test` | 参加每日测验 |
179
+ | `stats` | `进度`, `level` | 查看学习进度 |
180
+ | `config` | `设置` | 查看设置 |
181
+ | `errors` | `错题本` | 查看错题本 |
182
+ | `help` | `帮助` | 显示命令列表 |
183
+
184
+ ## 推送时间配置
185
+
186
+ ### Crontab 设置
187
+
188
+ Skill 的定时推送依赖 crontab。在 onboarding 流程的 Step 7 会自动创建 cron 任务。
189
+
190
+ 如需手动配置或修改:
191
+
192
+ ```bash
193
+ # 编辑 crontab
194
+ crontab -e
195
+
196
+ # 添加定时任务(示例:北京时间 06:45 推送知识点,22:45 推送测验)
197
+ CRON_TZ=Asia/Shanghai
198
+
199
+ # 知识点推送
200
+ 45 6 * * * openclaw system event --text "Use eng-lang-tutor skill. Push today's keypoint." --mode now
201
+
202
+ # 测验推送
203
+ 45 22 * * * openclaw system event --text "Use eng-lang-tutor skill. Push today's quiz invitation." --mode now
204
+ ```
205
+
206
+ ### 修改推送时间
207
+
208
+ 如需修改推送时间:
209
+
210
+ 1. **在 IM 中向 Bot 发送命令**更新偏好设置:
211
+
212
+ ```
213
+ set schedule keypoint 7:00 # 设置知识点推送时间为早上 7:00
214
+ set schedule quiz 21:00 # 设置测验推送时间为晚上 21:00
215
+ ```
216
+
217
+ 2. **同步更新 crontab**(修改对应的时间):
218
+
219
+ ```bash
220
+ crontab -e
221
+ # 将 45 6 改为 0 7,将 45 22 改为 0 21
222
+ ```
223
+
224
+ **注意:** 测验时间必须晚于知识点时间。时间格式为 24 小时制(HH:MM)。
225
+
226
+ ## 游戏化系统
227
+
228
+ ### XP 与等级
229
+
230
+ 本系统包含两个独立的等级体系:
231
+ - **能力等级 (CEFR)**:A1-C2,决定内容难度(语言能力水平)
232
+ - **活跃等级 (Level)**:1-20,衡量使用深度(使用进程)
233
+
234
+ | 等级范围 | 所需 XP | 阶段 |
235
+ |-------------|-------------|-------|
236
+ | 1-5 | 0-350 | 启程者 (Starter) |
237
+ | 6-10 | 550-2000 | 行路人 (Traveler) |
238
+ | 11-15 | 2600-6000 | 探索者 (Explorer) |
239
+ | 16-20 | 7200-15000 | 开拓者 (Pioneer) |
240
+
241
+ ### 徽章
242
+
243
+ | 徽章 | 获取条件 | 宝石奖励 |
244
+ |-------|-------------|------|
245
+ | First Steps | 完成首次测验 | 10 |
246
+ | Week Warrior | 7天连胜 | 25 |
247
+ | Month Master | 30天连胜 | 100 |
248
+ | Perfect 10 | 10次满分测验 | 50 |
249
+ | Vocab Hunter | 学习100个表达 | 75 |
250
+ | Error Slayer | 清除30个错题 | 30 |
251
+
252
+ ## 项目结构
253
+
254
+ ```
255
+ eng-lang-tutor/
256
+ ├── SKILL.md # Skill 文档
257
+ ├── scripts/
258
+ │ ├── __init__.py # 包入口
259
+ │ ├── core/ # 核心模块
260
+ │ │ ├── state_manager.py # 状态持久化与事件日志
261
+ │ │ ├── scorer.py # 答案评估与 XP 计算
262
+ │ │ ├── gamification.py # 连胜/等级/徽章逻辑
263
+ │ │ ├── constants.py # 共享常量(等级阈值)
264
+ │ │ └── error_notebook.py # 错题本管理
265
+ │ ├── cli/ # 命令行模块
266
+ │ │ ├── cli.py # CLI 入口点
267
+ │ │ └── command_parser.py # 用户命令解析
268
+ │ ├── scheduling/ # 调度模块
269
+ │ │ └── cron_push.py # 定时内容推送
270
+ │ ├── utils/ # 工具模块
271
+ │ │ ├── dedup.py # 14天去重逻辑
272
+ │ │ └── helpers.py # 工具函数
273
+ │ └── audio/ # 音频模块
274
+ │ ├── tts/ # TTS 语音合成
275
+ │ │ ├── base.py # TTS 抽象基类
276
+ │ │ ├── manager.py # TTS 管理器
277
+ │ │ └── providers/ # TTS 提供者
278
+ │ │ ├── edge.py # Edge-TTS (默认)
279
+ │ │ └── xunfei.py # 讯飞 TTS
280
+ │ ├── composer.py # 音频合成
281
+ │ ├── converter.py # 格式转换
282
+ │ ├── feishu_voice.py # 飞书语音发送
283
+ │ └── utils.py # 音频工具函数
284
+ ├── templates/
285
+ │ ├── state_schema.json # 状态 JSON Schema
286
+ │ ├── keypoint_schema.json # 知识点 JSON Schema
287
+ │ ├── quiz_schema.json # 测验 JSON Schema
288
+ │ ├── prompt_templates.md # LLM Prompt 模板索引
289
+ │ └── prompts/ # 拆分的 Prompt 模板
290
+ │ ├── keypoint_generation.md
291
+ │ ├── quiz_generation.md
292
+ │ ├── display_guide.md
293
+ │ ├── initialization.md
294
+ │ ├── responses.md
295
+ │ ├── shared_enums.md
296
+ │ └── output_rules.md
297
+ ├── references/
298
+ │ └── resources.md # 主题化学习资源
299
+ ├── examples/ # 示例文件(按 CEFR 级别)
300
+ │ ├── sample_keypoint_a1.json # A1 入门级知识点
301
+ │ ├── sample_keypoint_a2.json # A2 初级知识点
302
+ │ ├── sample_keypoint_b1.json # B1 中级知识点
303
+ │ ├── sample_keypoint_b2.json # B2 中高级知识点
304
+ │ ├── sample_keypoint_c1.json # C1 高级知识点
305
+ │ ├── sample_keypoint_c2.json # C2 精通级知识点
306
+ │ ├── sample_quiz_a1.json # A1 测验
307
+ │ ├── sample_quiz_a2.json # A2 测验
308
+ │ ├── sample_quiz_b1.json # B1 测验
309
+ │ ├── sample_quiz_b2.json # B2 测验
310
+ │ ├── sample_quiz_c1.json # C1 测验
311
+ │ └── sample_quiz_c2.json # C2 测验
312
+ └── docs/
313
+ └── OPENCLAW_DEPLOYMENT.md # 部署文档
314
+ ```
315
+
316
+ **数据存储位置:** `~/.openclaw/state/eng-lang-tutor/`
317
+
318
+ 可通过环境变量 `OPENCLAW_STATE_DIR` 自定义数据目录。
319
+
320
+ ## 文档
321
+
322
+ - [SKILL.md](SKILL.md) - 完整 Skill 文档
323
+ - [OpenClaw 部署指南](docs/OPENCLAW_DEPLOYMENT.md) - 服务器部署
324
+
325
+ ## 开发
326
+
327
+ ### 本地调试
328
+
329
+ ```bash
330
+ python3 scripts/command_parser.py --demo
331
+ python3 scripts/cron_push.py --task status
332
+ ```
333
+
334
+ ## 服务器迁移
335
+
336
+ **迁移学习数据:**
337
+
338
+ ```bash
339
+ # 在源服务器上打包数据
340
+ tar -czvf eng-lang-tutor-data.tar.gz -C ~/.openclaw/state eng-lang-tutor
341
+
342
+ # 传输到新服务器
343
+ scp eng-lang-tutor-data.tar.gz user@new-server:~/
344
+
345
+ # 在目标服务器上解压
346
+ mkdir -p ~/.openclaw/state
347
+ tar -xzvf ~/eng-lang-tutor-data.tar.gz -C ~/.openclaw/state
348
+ ```
349
+
350
+ **重新安装 skill:**
351
+
352
+ ```bash
353
+ npm install -g @rookiestar/eng-lang-tutor
354
+ ```
355
+
356
+ 详细迁移指南请参见 [docs/OPENCLAW_DEPLOYMENT.md](docs/OPENCLAW_DEPLOYMENT.md)。
357
+
358
+ ## 许可证
359
+
360
+ MIT License - 详见 [LICENSE](LICENSE)。
361
+
362
+ ## 贡献
363
+
364
+ 欢迎贡献!请随时提交 Pull Request。
365
+
366
+ ## 致谢
367
+
368
+ - [awesome-language-learning](https://github.com/Vuizur/awesome-language-learning) - 资源灵感来源
369
+ - [Duolingo](https://www.duolingo.com) - 游戏化模型参考