Files
English/kouyu_english/assets/courses/A1/A1-U10.json
T
shenleiandClaude Opus 4.8 febfd30f49 feat: A1 短材料复现本单元理解词,并加入黑夜模式
课程内容
- 重写全部 21 个 A1 单元的听读材料,把本单元理解词织进听/读文本,
  单元内理解词复现率从约 20% 提升到约 77%(各单元 56–96%)。
- 修正 U01 房间号与机场大巴同为 thirty 的撞车(改为 17/30/40)。
- 校验器容差按级别读取(A1 为 8%),materials 覆盖率、字数、
  选项子串等校验全部通过;course_content_test 通过。

黑夜模式
- app_theme 拆分明/暗两套调色板,AppColors 随亮度切换;
  main 用 theme/darkTheme/themeMode + builder 镜像已解析亮度;
  主题偏好持久化到快照;进度页新增“外观主题”切换。

文档
- COURSE-PACK-JSON.md 更新 A1 词池覆盖(840/933)与材料复现约定。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 11:16:09 +09:00

913 lines
24 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schemaVersion": 1,
"id": "A1-U10",
"revision": 1,
"level": "A1",
"title": "打车",
"categories": [
"旅行"
],
"canDo": "说目的地、确认价格或路线",
"status": "draft",
"meta": {
"draftedBy": "claude-opus-5",
"draftedAt": "2026-09-17",
"sources": [
"CEFR-J Vocabulary Profile 1.5",
"CEFR-J Grammar Profile 20180315"
],
"reviews": [],
"frozenAt": null
},
"names": [],
"grammar": [
{
"id": "117",
"use": "active"
},
{
"id": "123",
"use": "active"
},
{
"id": "246",
"use": "active"
},
{
"id": "146",
"use": "receptive"
},
{
"id": "120",
"use": "receptive"
}
],
"coreItems": [
{
"id": "A1-U10-P01",
"type": "phrase",
"en": "Take me to the airport, please.",
"zh": "请带我去机场。",
"sceneWord": false,
"match": [
[
"take me to",
"to the airport",
"to the train station",
"to the station",
"to the hotel",
"to this address"
]
],
"example": {
"en": "To the train station, please.",
"zh": "请去火车站。"
},
"review": {
"prompt": "上车后告诉司机去这个地址。"
}
},
{
"id": "A1-U10-W01",
"type": "word",
"en": "taxi",
"zh": "出租车",
"sceneWord": false,
"match": [
[
"taxi"
]
],
"example": {
"en": "Let's take a taxi.",
"zh": "我们打车吧。"
},
"review": {
"prompt": "说“一辆出租车”。"
}
},
{
"id": "A1-U10-P02",
"type": "phrase",
"en": "How much is it to the airport?",
"zh": "去机场多少钱?",
"sceneWord": false,
"match": [
[
"how much is it to",
"how much to"
]
],
"example": {
"en": "How much is it to the station?",
"zh": "去车站多少钱?"
},
"review": {
"prompt": "上车前问去市中心要多少钱。"
}
},
{
"id": "A1-U10-P03",
"type": "phrase",
"en": "How long does it take?",
"zh": "要多长时间?",
"sceneWord": false,
"match": [
[
"how long"
]
],
"example": {
"en": "How long does it take to the airport?",
"zh": "去机场要多长时间?"
},
"review": {
"prompt": "问司机到酒店要多久。"
}
},
{
"id": "A1-U10-P04",
"type": "phrase",
"en": "Can you stop here, please?",
"zh": "请在这里停车。",
"sceneWord": false,
"match": [
[
"stop here",
"stop at",
"stop in front of"
]
],
"example": {
"en": "Stop at the corner, please.",
"zh": "请在拐角停车。"
},
"review": {
"prompt": "到了,请司机在这里停车。"
}
},
{
"id": "A1-U10-P05",
"type": "phrase",
"en": "I'm in a hurry.",
"zh": "我赶时间。",
"sceneWord": false,
"match": [
[
"in a hurry"
]
],
"example": {
"en": "Sorry, I'm in a hurry.",
"zh": "抱歉,我赶时间。"
},
"review": {
"prompt": "告诉司机你赶时间。"
}
},
{
"id": "A1-U10-P06",
"type": "phrase",
"en": "Please use the meter.",
"zh": "请打表。",
"sceneWord": true,
"sceneReason": "meter 在 CEFR-J 为 A2,但在国外打车要求打表很重要",
"match": [
[
"meter"
]
],
"example": {
"en": "Can you use the meter, please?",
"zh": "可以打表吗?"
},
"review": {
"prompt": "司机不打表,请他打表。"
}
},
{
"id": "A1-U10-P07",
"type": "phrase",
"en": "Can you help me with my suitcase?",
"zh": "能帮我拿一下行李箱吗?",
"sceneWord": true,
"sceneReason": "suitcase 在 CEFR-J 为 A2,但坐出租车去机场、酒店时常常用到",
"match": [
[
"suitcase"
]
],
"example": {
"en": "My suitcase is very heavy.",
"zh": "我的行李箱很重。"
},
"review": {
"prompt": "请司机帮你拿行李箱。"
}
},
{
"id": "A1-U10-P08",
"type": "phrase",
"en": "Is this the right way?",
"zh": "这条路对吗?",
"sceneWord": false,
"match": [
[
"right way",
"wrong way"
]
],
"example": {
"en": "Is this the right way to the museum?",
"zh": "这是去博物馆的路吗?"
},
"review": {
"prompt": "担心司机走错路,问这条路对不对。"
}
},
{
"id": "A1-U10-P09",
"type": "phrase",
"en": "Keep the change.",
"zh": "不用找了。",
"sceneWord": false,
"match": [
[
"keep the change"
]
],
"example": {
"en": "Here's twenty dollars. Keep the change.",
"zh": "这是二十美元,不用找了。"
},
"review": {
"prompt": "付钱时告诉司机不用找零。"
}
},
{
"id": "A1-U10-W02",
"type": "word",
"en": "traffic",
"zh": "路上的车辆;交通",
"sceneWord": true,
"sceneReason": "traffic 在 CEFR-J 为 A2,但打车时经常要听懂“堵车”",
"match": [
[
"traffic"
]
],
"example": {
"en": "There's a lot of traffic today.",
"zh": "今天路上车很多。"
},
"review": {
"prompt": "说路上车很多。"
}
},
{
"id": "A1-U10-P10",
"type": "phrase",
"en": "Please drive carefully.",
"zh": "请小心开车。",
"sceneWord": false,
"match": [
[
"drive carefully",
"drive slowly"
]
],
"example": {
"en": "Please drive slowly.",
"zh": "请开慢一点。"
},
"review": {
"prompt": "司机开得太快,请他小心开车。"
}
}
],
"receptiveWords": [
{
"id": "A1-U10-R01",
"en": "careful",
"zh": "小心的"
},
{
"id": "A1-U10-R02",
"en": "quickly",
"zh": "快速地"
},
{
"id": "A1-U10-R03",
"en": "front",
"zh": "前面的"
},
{
"id": "A1-U10-R04",
"en": "back",
"zh": "后面"
},
{
"id": "A1-U10-R05",
"en": "pocket",
"zh": "口袋"
},
{
"id": "A1-U10-R06",
"en": "busy",
"zh": "忙的;繁忙的"
},
{
"id": "A1-U10-R07",
"en": "highway",
"zh": "公路;高速公路"
},
{
"id": "A1-U10-R08",
"en": "radio",
"zh": "收音机;电台"
},
{
"id": "A1-U10-R09",
"en": "accident",
"zh": "事故"
},
{
"id": "A1-U10-R10",
"en": "jam",
"zh": "堵塞"
},
{
"id": "A1-U10-R11",
"en": "correct",
"zh": "正确的"
},
{
"id": "A1-U10-R12",
"en": "different",
"zh": "不同的"
},
{
"id": "A1-U10-R13",
"en": "place",
"zh": "地方"
},
{
"id": "A1-U10-R14",
"en": "already",
"zh": "已经"
},
{
"id": "A1-U10-R15",
"en": "almost",
"zh": "几乎;快要"
},
{
"id": "A1-U10-R16",
"en": "soon",
"zh": "很快"
},
{
"id": "A1-U10-R17",
"en": "yet",
"zh": "还(没)"
},
{
"id": "A1-U10-R18",
"en": "outside",
"zh": "外面"
},
{
"id": "A1-U10-R19",
"en": "entrance",
"zh": "入口"
},
{
"id": "A1-U10-R20",
"en": "gate",
"zh": "大门"
},
{
"id": "A1-U10-R21",
"en": "belt",
"zh": "带子(seat belt 安全带)"
},
{
"id": "A1-U10-R22",
"en": "center",
"zh": "中心"
},
{
"id": "A1-U10-R23",
"en": "famous",
"zh": "著名的"
},
{
"id": "A1-U10-R24",
"en": "tonight",
"zh": "今晚"
}
],
"segments": [
{
"id": "A1-U10-S1",
"title": "说目的地、问价钱和时间",
"minutes": 13,
"itemIds": [
"A1-U10-P01",
"A1-U10-W01",
"A1-U10-P02",
"A1-U10-P03",
"A1-U10-P05"
],
"listening": {
"text": "Hi. To the airport, please. Sure. How much is it to the airport? About forty dollars. How long does it take? Thirty minutes. But there is a lot of traffic now.",
"question": "去机场大约多少钱?",
"options": [
"四十美元左右",
"三十美元左右",
"十四美元左右"
]
},
"speaking": [
{
"text": "Take me to the airport, please."
},
{
"text": "Take me to this address, please."
},
{
"text": "How much is it to the station?"
},
{
"text": "How long does it take?",
"tip": "does it 连读,take 重读"
},
{
"text": "I'm in a hurry."
}
],
"reading": {
"text": "TAXI\nPlease wait here for a taxi.\nTo the city center: about $45, 40 minutes.\nTo the train station: about $30, 25 minutes.\nAll taxis use the meter. Pay by cash or card.\nPlease use your seat belt.",
"question": "从这里到火车站大约要多久?",
"options": [
"二十五分钟",
"四十分钟",
"三十分钟"
]
},
"writing": {
"prompt": "写两句话:告诉司机去机场,再问要多久。",
"example": "To the airport, please. How long does it take?",
"itemIds": [
"A1-U10-P01",
"A1-U10-P03"
]
},
"independent": {
"prompt": "你要打车回酒店,用英语说目的地、问价格和时间。",
"itemIds": [
"A1-U10-P01",
"A1-U10-P02",
"A1-U10-P03"
]
}
},
{
"id": "A1-U10-S2",
"title": "打表、确认路线",
"minutes": 12,
"itemIds": [
"A1-U10-P06",
"A1-U10-P08",
"A1-U10-W02",
"A1-U10-P10"
],
"listening": {
"text": "Please use the meter. OK. Is this the right way to the museum? Yes, but there is a lot of traffic on the bridge. We can take the highway. It's fast.",
"question": "司机为什么要走公路?",
"options": [
"桥上车很多",
"桥上有事故",
"公路更便宜"
]
},
"speaking": [
{
"text": "Please use the meter.",
"tip": "meter 读作 /ˈmiːtə/"
},
{
"text": "Is this the right way?"
},
{
"text": "There's a lot of traffic."
},
{
"text": "Please drive carefully."
}
],
"reading": {
"text": "Taxi tips\nTake a taxi from the taxi stop at the gate.\nSay, \"Please use the meter.\"\nHave the address on your phone or in your pocket.\nIs it a different way? Ask the driver, \"Is this the right way?\"",
"question": "应该在哪里坐出租车?",
"options": [
"大门口的出租车站",
"路边随便拦车",
"酒店里面"
]
},
"writing": {
"prompt": "写两句话:请司机打表,再问路对不对。",
"example": "Please use the meter. Is this the right way?",
"itemIds": [
"A1-U10-P06",
"A1-U10-P08"
]
},
"independent": {
"prompt": "用英语说路上车很多,请司机小心开车。",
"itemIds": [
"A1-U10-P10",
"A1-U10-W02"
]
}
},
{
"id": "A1-U10-S3",
"title": "停车、付钱、拿行李",
"minutes": 11,
"itemIds": [
"A1-U10-P04",
"A1-U10-P07",
"A1-U10-P09"
],
"listening": {
"text": "Can you stop here, please? Sure. That's twenty dollars. Here you are, thirty. Keep the change. Thank you. Can you help me with my suitcase? Sure.",
"question": "乘客给了司机多少钱?",
"options": [
"三十美元",
"二十美元",
"五十美元"
]
},
"speaking": [
{
"text": "Can you stop here, please?"
},
{
"text": "Stop at the corner, please."
},
{
"text": "Keep the change."
},
{
"text": "Can you help me with my suitcase?",
"tip": "suitcase 读作 /ˈsuːtkeɪs/"
}
],
"reading": {
"text": "Anna: Where are you?\nBen: I'm in a taxi. We are almost at the hotel.\nAnna: Great. The hotel entrance is on the other side. Ask the driver to stop in front of the hotel.\nBen: OK. See you soon.",
"question": "应该让司机停在哪里?",
"options": [
"in front of the hotel",
"on the other side",
"at the corner"
]
},
"writing": {
"prompt": "写两句话:请司机在这里停车,再说不用找零。",
"example": "Can you stop here, please? Keep the change.",
"itemIds": [
"A1-U10-P04",
"A1-U10-P09"
]
},
"independent": {
"prompt": "到了酒店,用英语请司机停车、帮你拿行李箱,再付钱。",
"itemIds": [
"A1-U10-P04",
"A1-U10-P07",
"A1-U10-P09"
]
}
}
],
"scenes": [
{
"id": "A1-U10-C1",
"kind": "main",
"title": "从机场打车去酒店",
"learnerRole": "乘客",
"aiRole": "出租车司机",
"setting": "你在机场坐上一辆出租车,要去市中心的酒店。",
"turns": [
{
"ai": "Hello! Where to? Please put your bag in the back.",
"goal": "告诉司机去城市酒店",
"model": "Take me to City Hotel, please.",
"zh": "请带我去城市酒店。",
"itemIds": [
"A1-U10-P01"
]
},
{
"ai": "City Hotel. OK.",
"goal": "问多少钱、要多久",
"model": "How much is it to the hotel? How long does it take?",
"zh": "去酒店多少钱?要多久?",
"itemIds": [
"A1-U10-P02",
"A1-U10-P03"
]
},
{
"ai": "About forty dollars. Forty minutes, but there is a lot of traffic today.",
"goal": "说你赶时间,请司机打表",
"model": "I'm in a hurry. Please use the meter.",
"zh": "我赶时间。请打表。",
"itemIds": [
"A1-U10-P05",
"A1-U10-P06"
]
},
{
"ai": "Sure. There is an accident on the bridge, and a traffic jam. Let's take the highway. It's fast.",
"goal": "过了一会儿,问路对不对",
"model": "Is this the right way?",
"zh": "这条路对吗?",
"itemIds": [
"A1-U10-P08"
]
},
{
"ai": "Yes, it's correct. Your hotel is in a famous place, near the river. It's almost here.",
"goal": "请司机开慢一点、小心开",
"model": "OK. Please drive carefully.",
"zh": "好的。请小心开车。",
"itemIds": [
"A1-U10-P10"
]
},
{
"ai": "Here is City Hotel.",
"goal": "请司机在这里停车,并帮你拿行李箱",
"model": "Can you stop here and help me with my suitcase?",
"zh": "能在这里停车,帮我拿一下行李箱吗?",
"itemIds": [
"A1-U10-P04",
"A1-U10-P07"
]
}
]
},
{
"id": "A1-U10-C2",
"kind": "variant",
"title": "打车赶火车",
"learnerRole": "乘客",
"aiRole": "出租车司机",
"setting": "你快赶不上火车了,在街上拦了一辆出租车。",
"turns": [
{
"ai": "Hi. It's cold outside! Where are you going?",
"goal": "说去火车站,你赶时间",
"model": "To the train station, please. I'm in a hurry.",
"zh": "请去火车站。我赶时间。",
"itemIds": [
"A1-U10-P01",
"A1-U10-P05"
]
},
{
"ai": "OK. Be careful with the door. What time is your train?",
"goal": "说十点,问要多久",
"model": "At ten. How long does it take?",
"zh": "十点。要多久?",
"itemIds": [
"A1-U10-P03"
]
},
{
"ai": "About fifteen minutes. There is a lot of traffic on the bridge.",
"goal": "问有没有别的路",
"model": "A lot of traffic? Is there another way?",
"zh": "车很多?有别的路吗?",
"itemIds": [
"A1-U10-W02"
]
},
{
"ai": "Yes. We can go through the park. I can drive quickly.",
"goal": "请司机小心开车",
"model": "Great, but please drive carefully.",
"zh": "太好了,不过请小心开车。",
"itemIds": [
"A1-U10-P10"
]
},
{
"ai": "Here is the station, and you're not late yet. That's twelve dollars.",
"goal": "付十五美元,不用找零",
"model": "Here's fifteen. Keep the change.",
"zh": "这是十五美元。不用找了。",
"itemIds": [
"A1-U10-P09"
]
}
]
},
{
"id": "A1-U10-C3",
"kind": "variant",
"title": "司机不打表",
"learnerRole": "乘客",
"aiRole": "出租车司机",
"setting": "晚上你在酒店门口打车去一家餐厅,但司机不想打表。",
"turns": [
{
"ai": "Hi. Taxi? It's busy tonight.",
"goal": "说要打车,给地址",
"model": "Yes, a taxi, please. Take me to this address.",
"zh": "是的,要打车。请带我去这个地址。",
"itemIds": [
"A1-U10-W01",
"A1-U10-P01"
]
},
{
"ai": "That restaurant? Twenty dollars.",
"goal": "请司机打表",
"model": "Please use the meter.",
"zh": "请打表。",
"itemIds": [
"A1-U10-P06"
]
},
{
"ai": "The meter doesn't work today. It's the same price.",
"goal": "问要多久",
"model": "How long does it take?",
"zh": "要多长时间?",
"itemIds": [
"A1-U10-P03"
]
},
{
"ai": "Ten minutes. Do you want the radio or some music?",
"goal": "说太贵了,请司机在这里停车,你换一辆车",
"model": "No, thanks. Can you stop here, please? I want a different taxi.",
"zh": "不用了,谢谢。请在这里停车,我换一辆车。",
"itemIds": [
"A1-U10-P04",
"A1-U10-W01"
]
},
{
"ai": "OK, OK. The meter works now. It's already on.",
"goal": "回应,再问这条路对不对",
"model": "Thank you. Is this the right way to the restaurant?",
"zh": "谢谢。这是去餐厅的路吗?",
"itemIds": [
"A1-U10-P08"
]
}
]
}
],
"tasks": [
{
"id": "A1-U10-T1",
"sceneId": "A1-U10-C1",
"goal": "从机场打车去酒店:说目的地、问价格和时间、要求打表、确认路线、下车拿行李",
"itemIds": [
"A1-U10-P01",
"A1-U10-P02",
"A1-U10-P03",
"A1-U10-P05",
"A1-U10-P06",
"A1-U10-P08",
"A1-U10-P10",
"A1-U10-P04",
"A1-U10-P07"
],
"slots": [
"目的地",
"价格",
"路线"
]
},
{
"id": "A1-U10-T2",
"sceneId": "A1-U10-C2",
"goal": "赶火车时说明赶时间,问时间和路线,付钱下车",
"itemIds": [
"A1-U10-P01",
"A1-U10-P05",
"A1-U10-P03",
"A1-U10-W02",
"A1-U10-P10",
"A1-U10-P09"
],
"slots": [
"目的地",
"时间",
"付款"
]
},
{
"id": "A1-U10-T3",
"sceneId": "A1-U10-C3",
"goal": "司机不打表时坚持打表,必要时换车",
"itemIds": [
"A1-U10-W01",
"A1-U10-P01",
"A1-U10-P06",
"A1-U10-P03",
"A1-U10-P04",
"A1-U10-P08"
],
"slots": [
"目的地",
"打表"
]
}
],
"materials": [
{
"id": "A1-U10-M1",
"mode": "listening",
"title": "打车去机场",
"text": "Hello, taxi? Good. Please take me to the airport quickly; I'm in a hurry. Is this the right way? Please use the meter. My bag is in the back; my phone is in my pocket. How much is it, and how long does it take? About thirty minutes? The traffic is busy tonight. The radio says there is an accident on the highway, so maybe there is a jam. Please drive carefully. Are we almost there? We are near the airport gate now. You can stop here at the entrance. Keep the change. Thank you!",
"glosses": {
"bad": "糟糕的",
"meter": "计价器",
"maybe": "也许"
},
"questions": [
{
"type": "gist",
"question": "说话人要去哪里?",
"options": [
"机场",
"火车站",
"酒店"
]
},
{
"type": "detail",
"question": "收音机里说高速路上怎么了?",
"options": [
"出了事故,可能堵车",
"天气很好",
"没有车"
]
}
]
},
{
"id": "A1-U10-M2",
"mode": "reading",
"title": "读一段对话:打车去酒店",
"text": "Ben: Take me to this hotel, please. Can you use the meter?\nDriver: Sure. It's about twenty minutes, but the road is busy.\nBen: I'm in a hurry. Is this the right way? Is it the correct road?\nDriver: Yes, but there is a traffic jam near the city center. Let's take a different way.\nBen: OK. Please drive carefully. Are we almost there?\nDriver: Almost. The hotel is just in front of us. We arrive soon.\nBen: Great. Can you stop at the entrance? Please put my suitcase on the ground; don't drop it.\nDriver: Of course. That's fifteen dollars.\nBen: Here is twenty. Keep the change. Is the airport far from here for tonight?\nDriver: Not far. Call me anytime. Be careful with your bag!\nBen: Thank you!",
"glosses": {
"tomorrow": "明天",
"course": "of course 当然",
"different": "不同的",
"ground": "地面",
"anytime": "随时",
"call": "打电话",
"drop": "掉落"
},
"questions": [
{
"type": "detail",
"question": "司机说路上情况怎么样?",
"options": [
"很堵,要换条路",
"路很空",
"下雨了"
]
},
{
"type": "detail",
"question": "车费多少钱?",
"options": [
"十五美元",
"二十美元",
"三十美元"
]
}
]
}
],
"excluded": [
{
"en": "trunk / boot / luggage",
"reason": "B1B2A1 用 suitcase 表达行李"
},
{
"en": "route",
"reason": "B2A1 用 the right way 确认路线"
}
]
}