@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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# 共享枚举定义
|
|
2
|
+
|
|
3
|
+
> 本文件定义所有 prompt 模板共用的枚举值。其他模板应引用此文件而非重复定义。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Topics 主题
|
|
8
|
+
|
|
9
|
+
| ID | 中文名 | Emoji | 描述 |
|
|
10
|
+
|----|--------|-------|------|
|
|
11
|
+
| movies | 电影 | 🎬 | 电影、美剧相关表达 |
|
|
12
|
+
| news | 新闻 | 📰 | 新闻报道、时事评论 |
|
|
13
|
+
| gaming | 游戏 | 🎮 | 电子游戏、在线游戏 |
|
|
14
|
+
| sports | 体育 | ⚽ | 体育运动、比赛 |
|
|
15
|
+
| workplace | 职场 | 💼 | 工作、商务、职业 |
|
|
16
|
+
| social | 社交 | 🍻 | 朋友聚会、社交活动 |
|
|
17
|
+
| daily_life | 生活 | 🏠 | 日常生活、购物、出行 |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## CEFR Levels 能力等级
|
|
22
|
+
|
|
23
|
+
> 基于 [Council of Europe](https://www.coe.int/lang-cefr) 官方 "Can-Do Statements" 标准
|
|
24
|
+
|
|
25
|
+
### A1 - Breakthrough 入门级
|
|
26
|
+
|
|
27
|
+
| 属性 | 值 |
|
|
28
|
+
|------|-----|
|
|
29
|
+
| **类别** | Basic User 基础使用者 |
|
|
30
|
+
| **中文名** | 入门级 |
|
|
31
|
+
| **词汇量** | ~500-1000 词 |
|
|
32
|
+
| **对应考试** | IELTS 1.0-2.0 / 小学英语 |
|
|
33
|
+
|
|
34
|
+
**Can-Do Statements**:
|
|
35
|
+
- 能理解和使用熟悉的日常表达和非常基础的短语
|
|
36
|
+
- 能介绍自己和他人,能就个人情况(居住地、认识的人、拥有的物品)提问和回答
|
|
37
|
+
- 在对方说话缓慢、清晰且愿意帮助时,能进行简单交流
|
|
38
|
+
|
|
39
|
+
**Keypoint 特征**:
|
|
40
|
+
- Expression: 单词、简单短语
|
|
41
|
+
- Example: 1-2 句简单对话
|
|
42
|
+
- Chinglish: 直译错误非常明显
|
|
43
|
+
- Extended Learning: 无
|
|
44
|
+
|
|
45
|
+
**Quiz 特征**:
|
|
46
|
+
- Multiple Choice: 4选项,干扰项明显错误
|
|
47
|
+
- Chinglish Fix: 明显语法错误
|
|
48
|
+
- Fill Blank: 词库 3 选 1,直接匹配
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### A2 - Waystage 初级
|
|
53
|
+
|
|
54
|
+
| 属性 | 值 |
|
|
55
|
+
|------|-----|
|
|
56
|
+
| **类别** | Basic User 基础使用者 |
|
|
57
|
+
| **中文名** | 初级 |
|
|
58
|
+
| **词汇量** | ~1000-2000 词 |
|
|
59
|
+
| **对应考试** | IELTS 2.5-3.5 / Cambridge KET / 初中英语 |
|
|
60
|
+
|
|
61
|
+
**Can-Do Statements**:
|
|
62
|
+
- 能理解与自身直接相关领域的句子和常用表达(个人/家庭信息、购物、地理、工作)
|
|
63
|
+
- 能就熟悉的日常事务进行简单直接的信息交流
|
|
64
|
+
- 能用简单的语言描述自己的背景、周围环境和直接需求
|
|
65
|
+
|
|
66
|
+
**Keypoint 特征**:
|
|
67
|
+
- Expression: 常用短语、基础表达
|
|
68
|
+
- Example: 2-3 句日常对话
|
|
69
|
+
- Chinglish: 直译错误较明显
|
|
70
|
+
- Extended Learning: 简单 cultural_note
|
|
71
|
+
|
|
72
|
+
**Quiz 特征**:
|
|
73
|
+
- Multiple Choice: 4选项,干扰项较明显
|
|
74
|
+
- Chinglish Fix: 常见直译错误
|
|
75
|
+
- Fill Blank: 词库 3 选 1,上下文匹配
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
### B1 - Threshold 中级
|
|
80
|
+
|
|
81
|
+
| 属性 | 值 |
|
|
82
|
+
|------|-----|
|
|
83
|
+
| **类别** | Independent User 独立使用者 |
|
|
84
|
+
| **中文名** | 中级 |
|
|
85
|
+
| **词汇量** | ~2000-3500 词 |
|
|
86
|
+
| **对应考试** | IELTS 4.0-5.0 / Cambridge PET / 高考英语 / 大学四级 |
|
|
87
|
+
|
|
88
|
+
**Can-Do Statements**:
|
|
89
|
+
- 能理解工作、学习、休闲等熟悉话题的主要内容
|
|
90
|
+
- 能应对旅行中大多数可能出现的情况
|
|
91
|
+
- 能就熟悉或感兴趣的话题进行简单连贯的表达
|
|
92
|
+
- 能描述经历、事件、梦想和希望,简要说明理由和计划
|
|
93
|
+
|
|
94
|
+
**Keypoint 特征**:
|
|
95
|
+
- Expression: 习语、短语动词
|
|
96
|
+
- Example: 3-4 句工作场景对话
|
|
97
|
+
- Chinglish: 细微表达差异
|
|
98
|
+
- Extended Learning: 完整 extended_learning
|
|
99
|
+
|
|
100
|
+
**Quiz 特征**:
|
|
101
|
+
- Multiple Choice: 4选项,需理解语境
|
|
102
|
+
- Chinglish Fix: 细微表达差异
|
|
103
|
+
- Fill Blank: 词库 3 选 1,需理解用法
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### B2 - Vantage 中高级
|
|
108
|
+
|
|
109
|
+
| 属性 | 值 |
|
|
110
|
+
|------|-----|
|
|
111
|
+
| **类别** | Independent User 独立使用者 |
|
|
112
|
+
| **中文名** | 中高级 |
|
|
113
|
+
| **词汇量** | ~3500-5000 词 |
|
|
114
|
+
| **对应考试** | IELTS 5.5-6.5 / Cambridge FCE / 大学六级 (CET-6) |
|
|
115
|
+
|
|
116
|
+
**Can-Do Statements**:
|
|
117
|
+
- 能理解具体或抽象话题的复杂文本主旨,包括专业领域的技术讨论
|
|
118
|
+
- 能与母语者进行流利自然的互动,双方都不感到紧张
|
|
119
|
+
- 能就广泛话题产出清晰详细的文章,解释观点的利弊
|
|
120
|
+
|
|
121
|
+
**Keypoint 特征**:
|
|
122
|
+
- Expression: 习语变体、抽象表达
|
|
123
|
+
- Example: 4-5 句复杂场景对话
|
|
124
|
+
- Chinglish: 语境使用错误
|
|
125
|
+
- Extended Learning: 深入 cultural_note
|
|
126
|
+
|
|
127
|
+
**Quiz 特征**:
|
|
128
|
+
- Multiple Choice: 4选项,干扰项隐蔽
|
|
129
|
+
- Chinglish Fix: 语境/语体错误
|
|
130
|
+
- Fill Blank: 词库 4 选 1,需深入理解
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### C1 - Effective Operational Proficiency 高级
|
|
135
|
+
|
|
136
|
+
| 属性 | 值 |
|
|
137
|
+
|------|-----|
|
|
138
|
+
| **类别** | Proficient User 熟练使用者 |
|
|
139
|
+
| **中文名** | 高级 |
|
|
140
|
+
| **词汇量** | ~5000-8000 词 |
|
|
141
|
+
| **对应考试** | IELTS 7.0-8.0 / Cambridge CAE / 英语专业八级 (TEM-8) |
|
|
142
|
+
|
|
143
|
+
**Can-Do Statements**:
|
|
144
|
+
- 能理解各种长篇、高难度文本,识别隐含含义
|
|
145
|
+
- 能流利自然地表达,几乎不需要搜寻词汇
|
|
146
|
+
- 能在社交、学术和职业场合灵活有效地使用语言
|
|
147
|
+
- 能就复杂话题产出结构清晰、细节丰富的文章
|
|
148
|
+
|
|
149
|
+
**Keypoint 特征**:
|
|
150
|
+
- Expression: 高级习语、俚语
|
|
151
|
+
- Example: 5+ 句专业场景对话
|
|
152
|
+
- Chinglish: 文化隐含意义
|
|
153
|
+
- Extended Learning: 俚语背景、多种使用场景
|
|
154
|
+
|
|
155
|
+
**Quiz 特征**:
|
|
156
|
+
- Multiple Choice: 4选项,含文化细微差别
|
|
157
|
+
- Chinglish Fix: 隐含文化错误
|
|
158
|
+
- Fill Blank: 词库 4 选 1,需文化理解
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
### C2 - Mastery 精通级
|
|
163
|
+
|
|
164
|
+
| 属性 | 值 |
|
|
165
|
+
|------|-----|
|
|
166
|
+
| **类别** | Proficient User 熟练使用者 |
|
|
167
|
+
| **中文名** | 精通级 |
|
|
168
|
+
| **词汇量** | ~8000+ 词 |
|
|
169
|
+
| **对应考试** | IELTS 8.5-9.0 / Cambridge CPE / 接近母语水平 |
|
|
170
|
+
|
|
171
|
+
**Can-Do Statements**:
|
|
172
|
+
- 能毫不费力地理解几乎所有听到或读到的内容
|
|
173
|
+
- 能综合不同来源的信息,进行摘要和重述
|
|
174
|
+
- 能自然、流利、精准地表达,区分意义的细微差别
|
|
175
|
+
|
|
176
|
+
**Keypoint 特征**:
|
|
177
|
+
- Expression: 地道表达、文化梗
|
|
178
|
+
- Example: 复杂专业场景对话 + 多层含义
|
|
179
|
+
- Chinglish: 深层文化差异
|
|
180
|
+
- Extended Learning: 深入文化分析、历史背景
|
|
181
|
+
|
|
182
|
+
**Quiz 特征**:
|
|
183
|
+
- Multiple Choice: 4选项,极隐蔽的文化差异
|
|
184
|
+
- Chinglish Fix: 深层文化错误
|
|
185
|
+
- Dialogue Completion: 开放式,需综合理解
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Tutor Styles 导师风格
|
|
190
|
+
|
|
191
|
+
| Style | 中文名 | 语气特点 | 示例 |
|
|
192
|
+
|-------|--------|----------|------|
|
|
193
|
+
| humorous | 幽默 | 轻松愉快,带梗和调侃 | "这个表达老外听了会笑死" |
|
|
194
|
+
| rigorous | 严谨 | 专业分析,深入讲解 | "从语法角度分析..." |
|
|
195
|
+
| casual | 随意 | 自然口语,朋友间聊天 | "平时老美就这么说" |
|
|
196
|
+
| professional | 专业 | 正式商务,职场场景 | "在商务邮件中建议使用..." |
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Quiz Question Types 题型
|
|
201
|
+
|
|
202
|
+
| Type | 中文名 | XP | 描述 | 每日数量 |
|
|
203
|
+
|------|--------|-----|------|----------|
|
|
204
|
+
| multiple_choice | 选择题 | 10 | 四选一,测试表达识别 | 1 (必选) |
|
|
205
|
+
| chinglish_fix | Chinglish修正 | 15 | 识别并修正中式英语 | 1 (必选) |
|
|
206
|
+
| fill_blank | 填空题 | 12 | 完成对话中的空白 | 0-1 (随机) |
|
|
207
|
+
| dialogue_completion | 对话补全 | 15 | 选择合适的对话回应 | 0-1 (随机) |
|
|
208
|
+
|
|
209
|
+
**每日 Quiz 结构:** 3 题,约 37 XP,答对 2 题即过关
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Category Types 类别
|
|
214
|
+
|
|
215
|
+
| Category | 中文名 | 描述 |
|
|
216
|
+
|----------|--------|------|
|
|
217
|
+
| oral | 口语 | 日常口语表达,非正式场合 |
|
|
218
|
+
| written | 书面 | 正式书面表达,商务邮件、报告 |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Formality Levels 正式程度
|
|
223
|
+
|
|
224
|
+
| Level | 中文名 | Emoji | 场景示例 |
|
|
225
|
+
|-------|--------|-------|----------|
|
|
226
|
+
| casual | 随意 | 👕 | 朋友聊天、社交媒体 |
|
|
227
|
+
| neutral | 中性 | 👔 | 同事交流、日常沟通 |
|
|
228
|
+
| formal | 正式 | 🤵 | 商务会议、正式邮件 |
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Badge Types 徽章
|
|
233
|
+
|
|
234
|
+
| Badge ID | 中文名 | 触发条件 | 宝石奖励 |
|
|
235
|
+
|----------|--------|----------|----------|
|
|
236
|
+
| first_steps | 初次尝试 | 完成首次 Quiz | 10 |
|
|
237
|
+
| week_warrior | 周末战士 | 7天连胜 | 25 |
|
|
238
|
+
| month_master | 月度大师 | 30天连胜 | 100 |
|
|
239
|
+
| perfect_10 | 完美十连 | 10次满分 Quiz | 50 |
|
|
240
|
+
| vocab_hunter | 词汇猎人 | 学习100个表达 | 75 |
|
|
241
|
+
| error_slayer | 错题克星 | 清除30个错题 | 30 |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Activity Levels 活跃等级
|
|
246
|
+
|
|
247
|
+
| Stage | 中文名 | Level | XP 范围 |
|
|
248
|
+
|-------|--------|-------|---------|
|
|
249
|
+
| Starter | 启程者 | 1-5 | 0-350 |
|
|
250
|
+
| Traveler | 行路人 | 6-10 | 550-2000 |
|
|
251
|
+
| Explorer | 探索者 | 11-15 | 2600-6000 |
|
|
252
|
+
| Pioneer | 开拓者 | 16-20 | 7200-15000 |
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "quiz_schema.json",
|
|
4
|
+
"title": "Quiz",
|
|
5
|
+
"description": "Daily quiz for knowledge point reinforcement with emoji-enhanced display",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["quiz_date", "questions", "total_xp", "passing_score"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"quiz_date": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"format": "date",
|
|
12
|
+
"description": "Date of this quiz (YYYY-MM-DD)"
|
|
13
|
+
},
|
|
14
|
+
"cefr_level": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"enum": ["A1", "A2", "B1", "B2", "C1", "C2"],
|
|
17
|
+
"description": "Target CEFR level for this quiz"
|
|
18
|
+
},
|
|
19
|
+
"keypoint_fingerprint": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Reference to the knowledge point this quiz is based on"
|
|
22
|
+
},
|
|
23
|
+
"questions": {
|
|
24
|
+
"type": "array",
|
|
25
|
+
"minItems": 3,
|
|
26
|
+
"maxItems": 3,
|
|
27
|
+
"items": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"required": ["id", "type", "question", "correct_answer", "xp_value"],
|
|
30
|
+
"properties": {
|
|
31
|
+
"id": {
|
|
32
|
+
"type": "integer",
|
|
33
|
+
"minimum": 1,
|
|
34
|
+
"description": "Question number"
|
|
35
|
+
},
|
|
36
|
+
"type": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"enum": ["multiple_choice", "fill_blank", "dialogue_completion", "chinglish_fix"],
|
|
39
|
+
"description": "Question type"
|
|
40
|
+
},
|
|
41
|
+
"question": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "The question text or prompt"
|
|
44
|
+
},
|
|
45
|
+
"chinglish_sentence": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"description": "Original Chinglish sentence for chinglish_fix type"
|
|
48
|
+
},
|
|
49
|
+
"context": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "Optional context or scenario description"
|
|
52
|
+
},
|
|
53
|
+
"options": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"minItems": 4,
|
|
56
|
+
"maxItems": 4,
|
|
57
|
+
"items": {
|
|
58
|
+
"type": "string"
|
|
59
|
+
},
|
|
60
|
+
"description": "Options for multiple_choice type (A, B, C, D)"
|
|
61
|
+
},
|
|
62
|
+
"word_bank": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "string"
|
|
66
|
+
},
|
|
67
|
+
"description": "Optional word bank for fill_blank type"
|
|
68
|
+
},
|
|
69
|
+
"correct_answer": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"description": "The correct answer (option letter for multiple_choice, word for others)"
|
|
72
|
+
},
|
|
73
|
+
"explanation": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "Explanation of why this answer is correct"
|
|
76
|
+
},
|
|
77
|
+
"xp_value": {
|
|
78
|
+
"type": "integer",
|
|
79
|
+
"minimum": 5,
|
|
80
|
+
"maximum": 20,
|
|
81
|
+
"description": "XP reward for correct answer"
|
|
82
|
+
},
|
|
83
|
+
"display": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"description": "Emoji-enhanced display format for this question",
|
|
86
|
+
"properties": {
|
|
87
|
+
"type_emoji": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"description": "Question type emoji (🔤, ✏️, 💬, 🔧)"
|
|
90
|
+
},
|
|
91
|
+
"type_name": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "Question type name in bilingual format"
|
|
94
|
+
},
|
|
95
|
+
"question_formatted": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"description": "Question with emoji prefix"
|
|
98
|
+
},
|
|
99
|
+
"context_formatted": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "Context with appropriate emoji"
|
|
102
|
+
},
|
|
103
|
+
"sentence_formatted": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"description": "Formatted sentence for display (e.g., with bold corrections)"
|
|
106
|
+
},
|
|
107
|
+
"dialogue_formatted": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"description": "Dialogue with speaker emojis"
|
|
110
|
+
},
|
|
111
|
+
"options_formatted": {
|
|
112
|
+
"type": "array",
|
|
113
|
+
"items": {"type": "string"},
|
|
114
|
+
"description": "Options with checkbox emoji"
|
|
115
|
+
},
|
|
116
|
+
"word_bank_formatted": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"description": "Word bank with box emoji"
|
|
119
|
+
},
|
|
120
|
+
"hint": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"description": "Hint with lightbulb emoji"
|
|
123
|
+
},
|
|
124
|
+
"email_formatted": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"description": "Email content with email emoji"
|
|
127
|
+
},
|
|
128
|
+
"correct_feedback": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"description": "Positive feedback with checkmark emoji"
|
|
131
|
+
},
|
|
132
|
+
"wrong_feedback": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"description": "Helpful hint with X emoji"
|
|
135
|
+
},
|
|
136
|
+
"answer_formatted": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"description": "Formatted correct answer"
|
|
139
|
+
},
|
|
140
|
+
"xp_display": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"description": "XP display with gem emoji"
|
|
143
|
+
},
|
|
144
|
+
"key_phrase": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"description": "Key phrase with bold formatting (e.g., '**touch base**')"
|
|
147
|
+
},
|
|
148
|
+
"correct_pattern": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"description": "Pattern explanation with bold (e.g., '**Agree + suggest time**')"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"total_xp": {
|
|
158
|
+
"type": "integer",
|
|
159
|
+
"minimum": 30,
|
|
160
|
+
"maximum": 50,
|
|
161
|
+
"description": "Sum of all question XP values"
|
|
162
|
+
},
|
|
163
|
+
"passing_score": {
|
|
164
|
+
"type": "integer",
|
|
165
|
+
"minimum": 50,
|
|
166
|
+
"maximum": 100,
|
|
167
|
+
"default": 70,
|
|
168
|
+
"description": "Percentage needed to pass"
|
|
169
|
+
},
|
|
170
|
+
"display": {
|
|
171
|
+
"type": "object",
|
|
172
|
+
"description": "Emoji-enhanced display format for the entire quiz",
|
|
173
|
+
"properties": {
|
|
174
|
+
"header": {
|
|
175
|
+
"type": "string",
|
|
176
|
+
"description": "Quiz title with emoji (e.g., '📝 今日测验 | Daily Quiz')"
|
|
177
|
+
},
|
|
178
|
+
"date": {
|
|
179
|
+
"type": "string",
|
|
180
|
+
"description": "Date with calendar emoji"
|
|
181
|
+
},
|
|
182
|
+
"topic": {
|
|
183
|
+
"type": "string",
|
|
184
|
+
"description": "Topic tag with label emoji"
|
|
185
|
+
},
|
|
186
|
+
"instructions": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"description": "Instructions with target emoji"
|
|
189
|
+
},
|
|
190
|
+
"progress_bar": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"description": "Visual progress indicator"
|
|
193
|
+
},
|
|
194
|
+
"key_phrase_summary": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"description": "Summary of key phrase with translation (e.g., '🔑 Key Phrase: **touch base** = 快速沟通')"
|
|
197
|
+
},
|
|
198
|
+
"xp_summary": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"description": "XP and passing score summary"
|
|
201
|
+
},
|
|
202
|
+
"footer": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"description": "Encouraging footer message"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"generated": {
|
|
209
|
+
"type": "boolean",
|
|
210
|
+
"default": false,
|
|
211
|
+
"description": "Whether LLM content has been fully generated. CRITICAL: Set to true after generation to prevent re-generation"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|