@rookiestar/eng-lang-tutor 1.0.2 → 1.0.4
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.
Potentially problematic release.
This version of @rookiestar/eng-lang-tutor might be problematic. Click here for more details.
- package/CLAUDE.md +5 -4
- package/README.md +16 -1
- package/README_EN.md +16 -1
- package/SKILL.md +113 -92
- package/docs/OPENCLAW_DEPLOYMENT.md +7 -4
- package/package.json +1 -1
- package/requirements.txt +2 -0
- package/scripts/__pycache__/audio_composer.cpython-313.pyc +0 -0
- package/scripts/__pycache__/audio_converter.cpython-313.pyc +0 -0
- package/scripts/__pycache__/audio_enhancer.cpython-313.pyc +0 -0
- package/scripts/__pycache__/state_manager.cpython-313.pyc +0 -0
- package/scripts/__pycache__/utils.cpython-313.pyc +0 -0
- package/scripts/audio_composer.py +389 -0
- package/scripts/audio_converter.py +245 -0
- package/scripts/cli.py +223 -0
- package/scripts/constants.py +56 -0
- package/scripts/feishu_voice.py +421 -0
- package/scripts/gamification.py +48 -34
- package/scripts/scorer.py +14 -32
- package/scripts/state_manager.py +131 -207
- package/scripts/tts/__pycache__/__init__.cpython-313.pyc +0 -0
- package/scripts/tts/__pycache__/base.cpython-313.pyc +0 -0
- package/scripts/tts/__pycache__/manager.cpython-313.pyc +0 -0
- package/scripts/tts/manager.py +14 -4
- package/scripts/tts/providers/__pycache__/__init__.cpython-313.pyc +0 -0
- package/scripts/tts/providers/__pycache__/xunfei.cpython-313.pyc +0 -0
- package/scripts/tts/providers/xunfei.py +10 -1
- package/scripts/utils.py +78 -0
- package/templates/prompt_templates.md +47 -1235
- package/templates/prompts/display_guide.md +106 -0
- package/templates/prompts/initialization.md +213 -0
- package/templates/prompts/keypoint_generation.md +268 -0
- package/templates/prompts/output_rules.md +106 -0
- package/templates/prompts/quiz_generation.md +187 -0
- package/templates/prompts/responses.md +291 -0
- package/templates/prompts/shared_enums.md +97 -0
- package/templates/state_schema.json +1 -6
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Quiz Generation Template
|
|
2
|
+
|
|
3
|
+
> Template for generating daily quizzes based on knowledge points.
|
|
4
|
+
|
|
5
|
+
**Related Files:**
|
|
6
|
+
- [shared_enums.md](shared_enums.md) - Quiz types, XP values, CEFR levels
|
|
7
|
+
- [output_rules.md](output_rules.md) - JSON output rules, markdown formatting
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Quiz Generation Prompt
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
Based on today's knowledge point, generate a 3-question quiz calibrated to user's CEFR level.
|
|
15
|
+
|
|
16
|
+
## USER CONTEXT
|
|
17
|
+
- CEFR Level: {cefr_level} (A1=Beginner to C2=Proficient)
|
|
18
|
+
|
|
19
|
+
## KNOWLEDGE POINT
|
|
20
|
+
{keypoint_json}
|
|
21
|
+
|
|
22
|
+
## CEFR DIFFICULTY CALIBRATION
|
|
23
|
+
|
|
24
|
+
| Level | Question Characteristics |
|
|
25
|
+
|-------|-------------------------|
|
|
26
|
+
| A1-A2 | Simple recognition, obvious distractors, direct context matching |
|
|
27
|
+
| B1-B2 | Nuanced usage, subtle distractors, requires understanding context |
|
|
28
|
+
| C1-C2 | Complex scenarios, idiomatic variations, cultural nuance testing |
|
|
29
|
+
|
|
30
|
+
**For B1-B2 (most users):**
|
|
31
|
+
- Multiple choice: Distractors should be grammatically correct but contextually wrong
|
|
32
|
+
- Chinglish fix: Use subtle errors (preposition, article, word choice) not obvious mistakes
|
|
33
|
+
- Create NEW scenarios that differ from the keypoint examples
|
|
34
|
+
|
|
35
|
+
## QUESTION TYPE REQUIREMENTS (3 questions total)
|
|
36
|
+
1. **multiple_choice** (required): Test expression recognition - 10 XP
|
|
37
|
+
2. **chinglish_fix** (required): Identify and correct Chinglish - 15 XP
|
|
38
|
+
3. **fill_blank OR dialogue_completion** (random): Pick one randomly - 12 XP
|
|
39
|
+
|
|
40
|
+
## QUESTION GUIDELINES
|
|
41
|
+
|
|
42
|
+
### Multiple Choice (10 XP)
|
|
43
|
+
- 4 options (A, B, C, D)
|
|
44
|
+
- Only 1 correct answer
|
|
45
|
+
- **Distractors MUST be plausible** - grammatically correct but semantically wrong
|
|
46
|
+
- Test understanding of meaning or usage in a NEW context (not copied from keypoint)
|
|
47
|
+
- For B2+: Include one distractor that's "almost correct" to test nuance
|
|
48
|
+
|
|
49
|
+
### Chinglish Fix (15 XP)
|
|
50
|
+
- Show a sentence with Chinglish expressions
|
|
51
|
+
- **Create a NEW sentence** - NOT the example from the keypoint
|
|
52
|
+
- For B2+: Use subtle errors (wrong preposition, article misuse, slight word order)
|
|
53
|
+
- Include explanation in the answer
|
|
54
|
+
|
|
55
|
+
### Fill in the Blank (12 XP)
|
|
56
|
+
- Use "___" for the blank
|
|
57
|
+
- Provide word bank with 3 options
|
|
58
|
+
- **Create a NEW context/sentence** - NOT copied from keypoint
|
|
59
|
+
- Test the expression in a different situation
|
|
60
|
+
|
|
61
|
+
### Dialogue Completion (12 XP)
|
|
62
|
+
- Show partial dialogue with NEW context
|
|
63
|
+
- Ask what should come next
|
|
64
|
+
- Test natural conversation flow
|
|
65
|
+
|
|
66
|
+
## ⛔ CRITICAL PROHIBITIONS ⛔
|
|
67
|
+
|
|
68
|
+
1. **NEVER copy questions directly from keypoint content**
|
|
69
|
+
- Create NEW scenarios and contexts
|
|
70
|
+
- Change the situation while testing the same expression
|
|
71
|
+
|
|
72
|
+
2. **NEVER reveal the answer in hints or question text**
|
|
73
|
+
- Hint format: "💡 Think about what Americans say in this situation"
|
|
74
|
+
- FORBIDDEN: "💡 The answer is 'touch base'" or showing the phrase directly
|
|
75
|
+
|
|
76
|
+
3. **NEVER make distractors obviously wrong**
|
|
77
|
+
- All 4 options should sound plausible
|
|
78
|
+
- For B2+: At least one distractor should be a common learner error
|
|
79
|
+
|
|
80
|
+
## STRICT RULES
|
|
81
|
+
1. Output ONLY valid JSON - no markdown, no extra text
|
|
82
|
+
2. All questions must relate to today's knowledge point
|
|
83
|
+
3. **Difficulty MUST match CEFR level** - harder for B2+ users
|
|
84
|
+
4. Include encouraging feedback in display fields
|
|
85
|
+
5. Total XP should be around 35-40
|
|
86
|
+
6. **End sentences with proper punctuation** - periods for statements, question marks for questions
|
|
87
|
+
7. **Use NEW contexts** - never copy-paste from keypoint examples
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Output Schema
|
|
93
|
+
|
|
94
|
+
> **CRITICAL:** Display fields must NOT reveal answers before user responds.
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"quiz_date": "{today_date}",
|
|
99
|
+
"keypoint_fingerprint": "{fingerprint}",
|
|
100
|
+
"cefr_level": "{cefr_level}",
|
|
101
|
+
"questions": [
|
|
102
|
+
{
|
|
103
|
+
"id": 1,
|
|
104
|
+
"type": "multiple_choice",
|
|
105
|
+
"question": "The question text - MUST be a NEW context, not copied from keypoint",
|
|
106
|
+
"context": "NEW scenario description",
|
|
107
|
+
"options": ["A. ...", "B. ...", "C. ...", "D. ..."],
|
|
108
|
+
"correct_answer": "B",
|
|
109
|
+
"explanation": "Why this is correct...",
|
|
110
|
+
"xp_value": 10,
|
|
111
|
+
"display": {
|
|
112
|
+
"type_emoji": "🔤",
|
|
113
|
+
"type_name": "选择题 | Multiple Choice",
|
|
114
|
+
"question_formatted": "💬 {question}",
|
|
115
|
+
"context_formatted": "📱 {context}",
|
|
116
|
+
"options_formatted": ["⬜ A. ...", "⬜ B. ...", "⬜ C. ...", "⬜ D. ..."],
|
|
117
|
+
"hint": "💡 Think about the context - which fits naturally?",
|
|
118
|
+
"correct_feedback": "✅ Correct! **{key_phrase}** = {meaning}",
|
|
119
|
+
"wrong_feedback": "❌ Not quite. The answer was **{correct_answer}**. {explanation}",
|
|
120
|
+
"xp_display": "💎 +10 XP"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": 2,
|
|
125
|
+
"type": "chinglish_fix",
|
|
126
|
+
"question": "Fix this sentence - MUST be NEW sentence, not from keypoint",
|
|
127
|
+
"chinglish_sentence": "A NEW sentence with Chinglish error...",
|
|
128
|
+
"correct_answer": "The corrected version...",
|
|
129
|
+
"explanation": "Why the original was wrong...",
|
|
130
|
+
"xp_value": 15,
|
|
131
|
+
"display": {
|
|
132
|
+
"type_emoji": "🔧",
|
|
133
|
+
"type_name": "Chinglish 修正 | Fix the Chinglish",
|
|
134
|
+
"question_formatted": "🔧 What's wrong with this sentence?",
|
|
135
|
+
"sentence_formatted": "📝 \"{chinglish_sentence}\"",
|
|
136
|
+
"hint": "💡 How would an American say this naturally?",
|
|
137
|
+
"correct_feedback": "✅ Fixed! **{correct_phrase}** sounds much more natural!",
|
|
138
|
+
"wrong_feedback": "❌ Better: **{correct_sentence}**\n💡 {explanation}",
|
|
139
|
+
"xp_display": "💎 +15 XP"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": 3,
|
|
144
|
+
"type": "fill_blank",
|
|
145
|
+
"question": "Complete the sentence - MUST be NEW context",
|
|
146
|
+
"context": "NEW dialogue or situation with ___ blank",
|
|
147
|
+
"word_bank": ["phrase1", "phrase2", "phrase3"],
|
|
148
|
+
"correct_answer": "phrase1",
|
|
149
|
+
"explanation": "...",
|
|
150
|
+
"xp_value": 12,
|
|
151
|
+
"display": {
|
|
152
|
+
"type_emoji": "✏️",
|
|
153
|
+
"type_name": "填空题 | Fill in the Blank",
|
|
154
|
+
"question_formatted": "✏️ Fill in the blank:",
|
|
155
|
+
"context_formatted": "💬 {context_with_blank}",
|
|
156
|
+
"word_bank_formatted": "📦 Options: [ {opt1} | {opt2} | {opt3} ]",
|
|
157
|
+
"hint": "💡 Consider the formality and context.",
|
|
158
|
+
"correct_feedback": "✅ Perfect! **{answer}** fits perfectly here!",
|
|
159
|
+
"wrong_feedback": "❌ The answer was **{correct_answer}**. {explanation}",
|
|
160
|
+
"xp_display": "💎 +12 XP"
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
],
|
|
164
|
+
"total_xp": 37,
|
|
165
|
+
"passing_score": 70,
|
|
166
|
+
"display": {
|
|
167
|
+
"header": "📝 今日测验 | Daily Quiz",
|
|
168
|
+
"date": "📅 {quiz_date}",
|
|
169
|
+
"difficulty": "📊 Level: **{cefr_level}**",
|
|
170
|
+
"topic": "🏷️ Topic: **{topic_name}**",
|
|
171
|
+
"instructions": "🎯 3道小题,答对2道就过关!3 questions, get 2 right to pass!",
|
|
172
|
+
"progress_bar": "⬜⬜⬜ 0/3 questions",
|
|
173
|
+
"xp_summary": "💎 Total XP: {total_xp} | 🏆 Pass: 2/3 correct",
|
|
174
|
+
"footer": "───────────────────\n💪 Good luck! 加油! 🚀"
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Note:** Removed `key_phrase_summary` from display - it reveals the answer before quiz starts!
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## XP Values Summary
|
|
184
|
+
|
|
185
|
+
> See [shared_enums.md](shared_enums.md#quiz-question-types-题型) for full quiz type definitions.
|
|
186
|
+
|
|
187
|
+
**Daily Quiz:** 3 questions, ~37 XP, pass with 2/3 correct
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# Response Templates
|
|
2
|
+
|
|
3
|
+
> Templates for various response scenarios in the eng-lang-tutor skill.
|
|
4
|
+
|
|
5
|
+
**Related Files:**
|
|
6
|
+
- [shared_enums.md](shared_enums.md) - Level names, badges, quiz types
|
|
7
|
+
- [output_rules.md](output_rules.md) - JSON output rules, markdown formatting
|
|
8
|
+
- [display_guide.md](display_guide.md) - Emoji and formatting guidelines
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 1. Already Completed Responses
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"quiz_already_done": {
|
|
17
|
+
"display": {
|
|
18
|
+
"title": "✅ Already Completed!",
|
|
19
|
+
"message": "You've already finished today's quiz. Great job! 🎉",
|
|
20
|
+
"stats": "Your score: {score}/{total} | XP earned: {xp}",
|
|
21
|
+
"next_quiz": "Come back tomorrow at 10:45 PM for a new quiz!",
|
|
22
|
+
"alternative": "💡 Want to review? Say **errors** to see your wrong answers."
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 2. Not Available Responses
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"keypoint_not_found": {
|
|
35
|
+
"display": {
|
|
36
|
+
"title": "📅 No Keypoint Found",
|
|
37
|
+
"message": "No knowledge point exists for {date}.",
|
|
38
|
+
"hint": "Try **keypoint today** for today's content.",
|
|
39
|
+
"history": "Or say **keypoint history** to see recent keypoints."
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 2.5. Quiz Request Flow (CRITICAL)
|
|
48
|
+
|
|
49
|
+
> **NEVER tell user "will generate later" - ALWAYS generate immediately when user requests quiz.**
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
When user requests quiz:
|
|
53
|
+
1. Check if quiz already completed today (completion_status.quiz_completed_date == today)
|
|
54
|
+
→ YES: Show "Already completed" message
|
|
55
|
+
→ NO: Continue to step 2
|
|
56
|
+
|
|
57
|
+
2. Check if keypoint.json exists for today
|
|
58
|
+
→ NO: IMMEDIATELY generate keypoint via LLM (do NOT say "will notify later")
|
|
59
|
+
Save keypoint with generated=true
|
|
60
|
+
→ YES: Continue to step 3
|
|
61
|
+
|
|
62
|
+
3. Check if quiz.json exists and quiz.generated == true
|
|
63
|
+
→ NO: IMMEDIATELY generate quiz via LLM based on keypoint
|
|
64
|
+
Save quiz with generated=true
|
|
65
|
+
→ YES: Load existing quiz
|
|
66
|
+
|
|
67
|
+
4. Present quiz questions to user in ONE response
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**FORBIDDEN responses:**
|
|
71
|
+
- ❌ "今天还没有生成知识点,稍后会为您生成并通知您"
|
|
72
|
+
- ❌ "Quiz will be available later"
|
|
73
|
+
- ❌ "Please wait for the scheduled push"
|
|
74
|
+
|
|
75
|
+
**REQUIRED behavior:**
|
|
76
|
+
- ✅ Generate keypoint immediately via LLM if missing
|
|
77
|
+
- ✅ Generate quiz immediately via LLM
|
|
78
|
+
- ✅ Present quiz in the same response
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 3. Keypoint History Response
|
|
83
|
+
|
|
84
|
+
**When user says:** `keypoint history`, `知识点 历史`, `昨天`, `yesterday`
|
|
85
|
+
|
|
86
|
+
**Logic:**
|
|
87
|
+
1. Scan `~/.openclaw/state/eng-lang-tutor/daily/` directory for all `YYYY-MM-DD/keypoint.json` files
|
|
88
|
+
2. Sort by date descending (most recent first)
|
|
89
|
+
3. Extract `display.title` or `topic` from each keypoint
|
|
90
|
+
|
|
91
|
+
**Empty History Response:**
|
|
92
|
+
```markdown
|
|
93
|
+
📚 **知识点历史记录**
|
|
94
|
+
|
|
95
|
+
暂无历史记录。从今天开始学习吧!
|
|
96
|
+
|
|
97
|
+
💡 输入 **keypoint** 或 **知识点** 获取今日内容
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**With History Response:**
|
|
101
|
+
```markdown
|
|
102
|
+
📚 **知识点历史记录**
|
|
103
|
+
|
|
104
|
+
| 日期 | 主题 |
|
|
105
|
+
|------|------|
|
|
106
|
+
| 2026-02-21 | 🏢 Touch Base - 工作沟通 |
|
|
107
|
+
| 2026-02-20 | 🎮 GG - 游戏用语 |
|
|
108
|
+
| 2026-02-19 | 🗣️ Gonna/Wanna - 口语缩写 |
|
|
109
|
+
|
|
110
|
+
💡 输入 **keypoint 日期** 查看详情,如 `keypoint 2026-02-20`
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 4. Keypoint Display Template
|
|
116
|
+
|
|
117
|
+
> IMPORTANT: Use `**text**` for bold. Never use `~~strikethrough~~`. Output Markdown text directly, NOT JSON.
|
|
118
|
+
|
|
119
|
+
**Assembly Flow:**
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
{title}
|
|
123
|
+
|
|
124
|
+
| 主题 | **{topic_name}** |
|
|
125
|
+
|------|------------------|
|
|
126
|
+
| 正式度 | **{formality}** |
|
|
127
|
+
|
|
128
|
+
───────────────────
|
|
129
|
+
{scene_intro}
|
|
130
|
+
|
|
131
|
+
{scene_text}
|
|
132
|
+
|
|
133
|
+
───────────────────
|
|
134
|
+
{expressions_title}
|
|
135
|
+
|
|
136
|
+
{for each item in expressions_formatted:
|
|
137
|
+
{emoji} {phrase}
|
|
138
|
+
{pronunciation}
|
|
139
|
+
{usage}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
───────────────────
|
|
143
|
+
{alternatives_title}
|
|
144
|
+
|
|
145
|
+
{alternatives_formatted}
|
|
146
|
+
|
|
147
|
+
───────────────────
|
|
148
|
+
{chinglish_title}
|
|
149
|
+
|
|
150
|
+
{chinglish_formatted}
|
|
151
|
+
|
|
152
|
+
───────────────────
|
|
153
|
+
{examples_title}
|
|
154
|
+
|
|
155
|
+
{for each item in examples_formatted:
|
|
156
|
+
{situation_emoji} {situation}
|
|
157
|
+
{dialogue}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
───────────────────
|
|
161
|
+
{extended_title}
|
|
162
|
+
|
|
163
|
+
{extended_formatted}
|
|
164
|
+
|
|
165
|
+
───────────────────
|
|
166
|
+
{references_title}
|
|
167
|
+
|
|
168
|
+
{references_formatted}
|
|
169
|
+
|
|
170
|
+
───────────────────
|
|
171
|
+
{footer}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 5. Stats Display Template
|
|
177
|
+
|
|
178
|
+
```markdown
|
|
179
|
+
📊 **Your Learning Progress**
|
|
180
|
+
|
|
181
|
+
• 等级: **{level}** ({level_name})
|
|
182
|
+
• XP: **{current_xp}** / {next_level_xp} (**{progress}%**)
|
|
183
|
+
• 连胜: **{streak}** 天 (倍数: **{multiplier}x**)
|
|
184
|
+
• 正确率: **{correct_rate}%**
|
|
185
|
+
• 徽章: **{badges_count}**/6
|
|
186
|
+
• 宝石: **{gems}**
|
|
187
|
+
|
|
188
|
+
───────────────────
|
|
189
|
+
Keep it up! 💪
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
> See [shared_enums.md](shared_enums.md#activity-levels-活跃等级) for level names.
|
|
193
|
+
|
|
194
|
+
**Multiplier Calculation:** `1.0 + (streak * 0.05)`, max 2.0x
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 6. Config Display Template
|
|
199
|
+
|
|
200
|
+
```markdown
|
|
201
|
+
⚙️ **Your Settings**
|
|
202
|
+
|
|
203
|
+
• CEFR 等级: **{cefr_level}**
|
|
204
|
+
• 主题偏好: **{topics_list}**
|
|
205
|
+
• 导师风格: **{tutor_style}**
|
|
206
|
+
• 口语占比: **{oral_ratio}%**
|
|
207
|
+
• 知识点推送: **{keypoint_time}**
|
|
208
|
+
• Quiz 推送: **{quiz_time}**
|
|
209
|
+
|
|
210
|
+
───────────────────
|
|
211
|
+
💡 Say **set level B2** to change your level
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## 7. Errors Display Template (Paginated)
|
|
217
|
+
|
|
218
|
+
```markdown
|
|
219
|
+
📓 **Error Notebook**
|
|
220
|
+
|
|
221
|
+
📊 统计: **{total}** 条错题 (未复习: **{unreviewed}**)
|
|
222
|
+
|
|
223
|
+
❌ 最近 **5** 条:
|
|
224
|
+
|
|
225
|
+
**{date_1}**
|
|
226
|
+
Q: {question_1}
|
|
227
|
+
Your answer: {user_answer_1}
|
|
228
|
+
✅ Correct: **{correct_answer_1}**
|
|
229
|
+
|
|
230
|
+
**{date_2}**
|
|
231
|
+
Q: {question_2}
|
|
232
|
+
Your answer: {user_answer_2}
|
|
233
|
+
✅ Correct: **{correct_answer_2}**
|
|
234
|
+
|
|
235
|
+
[显示 5 条,第 1/{total_pages} 页]
|
|
236
|
+
|
|
237
|
+
───────────────────
|
|
238
|
+
📄 输入 **"错题本 更多"** 查看下5条
|
|
239
|
+
📄 输入 **"错题本 2026-02"** 查看特定月份
|
|
240
|
+
📄 输入 **"错题本 随机5"** 随机复习5条
|
|
241
|
+
📄 输入 **"错题本 统计"** 查看完整统计
|
|
242
|
+
📄 输入 **"错题本 复习"** 开始错题复习
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Pagination Commands:**
|
|
246
|
+
- `errors` / `错题本` → Show recent 5 errors
|
|
247
|
+
- `errors more` / `错题本 更多` → Next 5 errors
|
|
248
|
+
- `errors page N` → Go to page N
|
|
249
|
+
- `errors 2026-02` → Filter by month
|
|
250
|
+
- `errors random 5` → Random 5 for review
|
|
251
|
+
- `errors stats` → Show statistics only
|
|
252
|
+
- `errors review` → Start interactive review
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 8. Quiz Result Display Template
|
|
257
|
+
|
|
258
|
+
```markdown
|
|
259
|
+
📊 **Quiz Results**
|
|
260
|
+
|
|
261
|
+
• 分数: **{correct}/{total}** (**{accuracy}%**)
|
|
262
|
+
• 状态: {status_emoji} {status_text}
|
|
263
|
+
• XP 获得: **+{total_xp} XP**
|
|
264
|
+
• 连胜: **{old_streak}** → **{new_streak}** 天
|
|
265
|
+
• 总 XP: **{total_xp_earned}**
|
|
266
|
+
|
|
267
|
+
💎 XP 明细:
|
|
268
|
+
• Base: **{base_xp} XP**
|
|
269
|
+
• Streak Bonus: **{multiplier}x** ({streak} day streak)
|
|
270
|
+
{perfect_bonus}
|
|
271
|
+
|
|
272
|
+
───────────────────
|
|
273
|
+
📝 Come back tomorrow for a new quiz!
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Variables:**
|
|
277
|
+
- `{status_emoji}`: ✅ for passed, ❌ for failed
|
|
278
|
+
- `{status_text}`: "Passed! Great job! 🎉" or "Keep trying! 💪"
|
|
279
|
+
- `{perfect_bonus}`: "• Perfect Bonus: **+20 XP**" (only if 100% correct)
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## 9. Output Format Rules
|
|
284
|
+
|
|
285
|
+
> See [output_rules.md](output_rules.md) for complete formatting rules.
|
|
286
|
+
|
|
287
|
+
**Quick Reference:**
|
|
288
|
+
- **Bold syntax**: Use `**text**` for bold
|
|
289
|
+
- **Never use** `~~strikethrough~~` - use ❌ emoji instead
|
|
290
|
+
- **Emojis**: Include at the start of each section
|
|
291
|
+
- **Punctuation**: End sentences properly (`.` or `?` or `!`)
|
|
@@ -0,0 +1,97 @@
|
|
|
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
|
+
| Level | 中文名 | 描述 | Quiz 特点 |
|
|
24
|
+
|-------|--------|------|-----------|
|
|
25
|
+
| A1 | 入门 | 基础词汇和简单句 | 简单识别,明显干扰项 |
|
|
26
|
+
| A2 | 初级 | 日常表达和基础对话 | 直接上下文匹配 |
|
|
27
|
+
| B1 | 中级 | 熟悉话题的连贯表达 | 细微用法区别 |
|
|
28
|
+
| B2 | 中高级 | 复杂话题的深入讨论 | 隐含干扰项,需理解上下文 |
|
|
29
|
+
| C1 | 高级 | 流利自然的表达 | 复杂场景,习语变体 |
|
|
30
|
+
| C2 | 精通 | 接近母语水平 | 文化细微差别测试 |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Tutor Styles 导师风格
|
|
35
|
+
|
|
36
|
+
| Style | 中文名 | 语气特点 | 示例 |
|
|
37
|
+
|-------|--------|----------|------|
|
|
38
|
+
| humorous | 幽默 | 轻松愉快,带梗和调侃 | "这个表达老外听了会笑死" |
|
|
39
|
+
| rigorous | 严谨 | 专业分析,深入讲解 | "从语法角度分析..." |
|
|
40
|
+
| casual | 随意 | 自然口语,朋友间聊天 | "平时老美就这么说" |
|
|
41
|
+
| professional | 专业 | 正式商务,职场场景 | "在商务邮件中建议使用..." |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Quiz Question Types 题型
|
|
46
|
+
|
|
47
|
+
| Type | 中文名 | XP | 描述 | 每日数量 |
|
|
48
|
+
|------|--------|-----|------|----------|
|
|
49
|
+
| multiple_choice | 选择题 | 10 | 四选一,测试表达识别 | 1 (必选) |
|
|
50
|
+
| chinglish_fix | Chinglish修正 | 15 | 识别并修正中式英语 | 1 (必选) |
|
|
51
|
+
| fill_blank | 填空题 | 12 | 完成对话中的空白 | 0-1 (随机) |
|
|
52
|
+
| dialogue_completion | 对话补全 | 15 | 选择合适的对话回应 | 0-1 (随机) |
|
|
53
|
+
|
|
54
|
+
**每日 Quiz 结构:** 3 题,约 37 XP,答对 2 题即过关
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Category Types 类别
|
|
59
|
+
|
|
60
|
+
| Category | 中文名 | 描述 |
|
|
61
|
+
|----------|--------|------|
|
|
62
|
+
| oral | 口语 | 日常口语表达,非正式场合 |
|
|
63
|
+
| written | 书面 | 正式书面表达,商务邮件、报告 |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Formality Levels 正式程度
|
|
68
|
+
|
|
69
|
+
| Level | 中文名 | Emoji | 场景示例 |
|
|
70
|
+
|-------|--------|-------|----------|
|
|
71
|
+
| casual | 随意 | 👕 | 朋友聊天、社交媒体 |
|
|
72
|
+
| neutral | 中性 | 👔 | 同事交流、日常沟通 |
|
|
73
|
+
| formal | 正式 | 🤵 | 商务会议、正式邮件 |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Badge Types 徽章
|
|
78
|
+
|
|
79
|
+
| Badge ID | 中文名 | 触发条件 | 宝石奖励 |
|
|
80
|
+
|----------|--------|----------|----------|
|
|
81
|
+
| first_steps | 初次尝试 | 完成首次 Quiz | 10 |
|
|
82
|
+
| week_warrior | 周末战士 | 7天连胜 | 25 |
|
|
83
|
+
| month_master | 月度大师 | 30天连胜 | 100 |
|
|
84
|
+
| perfect_10 | 完美十连 | 10次满分 Quiz | 50 |
|
|
85
|
+
| vocab_hunter | 词汇猎人 | 学习100个表达 | 75 |
|
|
86
|
+
| error_slayer | 错题克星 | 清除30个错题 | 30 |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Activity Levels 活跃等级
|
|
91
|
+
|
|
92
|
+
| Stage | 中文名 | Level | XP 范围 |
|
|
93
|
+
|-------|--------|-------|---------|
|
|
94
|
+
| Starter | 启程者 | 1-5 | 0-350 |
|
|
95
|
+
| Traveler | 行路人 | 6-10 | 550-2000 |
|
|
96
|
+
| Explorer | 探索者 | 11-15 | 2600-6000 |
|
|
97
|
+
| Pioneer | 开拓者 | 16-20 | 7200-15000 |
|
|
@@ -155,13 +155,8 @@
|
|
|
155
155
|
},
|
|
156
156
|
"progress": {
|
|
157
157
|
"type": "object",
|
|
158
|
-
"required": ["
|
|
158
|
+
"required": ["total_quizzes", "correct_rate", "last_study_date"],
|
|
159
159
|
"properties": {
|
|
160
|
-
"total_points": {
|
|
161
|
-
"type": "integer",
|
|
162
|
-
"minimum": 0,
|
|
163
|
-
"description": "Total points earned"
|
|
164
|
-
},
|
|
165
160
|
"total_quizzes": {
|
|
166
161
|
"type": "integer",
|
|
167
162
|
"minimum": 0,
|