@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.
- package/.claude/settings.local.json +22 -0
- package/.gitignore +32 -0
- package/CHANGELOG.md +37 -0
- package/CLAUDE.md +275 -0
- package/README.md +369 -0
- package/SKILL.md +613 -0
- package/bin/eng-lang-tutor.js +177 -0
- package/docs/OPENCLAW_DEPLOYMENT.md +241 -0
- package/examples/sample_keypoint_a1.json +112 -0
- package/examples/sample_keypoint_a2.json +124 -0
- package/examples/sample_keypoint_b1.json +135 -0
- package/examples/sample_keypoint_b2.json +137 -0
- package/examples/sample_keypoint_c1.json +134 -0
- package/examples/sample_keypoint_c2.json +141 -0
- package/examples/sample_quiz_a1.json +94 -0
- package/examples/sample_quiz_a2.json +94 -0
- package/examples/sample_quiz_b1.json +92 -0
- package/examples/sample_quiz_b2.json +94 -0
- package/examples/sample_quiz_c1.json +94 -0
- package/examples/sample_quiz_c2.json +104 -0
- package/package.json +41 -0
- package/references/resources.md +292 -0
- package/requirements.txt +16 -0
- package/scripts/__init__.py +28 -0
- package/scripts/audio/__init__.py +23 -0
- package/scripts/audio/composer.py +367 -0
- package/scripts/audio/converter.py +331 -0
- package/scripts/audio/feishu_voice.py +404 -0
- package/scripts/audio/tts/__init__.py +30 -0
- package/scripts/audio/tts/base.py +166 -0
- package/scripts/audio/tts/manager.py +306 -0
- package/scripts/audio/tts/providers/__init__.py +12 -0
- package/scripts/audio/tts/providers/edge.py +111 -0
- package/scripts/audio/tts/providers/xunfei.py +205 -0
- package/scripts/audio/utils.py +63 -0
- package/scripts/cli/__init__.py +7 -0
- package/scripts/cli/cli.py +229 -0
- package/scripts/cli/command_parser.py +336 -0
- package/scripts/core/__init__.py +30 -0
- package/scripts/core/constants.py +125 -0
- package/scripts/core/error_notebook.py +308 -0
- package/scripts/core/gamification.py +405 -0
- package/scripts/core/scorer.py +295 -0
- package/scripts/core/state_manager.py +814 -0
- package/scripts/eng-lang-tutor +16 -0
- package/scripts/scheduling/__init__.py +6 -0
- package/scripts/scheduling/cron_push.py +229 -0
- package/scripts/utils/__init__.py +12 -0
- package/scripts/utils/dedup.py +331 -0
- package/scripts/utils/helpers.py +82 -0
- package/templates/keypoint_schema.json +420 -0
- package/templates/prompt_templates.md +73 -0
- package/templates/prompts/display_guide.md +106 -0
- package/templates/prompts/initialization.md +350 -0
- package/templates/prompts/keypoint_generation.md +272 -0
- package/templates/prompts/output_rules.md +106 -0
- package/templates/prompts/quiz_generation.md +190 -0
- package/templates/prompts/responses.md +339 -0
- package/templates/prompts/shared_enums.md +252 -0
- package/templates/quiz_schema.json +214 -0
- 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
|
+
[](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) - 游戏化模型参考
|