就绪
成功: 0 失败: 0

# L1-S2-U14-L1 到你上学啦 (组件录入测试-全量)

生成时间: 2026-05-07 11:31:33 模型: doubao-seed-2.0-pro Wiki: AEPJwf0DUiDkWska4SbceSAbnyc
42
总组件
38
成功
3
失败
1
跳过
1 对话朗读 cId: 0000800 mid_dialog_repeat
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | [ { "type": "user", "content": "Great!" }, { "type": "user", "content": "Oh, there's no time left." } ]
imgShowTimingList | [ "content" ]
img |
question | { "type": "user", "content": "Let's go to school now." }
postDialog | []

{ "cType": "mid_dialog_repeat", "cId": "0000800", "title": "表示大家一起上学", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [ { "type": "user", "content": "Great!" }, { "type": "user", "content": "Oh, there's no time left." } ], "imgShowTimingList": [ "content" ], "img": "0000800.png", "question": { "type": "user", "content": "Let's go to school now." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_repeat", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
2 对话挖空 cId: 0000801 mid_dialog_fillin
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | [ { "type": "user", "content": "Peter, Eva!" } ]
imgShowTimingList | []
question | { "type": "user", "desc": "Let's go to ___.", "content": "Let's go to school." }
optionGroupList | [ { "optionList": [ { "option": "school", "needAudio": true }, { "option": "zoo", "needAudio": true } ], "answer": [ 0 ] } ]
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Vicky", "content": "I don't think so." }
postDialog | []

{ "cType": "mid_dialog_fillin", "cId": "0000801", "title": "表示一起去上学", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [ { "type": "user", "content": "Peter, Eva!" } ], "imgShowTimingList": [], "question": { "type": "user", "desc": "Let's go to ___.", "content": "Let's go to school." }, "optionGroupList": [ { "optionList": [ { "option": "school", "needAudio": true }, { "option": "zoo", "needAudio": true } ], "answer": [ 0 ] } ], "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Vicky", "content": "I don't think so." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_fillin", "cId": "0000801", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
3 对话朗读 cId: 0000802 mid_dialog_repeat
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | []
question | { "type": "user", "content": "You need to study." }
postDialog | [ { "type": "npc", "npcName": "Eva", "content": "No, we want to play!" } ]

{ "cType": "mid_dialog_repeat", "cId": "0000802", "title": "告诉 Eva 和 Peter 需要学习", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "question": { "type": "user", "content": "You need to study." }, "postDialog": [ { "type": "npc", "npcName": "Eva", "content": "No, we want to play!" } ] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": "0107009", "kpType": "sentence", "kpTitle": "You need to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": "0112033", "kpType": "vocab", "kpTitle": "study", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "play", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_repeat", "cId": "0000802", "kpInfo": [ { "kpId": "0107009", "kpType": "sentence", "kpTitle": "You need to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": "0112033", "kpType": "vocab", "kpTitle": "study", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "play", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
4 对话朗读 cId: 0000803 mid_dialog_repeat
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | []
question | { "type": "user", "content": "We can play at school." }
postDialog | [ { "type": "npc", "npcName": "Peter", "content": "That's not fun!" } ]

{ "cType": "mid_dialog_repeat", "cId": "0000803", "title": "表示在学校里也可以玩", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "question": { "type": "user", "content": "We can play at school." }, "postDialog": [ { "type": "npc", "npcName": "Peter", "content": "That's not fun!" } ] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": "0112016", "kpType": "sentence", "kpTitle": "We can...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "play", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_repeat", "cId": "0000803", "kpInfo": [ { "kpId": "0112016", "kpType": "sentence", "kpTitle": "We can...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "play", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
5 对话朗读 cId: 0000804 mid_dialog_repeat
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | []
question | { "type": "user", "content": "Do you want to be a student?" }
postDialog | []

{ "cType": "mid_dialog_repeat", "cId": "0000804", "title": "询问 Eva 和 Peter 是否想做学生", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "question": { "type": "user", "content": "Do you want to be a student?" }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "student", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_repeat", "cId": "0000804", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "student", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
6 对话组句 cId: 0000805 mid_dialog_sentence
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | [ { "type": "user", "content": "Hey, look at me." } ]
imgShowTimingList | []
question | { "desc": "表示我是一个学生。", "content": "I'm a student." }
optionList | [ { "option": "I'm", "needAudio": true }, { "option": "student", "needAudio": true }, { "option": "a", "needAudio": true } ]
answer | [ 0, 2, 1 ]
tip |
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Vicky", "content": "Try again." }
postDialog | []

{ "cType": "mid_dialog_sentence", "cId": "0000805", "title": "表示自己是学生", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [ { "type": "user", "content": "Hey, look at me." } ], "imgShowTimingList": [], "question": { "desc": "表示我是一个学生。", "content": "I'm a student." }, "optionList": [ { "option": "I'm", "needAudio": true }, { "option": "student", "needAudio": true }, { "option": "a", "needAudio": true } ], "answer": [ 0, 2, 1 ], "tip": "student 指“学生”。", "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Vicky", "content": "Try again." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "student", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_sentence", "cId": "0000805", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "student", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
7 对话朗读 cId: 0000806 mid_dialog_repeat
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | [ "content" ]
img |
question | { "type": "user", "content": "I study at school." }
postDialog | []

{ "cType": "mid_dialog_repeat", "cId": "0000806", "title": "表示自己在学校学习", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [ "content" ], "img": "0000806.png", "question": { "type": "user", "content": "I study at school." }, "postDialog": [] }
8 对话朗读 cId: 0000807 mid_dialog_repeat
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | [ "content" ]
img |
question | { "type": "user", "content": "And I play too." }
postDialog | []

{ "cType": "mid_dialog_repeat", "cId": "0000807", "title": "表示自己也玩", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [ "content" ], "img": "0000807.png", "question": { "type": "user", "content": "And I play too." }, "postDialog": [] }
9 对话挖空 cId: 0000808 mid_dialog_fillin
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | []
question | { "type": "user", "desc": "We're not here to ___.", "content": "We're not here to study." }
optionGroupList | [ { "optionList": [ { "option": "study", "needAudio": true }, { "option": "student", "needAudio": true } ], "answer": [ 0 ] } ]
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Grace", "content": "Are you sure?" }
postDialog | []

{ "cType": "mid_dialog_fillin", "cId": "0000808", "title": "表示并不是要学习", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "question": { "type": "user", "desc": "We're not here to ___.", "content": "We're not here to study." }, "optionGroupList": [ { "optionList": [ { "option": "study", "needAudio": true }, { "option": "student", "needAudio": true } ], "answer": [ 0 ] } ], "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Grace", "content": "Are you sure?" }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": "0112033", "kpType": "vocab", "kpTitle": "study", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_fillin", "cId": "0000808", "kpInfo": [ { "kpId": "0112033", "kpType": "vocab", "kpTitle": "study", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
10 对话朗读 cId: 0000809 mid_dialog_repeat
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | [ "content" ]
img |
question | { "type": "user", "content": "It's \"Go to School\"." }
postDialog | []

{ "cType": "mid_dialog_repeat", "cId": "0000809", "title": "说出书名", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [ "content" ], "img": "0000809.png", "question": { "type": "user", "content": "It's \"Go to School\"." }, "postDialog": [] }
11 听力选择 cId: 0000810 ? 失败 ▶
错误: LLM返回内容不是合法JSON: Expecting value: line 1 column 1 (char 0) 内容: 无
原始组件配置

    Where are Kimi and Jimmy going?
    0：学校
    1：动物园
    2：烘焙坊

12 对话组句 cId: 0000811 mid_dialog_sentence
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | []
question | { "desc": "表示你们需要学习。", "content": "You need to study." }
optionList | [ { "option": "need to", "needAudio": true }, { "option": "you", "needAudio": true }, { "option": "study", "needAudio": true } ]
answer | [ 1, 0, 2 ]
tip |
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Peter", "content": "Huh?" }
postDialog | []

{ "cType": "mid_dialog_sentence", "cId": "0000811", "title": "表示你们需要学习", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "question": { "desc": "表示你们需要学习。", "content": "You need to study." }, "optionList": [ { "option": "need to", "needAudio": true }, { "option": "you", "needAudio": true }, { "option": "study", "needAudio": true } ], "answer": [ 1, 0, 2 ], "tip": "study 指“学习”。", "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Peter", "content": "Huh?" }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": "0107009", "kpType": "sentence", "kpTitle": "You need to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": "0112033", "kpType": "vocab", "kpTitle": "study", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_sentence", "cId": "0000811", "kpInfo": [ { "kpId": "0107009", "kpType": "sentence", "kpTitle": "You need to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": "0112033", "kpType": "vocab", "kpTitle": "study", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
13 对话组句 cId: 0000812 mid_dialog_sentence
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | []
question | { "desc": "表示你们需要上学。", "content": "You need to go to school." }
optionList | [ { "option": "need to", "needAudio": true }, { "option": "go to school", "needAudio": true }, { "option": "you", "needAudio": true } ]
answer | [ 2, 0, 1 ]
tip |
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Grace", "content": "Try again." }
postDialog | []

{ "cType": "mid_dialog_sentence", "cId": "0000812", "title": "表示你们需要上学", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "question": { "desc": "表示你们需要上学。", "content": "You need to go to school." }, "optionList": [ { "option": "need to", "needAudio": true }, { "option": "go to school", "needAudio": true }, { "option": "you", "needAudio": true } ], "answer": [ 2, 0, 1 ], "tip": "go to school 指“上学”。", "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Grace", "content": "Try again." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": "0107009", "kpType": "sentence", "kpTitle": "You need to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_sentence", "cId": "0000812", "kpInfo": [ { "kpId": "0107009", "kpType": "sentence", "kpTitle": "You need to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "school", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
14 对话挖空 cId: 0000813 mid_dialog_fillin
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 663, "Peter": 653, "Vicky": 658 }
preDialog | []
imgShowTimingList | []
question | { "type": "user", "desc": "Then you can ___ there.", "content": "Then you can play there." }
optionGroupList | [ { "optionList": [ { "option": "play", "needAudio": true }, { "option": "catch", "needAudio": true } ], "answer": [ 0 ] } ]
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Grace", "content": "I don't think so." }
postDialog | []

{ "cType": "mid_dialog_fillin", "cId": "0000813", "title": "表示可以在学校玩耍", "resourceMapping": { "Eva": 663, "Peter": 653, "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "question": { "type": "user", "desc": "Then you can ___ there.", "content": "Then you can play there." }, "optionGroupList": [ { "optionList": [ { "option": "play", "needAudio": true }, { "option": "catch", "needAudio": true } ], "answer": [ 0 ] } ], "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Grace", "content": "I don't think so." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "play", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_fillin", "cId": "0000813", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "play", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
15 对话组句 cId: 0000814 mid_dialog_sentence
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 738, "Peter": 739 }
preDialog | []
imgShowTimingList | []
question | { "desc": "表示我们可以坐校车上学。", "content": "We can take the school bus." }
optionList | [ { "option": "we can", "needAudio": true }, { "option": "the school bus", "needAudio": true }, { "option": "take", "needAudio": true } ]
answer | [ 0, 2, 1 ]
tip |
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Vicky", "content": "No, try again." }
postDialog | []

{ "cType": "mid_dialog_sentence", "cId": "0000814", "title": "表示可以坐校车上学", "resourceMapping": { "Eva": 738, "Peter": 739 }, "preDialog": [], "imgShowTimingList": [], "question": { "desc": "表示我们可以坐校车上学。", "content": "We can take the school bus." }, "optionList": [ { "option": "we can", "needAudio": true }, { "option": "the school bus", "needAudio": true }, { "option": "take", "needAudio": true } ], "answer": [ 0, 2, 1 ], "tip": "句子以 we can 开头。", "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Vicky", "content": "No, try again." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": "0112016", "kpType": "sentence", "kpTitle": "We can...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_sentence", "cId": "0000814", "kpInfo": [ { "kpId": "0112016", "kpType": "sentence", "kpTitle": "We can...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
16 对话挖空 cId: 0000815 mid_dialog_fillin
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Eva": 738, "Peter": 739 }
preDialog | []
imgShowTimingList | []
question | { "type": "user", "desc": "You are a ___ now.", "content": "You are a student now." }
optionGroupList | [ { "optionList": [ { "option": "play", "needAudio": true }, { "option": "student", "needAudio": true } ], "answer": [ 1 ] } ]
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Grace", "content": "Try again." }
postDialog | []

{ "cType": "mid_dialog_fillin", "cId": "0000815", "title": "表示 Peter 是学生了", "resourceMapping": { "Eva": 738, "Peter": 739 }, "preDialog": [], "imgShowTimingList": [], "question": { "type": "user", "desc": "You are a ___ now.", "content": "You are a student now." }, "optionGroupList": [ { "optionList": [ { "option": "play", "needAudio": true }, { "option": "student", "needAudio": true } ], "answer": [ 1 ] } ], "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Grace", "content": "Try again." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "student", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_fillin", "cId": "0000815", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "student", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
17 核心合作阅读 cId: 0000800 core_reading_order
已保存 ▶
taskInfo

cType |
cId |
title |
sceneDesc | 你们听说 Vala 学院没有考试，正在欢呼雀跃。突然发现 Pioneer 的一项重要任务：加入社团！为什么 Pioneer 一定要加入社团呢？快来阅读 Brainy 的介绍吧。
img |

key

[ { "desc": "词汇类", "keyList": [ { "type": "default", "content": "plant", "desc": "n. 植物" }, { "type": "default", "content": "club", "desc": "n. 俱乐部" }, { "type": "default", "content": "join", "desc": "v. 加入" }, { "type": "default", "content": "member", "desc": "n. 成员" }, { "type": "default", "content": "choose", "desc": "v. 选择" }, { "type": "default", "content": "interested", "desc": "adj. 感兴趣的" } ] } ]

resourceMapping | { "Eva": 738, "Peter": 739 }

{ "cType": "core_reading_order", "cId": "0000800", "title": "加入社团", "sceneDesc": "你们听说 Vala 学院没有考试，正在欢呼雀跃。突然发现 Pioneer 的一项重要任务：加入社团！为什么 Pioneer 一定要加入社团呢？快来阅读 Brainy 的介绍吧。", "img": "", "key": [ { "desc": "词汇类", "keyList": [ { "type": "default", "content": "plant", "desc": "n. 植物" }, { "type": "default", "content": "club", "desc": "n. 俱乐部" }, { "type": "default", "content": "join", "desc": "v. 加入" }, { "type": "default", "content": "member", "desc": "n. 成员" }, { "type": "default", "content": "choose", "desc": "v. 选择" }, { "type": "default", "content": "interested", "desc": "adj. 感兴趣的" } ] } ], "resourceMapping": { "Eva": 738, "Peter": 739 } }
materialInfo

text

[ { "textType": "Lcd", "textTitle": "How to Join Clubs?", "textBody": "<sp>You can choose your favourite club to join. If you are interested in something, you can find a club for it. The robot club, the plant club, the sports club, and the reading club are all popular choices.<br>If you are not interested in any club, you can start a new one with friends!<br><sp>图片:[0101106_core reading2]" } ]

question

[ { "type": "npc", "npcName": "Brainy", "content": "At Vala Academy, how can Pioneers get points?", "optionList": [ { "option": "Take many exams.", "feedback": { "type": "npc", "npcName": "Otis", "content": "No! We have no exams!" } }, { "option": "Join clubs.", "feedback": { "type": "npc", "npcName": "Otis", "content": "Right. We need to join a club to get points." } }, { "option": "Level up.", "feedback": { "type": "npc", "npcName": "Otis", "content": "We have to get points first, then we can level up." } } ], "answer": [ 1 ], "meaning": "", "explain": "" }, { "type": "npc", "npcName": "Brainy", "content": "What can you do in a club?", "optionList": [ { "option": "We can earn some money.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "No, that's not right." } }, { "option": "We can play, study and work together.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "That's right! That's what clubs are for!" } }, { "option": "We can only play.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "Hmm… We play, but we also study and work." } } ], "answer": [ 1 ], "meaning": "", "explain": "" }, { "type": "npc", "npcName": "Otis", "content": "How can we choose a club?", "optionList": [ { "option": "We can only choose the plant club and the robot club.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "Nope! We can choose from many clubs." } }, { "option": "We can choose a club we are interested in.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "Yes, exactly! Choose what you like!" } }, { "option": "We must start a new club.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "No, not must. Only if you want to." } } ], "answer": [ 1 ], "meaning": "", "explain": "" }, { "type": "npc", "npcName": "Skylar", "content": "If we are not interested in any club, what should we do?", "optionList": [ { "option": "We can't join any clubs.", "feedback": { "type": "npc", "npcName": "Otis", "content": "Uh… That sounds bad." } }, { "option": "We can start a new club.", "feedback": { "type": "npc", "npcName": "Otis", "content": "Yes! That sounds okay." } }, { "option": "We can only join the plant club.", "feedback": { "type": "npc", "npcName": "Otis", "content": "I don't think so… We have other choices." } } ], "answer": [ 1 ], "meaning": "", "explain": "" } ]

{ "text": [ { "textType": "Lcd", "textTitle": "How to Join Clubs?", "textBody": "<sp>You can choose your favourite club to join. If you are interested in something, you can find a club for it. The robot club, the plant club, the sports club, and the reading club are all popular choices.<br>If you are not interested in any club, you can start a new one with friends!<br><sp>图片:[0101106_core reading2]" } ], "question": [ { "type": "npc", "npcName": "Brainy", "content": "At Vala Academy, how can Pioneers get points?", "optionList": [ { "option": "Take many exams.", "feedback": { "type": "npc", "npcName": "Otis", "content": "No! We have no exams!" } }, { "option": "Join clubs.", "feedback": { "type": "npc", "npcName": "Otis", "content": "Right. We need to join a club to get points." } }, { "option": "Level up.", "feedback": { "type": "npc", "npcName": "Otis", "content": "We have to get points first, then we can level up." } } ], "answer": [ 1 ], "meaning": "", "explain": "" }, { "type": "npc", "npcName": "Brainy", "content": "What can you do in a club?", "optionList": [ { "option": "We can earn some money.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "No, that's not right." } }, { "option": "We can play, study and work together.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "That's right! That's what clubs are for!" } }, { "option": "We can only play.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "Hmm… We play, but we also study and work." } } ], "answer": [ 1 ], "meaning": "", "explain": "" }, { "type": "npc", "npcName": "Otis", "content": "How can we choose a club?", "optionList": [ { "option": "We can only choose the plant club and the robot club.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "Nope! We can choose from many clubs." } }, { "option": "We can choose a club we are interested in.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "Yes, exactly! Choose what you like!" } }, { "option": "We must start a new club.", "feedback": { "type": "npc", "npcName": "Skylar", "content": "No, not must. Only if you want to." } } ], "answer": [ 1 ], "meaning": "", "explain": "" }, { "type": "npc", "npcName": "Skylar", "content": "If we are not interested in any club, what should we do?", "optionList": [ { "option": "We can't join any clubs.", "feedback": { "type": "npc", "npcName": "Otis", "content": "Uh… That sounds bad." } }, { "option": "We can start a new club.", "feedback": { "type": "npc", "npcName": "Otis", "content": "Yes! That sounds okay." } }, { "option": "We can only join the plant club.", "feedback": { "type": "npc", "npcName": "Otis", "content": "I don't think so… We have other choices." } } ], "answer": [ 1 ], "meaning": "", "explain": "" } ] }
flowInfo

sequence | [ { "text": [ 0 ] }, { "dialog": { "type": "npc", "npcName": "Brainy", "content": "Now, let’s make sure you understand everything." } }, { "question": [ 0 ] }, { "question": [ 1 ] }, { "text": [ 1 ] }, { "question": [ 2 ] }, { "question": [ 3 ] } ]

{ "sequence": [ { "text": [ 0 ] }, { "dialog": { "type": "npc", "npcName": "Brainy", "content": "Now, let’s make sure you understand everything." } }, { "question": [ 0 ] }, { "question": [ 1 ] }, { "text": [ 1 ] }, { "question": [ 2 ] }, { "question": [ 3 ] } ] }
studyInfo

closing | { "type": "npc", "content": "恭喜你完成了全部内容的学习，你对知识点的掌握真的很棒，继续加油哦！", "npcName": "Brainy" }

learningPart

[ { "leadIn": { "desc": "At Vala Academy, Pioneers don't have exams. But you need points to level up!" }, "type": "npc", "content": "我们来认识一下这段话中的关键单词 exam，exam 的意思是考试，参加考试可以说 take an exam。", "npcName": "Brainy", "learning": [ { "answer": [ 0 ], "meaning": "句意选择题", "optionList": [ { "feedback": { "type": "npc", "content": "太棒啦！你准确理解了exam的含义，完全掌握了这个句子的意思哦~", "npcName": "Brainy" }, "option": "在瓦拉学院，开拓者们不用考试。" }, { "feedback": { "type": "npc", "content": "不对哦，“上课”和句中的exam意思不符，exam是考试的意思，再回忆一下释义吧。", "npcName": "Brainy" }, "option": "在瓦拉学院，开拓者们不用上课。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来看下包含 exam 的句子 At Vala Academy, Pioneers don't have exams. 是什么意思呢？" } }, { "answer": [ 1 ], "meaning": "段落大意题", "optionList": [ { "feedback": { "type": "npc", "content": "这可不对哦，文中明确说开拓者们没有考试，要靠积分升级，再仔细读一下内容吧。", "npcName": "Brainy" }, "option": "瓦拉学院的开拓者需要通过考试攒积分来升级。" }, { "feedback": { "type": "npc", "content": "回答完美！你精准抓住了这段的两个核心信息，理解得非常到位~", "npcName": "Brainy" }, "option": "瓦拉学院的开拓者没有考试，但需要攒积分来升级。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "了解了关键单词和句子，我们来看看这段主要讲了什么内容吧？" } } ] }, { "leadIn": { "desc": "You can choose your favourite club to join. If you are interested in something, you can find a club for it." }, "type": "npc", "content": "我们来认识一下这段话中的关键单词 club，club 的意思是俱乐部，加入俱乐部可以说 join a club。", "npcName": "Brainy", "learning": [ { "answer": [ 1 ], "meaning": "句意选择题", "optionList": [ { "feedback": { "type": "npc", "content": "不对哦，“班级”和我们说的club意思不一样，club是俱乐部的意思，再想想正确答案吧。", "npcName": "Brainy" }, "option": "你可以选择你最喜欢的班级加入。" }, { "feedback": { "type": "npc", "content": "太厉害了！你已经完全掌握了club的含义和这个句子的意思啦。", "npcName": "Brainy" }, "option": "你可以选择你最喜欢的俱乐部加入。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来看下包含 club 的句子 You can choose your favourite club to join. 是什么意思呢？" } }, { "answer": [ 0 ], "meaning": "段落大意题", "optionList": [ { "feedback": { "type": "npc", "content": "回答正确！你把这段的两层意思都准确捕捉到了，理解得非常好~", "npcName": "Brainy" }, "option": "你可以选择自己感兴趣的俱乐部加入，如果有感兴趣的事物，也能找到对应的俱乐部。" }, { "feedback": { "type": "npc", "content": "不对哦，这段没有说所有俱乐部都受欢迎，也没有要求必须加入俱乐部，再仔细看看内容吧。", "npcName": "Brainy" }, "option": "所有的俱乐部都非常受欢迎，你必须加入其中一个。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "了解了关键单词和句子，我们来看看这段主要讲了什么内容吧？" } } ] } ]

{ "closing": { "type": "npc", "content": "恭喜你完成了全部内容的学习，你对知识点的掌握真的很棒，继续加油哦！", "npcName": "Brainy" }, "learningPart": [ { "leadIn": { "desc": "At Vala Academy, Pioneers don't have exams. But you need points to level up!" }, "type": "npc", "content": "我们来认识一下这段话中的关键单词 exam，exam 的意思是考试，参加考试可以说 take an exam。", "npcName": "Brainy", "learning": [ { "answer": [ 0 ], "meaning": "句意选择题", "optionList": [ { "feedback": { "type": "npc", "content": "太棒啦！你准确理解了exam的含义，完全掌握了这个句子的意思哦~", "npcName": "Brainy" }, "option": "在瓦拉学院，开拓者们不用考试。" }, { "feedback": { "type": "npc", "content": "不对哦，“上课”和句中的exam意思不符，exam是考试的意思，再回忆一下释义吧。", "npcName": "Brainy" }, "option": "在瓦拉学院，开拓者们不用上课。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来看下包含 exam 的句子 At Vala Academy, Pioneers don't have exams. 是什么意思呢？" } }, { "answer": [ 1 ], "meaning": "段落大意题", "optionList": [ { "feedback": { "type": "npc", "content": "这可不对哦，文中明确说开拓者们没有考试，要靠积分升级，再仔细读一下内容吧。", "npcName": "Brainy" }, "option": "瓦拉学院的开拓者需要通过考试攒积分来升级。" }, { "feedback": { "type": "npc", "content": "回答完美！你精准抓住了这段的两个核心信息，理解得非常到位~", "npcName": "Brainy" }, "option": "瓦拉学院的开拓者没有考试，但需要攒积分来升级。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "了解了关键单词和句子，我们来看看这段主要讲了什么内容吧？" } } ] }, { "leadIn": { "desc": "You can choose your favourite club to join. If you are interested in something, you can find a club for it." }, "type": "npc", "content": "我们来认识一下这段话中的关键单词 club，club 的意思是俱乐部，加入俱乐部可以说 join a club。", "npcName": "Brainy", "learning": [ { "answer": [ 1 ], "meaning": "句意选择题", "optionList": [ { "feedback": { "type": "npc", "content": "不对哦，“班级”和我们说的club意思不一样，club是俱乐部的意思，再想想正确答案吧。", "npcName": "Brainy" }, "option": "你可以选择你最喜欢的班级加入。" }, { "feedback": { "type": "npc", "content": "太厉害了！你已经完全掌握了club的含义和这个句子的意思啦。", "npcName": "Brainy" }, "option": "你可以选择你最喜欢的俱乐部加入。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来看下包含 club 的句子 You can choose your favourite club to join. 是什么意思呢？" } }, { "answer": [ 0 ], "meaning": "段落大意题", "optionList": [ { "feedback": { "type": "npc", "content": "回答正确！你把这段的两层意思都准确捕捉到了，理解得非常好~", "npcName": "Brainy" }, "option": "你可以选择自己感兴趣的俱乐部加入，如果有感兴趣的事物，也能找到对应的俱乐部。" }, { "feedback": { "type": "npc", "content": "不对哦，这段没有说所有俱乐部都受欢迎，也没有要求必须加入俱乐部，再仔细看看内容吧。", "npcName": "Brainy" }, "option": "所有的俱乐部都非常受欢迎，你必须加入其中一个。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "了解了关键单词和句子，我们来看看这段主要讲了什么内容吧？" } } ] } ] }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": null, "kpType": "vocab", "kpTitle": "plant n. 植物", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "club n. 俱乐部", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "join v. 加入", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "member n. 成员", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "choose v. 选择", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "interested adj. 感兴趣的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "core_reading_order", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "plant n. 植物", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "club n. 俱乐部", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "join v. 加入", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "member n. 成员", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "choose v. 选择", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "interested adj. 感兴趣的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
中间结果: 阅读材料格式化

    ```
    # 材料2
    类型：电子屏
    标题：How to Join Clubs?
    正文:
    <sp>You can choose your favourite club to join. If you are interested in something, you can find a club for it. The robot club, the plant club, the sports club, and the reading club are all popular choices.<br>If you are not interested in any club, you can start a new one with friends!<br><sp>图片:[0101106_core reading2]
    ```

中间结果: 学习材料格式化

    ```
    # 段落1
    重点词汇:
    正文:
    ---
    At Vala Academy, Pioneers don't have exams. But you need points to level up!
    ---
    ```
    ```
    # 段落2
    重点词汇:
    正文:
    ---
    You can choose your favourite club to join. If you are interested in something, you can find a club for it.
    ---
    ```

中间结果: 学习过程配置

    ```
    # 段落1
    ## 段落内容
    ---
    At Vala Academy, Pioneers don't have exams. But you need points to level up!
    ---
    ## 互动题目
    Brainy：我们来认识一下这段话中的关键单词 exam，exam 的意思是考试，参加考试可以说 take an exam。
    1. 句意选择题
    Brainy：接下来，我们来看下包含 exam 的句子 At Vala Academy, Pioneers don't have exams. 是什么意思呢？
    - 在瓦拉学院，开拓者们不用考试。[正确]
      Brainy：太棒啦！你准确理解了exam的含义，完全掌握了这个句子的意思哦~
    - 在瓦拉学院，开拓者们不用上课。
      Brainy：不对哦，“上课”和句中的exam意思不符，exam是考试的意思，再回忆一下释义吧。
    2. 段落大意题
    Brainy：了解了关键单词和句子，我们来看看这段主要讲了什么内容吧？
    - 瓦拉学院的开拓者需要通过考试攒积分来升级。
      Brainy：这可不对哦，文中明确说开拓者们没有考试，要靠积分升级，再仔细读一下内容吧。
    - 瓦拉学院的开拓者没有考试，但需要攒积分来升级。[正确]
      Brainy：回答完美！你精准抓住了这段的两个核心信息，理解得非常到位~
    # 段落2
    ## 段落内容
    ---
    You can choose your favourite club to join. If you are interested in something, you can find a club for it.
    ---
    ## 互动题目
    Brainy：我们来认识一下这段话中的关键单词 club，club 的意思是俱乐部，加入俱乐部可以说 join a club。
    1. 句意选择题
    Brainy：接下来，我们来看下包含 club 的句子 You can choose your favourite club to join. 是什么意思呢？
    - 你可以选择你最喜欢的班级加入。
      Brainy：不对哦，“班级”和我们说的club意思不一样，club是俱乐部的意思，再想想正确答案吧。
    - 你可以选择你最喜欢的俱乐部加入。[正确]
      Brainy：太厉害了！你已经完全掌握了club的含义和这个句子的意思啦。
    2. 段落大意题
    Brainy：了解了关键单词和句子，我们来看看这段主要讲了什么内容吧？
    - 你可以选择自己感兴趣的俱乐部加入，如果有感兴趣的事物，也能找到对应的俱乐部。[正确]
      Brainy：回答正确！你把这段的两层意思都准确捕捉到了，理解得非常好~
    - 所有的俱乐部都非常受欢迎，你必须加入其中一个。
      Brainy：不对哦，这段没有说所有俱乐部都受欢迎，也没有要求必须加入俱乐部，再仔细看看内容吧。
    # 完结反馈
    Brainy：恭喜你完成了全部内容的学习，你对知识点的掌握真的很棒，继续加油哦！
    ```

18 核心看图选词 cId: 0000800 core_reading_imageDrag
已保存 ▶
taskInfo

cType |
cId |
title |
taskDesc |
sceneDesc |
key | [ { "desc": "", "keyList": [ { "type": "default", "content": "lake", "desc": "n. 湖" }, { "type": "default", "content": "monkey", "desc": "n. 猴子" }, { "type": "default", "content": "three", "desc": "num. 三" }, { "type": "default", "content": "How many ...?", "desc": "多少……？" }, { "type": "default", "content": "There be ...", "desc": "有……" } ] } ]
resourceMapping | { "Eva": 738, "Peter": 739 }

cDesc

As you explore the word castle, you come across Ben’s question about where hippos live, and you fill the blank with "lake", figuring out hippos make their homes in the lake (你在单词城堡探险时遇到了Ben关于河马栖息地的问题，填入lake后知道了河马生活在湖里。) Next, you answer Brainy’s question about other zoo animals, picking "tree" as the right fit, and learn there are also animals that live in trees in the zoo (接着你回答Brainy关于动物园其他动物的问题，选了tree后了解到动物园里还有栖息在树上的动物。)

{ "cType": "core_reading_imageDrag", "cId": "0000800", "title": "单词城堡补全句子", "taskDesc": "观察主图内容，将下方选项池中的单词拖拽到对应句子的空白处，补全所有句子。", "sceneDesc": "你来到了神奇的单词城堡，城堡的墙上有很多缺了单词的句子，你需要找到正确的单词把它们补全，才能打开城堡的大门哦！", "key": [ { "desc": "", "keyList": [ { "type": "default", "content": "lake", "desc": "n. 湖" }, { "type": "default", "content": "monkey", "desc": "n. 猴子" }, { "type": "default", "content": "three", "desc": "num. 三" }, { "type": "default", "content": "How many ...?", "desc": "多少……？" }, { "type": "default", "content": "There be ...", "desc": "有……" } ] } ], "resourceMapping": { "Eva": 738, "Peter": 739 }, "cDesc": "As you explore the word castle, you come across Ben’s question about where hippos live, and you fill the blank with \"lake\", figuring out hippos make their homes in the lake (你在单词城堡探险时遇到了Ben关于河马栖息地的问题，填入lake后知道了河马生活在湖里。) Next, you answer Brainy’s question about other zoo animals, picking \"tree\" as the right fit, and learn there are also animals that live in trees in the zoo (接着你回答Brainy关于动物园其他动物的问题，选了tree后了解到动物园里还有栖息在树上的动物。)" }
questionGroup
[{'image': '1201001_02.png', 'questionList': [{'type': 'npc', 'npcName': 'Ben', 'content': 'Where do hippos live？', 'desc': 'in the ___', 'optionList': [{'option': 'lake'}, {'option': 'tree'}, {'option': 'grass'}], 'answer': [0]}, {'type': 'npc', 'npcName': 'Brainy', 'title': 'What other animals are there in the zoo？', 'desc': '___', 'optionList': [{'option': 'lake'}, {'option': 'tree'}, {'option': 'grass'}], 'answer': [1]}]}]
studyInfo

learningPart

[ { "image": "1201001_02.png", "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "这道题我们要认识表示地点的英文单词哦，其中有一个单词的意思是“湖”，你能选出来吗？" }, "optionList": [ { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "tree的意思是“树”，不是我们要找的表示“湖”的单词哦，再试试吧。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "grass的意思是“草”，也不是“湖”的意思，再想一想~" } }, { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！lake的意思就是“湖”，你掌握得很棒哦。" } } ], "answer": [ 2 ] }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Ben问“河马生活在哪里？”，我们需要选一个河马生存的地点填到横线上哦。" }, "optionList": [ { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！河马是生活在湖里的，所以这句话就是“in the lake（在湖里）”，快来大声读一读这个短语吧。" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "tree是树的意思，河马没办法在树上生活哦，根据河马的生活习性再选一次吧。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "grass是草的意思，河马不是主要生活在草地上的哦，再试试吧。" } } ], "answer": [ 0 ] } ] }, { "image": "1201001_02.png", "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "这道题我们要选出可以用来表示动物园里事物的单词哦，你觉得下面哪个是动物园里会有的东西呢？" }, "optionList": [ { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "lake是湖，通常不是动物园里特有的典型事物哦，再想想吧。" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "选对啦！tree是“树”，动物园里会种植树木给动物们提供环境哦，你选对了。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "grass是草，虽然也很常见，但不是这道题要选的正确答案哦，再试试吧。" } } ], "answer": [ 1 ] }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Brainy问“动物园里还有什么其他的事物？”，我们要选出符合动物园场景的选项哦。" }, "optionList": [ { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "湖一般是自然环境里的水域，不是动物园里的典型事物哦，再根据动物园的场景想一想吧。" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！动物园里会有很多树来给动物营造适宜的生存环境，现在大声读出tree这个单词吧。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "草虽然在动物园里也可能有，但不是这道题的正确答案哦，再选一次吧。" } } ], "answer": [ 1 ] } ] } ]

closing | { "type": "npc", "npcName": "Brainy", "content": "太棒了！你复习了lake、tree、grass这些核心词汇，还学会了怎么在对话场景里使用它们，今天的英语对话任务完成得超出色哦，继续加油呀！" }

{ "learningPart": [ { "image": "1201001_02.png", "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "这道题我们要认识表示地点的英文单词哦，其中有一个单词的意思是“湖”，你能选出来吗？" }, "optionList": [ { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "tree的意思是“树”，不是我们要找的表示“湖”的单词哦，再试试吧。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "grass的意思是“草”，也不是“湖”的意思，再想一想~" } }, { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！lake的意思就是“湖”，你掌握得很棒哦。" } } ], "answer": [ 2 ] }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Ben问“河马生活在哪里？”，我们需要选一个河马生存的地点填到横线上哦。" }, "optionList": [ { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！河马是生活在湖里的，所以这句话就是“in the lake（在湖里）”，快来大声读一读这个短语吧。" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "tree是树的意思，河马没办法在树上生活哦，根据河马的生活习性再选一次吧。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "grass是草的意思，河马不是主要生活在草地上的哦，再试试吧。" } } ], "answer": [ 0 ] } ] }, { "image": "1201001_02.png", "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "这道题我们要选出可以用来表示动物园里事物的单词哦，你觉得下面哪个是动物园里会有的东西呢？" }, "optionList": [ { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "lake是湖，通常不是动物园里特有的典型事物哦，再想想吧。" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "选对啦！tree是“树”，动物园里会种植树木给动物们提供环境哦，你选对了。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "grass是草，虽然也很常见，但不是这道题要选的正确答案哦，再试试吧。" } } ], "answer": [ 1 ] }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Brainy问“动物园里还有什么其他的事物？”，我们要选出符合动物园场景的选项哦。" }, "optionList": [ { "option": "lake", "feedback": { "type": "npc", "npcName": "Brainy", "content": "湖一般是自然环境里的水域，不是动物园里的典型事物哦，再根据动物园的场景想一想吧。" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！动物园里会有很多树来给动物营造适宜的生存环境，现在大声读出tree这个单词吧。" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "草虽然在动物园里也可能有，但不是这道题的正确答案哦，再选一次吧。" } } ], "answer": [ 1 ] } ] } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你复习了lake、tree、grass这些核心词汇，还学会了怎么在对话场景里使用它们，今天的英语对话任务完成得超出色哦，继续加油呀！" } }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": null, "kpType": "vocab", "kpTitle": "lake n. 湖", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "monkey n. 猴子", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "three num. 三", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "How many ...? 多少……？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "There be ... 有……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "core_reading_imageDrag", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "lake n. 湖", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "monkey n. 猴子", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "three num. 三", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "How many ...? 多少……？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "There be ... 有……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
中间结果: 学习流程配置

    ```
    # 小题 4
    ## 材料内容
    【展示该小题对应的图片 ID：1201001_02.png】

    ## 互动题目
    ### 1. 句意选词题
    Brainy：这道题我们要认识表示地点的英文单词哦，其中有一个单词的意思是“湖”，你能选出来吗？
    - 选项 A：tree
      Brainy：tree的意思是“树”，不是我们要找的表示“湖”的单词哦，再试试吧。
    - 选项 B：grass
      Brainy：grass的意思是“草”，也不是“湖”的意思，再想一想~
    - 选项 C：lake [正确]
      Brainy：答对啦！lake的意思就是“湖”，你掌握得很棒哦。

    ### 2. 原题降级
    Brainy：Ben问“河马生活在哪里？”，我们需要选一个河马生存的地点填到横线上哦。
    - 选项 A：lake [正确]
      Brainy：答对啦！河马是生活在湖里的，所以这句话就是“in the lake（在湖里）”，快来大声读一读这个短语吧。
    - 选项 B：tree
      Brainy：tree是树的意思，河马没办法在树上生活哦，根据河马的生活习性再选一次吧。
    - 选项 C：grass
      Brainy：grass是草的意思，河马不是主要生活在草地上的哦，再试试吧。

    ---

    # 小题 5
    ## 材料内容
    【展示该小题对应的图片 ID：1201001_02.png】

    ## 互动题目
    ### 1. 句意选词题
    Brainy：这道题我们要选出可以用来表示动物园里事物的单词哦，你觉得下面哪个是动物园里会有的东西呢？
    - 选项 A：lake
      Brainy：lake是湖，通常不是动物园里特有的典型事物哦，再想想吧。
    - 选项 B：tree [正确]
      Brainy：选对啦！tree是“树”，动物园里会种植树木给动物们提供环境哦，你选对了。
    - 选项 C：grass
      Brainy：grass是草，虽然也很常见，但不是这道题要选的正确答案哦，再试试吧。

    ### 2. 原题降级
    Brainy：Brainy问“动物园里还有什么其他的事物？”，我们要选出符合动物园场景的选项哦。
    - 选项 A：lake
      Brainy：湖一般是自然环境里的水域，不是动物园里的典型事物哦，再根据动物园的场景想一想吧。
    - 选项 B：tree [正确]
      Brainy：太棒了！动物园里会有很多树来给动物营造适宜的生存环境，现在大声读出tree这个单词吧。
    - 选项 C：grass
      Brainy：草虽然在动物园里也可能有，但不是这道题的正确答案哦，再选一次吧。

    ---

    # 完结反馈
    Brainy：太棒了！你复习了lake、tree、grass这些核心词汇，还学会了怎么在对话场景里使用它们，今天的英语对话任务完成得超出色哦，继续加油呀！
    ```

中间结果: 互动描述

    As you explore the word castle, you come across Ben’s question about where hippos live, and you fill the blank with "lake", figuring out hippos make their homes in the lake (你在单词城堡探险时遇到了Ben关于河马栖息地的问题，填入lake后知道了河马生活在湖里。)
    Next, you answer Brainy’s question about other zoo animals, picking "tree" as the right fit, and learn there are also animals that live in trees in the zoo (接着你回答Brainy关于动物园其他动物的问题，选了tree后了解到动物园里还有栖息在树上的动物。)

19 核心口语快答 cId: 0000800 core_speaking_reply
已保存 ▶
taskInfo

cType |
cId |
title |
taskDesc |
sceneDesc | 你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。
img |
key | [ { "desc": "类型1的描述", "keyList": [ { "type": "default", "content": "Let's...", "desc": "让我们……" }, { "type": "default", "content": "Instead of..., we'd better...", "desc": "与其……，我们不如……" }, { "type": "default", "content": "... love(s) to...", "desc": "……很乐意……" } ] } ]
resourceMapping | { "Eva": 738, "Peter": 739 }

{ "cType": "core_speaking_reply", "cId": "0000800", "title": "请你告诉清洁站的工人，大象需要洗澡，你们乐意帮助，希望送一些干净的水过来。", "taskDesc": "请你告诉清洁站的工人，大象需要洗澡，你们乐意帮助，希望送一些干净的水过来。", "sceneDesc": "你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。", "img": "", "key": [ { "desc": "类型1的描述", "keyList": [ { "type": "default", "content": "Let's...", "desc": "让我们……" }, { "type": "default", "content": "Instead of..., we'd better...", "desc": "与其……，我们不如……" }, { "type": "default", "content": "... love(s) to...", "desc": "……很乐意……" } ] } ], "resourceMapping": { "Eva": 738, "Peter": 739 } }
dialogSetting

setting | { "npcName": "Logan", "round": 5, "checkRound": 3 }

{ "setting": { "npcName": "Logan", "round": 5, "checkRound": 3 } }
dialogConfig

config

{ "asrPrompt": "elephant,shower,water,keepers,help,clean,Wander Port,Logan", "promptInfo": { "default": "# 1. 角色（你要扮演谁）\n你是Logan，在Wander Port的清洁站工作。你的语言风格简单友好，适合儿童理解。\n# 2. 任务（你如何参与对话）\n1. 首轮主动询问用户大象的情况，确认大象是不是需要洗澡。\n2. 当用户说明大象需要洗澡后，表达疑惑，告诉用户可以等一等，或许饲养员很快就会来。\n3. 当用户提出要先自己准备水给大象洗澡后，吐槽饲养员太粗心，然后询问用户是否愿意帮忙给大象洗澡。\n4. 如果用户明确表示愿意帮忙，先向用户表示感谢，然后告知对方会马上送干净的水过去。\n5. 如果用户表示不愿意帮忙，表达遗憾，说明你会自己想办法给大象安排洗澡。\n6. 如果用户答非所问，没有提到和大象洗澡相关的内容，友好地把话题拉回，重复你当前提出的问题。\n7. 当你告知用户会送水后，对话结束，不需要再提出新问题。\n# 3. 背景信息\n你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。\n# 4. 语言风格\n- 使用 CEFR A1-A2 等级英语，避免复杂句，每句话不超过 10 个词，比如\n \"目的地\" 可以用句子 Where are you going？，不用 destination，确保小学2-4年级的孩子能听懂\n- 回答一般不超过两句话\n- 避免重复表达，适当变换措辞\n# 5. 开场白 (仅用于首轮)\n由你开始对话，你会问用户：\"Hi. What happened to the elephant?\"\n# 6. 回应方式\n- 无论用户如何对话，你都应基于你的身份做出合理反应。\n- 每次最多只提问一个问题，等待用户回答后再继续。\n- 除开场轮次外，每次回应，可以先基于用户的话给一句反馈。然后再推进你的任务。", "scene": "你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。", "in_progress_goal": "用户告诉清洁站的工人，大象需要洗澡，并且表示乐意帮助，要求 Logan 送一些干净的水过来。", "final_goal": "用户告诉清洁站的工人，大象需要洗澡，并提出需要一些水。", "reference_dialog": "Logan: Hi. What happened to the elephant?\nUser: The elephant needs a shower. Let's set up a shower for her.\nLogan: Are you saying she hasn't had a shower yet? Maybe someone will probably come soon.\nUser: Instead of waiting here, we'd better get some water for her first.\nLogan: The keepers are too careless! Thank you! Can you help her shower?\nUser: We'd love to help.\nLogan: Great. We will send some water to her right away.", "user_task": "请你告诉清洁站的工人，大象需要洗澡，你们乐意帮助，希望送一些干净的水过来。", "user_scene": "你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。", "user_knowledge": "Let's... 让我们……\nInstead of..., we'd better... 与其……，我们不如……\n... love(s) to... ……很乐意……" } }

{ "config": { "asrPrompt": "elephant,shower,water,keepers,help,clean,Wander Port,Logan", "promptInfo": { "default": "# 1. 角色（你要扮演谁）\n你是Logan，在Wander Port的清洁站工作。你的语言风格简单友好，适合儿童理解。\n# 2. 任务（你如何参与对话）\n1. 首轮主动询问用户大象的情况，确认大象是不是需要洗澡。\n2. 当用户说明大象需要洗澡后，表达疑惑，告诉用户可以等一等，或许饲养员很快就会来。\n3. 当用户提出要先自己准备水给大象洗澡后，吐槽饲养员太粗心，然后询问用户是否愿意帮忙给大象洗澡。\n4. 如果用户明确表示愿意帮忙，先向用户表示感谢，然后告知对方会马上送干净的水过去。\n5. 如果用户表示不愿意帮忙，表达遗憾，说明你会自己想办法给大象安排洗澡。\n6. 如果用户答非所问，没有提到和大象洗澡相关的内容，友好地把话题拉回，重复你当前提出的问题。\n7. 当你告知用户会送水后，对话结束，不需要再提出新问题。\n# 3. 背景信息\n你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。\n# 4. 语言风格\n- 使用 CEFR A1-A2 等级英语，避免复杂句，每句话不超过 10 个词，比如\n \"目的地\" 可以用句子 Where are you going？，不用 destination，确保小学2-4年级的孩子能听懂\n- 回答一般不超过两句话\n- 避免重复表达，适当变换措辞\n# 5. 开场白 (仅用于首轮)\n由你开始对话，你会问用户：\"Hi. What happened to the elephant?\"\n# 6. 回应方式\n- 无论用户如何对话，你都应基于你的身份做出合理反应。\n- 每次最多只提问一个问题，等待用户回答后再继续。\n- 除开场轮次外，每次回应，可以先基于用户的话给一句反馈。然后再推进你的任务。", "scene": "你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。", "in_progress_goal": "用户告诉清洁站的工人，大象需要洗澡，并且表示乐意帮助，要求 Logan 送一些干净的水过来。", "final_goal": "用户告诉清洁站的工人，大象需要洗澡，并提出需要一些水。", "reference_dialog": "Logan: Hi. What happened to the elephant?\nUser: The elephant needs a shower. Let's set up a shower for her.\nLogan: Are you saying she hasn't had a shower yet? Maybe someone will probably come soon.\nUser: Instead of waiting here, we'd better get some water for her first.\nLogan: The keepers are too careless! Thank you! Can you help her shower?\nUser: We'd love to help.\nLogan: Great. We will send some water to her right away.", "user_task": "请你告诉清洁站的工人，大象需要洗澡，你们乐意帮助，希望送一些干净的水过来。", "user_scene": "你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。", "user_knowledge": "Let's... 让我们……\nInstead of..., we'd better... 与其……，我们不如……\n... love(s) to... ……很乐意……" } } }
studyInfo

learningPart

{ "opening": { "type": "npc", "npcName": "Logan", "content": "Hi. What happened to the elephant?" }, "wrongReadLeadIn": { "type": "npc", "content": "请根据提词框内的内容大声地朗读这句话", "npcName": "Brainy" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Logan在问大象发生什么事啦，现在你需要告诉他大象需要洗澡，我们想要给她安排一次淋浴哦。" }, "optionList": [ { "option": "The elephant needs a shower. Let's set up a shower for her.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒啦，回答完全正确！现在试着大声把这句话朗读出来吧~" } }, { "option": "The elephant is hungry. We need to give her some bananas.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“大象饿了，我们需要给她一些香蕉”，现在我们要告诉Logan的是大象需要洗澡，不是饿啦，再试一次吧。" } }, { "option": "The keeper is looking for the elephant everywhere.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“饲养员正在到处找大象”，和我们现在要说明的大象需要洗澡的内容不相符，再选一次吧。" } } ], "answer": [ 0 ], "read": { "type": "user", "content": "The elephant needs a shower. Let's set up a shower for her." }, "feedback": { "type": "npc", "npcName": "Logan", "content": "Are you saying she hasn't had a shower yet? Maybe someone will probably come soon." } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Logan说“你是说她还没洗澡吗？可能很快就会有人过来了”，现在你要回应他，比起在这里等，我们最好先给她取点水哦。" }, "optionList": [ { "option": "We have to wait for the keeper to come first.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“我们必须先等饲养员过来”，和我们要表达的不等了、先去取水的意思正好相反，再试一次吧。" } }, { "option": "Instead of waiting here, we'd better get some water for her first.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你选对啦，非常棒！试着把这句话大声读出来吧~" } }, { "option": "Do you know where the keeper is now?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“你知道饲养员现在在哪里吗”，不是我们现在要表达的主动提出先去取水的内容哦，再选一次吧。" } } ], "answer": [ 1 ], "read": { "type": "user", "content": "Instead of waiting here, we'd better get some water for her first." }, "feedback": { "type": "npc", "npcName": "Logan", "content": "The keepers are too careless! Thank you! Can you help her shower?" } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Logan说“饲养员太粗心了！谢谢你们！你们能帮她洗澡吗？”，现在你要告诉他你们很乐意帮忙哦。" }, "optionList": [ { "option": "We'd love to help.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "回答正确，你做得太好了！快来把这句话读出来吧~" } }, { "option": "We don't have time, we have to go home now.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“我们没时间，我们现在得回家了”，我们本来就是想要帮大象洗澡的，所以这个回答不对，再试一次吧。" } }, { "option": "We are afraid we can't help you.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“恐怕我们帮不了你”，不符合我们愿意帮忙的想法哦，再试一次吧。" } } ], "answer": [ 0 ], "read": { "type": "user", "content": "We'd love to help." }, "feedback": { "type": "npc", "npcName": "Logan", "content": "Great. We will send some water to her right away." } } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "太棒啦！你已经成功完成了这次对话任务，顺利和Logan沟通好了帮大象洗澡的事，你表现得超棒哦！" } }

{ "learningPart": { "opening": { "type": "npc", "npcName": "Logan", "content": "Hi. What happened to the elephant?" }, "wrongReadLeadIn": { "type": "npc", "content": "请根据提词框内的内容大声地朗读这句话", "npcName": "Brainy" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Logan在问大象发生什么事啦，现在你需要告诉他大象需要洗澡，我们想要给她安排一次淋浴哦。" }, "optionList": [ { "option": "The elephant needs a shower. Let's set up a shower for her.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒啦，回答完全正确！现在试着大声把这句话朗读出来吧~" } }, { "option": "The elephant is hungry. We need to give her some bananas.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“大象饿了，我们需要给她一些香蕉”，现在我们要告诉Logan的是大象需要洗澡，不是饿啦，再试一次吧。" } }, { "option": "The keeper is looking for the elephant everywhere.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“饲养员正在到处找大象”，和我们现在要说明的大象需要洗澡的内容不相符，再选一次吧。" } } ], "answer": [ 0 ], "read": { "type": "user", "content": "The elephant needs a shower. Let's set up a shower for her." }, "feedback": { "type": "npc", "npcName": "Logan", "content": "Are you saying she hasn't had a shower yet? Maybe someone will probably come soon." } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Logan说“你是说她还没洗澡吗？可能很快就会有人过来了”，现在你要回应他，比起在这里等，我们最好先给她取点水哦。" }, "optionList": [ { "option": "We have to wait for the keeper to come first.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“我们必须先等饲养员过来”，和我们要表达的不等了、先去取水的意思正好相反，再试一次吧。" } }, { "option": "Instead of waiting here, we'd better get some water for her first.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你选对啦，非常棒！试着把这句话大声读出来吧~" } }, { "option": "Do you know where the keeper is now?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“你知道饲养员现在在哪里吗”，不是我们现在要表达的主动提出先去取水的内容哦，再选一次吧。" } } ], "answer": [ 1 ], "read": { "type": "user", "content": "Instead of waiting here, we'd better get some water for her first." }, "feedback": { "type": "npc", "npcName": "Logan", "content": "The keepers are too careless! Thank you! Can you help her shower?" } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Logan说“饲养员太粗心了！谢谢你们！你们能帮她洗澡吗？”，现在你要告诉他你们很乐意帮忙哦。" }, "optionList": [ { "option": "We'd love to help.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "回答正确，你做得太好了！快来把这句话读出来吧~" } }, { "option": "We don't have time, we have to go home now.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“我们没时间，我们现在得回家了”，我们本来就是想要帮大象洗澡的，所以这个回答不对，再试一次吧。" } }, { "option": "We are afraid we can't help you.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，这句话是说“恐怕我们帮不了你”，不符合我们愿意帮忙的想法哦，再试一次吧。" } } ], "answer": [ 0 ], "read": { "type": "user", "content": "We'd love to help." }, "feedback": { "type": "npc", "npcName": "Logan", "content": "Great. We will send some water to her right away." } } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "太棒啦！你已经成功完成了这次对话任务，顺利和Logan沟通好了帮大象洗澡的事，你表现得超棒哦！" } } }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": null, "kpType": "sentence", "kpTitle": "Let's... 让我们……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "Instead of..., we'd better... 与其……，我们不如……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "... love(s) to... ……很乐意……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "core_speaking_reply", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Let's... 让我们……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "Instead of..., we'd better... 与其……，我们不如……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "... love(s) to... ……很乐意……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
中间结果: 学习流程配置

    ```
    # 开场回合
    Logan：Hi. What happened to the elephant?

    # 中间回合1
    Brainy：Logan在问大象发生什么事啦，现在你需要告诉他大象需要洗澡，我们想要给她安排一次淋浴哦。
    用户选项:
    （A）The elephant needs a shower. Let's set up a shower for her.
      Brainy：太棒啦，回答完全正确！现在试着大声把这句话朗读出来吧~
    （B）The elephant is hungry. We need to give her some bananas.
      Brainy：不对哦，这句话是说“大象饿了，我们需要给她一些香蕉”，现在我们要告诉Logan的是大象需要洗澡，不是饿啦，再试一次吧。
    （C）The keeper is looking for the elephant everywhere.
      Brainy：不对哦，这句话是说“饲养员正在到处找大象”，和我们现在要说明的大象需要洗澡的内容不相符，再选一次吧。
    Logan：Are you saying she hasn't had a shower yet? Maybe someone will probably come soon.

    # 中间回合2
    Brainy：Logan说“你是说她还没洗澡吗？可能很快就会有人过来了”，现在你要回应他，比起在这里等，我们最好先给她取点水哦。
    用户选项:
    （A）We have to wait for the keeper to come first.
      Brainy：不对哦，这句话是说“我们必须先等饲养员过来”，和我们要表达的不等了、先去取水的意思正好相反，再试一次吧。
    （B）Instead of waiting here, we'd better get some water for her first.
      Brainy：你选对啦，非常棒！试着把这句话大声读出来吧~
    （C）Do you know where the keeper is now?
      Brainy：不对哦，这句话是说“你知道饲养员现在在哪里吗”，不是我们现在要表达的主动提出先去取水的内容哦，再选一次吧。
    Logan：The keepers are too careless! Thank you! Can you help her shower?

    # 中间回合3
    Brainy：Logan说“饲养员太粗心了！谢谢你们！你们能帮她洗澡吗？”，现在你要告诉他你们很乐意帮忙哦。
    用户选项:
    （A）We'd love to help.
      Brainy：回答正确，你做得太好了！快来把这句话读出来吧~
    （B）We don't have time, we have to go home now.
      Brainy：不对哦，这句话是说“我们没时间，我们现在得回家了”，我们本来就是想要帮大象洗澡的，所以这个回答不对，再试一次吧。
    （C）We are afraid we can't help you.
      Brainy：不对哦，这句话是说“恐怕我们帮不了你”，不符合我们愿意帮忙的想法哦，再选一次吧。
    Logan：Great. We will send some water to her right away.

    # 结尾回合
    Brainy：太棒啦！你已经成功完成了这次对话任务，顺利和Logan沟通好了帮大象洗澡的事，你表现得超棒哦！
    ```

中间结果: promptInfo配置

    ```
    # 1. 角色（你要扮演谁）
    你是Logan，在Wander Port的清洁站工作。你的语言风格简单友好，适合儿童理解。
    # 2. 任务（你如何参与对话）
    1. 首轮主动询问用户大象的情况，确认大象是不是需要洗澡。
    2. 当用户说明大象需要洗澡后，表达疑惑，告诉用户可以等一等，或许饲养员很快就会来。
    3. 当用户提出要先自己准备水给大象洗澡后，吐槽饲养员太粗心，然后询问用户是否愿意帮忙给大象洗澡。
    4. 如果用户明确表示愿意帮忙，先向用户表示感谢，然后告知对方会马上送干净的水过去。
    5. 如果用户表示不愿意帮忙，表达遗憾，说明你会自己想办法给大象安排洗澡。
    6. 如果用户答非所问，没有提到和大象洗澡相关的内容，友好地把话题拉回，重复你当前提出的问题。
    7. 当你告知用户会送水后，对话结束，不需要再提出新问题。
    # 3. 背景信息
    你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。
    # 4. 语言风格
    - 使用 CEFR A1-A2 等级英语，避免复杂句，每句话不超过 10 个词，比如
      "目的地" 可以用句子 Where are you going？，不用 destination，确保小学2-4年级的孩子能听懂
    - 回答一般不超过两句话
    - 避免重复表达，适当变换措辞
    # 5. 开场白 (仅用于首轮)
    由你开始对话，你会问用户："Hi. What happened to the elephant?"
    # 6. 回应方式
    - 无论用户如何对话，你都应基于你的身份做出合理反应。
    - 每次最多只提问一个问题，等待用户回答后再继续。
    - 除开场轮次外，每次回应，可以先基于用户的话给一句反馈。然后再推进你的任务。
    ```

中间结果: 语音识别热词

    elephant,shower,water,keepers,help,clean,Wander Port,Logan

20 口语独白 cId: 0000800 ? 跳过 ▶
跳过: 类型 '口语独白' 尚未实现生成器
原始组件配置

    【任务标题】
    向朋友们讲述你最难忘的经历
    【任务背景】
    在 Skylar 的生日聚会上，大家提议玩一个分享最难忘经历的小游戏。Skylar 和 Otis 都分享完了，现在轮到你啦。快和朋友们说说你最难忘的经历吧！
    【任务描述】
    当你分享时，可以这样做：
    1. 先告诉大家，你要讲述一段最难忘的经历
    2. 再说说这段经历发生的时间和地点
    3. 然后说说你都做了什么
    4. 最后说说为什么让你难以忘怀
    【知识】
    Last summer, I went to... 去年夏天，我去了......
    I taught... 我教了……
    That day made me feel... 那一天，我感到......

    【切分句数设定】
    句数下限：3
    句数上限：6
    【通过规则】
    用户说出：
    1. 一件难忘的经历
    2. 描述了1-2件具体的事情
    3. 表达了自己的感受
    【示例独白】
    Hello everyone! I have an unforgettable story to share.
    Last summer, I went to a small school in the countryside.
    I taught kids easy English words about animals.
    A little boy gave me a nice drawing on my last day there.
    That day made me feel really warm and happy.

21 核心口语妙问 cId: 0000800 core_speaking_inquiry
已保存 ▶
taskInfo

cType |
cId |
title |
taskDesc |
sceneDesc | 你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。
img |
key | [ { "desc": "", "keyList": [ { "type": "default", "content": "Where can I find the gym？", "desc": "我在哪里能找到健身房？" }, { "type": "default", "content": "Can I have a towel please?？", "desc": "我能要一条毛巾吗？" }, { "type": "default", "content": "What else can I do there?", "desc": "我在那儿还能做些什么？" } ] } ]
resourceMapping | { "Eva": 738, "Peter": 739 }

{ "cType": "core_speaking_inquiry", "cId": "0000800", "title": "", "taskDesc": "你要向 Chloe 询问健身房的位置，以及讨要毛巾，做好开始运动的准备。", "sceneDesc": "你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。", "img": "", "key": [ { "desc": "", "keyList": [ { "type": "default", "content": "Where can I find the gym？", "desc": "我在哪里能找到健身房？" }, { "type": "default", "content": "Can I have a towel please?？", "desc": "我能要一条毛巾吗？" }, { "type": "default", "content": "What else can I do there?", "desc": "我在那儿还能做些什么？" } ] } ], "resourceMapping": { "Eva": 738, "Peter": 739 } }
dialogSetting

setting | { "npcName": "Chloe", "round": 5, "checkRound": 3 }

{ "setting": { "npcName": "Chloe", "round": 5, "checkRound": 3 } }
dialogConfig

config

{ "asrPrompt": "gym,towel,exercise,sightseeing,relax,walkway", "promptInfo": { "default": "# 1. 角色（你要扮演谁）\n你是Chloe，是Twilight航班的空乘，你对乘客态度友善热情，用心服务每一位乘客。\n# 2. 任务（你如何参与到整个对话）\n- 你只在用户提问时提供特定信息，不主动透露知识库中的信息。\n- 如果用户提问的内容在知识库范围内，你会准确回答。\n- 如果用户的问题不清晰，你会尝试确认问题。\n- 一般情况下，一次最多只回答知识库中的一条信息，除非用户明确地分别提问到多条信息。\n- 如果用户不提问，你会温和、自然地进行交谈。\n# 3. 背景信息\n你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。\n用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。\n你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。\n# 4. 知识库（你知道的信息）\n你知道健身房就在前方过道的尽头。\n你会为有需要的用户准备一条新毛巾。\n你会解答用户的问题，告诉用户在健身房可以进行的活动：运动、看宇宙风光（sightseeing），或者可以拉伸放松、进行休息。\n对用户的任何提问，你都耐心安抚并一一回答。\n# 5. 语言风格\n- 使用 CEFR A1-A2 等级英语，避免复杂句，每句话不超过 10 个词，比如\n \"我要去...\" 可以用句子 I am going to ...，不用 My destination is ...，确保小学2-4年级的孩子能听懂\n- 回答一般不超过两句话\n- 避免重复表达，适当变换措辞\n# 6. 开场白\n你由你开始对话，你会说：Can I help you?\n# 7. 回应方式（固定内容）\n- 你只在用户提问时才根据知识库中的信息回答。其他时候，以符合你身份的方式，自然地进行交谈。\n- 不主动提供知识库的信息\n- 不主动提问题", "scene": "你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。\n用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。\n你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。", "in_progress_goal": "用户成功问出“健身房在哪里”、“可以给我一条毛巾吗”以及“在哪儿我还能做什么”的三个问题。", "final_goal": "Chloe回答了用户关于健身房的问题，提供了耐心友好的帮助。", "reference_dialog": "Chloe: Can I help you?\nUser: Where can I find the gym?\nChloe: Look, it's over there at the end of this walkway.\nUser: Oh, and can I have a towel please? \nChloe: Of course! I'll bring a new one for you soon.\nUser: What else can I do there? \nChloe: Well, you can do some exercise and enjoy sightseeing there. Or you can just relax.", "user_task": "你要向 Chloe 询问健身房的位置，以及讨要毛巾，做好开始运动的准备。", "user_scene": "你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。\n用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。\n你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。", "user_knowledge": "Where can I find the gym？我在哪里能找到健身房？\nCan I have a towel please?？我能要一条毛巾吗？\nWhat else can I do there? 我在那儿还能做些什么？" } }

{ "config": { "asrPrompt": "gym,towel,exercise,sightseeing,relax,walkway", "promptInfo": { "default": "# 1. 角色（你要扮演谁）\n你是Chloe，是Twilight航班的空乘，你对乘客态度友善热情，用心服务每一位乘客。\n# 2. 任务（你如何参与到整个对话）\n- 你只在用户提问时提供特定信息，不主动透露知识库中的信息。\n- 如果用户提问的内容在知识库范围内，你会准确回答。\n- 如果用户的问题不清晰，你会尝试确认问题。\n- 一般情况下，一次最多只回答知识库中的一条信息，除非用户明确地分别提问到多条信息。\n- 如果用户不提问，你会温和、自然地进行交谈。\n# 3. 背景信息\n你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。\n用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。\n你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。\n# 4. 知识库（你知道的信息）\n你知道健身房就在前方过道的尽头。\n你会为有需要的用户准备一条新毛巾。\n你会解答用户的问题，告诉用户在健身房可以进行的活动：运动、看宇宙风光（sightseeing），或者可以拉伸放松、进行休息。\n对用户的任何提问，你都耐心安抚并一一回答。\n# 5. 语言风格\n- 使用 CEFR A1-A2 等级英语，避免复杂句，每句话不超过 10 个词，比如\n \"我要去...\" 可以用句子 I am going to ...，不用 My destination is ...，确保小学2-4年级的孩子能听懂\n- 回答一般不超过两句话\n- 避免重复表达，适当变换措辞\n# 6. 开场白\n你由你开始对话，你会说：Can I help you?\n# 7. 回应方式（固定内容）\n- 你只在用户提问时才根据知识库中的信息回答。其他时候，以符合你身份的方式，自然地进行交谈。\n- 不主动提供知识库的信息\n- 不主动提问题", "scene": "你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。\n用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。\n你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。", "in_progress_goal": "用户成功问出“健身房在哪里”、“可以给我一条毛巾吗”以及“在哪儿我还能做什么”的三个问题。", "final_goal": "Chloe回答了用户关于健身房的问题，提供了耐心友好的帮助。", "reference_dialog": "Chloe: Can I help you?\nUser: Where can I find the gym?\nChloe: Look, it's over there at the end of this walkway.\nUser: Oh, and can I have a towel please? \nChloe: Of course! I'll bring a new one for you soon.\nUser: What else can I do there? \nChloe: Well, you can do some exercise and enjoy sightseeing there. Or you can just relax.", "user_task": "你要向 Chloe 询问健身房的位置，以及讨要毛巾，做好开始运动的准备。", "user_scene": "你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。\n用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。\n你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。", "user_knowledge": "Where can I find the gym？我在哪里能找到健身房？\nCan I have a towel please?？我能要一条毛巾吗？\nWhat else can I do there? 我在那儿还能做些什么？" } } }
studyInfo

learningPart

{ "opening": { "type": "npc", "npcName": "Chloe", "content": "Can I help you?" }, "wrongReadLeadIn": { "type": "npc", "content": "请根据提词框内的内容大声地朗读这句话", "npcName": "Brainy" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "空乘Chloe主动询问你是否需要帮助，现在你需要向她询问健身房的位置。" }, "optionList": [ { "option": "Where can I find the gym?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确地问出了健身房的位置。请大声朗读这句话！" } }, { "option": "Can I have a towel please?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话是用来索要毛巾的，现在你还没询问健身房的位置哦，再试一次吧。" } }, { "option": "What else can I do there?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话是询问健身房其他功能的，现在你首先需要问清楚健身房在哪里，再选一次吧。" } } ], "answer": [ 0 ], "read": { "type": "user", "content": "Where can I find the gym?" }, "feedback": { "type": "npc", "npcName": "Chloe", "content": "Look, it's over there at the end of this walkway." } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Chloe已经告诉你健身房在走道的尽头啦，现在你可以向她讨要一条毛巾，为运动做准备。" }, "optionList": [ { "option": "Where can I find the gym?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你已经问过健身房的位置啦，现在需要索要毛巾，再试一次哦。" } }, { "option": "Can I have a towel please?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太对啦！你准确地表达了想要毛巾的需求。请大声朗读这句话！" } }, { "option": "What else can I do there?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话是询问健身房还有什么其他用途的，现在你需要先索要毛巾，再选一次吧。" } } ], "answer": [ 1 ], "read": { "type": "user", "content": "Can I have a towel please?" }, "feedback": { "type": "npc", "npcName": "Chloe", "content": "Of course! I'll bring a new one for you soon." } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Chloe答应马上给你拿一条新毛巾，现在你可以问问在健身房里还能做些什么，了解更多相关信息。" }, "optionList": [ { "option": "Where can I find the gym?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你已经知道健身房的位置啦，现在可以问问健身房的其他功能，再试一次哦。" } }, { "option": "Can I have a towel please?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你已经要过毛巾啦，Chloe也已经答应给你拿了，换一个问题问问吧。" } }, { "option": "What else can I do there?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "非常好！你正确提出了关于健身房其他用途的问题。请大声朗读这句话！" } } ], "answer": [ 2 ], "read": { "type": "user", "content": "What else can I do there?" }, "feedback": { "type": "npc", "npcName": "Chloe", "content": "Well, you can do some exercise and enjoy sightseeing there. Or you can just relax." } } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "Chloe已经告诉你在健身房可以运动、观景或者放松，你已经问清了健身房位置、要到了毛巾，也了解了健身房的功能，任务圆满完成啦！" } }

{ "learningPart": { "opening": { "type": "npc", "npcName": "Chloe", "content": "Can I help you?" }, "wrongReadLeadIn": { "type": "npc", "content": "请根据提词框内的内容大声地朗读这句话", "npcName": "Brainy" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "空乘Chloe主动询问你是否需要帮助，现在你需要向她询问健身房的位置。" }, "optionList": [ { "option": "Where can I find the gym?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确地问出了健身房的位置。请大声朗读这句话！" } }, { "option": "Can I have a towel please?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话是用来索要毛巾的，现在你还没询问健身房的位置哦，再试一次吧。" } }, { "option": "What else can I do there?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话是询问健身房其他功能的，现在你首先需要问清楚健身房在哪里，再选一次吧。" } } ], "answer": [ 0 ], "read": { "type": "user", "content": "Where can I find the gym?" }, "feedback": { "type": "npc", "npcName": "Chloe", "content": "Look, it's over there at the end of this walkway." } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Chloe已经告诉你健身房在走道的尽头啦，现在你可以向她讨要一条毛巾，为运动做准备。" }, "optionList": [ { "option": "Where can I find the gym?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你已经问过健身房的位置啦，现在需要索要毛巾，再试一次哦。" } }, { "option": "Can I have a towel please?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太对啦！你准确地表达了想要毛巾的需求。请大声朗读这句话！" } }, { "option": "What else can I do there?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话是询问健身房还有什么其他用途的，现在你需要先索要毛巾，再选一次吧。" } } ], "answer": [ 1 ], "read": { "type": "user", "content": "Can I have a towel please?" }, "feedback": { "type": "npc", "npcName": "Chloe", "content": "Of course! I'll bring a new one for you soon." } }, { "question": { "type": "npc", "npcName": "Brainy", "content": "Chloe答应马上给你拿一条新毛巾，现在你可以问问在健身房里还能做些什么，了解更多相关信息。" }, "optionList": [ { "option": "Where can I find the gym?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你已经知道健身房的位置啦，现在可以问问健身房的其他功能，再试一次哦。" } }, { "option": "Can I have a towel please?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "你已经要过毛巾啦，Chloe也已经答应给你拿了，换一个问题问问吧。" } }, { "option": "What else can I do there?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "非常好！你正确提出了关于健身房其他用途的问题。请大声朗读这句话！" } } ], "answer": [ 2 ], "read": { "type": "user", "content": "What else can I do there?" }, "feedback": { "type": "npc", "npcName": "Chloe", "content": "Well, you can do some exercise and enjoy sightseeing there. Or you can just relax." } } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "Chloe已经告诉你在健身房可以运动、观景或者放松，你已经问清了健身房位置、要到了毛巾，也了解了健身房的功能，任务圆满完成啦！" } } }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": null, "kpType": "sentence", "kpTitle": "Where can I find the gym？我在哪里能找到健身房？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "Can I have a towel please?？我能要一条毛巾吗？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "What else can I do there? 我在那儿还能做些什么？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "core_speaking_inquiry", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Where can I find the gym？我在哪里能找到健身房？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "Can I have a towel please?？我能要一条毛巾吗？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "What else can I do there? 我在那儿还能做些什么？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
中间结果: 学习流程配置

    ```
    # 开场回合
    Chloe：Can I help you?

    # 中间回合1
    Brainy：空乘Chloe主动询问你是否需要帮助，现在你需要向她询问健身房的位置。
    用户选项:
    （选项A）Where can I find the gym? [正确]
      Brainy：太棒了！你正确地问出了健身房的位置。请大声朗读这句话！
    （选项B）Can I have a towel please?
      Brainy：这句话是用来索要毛巾的，现在你还没询问健身房的位置哦，再试一次吧。
    （选项C）What else can I do there?
      Brainy：这句话是询问健身房其他功能的，现在你首先需要问清楚健身房在哪里，再选一次吧。
    Chloe：Look, it's over there at the end of this walkway.

    # 中间回合2
    Brainy：Chloe已经告诉你健身房在走道的尽头啦，现在你可以向她讨要一条毛巾，为运动做准备。
    用户选项:
    （选项A）Where can I find the gym?
      Brainy：你已经问过健身房的位置啦，现在需要索要毛巾，再试一次哦。
    （选项B）Can I have a towel please? [正确]
      Brainy：太对啦！你准确地表达了想要毛巾的需求。请大声朗读这句话！
    （选项C）What else can I do there?
      Brainy：这句话是询问健身房还有什么其他用途的，现在你需要先索要毛巾，再选一次吧。
    Chloe：Of course! I'll bring a new one for you soon.

    # 中间回合3
    Brainy：Chloe答应马上给你拿一条新毛巾，现在你可以问问在健身房里还能做些什么，了解更多相关信息。
    用户选项:
    （选项A）Where can I find the gym?
      Brainy：你已经知道健身房的位置啦，现在可以问问健身房的其他功能，再试一次哦。
    （选项B）Can I have a towel please?
      Brainy：你已经要过毛巾啦，Chloe也已经答应给你拿了，换一个问题问问吧。
    （选项C）What else can I do there? [正确]
      Brainy：非常好！你正确提出了关于健身房其他用途的问题。请大声朗读这句话！
    Chloe：Well, you can do some exercise and enjoy sightseeing there. Or you can just relax.

    # 结尾回合
    Brainy：Chloe已经告诉你在健身房可以运动、观景或者放松，你已经问清了健身房位置、要到了毛巾，也了解了健身房的功能，任务圆满完成啦！
    ```

中间结果: promptInfo配置

    ```
    # 1. 角色（你要扮演谁）
    你是Chloe，是Twilight航班的空乘，你对乘客态度友善热情，用心服务每一位乘客。
    # 2. 任务（你如何参与到整个对话）
    - 你只在用户提问时提供特定信息，不主动透露知识库中的信息。
    - 如果用户提问的内容在知识库范围内，你会准确回答。
    - 如果用户的问题不清晰，你会尝试确认问题。
    - 一般情况下，一次最多只回答知识库中的一条信息，除非用户明确地分别提问到多条信息。
    - 如果用户不提问，你会温和、自然地进行交谈。
    # 3. 背景信息
    你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。
    用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。
    你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。
    # 4. 知识库（你知道的信息）
    你知道健身房就在前方过道的尽头。
    你会为有需要的用户准备一条新毛巾。
    你会解答用户的问题，告诉用户在健身房可以进行的活动：运动、看宇宙风光（sightseeing），或者可以拉伸放松、进行休息。
    对用户的任何提问，你都耐心安抚并一一回答。
    # 5. 语言风格
    - 使用 CEFR A1-A2 等级英语，避免复杂句，每句话不超过 10 个词，比如
      "我要去..." 可以用句子 I am going to ...，不用 My destination is ...，确保小学2-4年级的孩子能听懂
    - 回答一般不超过两句话
    - 避免重复表达，适当变换措辞
    # 6. 开场白
    你由你开始对话，你会说：Can I help you?
    # 7. 回应方式（固定内容）
    - 你只在用户提问时才根据知识库中的信息回答。其他时候，以符合你身份的方式，自然地进行交谈。
    - 不主动提供知识库的信息
    - 不主动提问题
    ```

中间结果: 语音识别热词

    gym,towel,exercise,sightseeing,relax,walkway

22 核心看图说话 cId: 0000800 core_speaking_image
已保存 ▶
taskInfo

cType |
cId |
title |
taskDesc |
sceneDesc |
key | [ { "desc": "", "keyList": [ { "type": "default", "content": "winter", "desc": "n. 冬天" }, { "type": "default", "content": "cold", "desc": "adj. 冷的" }, { "type": "default", "content": "snow", "desc": "n. 雪" } ] } ]
resourceMapping | { "Eva": 738, "Peter": 739 }
cDesc | NPC: What season is it? User: Winter. NPC: Is it hot or cold? User: Cold. NPC: What do you see in winter? User: Snow.

{ "cType": "core_speaking_image", "cId": "0000800", "title": "回答Mr Rock的问题", "taskDesc": "回答Mr Rock的问题", "sceneDesc": "Mr Rock 要给我们煮东西吃，看着暖腾腾的热气，听着咕咚咚的水声，闻着香飘飘的味道，心里美滋滋。等待开饭的时间里，和 Mr Rock 聊聊天吧。", "key": [ { "desc": "", "keyList": [ { "type": "default", "content": "winter", "desc": "n. 冬天" }, { "type": "default", "content": "cold", "desc": "adj. 冷的" }, { "type": "default", "content": "snow", "desc": "n. 雪" } ] } ], "resourceMapping": { "Eva": 738, "Peter": 739 }, "cDesc": "NPC: What season is it?\nUser: Winter.\nNPC: Is it hot or cold?\nUser: Cold.\nNPC: What do you see in winter?\nUser: Snow." }
dialogConfig

config

{ "asrPrompt": "winter,cold,snow,season,hot", "promptInfo": { "user_scene": "Mr Rock 要给我们煮东西吃，看着暖腾腾的热气，听着咕咚咚的水声，闻着香飘飘的味道，心里美滋滋。等待开饭的时间里，和 Mr Rock 聊聊天吧。", "user_task": "回答 Mr Rock 的问题", "user_knowledge": "winter 冬天\ncold 冷的\nsnow 雪", "pass_condition": "用户说出：\n1. 冬天\n2. 冷的\n3. 雪", "reference_dialog": "NPC: What season is it?\nUser: Winter.\nNPC: Is it hot or cold?\nUser: Cold.\nNPC: What do you see in winter?\nUser: Snow.", "questionList": [ { "type": "npc", "npcName": "Rock", "content": "What season is it?", "index": 0, "answerText": "Winter." }, { "type": "npc", "npcName": "Rock", "content": "Is it hot or cold?", "index": 1, "answerText": "Cold." }, { "type": "npc", "npcName": "Rock", "content": "What do you see in winter?", "index": 2, "answerText": "Snow." } ] } }

{ "config": { "asrPrompt": "winter,cold,snow,season,hot", "promptInfo": { "user_scene": "Mr Rock 要给我们煮东西吃，看着暖腾腾的热气，听着咕咚咚的水声，闻着香飘飘的味道，心里美滋滋。等待开饭的时间里，和 Mr Rock 聊聊天吧。", "user_task": "回答 Mr Rock 的问题", "user_knowledge": "winter 冬天\ncold 冷的\nsnow 雪", "pass_condition": "用户说出：\n1. 冬天\n2. 冷的\n3. 雪", "reference_dialog": "NPC: What season is it?\nUser: Winter.\nNPC: Is it hot or cold?\nUser: Cold.\nNPC: What do you see in winter?\nUser: Snow.", "questionList": [ { "type": "npc", "npcName": "Rock", "content": "What season is it?", "index": 0, "answerText": "Winter." }, { "type": "npc", "npcName": "Rock", "content": "Is it hot or cold?", "index": 1, "answerText": "Cold." }, { "type": "npc", "npcName": "Rock", "content": "What do you see in winter?", "index": 2, "answerText": "Snow." } ] } } }
studyInfo

learningPart

[ { "leadIn": { "type": "npc", "npcName": "Rock", "content": "What season is it?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Rock 老师问你现在是什么季节，你需要回答他现在的季节哦。", "index": 0 }, "optionList": [ { "option": "Winter.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确回答了现在是冬季。请大声朗读这句话！" } }, { "option": "Cold.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“寒冷的”，但老师现在问的是现在是什么季节，不是问天气感受哦。请再仔细听清问题，告诉老师现在的季节。" } }, { "option": "Snow.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“雪”，但老师现在问的是现在是什么季节，不是问冬天能看到的东西哦。请再仔细听清问题，告诉老师现在的季节。" } } ], "answer": [ 0 ], "read": { "type": "npc", "npcName": "User", "content": "Winter." } } ] }, { "leadIn": { "type": "npc", "npcName": "Rock", "content": "Is it hot or cold?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Rock 老师现在问你天气是热还是冷，你需要回答他冬天的天气感受哦。", "index": 1 }, "optionList": [ { "option": "Winter.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“冬季”，但老师现在问的是天气是热还是冷，不是问当前的季节哦。请再仔细听清问题，告诉老师冬天的天气感受。" } }, { "option": "Cold.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确回答了冬天天气很冷。请大声朗读这句话！" } }, { "option": "Snow.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“雪”，但老师现在问的是天气的冷热感受，不是问冬天能看到的东西哦。请再仔细听清问题，告诉老师冬天的天气感受。" } } ], "answer": [ 1 ], "read": { "type": "npc", "npcName": "User", "content": "Cold." } } ] }, { "leadIn": { "type": "npc", "npcName": "Rock", "content": "What do you see in winter?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Rock 老师现在问你在冬天能看到什么，你需要回答他冬天特有的事物哦。", "index": 2 }, "optionList": [ { "option": "Winter.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“冬季”，但老师现在问的是冬天能看到什么东西，不是问当前的季节哦。请再仔细听清问题，告诉老师冬天能看到的事物。" } }, { "option": "Cold.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“寒冷的”，但老师现在问的是冬天能看到什么东西，不是问天气感受哦。请再仔细听清问题，告诉老师冬天能看到的事物。" } }, { "option": "Snow.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确回答了冬天能看到雪。请大声朗读这句话！" } } ], "answer": [ 2 ], "read": { "type": "npc", "npcName": "User", "content": "Snow." }, "feedback": { "type": "npc", "npcName": "Rock", "content": "You did a great job answering all my questions about winter!" } } ] } ]

closing | { "type": "npc", "npcName": "Brainy", "content": "你已经顺利回答了Rock老师的所有问题，完成了本次关于冬季相关表达的学习任务，掌握了季节、天气感受和冬季特有事物的英文表述，很棒哦！" }

{ "learningPart": [ { "leadIn": { "type": "npc", "npcName": "Rock", "content": "What season is it?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Rock 老师问你现在是什么季节，你需要回答他现在的季节哦。", "index": 0 }, "optionList": [ { "option": "Winter.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确回答了现在是冬季。请大声朗读这句话！" } }, { "option": "Cold.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“寒冷的”，但老师现在问的是现在是什么季节，不是问天气感受哦。请再仔细听清问题，告诉老师现在的季节。" } }, { "option": "Snow.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“雪”，但老师现在问的是现在是什么季节，不是问冬天能看到的东西哦。请再仔细听清问题，告诉老师现在的季节。" } } ], "answer": [ 0 ], "read": { "type": "npc", "npcName": "User", "content": "Winter." } } ] }, { "leadIn": { "type": "npc", "npcName": "Rock", "content": "Is it hot or cold?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Rock 老师现在问你天气是热还是冷，你需要回答他冬天的天气感受哦。", "index": 1 }, "optionList": [ { "option": "Winter.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“冬季”，但老师现在问的是天气是热还是冷，不是问当前的季节哦。请再仔细听清问题，告诉老师冬天的天气感受。" } }, { "option": "Cold.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确回答了冬天天气很冷。请大声朗读这句话！" } }, { "option": "Snow.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“雪”，但老师现在问的是天气的冷热感受，不是问冬天能看到的东西哦。请再仔细听清问题，告诉老师冬天的天气感受。" } } ], "answer": [ 1 ], "read": { "type": "npc", "npcName": "User", "content": "Cold." } } ] }, { "leadIn": { "type": "npc", "npcName": "Rock", "content": "What do you see in winter?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "Rock 老师现在问你在冬天能看到什么，你需要回答他冬天特有的事物哦。", "index": 2 }, "optionList": [ { "option": "Winter.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“冬季”，但老师现在问的是冬天能看到什么东西，不是问当前的季节哦。请再仔细听清问题，告诉老师冬天能看到的事物。" } }, { "option": "Cold.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这句话的意思是“寒冷的”，但老师现在问的是冬天能看到什么东西，不是问天气感受哦。请再仔细听清问题，告诉老师冬天能看到的事物。" } }, { "option": "Snow.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！你正确回答了冬天能看到雪。请大声朗读这句话！" } } ], "answer": [ 2 ], "read": { "type": "npc", "npcName": "User", "content": "Snow." }, "feedback": { "type": "npc", "npcName": "Rock", "content": "You did a great job answering all my questions about winter!" } } ] } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "你已经顺利回答了Rock老师的所有问题，完成了本次关于冬季相关表达的学习任务，掌握了季节、天气感受和冬季特有事物的英文表述，很棒哦！" } }
imageInfo

questionImg |

{ "questionImg": "0000800_question.png" }
questionList
[{'type': 'npc', 'npcName': 'Rock', 'content': 'What season is it?', 'index': 0, 'answerText': 'Winter.'}, {'type': 'npc', 'npcName': 'Rock', 'content': 'Is it hot or cold?', 'index': 1, 'answerText': 'Cold.'}, {'type': 'npc', 'npcName': 'Rock', 'content': 'What do you see in winter?', 'index': 2, 'answerText': 'Snow.'}]
optionList
[{'option': '0000800_option_00.png'}, {'option': '0000800_option_01.png'}, {'option': '0000800_option_02.png'}]
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "winter 冬天", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "cold 冷的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "snow 雪", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "core_speaking_image", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "winter 冬天", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "cold 冷的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "snow 雪", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
中间结果: 学习流程配置

    ```
    # 中间回合1
    Rock：What season is it?
    Brainy：Rock 老师问你现在是什么季节，你需要回答他现在的季节哦。
    用户选项:
    （选项 A）Winter. [正确]
      Brainy：太棒了！你正确回答了现在是冬季。请大声朗读这句话！
    （选项 B）Cold.
      Brainy：这句话的意思是“寒冷的”，但老师现在问的是现在是什么季节，不是问天气感受哦。请再仔细听清问题，告诉老师现在的季节。
    （选项 C）Snow.
      Brainy：这句话的意思是“雪”，但老师现在问的是现在是什么季节，不是问冬天能看到的东西哦。请再仔细听清问题，告诉老师现在的季节。

    # 中间回合2
    Rock：Is it hot or cold?
    Brainy：Rock 老师现在问你天气是热还是冷，你需要回答他冬天的天气感受哦。
    用户选项:
    （选项 A）Winter.
      Brainy：这句话的意思是“冬季”，但老师现在问的是天气是热还是冷，不是问当前的季节哦。请再仔细听清问题，告诉老师冬天的天气感受。
    （选项 B）Cold. [正确]
      Brainy：太棒了！你正确回答了冬天天气很冷。请大声朗读这句话！
    （选项 C）Snow.
      Brainy：这句话的意思是“雪”，但老师现在问的是天气的冷热感受，不是问冬天能看到的东西哦。请再仔细听清问题，告诉老师冬天的天气感受。

    # 中间回合3
    Rock：What do you see in winter?
    Brainy：Rock 老师现在问你在冬天能看到什么，你需要回答他冬天特有的事物哦。
    用户选项:
    （选项 A）Winter.
      Brainy：这句话的意思是“冬季”，但老师现在问的是冬天能看到什么东西，不是问当前的季节哦。请再仔细听清问题，告诉老师冬天能看到的事物。
    （选项 B）Cold.
      Brainy：这句话的意思是“寒冷的”，但老师现在问的是冬天能看到什么东西，不是问天气感受哦。请再仔细听清问题，告诉老师冬天能看到的事物。
    （选项 C）Snow. [正确]
      Brainy：太棒了！你正确回答了冬天能看到雪。请大声朗读这句话！

    # 结尾回合
    Brainy：你已经顺利回答了 Rock 老师的所有问题，这次聊天任务完成啦，很快就能吃到热乎的食物咯！
    ```

中间结果: 语音识别热词

    winter,cold,snow,season,hot

23 核心合作听力 cId: 0000800 core_listening_order
已保存 ▶
taskInfo

cType |
cId |
title |
sceneDesc |
img |
key | [ { "desc": "", "keyList": [ { "type": "default", "content": "bake", "desc": "v. 烘焙；烤制" }, { "type": "default", "content": "healthy", "desc": "adj. 健康的" }, { "type": "default", "content": "money", "desc": "n. 钱" }, { "type": "default", "content": "cake", "desc": "n. 蛋糕" }, { "type": "default", "content": "alcohol", "desc": "n. 含酒精饮料" } ] } ]
resourceMapping | { "Eva": 738, "Peter": 739 }

{ "cType": "core_listening_order", "cId": "0000800", "title": "通过专业健身指南帮助Shark养成健康的生活方式。", "sceneDesc": "Shark 的生活方式实在不健康，为了变强壮，居然把自己饿晕了！你想起健身达人 Max，曾经分享过一些专业健身指南，快让 Shark 听听看。", "img": "", "key": [ { "desc": "", "keyList": [ { "type": "default", "content": "bake", "desc": "v. 烘焙；烤制" }, { "type": "default", "content": "healthy", "desc": "adj. 健康的" }, { "type": "default", "content": "money", "desc": "n. 钱" }, { "type": "default", "content": "cake", "desc": "n. 蛋糕" }, { "type": "default", "content": "alcohol", "desc": "n. 含酒精饮料" } ] } ], "resourceMapping": { "Eva": 738, "Peter": 739 } }
materialInfo

audio

[ { "audioType": "File", "audioTitle": "How to live a healthy life?", "audioSource": "0330116_01", "audioText": "Second, live a healthy life.\nGo to bed on time and get up early. Try to stay away from bad things, like smoking and alcohol. These things are not good for your body.\nThird, you do not need much money.\n Keeping a healthy body is not about money. You do not need expensive things. Good habits are the most important." } ]

question

[ { "type": "npc", "npcName": "Shark", "content": "When I want sweet food, what should I do?", "optionList": [ { "option": "Buy cake at a shop", "feedback": { "type": "npc", "npcName": "Medic", "content": "You do not need to buy it." } }, { "option": "Bake at home with healthy food.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Yes! Baking at home is a good choice." } }, { "option": "Eat sweet food all the time.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Too much sweet food is not healthy." } } ], "answer": [ 1 ], "meaning": "" }, { "type": "npc", "npcName": "Shark", "content": "What should I do to live a healthy life?", "optionList": [ { "option": "Go to bed late and get up late.", "feedback": { "type": "npc", "npcName": "Medic", "content": "This is not a healthy routine." } }, { "option": "Go to bed on time and get up early.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Yes! A good routine is important." } }, { "option": "Smoke and drink alcohol.", "feedback": { "type": "npc", "npcName": "Medic", "content": "These things are bad for your body." } } ], "answer": [ 1 ], "meaning": "" }, { "type": "npc", "npcName": "Shark", "content": "What do I need to keep healthy?", "optionList": [ { "option": "A lot of money.", "feedback": { "type": "npc", "npcName": "Medic", "content": "I don't think so." } }, { "option": "Expensive things.", "feedback": { "type": "npc", "npcName": "Medic", "content": "You do not need expensive things." } }, { "option": "Good habits.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Right! Good habits are the most important." } } ], "answer": [ 2 ], "meaning": "" }, { "type": "npc", "npcName": "Shark", "content": "What is a healthy life NOT about?", "optionList": [ { "option": "Money.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Right! A healthy life is not about money." } }, { "option": "Good habits.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Good habits are very important." } }, { "option": "Healthy food.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Healthy food helps your body feel better." } } ], "answer": [ 0 ], "meaning": "" } ]

{ "audio": [ { "audioType": "File", "audioTitle": "How to live a healthy life?", "audioSource": "0330116_01", "audioText": "Second, live a healthy life.\nGo to bed on time and get up early. Try to stay away from bad things, like smoking and alcohol. These things are not good for your body.\nThird, you do not need much money.\n Keeping a healthy body is not about money. You do not need expensive things. Good habits are the most important." } ], "question": [ { "type": "npc", "npcName": "Shark", "content": "When I want sweet food, what should I do?", "optionList": [ { "option": "Buy cake at a shop", "feedback": { "type": "npc", "npcName": "Medic", "content": "You do not need to buy it." } }, { "option": "Bake at home with healthy food.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Yes! Baking at home is a good choice." } }, { "option": "Eat sweet food all the time.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Too much sweet food is not healthy." } } ], "answer": [ 1 ], "meaning": "" }, { "type": "npc", "npcName": "Shark", "content": "What should I do to live a healthy life?", "optionList": [ { "option": "Go to bed late and get up late.", "feedback": { "type": "npc", "npcName": "Medic", "content": "This is not a healthy routine." } }, { "option": "Go to bed on time and get up early.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Yes! A good routine is important." } }, { "option": "Smoke and drink alcohol.", "feedback": { "type": "npc", "npcName": "Medic", "content": "These things are bad for your body." } } ], "answer": [ 1 ], "meaning": "" }, { "type": "npc", "npcName": "Shark", "content": "What do I need to keep healthy?", "optionList": [ { "option": "A lot of money.", "feedback": { "type": "npc", "npcName": "Medic", "content": "I don't think so." } }, { "option": "Expensive things.", "feedback": { "type": "npc", "npcName": "Medic", "content": "You do not need expensive things." } }, { "option": "Good habits.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Right! Good habits are the most important." } } ], "answer": [ 2 ], "meaning": "" }, { "type": "npc", "npcName": "Shark", "content": "What is a healthy life NOT about?", "optionList": [ { "option": "Money.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Right! A healthy life is not about money." } }, { "option": "Good habits.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Good habits are very important." } }, { "option": "Healthy food.", "feedback": { "type": "npc", "npcName": "Medic", "content": "Healthy food helps your body feel better." } } ], "answer": [ 0 ], "meaning": "" } ] }
flowInfo

sequence | [ { "audio": [ 0 ] }, { "question": [ 0 ] }, { "audio": [ 1 ] }, { "question": [ 1 ] }, { "question": [ 2 ] }, { "question": [ 3 ] } ]

{ "sequence": [ { "audio": [ 0 ] }, { "question": [ 0 ] }, { "audio": [ 1 ] }, { "question": [ 1 ] }, { "question": [ 2 ] }, { "question": [ 3 ] } ] }
studyInfo

closing | { "type": "npc", "content": "很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!", "npcName": "Brainy" }

learningPart

[ { "leadIn": { "type": "npc", "content": "When you really want sweet food, like biscuits or cake, you can bake at home.", "npcName": "Brainy" }, "content": "刚刚听到的音频中，包含了一个关键短语 bake at home，意思是在家烘焙。正确的发音是 /beɪk æt həʊm/。", "type": "npc", "npcName": "Brainy", "learning": [ { "answer": [ 0 ], "meaning": "听音选句", "optionList": [ { "feedback": { "type": "npc", "content": "太棒了！你准确听出了句子里的重点短语 bake at home！", "npcName": "Brainy" }, "option": "When you really want sweet food, like biscuits or cake, you can bake at home." }, { "feedback": { "type": "npc", "content": "Oops，这句话说的是 buy at the shop，并没有提到 bake at home 哦。再仔细听一听音频内容吧！", "npcName": "Brainy" }, "option": "When you really want sweet food, like biscuits or cake, you can buy at the shop." } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来试试，你能不能听出以下哪一句话和播放的音频内容一致？" } }, { "answer": [ 0 ], "meaning": "听音选意", "optionList": [ { "feedback": { "type": "npc", "content": "太厉害啦！你完全理解了这句话的意思，还掌握了 bake at home 这个实用短语哦！", "npcName": "Brainy" }, "option": "当你非常想吃甜食，比如饼干或者蛋糕时，你可以在家烘焙。" }, { "feedback": { "type": "npc", "content": "这句话说的是去商店购买的场景，和我们听到的句子内容不一样哦，再想想看吧～", "npcName": "Brainy" }, "option": "当你非常想吃甜食，比如饼干或者蛋糕时，你可以去商店购买。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "刚刚我们听了这句话，也看到了对应的英文文本，那它是什么意思呢？快来选选看吧！" } } ] } ]

{ "closing": { "type": "npc", "content": "很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!", "npcName": "Brainy" }, "learningPart": [ { "leadIn": { "type": "npc", "content": "When you really want sweet food, like biscuits or cake, you can bake at home.", "npcName": "Brainy" }, "content": "刚刚听到的音频中，包含了一个关键短语 bake at home，意思是在家烘焙。正确的发音是 /beɪk æt həʊm/。", "type": "npc", "npcName": "Brainy", "learning": [ { "answer": [ 0 ], "meaning": "听音选句", "optionList": [ { "feedback": { "type": "npc", "content": "太棒了！你准确听出了句子里的重点短语 bake at home！", "npcName": "Brainy" }, "option": "When you really want sweet food, like biscuits or cake, you can bake at home." }, { "feedback": { "type": "npc", "content": "Oops，这句话说的是 buy at the shop，并没有提到 bake at home 哦。再仔细听一听音频内容吧！", "npcName": "Brainy" }, "option": "When you really want sweet food, like biscuits or cake, you can buy at the shop." } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来试试，你能不能听出以下哪一句话和播放的音频内容一致？" } }, { "answer": [ 0 ], "meaning": "听音选意", "optionList": [ { "feedback": { "type": "npc", "content": "太厉害啦！你完全理解了这句话的意思，还掌握了 bake at home 这个实用短语哦！", "npcName": "Brainy" }, "option": "当你非常想吃甜食，比如饼干或者蛋糕时，你可以在家烘焙。" }, { "feedback": { "type": "npc", "content": "这句话说的是去商店购买的场景，和我们听到的句子内容不一样哦，再想想看吧～", "npcName": "Brainy" }, "option": "当你非常想吃甜食，比如饼干或者蛋糕时，你可以去商店购买。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "刚刚我们听了这句话，也看到了对应的英文文本，那它是什么意思呢？快来选选看吧！" } } ] } ] }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": null, "kpType": "vocab", "kpTitle": "bake v. 烘焙；烤制", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "healthy adj. 健康的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "money n. 钱", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "cake n. 蛋糕", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "alcohol n. 含酒精饮料", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "core_listening_order", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "bake v. 烘焙；烤制", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "healthy adj. 健康的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "money n. 钱", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "cake n. 蛋糕", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "alcohol n. 含酒精饮料", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
中间结果: 学习过程配置

    ```
    # 重点句子 1
    音频文本：When you really want sweet food, like biscuits or cake, you can bake at home.
    讲解文本：刚刚听到的音频中，包含了一个关键短语 bake at home，意思是在家烘焙。正确的发音是 /beɪk æt həʊm/。
    1. 听音选句
    Brainy：接下来，我们来试试，你能不能听出以下哪一句话和播放的音频内容一致？
    - When you really want sweet food, like biscuits or cake, you can bake at home. [正确]
      - Brainy：太棒了！你准确听出了句子里的重点短语 bake at home！
    - When you really want sweet food, like biscuits or cake, you can buy at the shop.
      - Brainy：Oops，这句话说的是 buy at the shop，并没有提到 bake at home 哦。再仔细听一听音频内容吧！

    2. 听音选意
    Brainy：刚刚我们听了这句话，也看到了对应的英文文本，那它是什么意思呢？快来选选看吧！
    - 当你非常想吃甜食，比如饼干或者蛋糕时，你可以在家烘焙。[正确]
      - Brainy：太厉害啦！你完全理解了这句话的意思，还掌握了 bake at home 这个实用短语哦！
    - 当你非常想吃甜食，比如饼干或者蛋糕时，你可以去商店购买。
      - Brainy：这句话说的是去商店购买的场景，和我们听到的句子内容不一样哦，再想想看吧～
    ---
    # 完成反馈
    Brainy：很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!
    ```

中间结果: 互动描述

    You listened to an audio titled How to live a healthy life, and learned you should sleep and get up on time, stay away from smoking and alcohol, and good habits matter most instead of money.（你听了题为《如何健康生活》的音频，了解到你应该按时作息，远离烟酒，最重要的是好习惯而非金钱。）

24 听力拖拽 cId: 0000800 ? 失败 ▶
错误: LLM返回内容不是合法JSON: Expecting value: line 1 column 1 (char 0) 内容: 无
原始组件配置

    【任务标题】
    指挥大家赶鸭子
    【任务背景】
    鸭子大乱斗！手忙脚乱没有用，你现在得和伙伴们一起协作，把到处跑的鸭子赶进水里。快说说你的计划吧！
    【通关知识】
    between prep. 在……中间
    next to prep.        紧邻
    duck n. 鸭子
    【开场语】
    无
    【听力文本】
    # 文本 1
    Matt: Where should I go?
    User: Go between the red duck and the blue duck.
    User: Don't let them fight.
    # 文本 2
    Ben: What about me?
    User: You are next to the blue duck.
    # 文本 3
    Amber: And me? Where should I be?
    User: You are next to the red duck.
    User: Get it into the water!
    【题目信息】
    #单空选择
    选项图片编号：00, 01,02
    答案图片编号：00, 01,02

    【学习过程】
    句子 1
    Go between the red duck and the blue duck.【between】
    句子 2
    You are next to the blue duck.【next to】
    句子 3
    You are next to the red duck.【next to】

25 核心听力选择 cId: 0000800 core_listening_choose
已保存 ▶
taskInfo

cType |
cId |
title |
sceneDesc |

key

[ { "desc": "", "keyList": [ { "type": "default", "content": "summer", "desc": "n. 夏天" }, { "type": "default", "content": "hot", "desc": "adj. 热的" }, { "type": "default", "content": "trousers", "desc": "n. 长裤" }, { "type": "default", "content": "shorts", "desc": "n. 短裤" }, { "type": "default", "content": "It feels...", "desc": "感觉......" }, { "type": "default", "content": "Could you...", "desc": "可以请你......吗？" } ] } ]

resourceMapping | { "Vicky": 658 }
cDesc |

{ "cType": "core_listening_choose", "cId": "0000800", "title": "", "sceneDesc": "心心念念的短裤原来卡在石头间了，快抓紧时间请钓鱼叔叔帮忙钓上来吧！", "key": [ { "desc": "", "keyList": [ { "type": "default", "content": "summer", "desc": "n. 夏天" }, { "type": "default", "content": "hot", "desc": "adj. 热的" }, { "type": "default", "content": "trousers", "desc": "n. 长裤" }, { "type": "default", "content": "shorts", "desc": "n. 短裤" }, { "type": "default", "content": "It feels...", "desc": "感觉......" }, { "type": "default", "content": "Could you...", "desc": "可以请你......吗？" } ] } ], "resourceMapping": { "Vicky": 658 }, "cDesc": "请你提供完整的题目材料相关内容哦，目前缺少具体的听力材料内容、核心信息和对应的相关要点，我没办法生成符合要求的描述~" }
questionGroup
无
studyInfo

learningPart

[ { "type": "npc", "npcName": "Brainy", "content": "This summer!", "learning": [ { "question": { "content": "刚刚听到的音频中，包含了一个关键短语 summer holiday，意思是暑假。正确的发音是 summer holiday。", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "仔细听音频，选出你听到的句子哦。", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "This summer holiday!", "feedback": { "type": "npc", "content": "太厉害啦！你精准听出了句子里的重点短语 summer holiday！", "npcName": "Brainy" } }, { "option": "This winter holiday!", "feedback": { "type": "npc", "content": "哎呀，这句话里说的是 winter holiday（寒假），不是我们听到的内容哦，再仔细听听看吧~", "npcName": "Brainy" } } ], "answer": [ 0 ] }, { "question": { "content": "This summer!", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "“这个寒假！”这句话的意思是这个吗？", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "错 / No", "feedback": { "type": "npc", "content": "答对啦！你不仅听懂了句子，还分清了 summer 和 winter 的不同意思，超棒的！", "npcName": "Brainy" } }, { "option": "对 / Yes", "feedback": { "type": "npc", "content": "不对哦，句子里说的是夏天相关的假期，不是冬天的假期，再想想看吧~", "npcName": "Brainy" } } ], "answer": [ 0 ] } ] } ]

closing | { "type": "npc", "content": "很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!", "npcName": "Brainy" }

{ "learningPart": [ { "type": "npc", "npcName": "Brainy", "content": "This summer!", "learning": [ { "question": { "content": "刚刚听到的音频中，包含了一个关键短语 summer holiday，意思是暑假。正确的发音是 summer holiday。", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "仔细听音频，选出你听到的句子哦。", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "This summer holiday!", "feedback": { "type": "npc", "content": "太厉害啦！你精准听出了句子里的重点短语 summer holiday！", "npcName": "Brainy" } }, { "option": "This winter holiday!", "feedback": { "type": "npc", "content": "哎呀，这句话里说的是 winter holiday（寒假），不是我们听到的内容哦，再仔细听听看吧~", "npcName": "Brainy" } } ], "answer": [ 0 ] }, { "question": { "content": "This summer!", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "“这个寒假！”这句话的意思是这个吗？", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "错 / No", "feedback": { "type": "npc", "content": "答对啦！你不仅听懂了句子，还分清了 summer 和 winter 的不同意思，超棒的！", "npcName": "Brainy" } }, { "option": "对 / Yes", "feedback": { "type": "npc", "content": "不对哦，句子里说的是夏天相关的假期，不是冬天的假期，再想想看吧~", "npcName": "Brainy" } } ], "answer": [ 0 ] } ] } ], "closing": { "type": "npc", "content": "很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!", "npcName": "Brainy" } }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": null, "kpType": "vocab", "kpTitle": "summer n. 夏天", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "hot adj. 热的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "trousers n. 长裤", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "shorts n. 短裤", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "It feels... 感觉......", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "Could you... 可以请你......吗？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "core_listening_choose", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "summer n. 夏天", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "hot adj. 热的", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "trousers n. 长裤", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "shorts n. 短裤", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "It feels... 感觉......", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "Could you... 可以请你......吗？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
中间结果: 学习过程配置

    ```
    # 重点句子 1
    音频文本：This summer!
    讲解文本：刚刚听到的音频中，包含了一个关键短语 summer holiday，意思是暑假。正确的发音是 summer holiday。
    1. 听音选句
    Brainy：仔细听音频，选出你听到的句子哦。
    - This summer holiday! [正确]
      - Brainy：太厉害啦！你精准听出了句子里的重点短语 summer holiday！
    - This winter holiday!
      - Brainy：哎呀，这句话里说的是 winter holiday（寒假），不是我们听到的内容哦，再仔细听听看吧~

    2. 听音选意
    Brainy：“这个寒假！”这句话的意思是这个吗？
    - 错 / No [正确]
      - Brainy：答对啦！你不仅听懂了句子，还分清了 summer 和 winter 的不同意思，超棒的！
    - 对 / Yes
      - Brainy：不对哦，句子里说的是夏天相关的假期，不是冬天的假期，再想想看吧~
    ---
    # 完成反馈
    Brainy：很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!
    ```

中间结果: 互动描述

    请你提供完整的题目材料相关内容哦，目前缺少具体的听力材料内容、核心信息和对应的相关要点，我没办法生成符合要求的描述~

26 核心看图组句 cId: 0000800 core_writing_imgMakeSentence
已保存 ▶
taskInfo

cId |
cType |
title |
taskDesc |
sceneDesc | 在森林中，Otis、Skylar 和你通过小熊猫 Bam 和无人机照片搜集到了关于飞船坠落的重要线索。你们需要将这些信息整理并汇报给 Luisa 教授，以便确定飞船的具体坠落位置。
img |
plotSummary | I saw a very cute kitten in the pet shop yesterday. The pattern on his body is black and white, like a cow. It's a month old and perfect for breeding.
stemDesc | [ "0000800-01.png", "0000800-00.png" ]
key | [ { "keyList": [ { "type": "default", "content": "I think the spaceship fell...", "desc": "我认为飞船坠落在……" }, { "type": "default", "content": "I saw trees with...", "desc": "我看到有…… 的树。" }, { "type": "default", "content": "I heard a loud noise in...", "desc": "我听到…… 方向有巨大的声音。" } ] } ]
cDesc | Dear Alex, I hope this email finds you well. We can take care of each other.（亲爱的亚历克斯：希望你一切都好。我们可以互相照顾。）

{ "cId": "0000800", "cType": "core_writing_imgMakeSentence", "title": "报告飞船坠毁事件", "taskDesc": "请根据图片内容，用英文写一段求救报告，说明你们现在的处境、遇到的困难和需要的帮助。", "sceneDesc": "在森林中，Otis、Skylar 和你通过小熊猫 Bam 和无人机照片搜集到了关于飞船坠落的重要线索。你们需要将这些信息整理并汇报给 Luisa 教授，以便确定飞船的具体坠落位置。", "img": "", "plotSummary": "I saw a very cute kitten in the pet shop yesterday. The pattern on his body is black and white, like a cow. It's a month old and perfect for breeding.", "stemDesc": [ "0000800-01.png", "0000800-00.png" ], "key": [ { "keyList": [ { "type": "default", "content": "I think the spaceship fell...", "desc": "我认为飞船坠落在……" }, { "type": "default", "content": "I saw trees with...", "desc": "我看到有…… 的树。" }, { "type": "default", "content": "I heard a loud noise in...", "desc": "我听到…… 方向有巨大的声音。" } ] } ], "cDesc": "Dear Alex, I hope this email finds you well. We can take care of each other.（亲爱的亚历克斯：希望你一切都好。我们可以互相照顾。）" }
textInfo

inputType |
passCondition |

textList

[ { "mode": "preset", "desc": "Dear Alex," }, { "mode": "universalInput", "optionList": [ { "option": "well" }, { "option": "this email" }, { "option": "you" }, { "option": "finds" }, { "option": "I hope" }, { "option": "fine" } ], "answer": [ 4, 1, 3, 2, 0 ] }, { "mode": "fillingInput", "desc": "We can ___ each other.", "optionList": [ { "option": "of" }, { "option": "take" }, { "option": "care" }, { "option": "look" }, { "option": "for" } ], "answer": [ 1, 2, 0 ] } ]

{ "inputType": "sentence", "passCondition": "用户写出：1. 坠机在一个湖附近 2. 湖周边树木有红黄色的叶子 3. Bam 听到东北方向的噪音", "textList": [ { "mode": "preset", "desc": "Dear Alex," }, { "mode": "universalInput", "optionList": [ { "option": "well" }, { "option": "this email" }, { "option": "you" }, { "option": "finds" }, { "option": "I hope" }, { "option": "fine" } ], "answer": [ 4, 1, 3, 2, 0 ] }, { "mode": "fillingInput", "desc": "We can ___ each other.", "optionList": [ { "option": "of" }, { "option": "take" }, { "option": "care" }, { "option": "look" }, { "option": "for" } ], "answer": [ 1, 2, 0 ] } ] }
studyInfo

learningPart

[ { "leadIn": { "image": "0000800-01.png" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你现在要写求救报告，首先需要在开头写上收件人的称呼，正确的称呼应该是？" }, "optionList": [ { "option": "Dear Alex,", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒啦！这是正式邮件非常标准的开头称呼，完全符合写给收件人的规范哦。" } }, { "option": "Alex, Dear", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，英文信件的称呼格式是“Dear + 称呼”，顺序反过来不符合表达习惯，再试一下吧。" } }, { "option": "Dear Alex?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "很接近啦，但称呼后面应该用感叹号或者逗号，问号是用来表示疑问的，不适合用在称呼后面哦，再调整一下吧。" } } ], "answer": [ 0 ], "write": { "desc": "Dear Alex,", "trans": "亲爱的亚历克斯：" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "image": "0000800-00.png" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "写完称呼之后，你需要在开头礼貌问候收件人，以下哪个表达是正确的问候语呀？" }, "optionList": [ { "option": "I hope this email finds you fine.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达不太准确哦，“find sb well”是固定的问候搭配，用来表示“祝一切安好”，不用fine哦，再想想看吧。" } }, { "option": "I hope this email finds you well.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太厉害了！这是商务/正式邮件里非常地道的开头问候语，意思是“希望你收到这封邮件时一切都好”，用在这里特别合适。" } }, { "option": "I hope you find this email well.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "语序不对哦，这个固定表达的主语是this email，正确的顺序是“I hope this email finds you well”，再调整一下语序就对啦。" } } ], "answer": [ 1 ], "write": { "desc": "I hope this email finds you well.", "trans": "希望您收到这封邮件时一切安好。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "image": "0000800-01.png" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你在报告里要说明你们现在可以互相照顾，以下哪个选项填入句子“We can ___ each other.”里是正确的？" }, "optionList": [ { "option": "take care of", "feedback": { "type": "npc", "npcName": "Brainy", "content": "完全正确！“take care of”是固定短语，意思是“照顾”，填入后句子就是“我们可以互相照顾”，表达完全准确哦。" } }, { "option": "look care for", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，没有“look care for”这个搭配，如果要用look表示“照顾”，应该是“look after”，再想想正确的搭配是什么吧。" } }, { "option": "take care for", "feedback": { "type": "npc", "npcName": "Brainy", "content": "很接近啦，“照顾”的正确固定搭配是“take care of”，介词应该用of而不是for哦，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "take care of", "trans": "照顾；照料" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ]

closing | { "type": "npc", "npcName": "Brainy", "content": "恭喜你，可以使用准确的表达 Dear Alex、短语 I hope this email finds you well 和 take care of，完成了求救报告中的称呼、问候和团队互助部分的写作！" }

{ "learningPart": [ { "leadIn": { "image": "0000800-01.png" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你现在要写求救报告，首先需要在开头写上收件人的称呼，正确的称呼应该是？" }, "optionList": [ { "option": "Dear Alex,", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒啦！这是正式邮件非常标准的开头称呼，完全符合写给收件人的规范哦。" } }, { "option": "Alex, Dear", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，英文信件的称呼格式是“Dear + 称呼”，顺序反过来不符合表达习惯，再试一下吧。" } }, { "option": "Dear Alex?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "很接近啦，但称呼后面应该用感叹号或者逗号，问号是用来表示疑问的，不适合用在称呼后面哦，再调整一下吧。" } } ], "answer": [ 0 ], "write": { "desc": "Dear Alex,", "trans": "亲爱的亚历克斯：" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "image": "0000800-00.png" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "写完称呼之后，你需要在开头礼貌问候收件人，以下哪个表达是正确的问候语呀？" }, "optionList": [ { "option": "I hope this email finds you fine.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达不太准确哦，“find sb well”是固定的问候搭配，用来表示“祝一切安好”，不用fine哦，再想想看吧。" } }, { "option": "I hope this email finds you well.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太厉害了！这是商务/正式邮件里非常地道的开头问候语，意思是“希望你收到这封邮件时一切都好”，用在这里特别合适。" } }, { "option": "I hope you find this email well.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "语序不对哦，这个固定表达的主语是this email，正确的顺序是“I hope this email finds you well”，再调整一下语序就对啦。" } } ], "answer": [ 1 ], "write": { "desc": "I hope this email finds you well.", "trans": "希望您收到这封邮件时一切安好。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "image": "0000800-01.png" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你在报告里要说明你们现在可以互相照顾，以下哪个选项填入句子“We can ___ each other.”里是正确的？" }, "optionList": [ { "option": "take care of", "feedback": { "type": "npc", "npcName": "Brainy", "content": "完全正确！“take care of”是固定短语，意思是“照顾”，填入后句子就是“我们可以互相照顾”，表达完全准确哦。" } }, { "option": "look care for", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，没有“look care for”这个搭配，如果要用look表示“照顾”，应该是“look after”，再想想正确的搭配是什么吧。" } }, { "option": "take care for", "feedback": { "type": "npc", "npcName": "Brainy", "content": "很接近啦，“照顾”的正确固定搭配是“take care of”，介词应该用of而不是for哦，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "take care of", "trans": "照顾；照料" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "恭喜你，可以使用准确的表达 Dear Alex、短语 I hope this email finds you well 和 take care of，完成了求救报告中的称呼、问候和团队互助部分的写作！" } }
evalInfo

title |
taskDesc |
sceneDesc | 在森林中，Otis、Skylar 和你通过小熊猫 Bam 和无人机照片搜集到了关于飞船坠落的重要线索。你们需要将这些信息整理并汇报给 Luisa 教授，以便确定飞船的具体坠落位置。
knowledge | - 地点描述 I think the spaceship fell... 我认为飞船坠落在…… I saw trees with... 我看到有…… 的树。 I heard a loud noise in... 我听到…… 方向有巨大的声音。
passCondition |

textList

[ { "mode": "preset", "desc": "Dear Alex," }, { "mode": "universalInput", "optionList": [ { "option": "well" }, { "option": "this email" }, { "option": "you" }, { "option": "finds" }, { "option": "I hope" }, { "option": "fine" } ], "answer": [ 4, 1, 3, 2, 0 ] }, { "mode": "fillingInput", "desc": "We can ___ each other.", "optionList": [ { "option": "of" }, { "option": "take" }, { "option": "care" }, { "option": "look" }, { "option": "for" } ], "answer": [ 1, 2, 0 ] } ]

{ "title": "报告飞船坠毁事件", "taskDesc": "请根据图片内容，用英文写一段求救报告，说明你们现在的处境、遇到的困难和需要的帮助。", "sceneDesc": "在森林中，Otis、Skylar 和你通过小熊猫 Bam 和无人机照片搜集到了关于飞船坠落的重要线索。你们需要将这些信息整理并汇报给 Luisa 教授，以便确定飞船的具体坠落位置。", "knowledge": "- 地点描述\nI think the spaceship fell... 我认为飞船坠落在……\nI saw trees with... 我看到有…… 的树。\nI heard a loud noise in... 我听到…… 方向有巨大的声音。", "passCondition": "用户写出：1. 坠机在一个湖附近 2. 湖周边树木有红黄色的叶子 3. Bam 听到东北方向的噪音", "textList": [ { "mode": "preset", "desc": "Dear Alex," }, { "mode": "universalInput", "optionList": [ { "option": "well" }, { "option": "this email" }, { "option": "you" }, { "option": "finds" }, { "option": "I hope" }, { "option": "fine" } ], "answer": [ 4, 1, 3, 2, 0 ] }, { "mode": "fillingInput", "desc": "We can ___ each other.", "optionList": [ { "option": "of" }, { "option": "take" }, { "option": "care" }, { "option": "look" }, { "option": "for" } ], "answer": [ 1, 2, 0 ] } ] }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": null, "kpType": "vocab", "kpTitle": "- 地点描述", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "I think the spaceship fell... 我认为飞船坠落在……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "I saw trees with... 我看到有…… 的树。", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "I heard a loud noise in... 我听到…… 方向有巨大的声音。", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "core_writing_imgMakeSentence", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "- 地点描述", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "I think the spaceship fell... 我认为飞船坠落在……", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "I saw trees with... 我看到有…… 的树。", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "I heard a loud noise in... 我听到…… 方向有巨大的声音。", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
中间结果: 学习流程配置

    ```
    # 问题1：
    Brainy: 你现在要写求救报告，首先需要在开头写上收件人的称呼，正确的称呼应该是？
    用户选项:
    （选项 A）Dear Alex, [正确]
      Brainy: 太棒啦！这是正式邮件非常标准的开头称呼，完全符合写给收件人的规范哦。
    （选项 B）Alex, Dear
      Brainy: 不对哦，英文信件的称呼格式是“Dear + 称呼”，顺序反过来不符合表达习惯，再试一下吧。
    （选项 C）Dear Alex?
      Brainy: 很接近啦，但称呼后面应该用感叹号或者逗号，问号是用来表示疑问的，不适合用在称呼后面哦，再调整一下吧。

    # 问题2：
    Brainy: 写完称呼之后，你需要在开头礼貌问候收件人，以下哪个表达是正确的问候语呀？
    用户选项:
    （选项 A）I hope this email finds you fine.
      Brainy: 这个表达不太准确哦，“find sb well”是固定的问候搭配，用来表示“祝一切安好”，不用fine哦，再想想看吧。
    （选项 B）I hope this email finds you well. [正确]
      Brainy: 太厉害了！这是商务/正式邮件里非常地道的开头问候语，意思是“希望你收到这封邮件时一切都好”，用在这里特别合适。
    （选项 C）I hope you find this email well.
      Brainy: 语序不对哦，这个固定表达的主语是this email，正确的顺序是“I hope this email finds you well”，再调整一下语序就对啦。

    # 问题3：
    Brainy: 你在报告里要说明你们现在可以互相照顾，以下哪个选项填入句子“We can ___ each other.”里是正确的？
    用户选项:
    （选项 A）take care of [正确]
      Brainy: 完全正确！“take care of”是固定短语，意思是“照顾”，填入后句子就是“我们可以互相照顾”，表达完全准确哦。
    （选项 B）look care for
      Brainy: 不对哦，没有“look care for”这个搭配，如果要用look表示“照顾”，应该是“look after”，再想想正确的搭配是什么吧。
    （选项 C）take care for
      Brainy: 很接近啦，“照顾”的正确固定搭配是“take care of”，介词应该用of而不是for哦，再试一次吧。
    ```

中间结果: 互动描述

    Dear Alex, I hope this email finds you well. We can take care of each other.（亲爱的亚历克斯：希望你一切都好。我们可以互相照顾。）

27 看图撰写 cId: 0000800 ? 失败 ▶
错误: LLM返回内容不是合法JSON: Expecting value: line 1 column 1 (char 0) 内容: 无
原始组件配置

    【任务名称】
     填写大象护理记录
    【任务背景】
     粗心的大象饲养员忘记给大象洗澡了！真是照顾不周。你们给大象洗了澡，还喂了香蕉，现在把这些都记在护理记录上吧！
    【任务描述】
     根据图片内容，填写大象护理报告。
    【题干类型】
     图片
    【题干描述】
     1
    【知识】
    elephant n. 大象
    banana n. 香蕉
    shower n. 淋浴、洗澡
    ... love(s) to... ……喜爱……

    【写作类型】
     撰写
    【写作材料】
    # 句子 1
    ##句子类型：
    全句预置
    ##句子主干
    句子主干：
    Animal Keeper's Record
    参考答案：
    /
    # 句子 2
    ##句子类型：
    挖空录入
    ##句子内容
    句子主干：
    Animal type: ___
    参考答案：
    Elephant
    ##图片编号：
    0329125_00
    # 句子 3
    ##句子类型：
    挖空录入
    ##句子内容
    句子主干：
    Food: She ate ___ .
    参考答案：
    bananas
    ## 图片编号：
    0329125_01
    # 句子 4
    ##句子类型：
    挖空录入
    ##句子内容
    句子主干：
    Cleaning: She had ___ today.
    参考答案：
    a shower
    ##图片编号：
    0329125_02
    # 句子 5
    ##句子类型：
    全句预置
    ## 句子内容
    句子主干：
    What does she love?
    参考答案：
    /
    # 句子 6
    ##句子类型：
    全句录入
    ## 句子内容
    句子主干：
    /
    参考答案：
    The elephant loves showers and bananas!
    ##图片编号：
    0329125_00
    【通过规则】
    用户能够：
    说明动物类型是大象。
    说明大象吃了香蕉。
    说明大象洗了澡。
    表达大象喜欢香蕉和洗澡。

28 核心邮件组句 cId: 0000800 core_writing_questionMakeSentence
已保存 ▶
taskInfo

cId |
cType |
title |
taskDesc |
sceneDesc | Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。
img |
plotSummary |
stemDesc | [ "What is your opinion on the job?", "Why do you want to stay?", "Ask her when to come." ]
key | [ { "keyList": [ { "type": "default", "content": "The job is...", "desc": "这份工作......" }, { "type": "default", "content": "That's why we have to...", "desc": "这就是为什么我们必须……" }, { "type": "default", "content": "When will you arrive?", "desc": "你什么时候会到？" } ] } ]
cDesc | Dear Rebecca, I know you are worried. But this is our best chance to explore Wander Port. The job is important for us. That's why we have to stay. Will you come to Wander Port some day? When will you arrive?（亲爱的丽贝卡：我知道你很担心。但这是我们探索漫游港的最佳机会。这项任务对我们来说很重要。这就是我们必须留下来的原因。你会不会哪天来漫游港呢？你什么时候会到？）

{ "cId": "0000800", "cType": "core_writing_questionMakeSentence", "title": "编写给 Rebecca 的邮件", "taskDesc": "请根据提示问题，用英文组句完成这封邮件。", "sceneDesc": "Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。", "img": "", "plotSummary": "", "stemDesc": [ "What is your opinion on the job?", "Why do you want to stay?", "Ask her when to come." ], "key": [ { "keyList": [ { "type": "default", "content": "The job is...", "desc": "这份工作......" }, { "type": "default", "content": "That's why we have to...", "desc": "这就是为什么我们必须……" }, { "type": "default", "content": "When will you arrive?", "desc": "你什么时候会到？" } ] } ], "cDesc": "Dear Rebecca, I know you are worried. But this is our best chance to explore Wander Port. The job is important for us. That's why we have to stay. Will you come to Wander Port some day? When will you arrive?（亲爱的丽贝卡：我知道你很担心。但这是我们探索漫游港的最佳机会。这项任务对我们来说很重要。这就是我们必须留下来的原因。你会不会哪天来漫游港呢？你什么时候会到？）" }
textInfo

inputType |
passCondition |

textList

[ { "mode": "preset", "desc": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port. " }, { "mode": "fillingInput", "desc": "The ___ is important for us.", "optionList": [ { "option": "job" }, { "option": "jobs" }, { "option": "projects" } ], "answer": [ 0 ] }, { "mode": "fillingInput", "desc": "That's ___ we have to stay.", "optionList": [ { "option": "why" }, { "option": "how" }, { "option": "which" } ], "answer": [ 0 ] }, { "mode": "preset", "desc": "Will you come to Wander Port some day? " }, { "mode": "fillingInput", "desc": " ___ you arrive?", "optionList": [ { "option": "When will" }, { "option": "When is" }, { "option": "How is" } ], "answer": [ 0 ] } ]

{ "inputType": "sentence", "passCondition": "用户写出：这份工作很重要。这就是我们为什么要留下。你什么时候将会到达？", "textList": [ { "mode": "preset", "desc": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port. " }, { "mode": "fillingInput", "desc": "The ___ is important for us.", "optionList": [ { "option": "job" }, { "option": "jobs" }, { "option": "projects" } ], "answer": [ 0 ] }, { "mode": "fillingInput", "desc": "That's ___ we have to stay.", "optionList": [ { "option": "why" }, { "option": "how" }, { "option": "which" } ], "answer": [ 0 ] }, { "mode": "preset", "desc": "Will you come to Wander Port some day? " }, { "mode": "fillingInput", "desc": " ___ you arrive?", "optionList": [ { "option": "When will" }, { "option": "When is" }, { "option": "How is" } ], "answer": [ 0 ] } ] }
studyInfo

learningPart

[ { "leadIn": { "desc": "What is your opinion on the job?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你在邮件里想要说明这份工作对你们的重要性，现在需要补全句子\"The ___ is important for us.\"的空缺部分。" }, "optionList": [ { "option": "job", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！这里be动词是is，说明主语是单数，\"job\"作为单数名词符合句子语法和语义要求，准确表达了这份工作对你们很重要的意思。" } }, { "option": "jobs", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"jobs\"是复数形式，后面应该搭配be动词are，但是句子里用的是is，单复数不一致，所以这个选项不合适。" } }, { "option": "projects", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"projects\"是复数形式，后面应该搭配be动词are，和句子里的is不匹配，而且语义上也不符合这里要表达的内容，再试试吧。" } } ], "answer": [ 0 ], "write": { "desc": "The job is important for us.", "trans": "这份工作对我们来说很重要。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Why do you want to stay?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想要在邮件里解释这就是你们必须留下来的原因，现在需要补全句子\"That's ___ we have to stay.\"的空缺部分。" }, "optionList": [ { "option": "why", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！\"That's why...\"是固定句式，用来引出原因，刚好对应你要解释留下来的理由的语境，非常合适。" } }, { "option": "how", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"how\"是用来表达方式的，填入的话句子就变成“那就是我们必须怎么留下来”，不符合你要解释留下来的原因的语境哦。" } }, { "option": "which", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"which\"一般引导定语从句，指代具体的事物，在这里语义不通，无法表达解释原因的含义，再想一想吧。" } } ], "answer": [ 0 ], "write": { "desc": "That's why we have to stay.", "trans": "这就是为什么我们必须留下来。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Ask her when to come." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你已经问了Rebecca会不会来Wander Port，现在想要进一步询问她什么时候会到，需要补全句子\"___ you arrive?\"的空缺部分。" }, "optionList": [ { "option": "When will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "回答正确！这里是一般将来时的特殊疑问句，询问将来的时间要用\"When will + 主语 + 动词原形\"的结构，准确表达了你询问她到达时间的意思。" } }, { "option": "When is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，句子里的动词arrive是原形，be动词is后面不能直接加动词原形，语法上是错误的。" } }, { "option": "How is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，首先\"how\"是询问方式的，不符合你要询问时间的语境，同时is后面也不能直接加动词原形arrive，语法和语义都不合适，再试试吧。" } } ], "answer": [ 0 ], "write": { "desc": "When will you arrive?", "trans": "你什么时候会到？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ]

closing | { "type": "npc", "npcName": "Brainy", "content": "恭喜你，掌握了固定句式\"That's why...\"以及一般将来时特殊疑问句的结构，成功完成了给Rebecca的邮件编写，清晰表达了你们的决定、原因以及对她到达时间的询问！" }

{ "learningPart": [ { "leadIn": { "desc": "What is your opinion on the job?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你在邮件里想要说明这份工作对你们的重要性，现在需要补全句子\"The ___ is important for us.\"的空缺部分。" }, "optionList": [ { "option": "job", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！这里be动词是is，说明主语是单数，\"job\"作为单数名词符合句子语法和语义要求，准确表达了这份工作对你们很重要的意思。" } }, { "option": "jobs", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"jobs\"是复数形式，后面应该搭配be动词are，但是句子里用的是is，单复数不一致，所以这个选项不合适。" } }, { "option": "projects", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"projects\"是复数形式，后面应该搭配be动词are，和句子里的is不匹配，而且语义上也不符合这里要表达的内容，再试试吧。" } } ], "answer": [ 0 ], "write": { "desc": "The job is important for us.", "trans": "这份工作对我们来说很重要。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Why do you want to stay?" }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想要在邮件里解释这就是你们必须留下来的原因，现在需要补全句子\"That's ___ we have to stay.\"的空缺部分。" }, "optionList": [ { "option": "why", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！\"That's why...\"是固定句式，用来引出原因，刚好对应你要解释留下来的理由的语境，非常合适。" } }, { "option": "how", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"how\"是用来表达方式的，填入的话句子就变成“那就是我们必须怎么留下来”，不符合你要解释留下来的原因的语境哦。" } }, { "option": "which", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，\"which\"一般引导定语从句，指代具体的事物，在这里语义不通，无法表达解释原因的含义，再想一想吧。" } } ], "answer": [ 0 ], "write": { "desc": "That's why we have to stay.", "trans": "这就是为什么我们必须留下来。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Ask her when to come." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你已经问了Rebecca会不会来Wander Port，现在想要进一步询问她什么时候会到，需要补全句子\"___ you arrive?\"的空缺部分。" }, "optionList": [ { "option": "When will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "回答正确！这里是一般将来时的特殊疑问句，询问将来的时间要用\"When will + 主语 + 动词原形\"的结构，准确表达了你询问她到达时间的意思。" } }, { "option": "When is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，句子里的动词arrive是原形，be动词is后面不能直接加动词原形，语法上是错误的。" } }, { "option": "How is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，首先\"how\"是询问方式的，不符合你要询问时间的语境，同时is后面也不能直接加动词原形arrive，语法和语义都不合适，再试试吧。" } } ], "answer": [ 0 ], "write": { "desc": "When will you arrive?", "trans": "你什么时候会到？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "恭喜你，掌握了固定句式\"That's why...\"以及一般将来时特殊疑问句的结构，成功完成了给Rebecca的邮件编写，清晰表达了你们的决定、原因以及对她到达时间的询问！" } }
evalInfo

title |
taskDesc |
sceneDesc | Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。
knowledge | The job is... 这份工作...... That's why we have to... 这就是为什么我们必须…… When will you arrive? 你什么时候会到？
passCondition |

textList

[ { "mode": "preset", "desc": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port. " }, { "mode": "fillingInput", "desc": "The ___ is important for us.", "optionList": [ { "option": "job" }, { "option": "jobs" }, { "option": "projects" } ], "answer": [ 0 ] }, { "mode": "fillingInput", "desc": "That's ___ we have to stay.", "optionList": [ { "option": "why" }, { "option": "how" }, { "option": "which" } ], "answer": [ 0 ] }, { "mode": "preset", "desc": "Will you come to Wander Port some day? " }, { "mode": "fillingInput", "desc": " ___ you arrive?", "optionList": [ { "option": "When will" }, { "option": "When is" }, { "option": "How is" } ], "answer": [ 0 ] } ]

{ "title": "编写给 Rebecca 的邮件", "taskDesc": "请根据提示问题，用英文组句完成这封邮件。", "sceneDesc": "Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。", "knowledge": "The job is... 这份工作......\nThat's why we have to... 这就是为什么我们必须……\nWhen will you arrive? 你什么时候会到？", "passCondition": "用户写出：这份工作很重要。这就是我们为什么要留下。你什么时候将会到达？", "textList": [ { "mode": "preset", "desc": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port. " }, { "mode": "fillingInput", "desc": "The ___ is important for us.", "optionList": [ { "option": "job" }, { "option": "jobs" }, { "option": "projects" } ], "answer": [ 0 ] }, { "mode": "fillingInput", "desc": "That's ___ we have to stay.", "optionList": [ { "option": "why" }, { "option": "how" }, { "option": "which" } ], "answer": [ 0 ] }, { "mode": "preset", "desc": "Will you come to Wander Port some day? " }, { "mode": "fillingInput", "desc": " ___ you arrive?", "optionList": [ { "option": "When will" }, { "option": "When is" }, { "option": "How is" } ], "answer": [ 0 ] } ] }
kpInfo JSON

pushType |
cType |
cId |

kpInfo

[ { "kpId": "0328017", "kpType": "sentence", "kpTitle": "The job is...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "这份工作......", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": "0328016", "kpType": "sentence", "kpTitle": "That's why we have to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "这就是为什么我们必须……", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": "0328014", "kpType": "sentence", "kpTitle": "When will you arrive?", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "你什么时候会到？", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "core_writing_questionMakeSentence", "cId": "0000800", "kpInfo": [ { "kpId": "0328017", "kpType": "sentence", "kpTitle": "The job is...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "sentence", "kpTitle": "这份工作......", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": "0328016", "kpType": "sentence", "kpTitle": "That's why we have to...", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "这就是为什么我们必须……", "kpSkill": "vocab_meaning", "kpSkillName": "词义" }, { "kpId": "0328014", "kpType": "sentence", "kpTitle": "When will you arrive?", "kpSkill": "sentence_meaning", "kpSkillName": "语义" }, { "kpId": null, "kpType": "vocab", "kpTitle": "你什么时候会到？", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
中间结果: 学习流程配置

    ```
    # 问题1：
    Brainy: 你在邮件里想要说明这份工作对你们的重要性，现在需要补全句子"The ___ is important for us."的空缺部分。
    用户选项:
    （选项 A）job [正确]
      Brainy: 答对啦！这里be动词是is，说明主语是单数，"job"作为单数名词符合句子语法和语义要求，准确表达了这份工作对你们很重要的意思。
    （选项 B）jobs
      Brainy: 不对哦，"jobs"是复数形式，后面应该搭配be动词are，但是句子里用的是is，单复数不一致，所以这个选项不合适。
    （选项 C）projects
      Brainy: 不对哦，"projects"是复数形式，后面应该搭配be动词are，和句子里的is不匹配，而且语义上也不符合这里要表达的内容，再试试吧。

    # 问题2：
    Brainy: 你想要在邮件里解释这就是你们必须留下来的原因，现在需要补全句子"That's ___ we have to stay."的空缺部分。
    用户选项:
    （选项 A）why [正确]
      Brainy: 太棒了！"That's why..."是固定句式，用来引出原因，刚好对应你要解释留下来的理由的语境，非常合适。
    （选项 B）how
      Brainy: 不对哦，"how"是用来表达方式的，填入的话句子就变成“那就是我们必须怎么留下来”，不符合你要解释留下来的原因的语境哦。
    （选项 C）which
      Brainy: 不对哦，"which"一般引导定语从句，指代具体的事物，在这里语义不通，无法表达解释原因的含义，再想一想吧。

    # 问题3：
    Brainy: 你已经问了Rebecca会不会来Wander Port，现在想要进一步询问她什么时候会到，需要补全句子"___ you arrive?"的空缺部分。
    用户选项:
    （选项 A）When will [正确]
      Brainy: 回答正确！这里是一般将来时的特殊疑问句，询问将来的时间要用"When will + 主语 + 动词原形"的结构，准确表达了你询问她到达时间的意思。
    （选项 B）When is
      Brainy: 不对哦，句子里的动词arrive是原形，be动词is后面不能直接加动词原形，语法上是错误的。
    （选项 C）How is
      Brainy: 不对哦，首先"how"是询问方式的，不符合你要询问时间的语境，同时is后面也不能直接加动词原形arrive，语法和语义都不合适，再试试吧。
    ```

中间结果: 互动描述

    Dear Rebecca, I know you are worried. But this is our best chance to explore Wander Port. The job is important for us. That's why we have to stay. Will you come to Wander Port some day? When will you arrive?（亲爱的丽贝卡：我知道你很担心。但这是我们探索漫游港的最佳机会。这项任务对我们来说很重要。这就是我们必须留下来的原因。你会不会哪天来漫游港呢？你什么时候会到？）

29 核心邮件撰写 cId: 0000800 core_writing_questionWrite
已保存 ▶
taskInfo

cId |
cType |
title |
taskDesc |
sceneDesc | Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。
img |
plotSummary |
stemDesc | [ "1. Tell her your decision and why.", "2. Ask her when she will arrive." ]
key | [ { "keyList": [ { "type": "default", "content": "The job is...", "desc": "这份工作......" }, { "type": "default", "content": "That's why we have to...", "desc": "这就是为什么我们必须……" }, { "type": "default", "content": "When will you arrive?", "desc": "你什么时候会到？" } ] } ]
cDesc | Dear Rebecca, I know you are worried. But this is our best chance to explore Wander Port. The job is important for us. That's why we have to stay. Will you come to Wander Port some day? If so, when will you arrive?（亲爱的丽贝卡：我知道你很担心。但这是我们探索漫游港的最佳机会。这项工作对我们来说很重要。这就是我们必须留下来的原因。你会有一天来漫游港吗？如果会的话，你什么时候到呢？）

{ "cId": "0000800", "cType": "core_writing_questionWrite", "title": "编写给 Rebecca 的邮件", "taskDesc": "请根据提示问题，用英文组句完成这封邮件。", "sceneDesc": "Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。", "img": "", "plotSummary": "", "stemDesc": [ "1. Tell her your decision and why.", "2. Ask her when she will arrive." ], "key": [ { "keyList": [ { "type": "default", "content": "The job is...", "desc": "这份工作......" }, { "type": "default", "content": "That's why we have to...", "desc": "这就是为什么我们必须……" }, { "type": "default", "content": "When will you arrive?", "desc": "你什么时候会到？" } ] } ], "cDesc": "Dear Rebecca, I know you are worried. But this is our best chance to explore Wander Port. The job is important for us. That's why we have to stay. Will you come to Wander Port some day? If so, when will you arrive?（亲爱的丽贝卡：我知道你很担心。但这是我们探索漫游港的最佳机会。这项工作对我们来说很重要。这就是我们必须留下来的原因。你会有一天来漫游港吗？如果会的话，你什么时候到呢？）" }
textInfo

inputType |
passCondition |

textList

[ { "mode": "preset", "desc": "Dear Rebecca,", "answerText": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "I know you are worried. But this is our best chance to explore Wander Port." }, { "mode": "fillingInput", "desc": "The ____ is important for us.", "answerText": "job", "hint": "这份工作（job）对我们来说很重要。" }, { "mode": "fillingInput", "desc": "That's ____ we have to stay.", "answerText": "why", "hint": "这就是为什么（why）我们必须留下。" }, { "mode": "preset", "desc": "Will you come to Wander Port some day?", "answerText": "Will you come to Wander Port some day?" }, { "mode": "fillingInput", "desc": "If so, _________ you arrive?", "answerText": "when will", "hint": "如果是这样的话，你什么时候（when will）将会到达？" } ]

{ "inputType": "write", "passCondition": "1. 这份工作很重要 2. 这就是我们为什么要留下 3. 你什么时候将会到达？", "textList": [ { "mode": "preset", "desc": "Dear Rebecca,", "answerText": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "I know you are worried. But this is our best chance to explore Wander Port." }, { "mode": "fillingInput", "desc": "The ____ is important for us.", "answerText": "job", "hint": "这份工作（job）对我们来说很重要。" }, { "mode": "fillingInput", "desc": "That's ____ we have to stay.", "answerText": "why", "hint": "这就是为什么（why）我们必须留下。" }, { "mode": "preset", "desc": "Will you come to Wander Port some day?", "answerText": "Will you come to Wander Port some day?" }, { "mode": "fillingInput", "desc": "If so, _________ you arrive?", "answerText": "when will", "hint": "如果是这样的话，你什么时候（when will）将会到达？" } ] }
studyInfo

learningPart

[ { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你准备开始写邮件，首先需要正确称呼收件人Rebecca，以下哪个是合适的邮件开头？" }, "optionList": [ { "option": "Dear Rebecca,", "feedback": { "type": "npc", "npcName": "Brainy", "content": "非常棒！英文邮件中用“Dear + 姓名”是非常标准正式的称呼方式，很适合给Rebecca写邮件的场景。" } }, { "option": "Hello Rebecca?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达一般用于日常口语打招呼，而且问号使用错误，正式邮件开头不适合用这种表述哦，再试试吧。" } }, { "option": "Rebecca listen:", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达语气太过强硬随意，不符合给关心你们的朋友写邮件的友好语境，不合适哦。" } } ], "answer": [ 0 ], "write": { "desc": "Dear Rebecca,", "trans": "亲爱的丽贝卡：" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想先回应Rebecca的担心，同时说明留下的理由，以下哪个句子能正确表达这个意思？" }, "optionList": [ { "option": "I know you are excited. But this is our best chance to leave Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，Rebecca是担心你们的安全，不是感到兴奋，而且你们是要留下不是离开，语义完全不符，再试一下。" } }, { "option": "I know you are worried. But this is our best chance to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太对啦！这句话既回应了Rebecca的担心，也清晰说明了你们想要留下探索Wander Port的想法，表达非常准确。" } }, { "option": "I know you are worried. But we don't want to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "后半句说你们不想探索Wander Port，和你们要留下的决定矛盾啦，不符合你要表达的意思哦。" } } ], "answer": [ 1 ], "write": { "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "trans": "我知道你很担心。但这是我们探索漫游港的最佳机会。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想说明这项工作对你们很重要，要填入合适的单词补全句子“The ____ is important for us.”，选哪个合适呢？" }, "optionList": [ { "option": "jobs", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，句子里的be动词是“is”，说明主语应该是单数，jobs是复数形式，搭配不一致哦。" } }, { "option": "job", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！job是单数形式，和后面的“is”搭配一致，准确表达了“这项工作对我们很重要”的意思。" } }, { "option": "projects", "feedback": { "type": "npc", "npcName": "Brainy", "content": "projects是复数形式，和句中的“is”主谓不一致，而且语义也不符合这里的语境哦，再试试。" } } ], "answer": [ 1 ], "write": { "desc": "The job is important for us.", "trans": "这项工作对我们来说很重要。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想解释这就是你们必须留下的原因，补全句子“That's ____ we have to stay.”，哪个选项正确？" }, "optionList": [ { "option": "why", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！“That's why...”是固定表达，意思是“这就是……的原因”，正好符合你要解释留下原因的需求。" } }, { "option": "how", "feedback": { "type": "npc", "npcName": "Brainy", "content": "填入how的话句子意思就变成“这就是我们必须留下的方式”，不符合你要解释原因的语境哦，再想想。" } }, { "option": "which", "feedback": { "type": "npc", "npcName": "Brainy", "content": "which一般用来引导定语从句指代事物，用在这里句子逻辑不通，无法表达你想要说明原因的意思哦。" } } ], "answer": [ 0 ], "write": { "desc": "That's why we have to stay.", "trans": "这就是我们必须留下来的原因。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "2. Ask her when she will arrive." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想要询问Rebecca会不会来Wander Port，以下哪个句子表达正确？" }, "optionList": [ { "option": "Will you come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "非常好！这句话准确礼貌地询问了Rebecca未来是否会来Wander Port，符合邮件的语境。" } }, { "option": "You will come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "一般疑问句需要把助动词will提前到主语前面，这个句子语序是陈述语序，表达不够规范哦。" } }, { "option": "Will you come to Wander Port every day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "“every day”是“每天”的意思，你是想问对方未来会不会来，不是问会不会每天来，语义不对哦。" } } ], "answer": [ 0 ], "write": { "desc": "Will you come to Wander Port some day?", "trans": "你会有一天来漫游港吗？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "2. Ask her when she will arrive." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "如果Rebecca会来的话，你想询问她什么时候到，补全句子“If so, _________ you arrive?”，选哪个正确？" }, "optionList": [ { "option": "when is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，句子里的动词是实义动词arrive，疑问句需要用助动词will而不是be动词is，搭配不当。" } }, { "option": "when will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！询问将来的时间要用一般将来时，“when will you arrive”语序正确，准确表达了你想问对方到达时间的意思。" } }, { "option": "how is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "how是询问方式，而且同样不能和实义动词arrive搭配使用，既不符合语义也不符合语法哦，再试试。" } } ], "answer": [ 1 ], "write": { "desc": "If so, when will you arrive?", "trans": "如果会的话，你什么时候到呢？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ]

closing | { "type": "npc", "npcName": "Brainy", "content": "恭喜你，你掌握了邮件称呼“Dear + 姓名”的正确用法，学会了使用句子“I know you are worried. But this is our best chance to explore Wander Port.”回应担忧并说明想法，还巩固了“The job is important for us.”“That's why we have to stay.”“Will you come to Wander Port some day?”“If so, when will you arrive?”等常用表达，成功完成了给Rebecca的邮件编写！" }

{ "learningPart": [ { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你准备开始写邮件，首先需要正确称呼收件人Rebecca，以下哪个是合适的邮件开头？" }, "optionList": [ { "option": "Dear Rebecca,", "feedback": { "type": "npc", "npcName": "Brainy", "content": "非常棒！英文邮件中用“Dear + 姓名”是非常标准正式的称呼方式，很适合给Rebecca写邮件的场景。" } }, { "option": "Hello Rebecca?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达一般用于日常口语打招呼，而且问号使用错误，正式邮件开头不适合用这种表述哦，再试试吧。" } }, { "option": "Rebecca listen:", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达语气太过强硬随意，不符合给关心你们的朋友写邮件的友好语境，不合适哦。" } } ], "answer": [ 0 ], "write": { "desc": "Dear Rebecca,", "trans": "亲爱的丽贝卡：" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想先回应Rebecca的担心，同时说明留下的理由，以下哪个句子能正确表达这个意思？" }, "optionList": [ { "option": "I know you are excited. But this is our best chance to leave Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，Rebecca是担心你们的安全，不是感到兴奋，而且你们是要留下不是离开，语义完全不符，再试一下。" } }, { "option": "I know you are worried. But this is our best chance to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太对啦！这句话既回应了Rebecca的担心，也清晰说明了你们想要留下探索Wander Port的想法，表达非常准确。" } }, { "option": "I know you are worried. But we don't want to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "后半句说你们不想探索Wander Port，和你们要留下的决定矛盾啦，不符合你要表达的意思哦。" } } ], "answer": [ 1 ], "write": { "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "trans": "我知道你很担心。但这是我们探索漫游港的最佳机会。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想说明这项工作对你们很重要，要填入合适的单词补全句子“The ____ is important for us.”，选哪个合适呢？" }, "optionList": [ { "option": "jobs", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，句子里的be动词是“is”，说明主语应该是单数，jobs是复数形式，搭配不一致哦。" } }, { "option": "job", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！job是单数形式，和后面的“is”搭配一致，准确表达了“这项工作对我们很重要”的意思。" } }, { "option": "projects", "feedback": { "type": "npc", "npcName": "Brainy", "content": "projects是复数形式，和句中的“is”主谓不一致，而且语义也不符合这里的语境哦，再试试。" } } ], "answer": [ 1 ], "write": { "desc": "The job is important for us.", "trans": "这项工作对我们来说很重要。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "1. Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想解释这就是你们必须留下的原因，补全句子“That's ____ we have to stay.”，哪个选项正确？" }, "optionList": [ { "option": "why", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！“That's why...”是固定表达，意思是“这就是……的原因”，正好符合你要解释留下原因的需求。" } }, { "option": "how", "feedback": { "type": "npc", "npcName": "Brainy", "content": "填入how的话句子意思就变成“这就是我们必须留下的方式”，不符合你要解释原因的语境哦，再想想。" } }, { "option": "which", "feedback": { "type": "npc", "npcName": "Brainy", "content": "which一般用来引导定语从句指代事物，用在这里句子逻辑不通，无法表达你想要说明原因的意思哦。" } } ], "answer": [ 0 ], "write": { "desc": "That's why we have to stay.", "trans": "这就是我们必须留下来的原因。" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "2. Ask her when she will arrive." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你想要询问Rebecca会不会来Wander Port，以下哪个句子表达正确？" }, "optionList": [ { "option": "Will you come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "非常好！这句话准确礼貌地询问了Rebecca未来是否会来Wander Port，符合邮件的语境。" } }, { "option": "You will come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "一般疑问句需要把助动词will提前到主语前面，这个句子语序是陈述语序，表达不够规范哦。" } }, { "option": "Will you come to Wander Port every day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "“every day”是“每天”的意思，你是想问对方未来会不会来，不是问会不会每天来，语义不对哦。" } } ], "answer": [ 0 ], "write": { "desc": "Will you come to Wander Port some day?", "trans": "你会有一天来漫游港吗？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "2. Ask her when she will arrive." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "如果Rebecca会来的话，你想询问她什么时候到，补全句子“If so, _________ you arrive?”，选哪个正确？" }, "optionList": [ { "option": "when is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，句子里的动词是实义动词arrive，疑问句需要用助动词will而不是be动词is，搭配不当。" } }, { "option": "when will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！询问将来的时间要用一般将来时，“when will you arrive”语序正确，准确表达了你想问对方到达时间的意思。" } }, { "option": "how is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "how是询问方式，而且同样不能和实义动词arrive搭配使用，既不符合语义也不符合语法哦，再试试。" } } ], "answer": [ 1 ], "write": { "desc": "If so, when will you arrive?", "trans": "如果会的话，你什么时候到呢？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "恭喜你，你掌握了邮件称呼“Dear + 姓名”的正确用法，学会了使用句子“I know you are worried. But this is our best chance to explore Wander Port.”回应担忧并说明想法，还巩固了“The job is important for us.”“That's why we have to stay.”“Will you come to Wander Port some day?”“If so, when will you arrive?”等常用表达，成功完成了给Rebecca的邮件编写！" } }
evalInfo

title |
taskDesc |
sceneDesc | Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。
knowledge | The job is... 这份工作......That's why we have to... 这就是为什么我们必须……When will you arrive? 你什么时候会到？
passCondition |

textList

[ { "mode": "preset", "desc": "Dear Rebecca,", "answerText": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "I know you are worried. But this is our best chance to explore Wander Port." }, { "mode": "fillingInput", "desc": "The ____ is important for us.", "answerText": "job", "hint": "这份工作（job）对我们来说很重要。" }, { "mode": "fillingInput", "desc": "That's ____ we have to stay.", "answerText": "why", "hint": "这就是为什么（why）我们必须留下。" }, { "mode": "preset", "desc": "Will you come to Wander Port some day?", "answerText": "Will you come to Wander Port some day?" }, { "mode": "fillingInput", "desc": "If so, _________ you arrive?", "answerText": "when will", "hint": "如果是这样的话，你什么时候（when will）将会到达？" } ]

{ "title": "编写给 Rebecca 的邮件", "taskDesc": "请根据提示问题，用英文组句完成这封邮件。", "sceneDesc": "Rebecca听上去十分担心你们的安全，你们刚刚做出了决定，要继续留在 Wander Port 进行学院的探索任务，你需要回一封邮件给她，告诉她你们的决定以及原因，顺便询问她何时会来。", "knowledge": "The job is... 这份工作......That's why we have to... 这就是为什么我们必须……When will you arrive? 你什么时候会到？", "passCondition": "1. 这份工作很重要 2. 这就是我们为什么要留下 3. 你什么时候将会到达？", "textList": [ { "mode": "preset", "desc": "Dear Rebecca,", "answerText": "Dear Rebecca," }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "I know you are worried. But this is our best chance to explore Wander Port." }, { "mode": "fillingInput", "desc": "The ____ is important for us.", "answerText": "job", "hint": "这份工作（job）对我们来说很重要。" }, { "mode": "fillingInput", "desc": "That's ____ we have to stay.", "answerText": "why", "hint": "这就是为什么（why）我们必须留下。" }, { "mode": "preset", "desc": "Will you come to Wander Port some day?", "answerText": "Will you come to Wander Port some day?" }, { "mode": "fillingInput", "desc": "If so, _________ you arrive?", "answerText": "when will", "hint": "如果是这样的话，你什么时候（when will）将会到达？" } ] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "The job is... 这份工作......That's why we have to... 这就是为什么我们必须……When will you arrive? 你什么时候会到？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "core_writing_questionWrite", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "The job is... 这份工作......That's why we have to... 这就是为什么我们必须……When will you arrive? 你什么时候会到？", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
中间结果: 学习流程配置

    ```
    # 问题1：
    Brainy: 你准备开始写邮件，首先需要正确称呼收件人Rebecca，以下哪个是合适的邮件开头？
    用户选项:
    （选项 A）Dear Rebecca, [正确]
      Brainy: 非常棒！英文邮件中用“Dear + 姓名”是非常标准正式的称呼方式，很适合给Rebecca写邮件的场景。
    （选项 B）Hello Rebecca?
      Brainy: 这个表达一般用于日常口语打招呼，而且问号使用错误，正式邮件开头不适合用这种表述哦，再试试吧。
    （选项 C）Rebecca listen:
      Brainy: 这个表达语气太过强硬随意，不符合给关心你们的朋友写邮件的友好语境，不合适哦。

    # 问题2：
    Brainy: 你想先回应Rebecca的担心，同时说明留下的理由，以下哪个句子能正确表达这个意思？
    用户选项:
    （选项 A）I know you are excited. But this is our best chance to leave Wander Port.
      Brainy: 不对哦，Rebecca是担心你们的安全，不是感到兴奋，而且你们是要留下不是离开，语义完全不符，再试一下。
    （选项 B）I know you are worried. But this is our best chance to explore Wander Port. [正确]
      Brainy: 太对啦！这句话既回应了Rebecca的担心，也清晰说明了你们想要留下探索Wander Port的想法，表达非常准确。
    （选项 C）I know you are worried. But we don't want to explore Wander Port.
      Brainy: 后半句说你们不想探索Wander Port，和你们要留下的决定矛盾啦，不符合你要表达的意思哦。

    # 问题3：
    Brainy: 你想说明这项工作对你们很重要，要填入合适的单词补全句子“The ____ is important for us.”，选哪个合适呢？
    用户选项:
    （选项 A）jobs
      Brainy: 不对哦，句子里的be动词是“is”，说明主语应该是单数，jobs是复数形式，搭配不一致哦。
    （选项 B）job [正确]
      Brainy: 答对啦！job是单数形式，和后面的“is”搭配一致，准确表达了“这项工作对我们很重要”的意思。
    （选项 C）projects
      Brainy: projects是复数形式，和句中的“is”主谓不一致，而且语义也不符合这里的语境哦，再试试。

    # 问题4：
    Brainy: 你想解释这就是你们必须留下的原因，补全句子“That's ____ we have to stay.”，哪个选项正确？
    用户选项:
    （选项 A）why [正确]
      Brainy: 太棒了！“That's why...”是固定表达，意思是“这就是……的原因”，正好符合你要解释留下原因的需求。
    （选项 B）how
      Brainy: 填入how的话句子意思就变成“这就是我们必须留下的方式”，不符合你要解释原因的语境哦，再想想。
    （选项 C）which
      Brainy: which一般用来引导定语从句指代事物，用在这里句子逻辑不通，无法表达你想要说明原因的意思哦。

    # 问题5：
    Brainy: 你想要询问Rebecca会不会来Wander Port，以下哪个句子表达正确？
    用户选项:
    （选项 A）Will you come to Wander Port some day? [正确]
      Brainy: 非常好！这句话准确礼貌地询问了Rebecca未来是否会来Wander Port，符合邮件的语境。
    （选项 B）You will come to Wander Port some day?
      Brainy: 一般疑问句需要把助动词will提前到主语前面，这个句子语序是陈述语序，表达不够规范哦。
    （选项 C）Will you come to Wander Port every day?
      Brainy: “every day”是“每天”的意思，你是想问对方未来会不会来，不是问会不会每天来，语义不对哦。

    # 问题6：
    Brainy: 如果Rebecca会来的话，你想询问她什么时候到，补全句子“If so, _________ you arrive?”，选哪个正确？
    用户选项:
    （选项 A）when is
      Brainy: 不对哦，句子里的动词是实义动词arrive，疑问句需要用助动词will而不是be动词is，搭配不当。
    （选项 B）when will [正确]
      Brainy: 答对啦！询问将来的时间要用一般将来时，“when will you arrive”语序正确，准确表达了你想问对方到达时间的意思。
    （选项 C）how is
      Brainy: how是询问方式，而且同样不能和实义动词arrive搭配使用，既不符合语义也不符合语法哦，再试试。
    ```

中间结果: 互动描述

    Dear Rebecca, I know you are worried. But this is our best chance to explore Wander Port. The job is important for us. That's why we have to stay. Will you come to Wander Port some day? If so, when will you arrive?
    （亲爱的丽贝卡：我知道你很担心。但这是我们探索漫游港的最佳机会。这项工作对我们来说很重要。这就是我们必须留下来的原因。你会有一天来漫游港吗？如果会的话，你什么时候到呢？）

30 对话表达 cId: 0000800 mid_dialog_express
已保存 ▶
jsonData

cType |
cId |
title |
asrPrompt |
resourceMapping | { "Vicky": 658 }
preDialog | []
imgShowTimingList | [ "content", "feedback" ]
img |
tip |
corFeedback | { "type": "npc", "npcName": "Sunny", "content": "You are so clever!" }
errFeedback | { "type": "npc", "npcName": "Beekeeper", "content": "Try again." }
question | { "desc": "回答养蜂人的问题。" }
example | { "type": "user", "content": "Spring!" }
postDialog | []

{ "cType": "mid_dialog_express", "cId": "0000800", "title": "回答养蜂人的问题", "asrPrompt": "养蜂人，蜂蜜，spring，春天", "resourceMapping": { "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [ "content", "feedback" ], "img": "0000800.png", "tip": "春天会收获最多的蜂蜜哦~", "corFeedback": { "type": "npc", "npcName": "Sunny", "content": "You are so clever!" }, "errFeedback": { "type": "npc", "npcName": "Beekeeper", "content": "Try again." }, "question": { "desc": "回答养蜂人的问题。" }, "example": { "type": "user", "content": "Spring!" }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "spring", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_express", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "spring", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
31 对话选择 cId: 0000800 mid_dialog_choose
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
preDialog | [ { "type": "npc", "npcName": "Dad", "content": "Is it for a cat?" } ]
imgShowTimingList | [ "content", "feedback" ]
img |
optionList | [ { "option": "This is Mr Rabbit's home.", "needAudio": true }, { "option": "This is a cat's home.", "needAudio": true } ]
answer | [ 0 ]
corFeedback | { "type": "npc", "npcName": "Dad", "content": "Oh, I see." }
errFeedback | { "type": "npc", "npcName": "Dad", "content": "It is too small for a cat." }
postDialog | []

{ "cType": "mid_dialog_choose", "cId": "0000800", "title": "房屋主人是谁", "resourceMapping": { "Vicky": 658 }, "preDialog": [ { "type": "npc", "npcName": "Dad", "content": "Is it for a cat?" } ], "imgShowTimingList": [ "content", "feedback" ], "img": "0000800.png", "optionList": [ { "option": "This is Mr Rabbit's home.", "needAudio": true }, { "option": "This is a cat's home.", "needAudio": true } ], "answer": [ 0 ], "corFeedback": { "type": "npc", "npcName": "Dad", "content": "Oh, I see." }, "errFeedback": { "type": "npc", "npcName": "Dad", "content": "It is too small for a cat." }, "postDialog": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "home", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_choose", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "home", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
32 对话选读 cId: 0000800 mid_dialog_select
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
preDialog | []
imgShowTimingList | []
optionList | [ { "option": "It sounds healthy.", "needAudio": false, "feedback": { "type": "npc", "npcName": "Medic", "content": "Really? Medic wants more sleep too!" } }, { "option": "It isn't healthy.", "needAudio": false, "feedback": { "type": "npc", "npcName": "Medic", "content": "Really? But Medic likes sleeping..." } } ]
postDialog | [ { "type": "user", "content": "Going to bed early and getting up early is healthy." }, { "type": "user", "content": "Sleeping too much is not healthy." }, { "type": "npc", "npcName": "Medic", "content": "Medic remembers it now!" } ]

{ "cType": "mid_dialog_select", "cId": "0000800", "title": "评价随地睡觉的习惯", "resourceMapping": { "Vicky": 658 }, "preDialog": [], "imgShowTimingList": [], "optionList": [ { "option": "It sounds healthy.", "needAudio": false, "feedback": { "type": "npc", "npcName": "Medic", "content": "Really? Medic wants more sleep too!" } }, { "option": "It isn't healthy.", "needAudio": false, "feedback": { "type": "npc", "npcName": "Medic", "content": "Really? But Medic likes sleeping..." } } ], "postDialog": [ { "type": "user", "content": "Going to bed early and getting up early is healthy." }, { "type": "user", "content": "Sleeping too much is not healthy." }, { "type": "npc", "npcName": "Medic", "content": "Medic remembers it now!" } ] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "healthy(词义)", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_dialog_select", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "healthy(词义)", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
33 信息描写 cId: 0000800 mid_message_trace
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
cDesc |
question | { "desc": "请描写你需要的水果" }
trace |
img |
inputSet | []

{ "cType": "mid_message_trace", "cId": "0000800", "title": "购买葡萄", "resourceMapping": { "Vicky": 658 }, "cDesc": "You bought the grapes you needed. (你购买了你需要的葡萄。)", "question": { "desc": "请描写你需要的水果" }, "trace": "grape", "img": "0000800.png", "inputSet": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_message_trace", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
34 信息拼词 cId: 0000800 mid_message_spell
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
cDesc |
question | { "desc": "请填入“葡萄”的正确的英文拼写" }
tip |
inputConfig | [ { "stem": "G（2）pe", "value": "ra" } ]
stemList | [ "h", "a", "r", "l", "e", "w" ]
img |
inputSet | []

{ "cType": "mid_message_spell", "cId": "0000800", "title": "购买葡萄", "resourceMapping": { "Vicky": 658 }, "cDesc": "You bought a bunch of fresh grapes. (你购买了葡萄。)", "question": { "desc": "请填入“葡萄”的正确的英文拼写" }, "tip": "葡萄的英文是 grape / 第二个字母是 r 哦，再想想最后一个空应该填什么吧", "inputConfig": [ { "stem": "G（2）pe", "value": "ra" } ], "stemList": [ "h", "a", "r", "l", "e", "w" ], "img": "0000800.png", "inputSet": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_message_spell", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
35 信息组句 cId: 0000800 mid_message_combine
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
cDesc | You filled in the blanks to make the sentence "Is Maeve the visitor you invited?".（你完成填空，组成了句子“Is Maeve the visitor you invited?”。）
question | { "desc": "请在空白处填入正确的单词，组成句子" }
tip |
optionList | [ { "option": "is" }, { "option": "the visitor" }, { "option": "you invited" }, { "option": "Maeve" } ]
answer | [ 0, 3, 1, 2 ]
img |
inputSet | []

{ "cType": "mid_message_combine", "cId": "0000800", "title": "填写信息表", "resourceMapping": { "Vicky": 658 }, "cDesc": "You filled in the blanks to make the sentence \"Is Maeve the visitor you invited?\".（你完成填空，组成了句子“Is Maeve the visitor you invited?”。）", "question": { "desc": "请在空白处填入正确的单词，组成句子" }, "tip": "可以用 is 引导的一般疑问句询问；you invited 是 visitor 的后置定语", "optionList": [ { "option": "is" }, { "option": "the visitor" }, { "option": "you invited" }, { "option": "Maeve" } ], "answer": [ 0, 3, 1, 2 ], "img": "0000800.png", "inputSet": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_message_combine", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
36 信息补词 cId: 0000800 mid_message_fillin
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
cDesc |
question | { "desc": "请在空白处填入正确的字母，组成完整单词" }
tip |
inputConfig | [ { "stem": "K(3)ledge", "value": "now" } ]
img |
inputSet | []

{ "cType": "mid_message_fillin", "cId": "0000800", "title": "填写信息表", "resourceMapping": { "Vicky": 658 }, "cDesc": "You filled in \"now\" to form the word \"knowledge\". (你填入“now”组成了单词“知识”。)", "question": { "desc": "请在空白处填入正确的字母，组成完整单词" }, "tip": "需要填入的单词的中文释义是“知识”", "inputConfig": [ { "stem": "K(3)ledge", "value": "now" } ], "img": "0000800.png", "inputSet": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_message_fillin", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
37 信息填词 cId: 0000800 mid_message_word
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
cDesc |
question | { "desc": "请在空白处填入合适的单词，使句意完整" }
tip |
answer | [ "knowledge", "information" ]
img |
inputSet | []

{ "cType": "mid_message_word", "cId": "0000800", "title": "填写信息表", "resourceMapping": { "Vicky": 658 }, "cDesc": "You filled in \"knowledge\" and \"information\" correctly. (你正确填入了“知识”对应的单词。)", "question": { "desc": "请在空白处填入合适的单词，使句意完整" }, "tip": "需要填入的单词的中文释义是“知识”", "answer": [ "knowledge", "information" ], "img": "0000800.png", "inputSet": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_message_word", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
38 信息填句 cId: 0000800 mid_message_sentence
已保存 ▶
jsonData

cType |
cId |
title |
resourceMapping | { "Vicky": 658 }
cDesc |
question | { "desc": "请填入正确的内容，使句意完整" }
tip |
answerHint | The main purpose of this tour is to learn knowledge about local traditional crafts.
img |
inputSet | []

{ "cType": "mid_message_sentence", "cId": "0000800", "title": "填写信息表", "resourceMapping": { "Vicky": 658 }, "cDesc": "You completed the information form with the correct sentence. (你填好了信息表。)", "question": { "desc": "请填入正确的内容，使句意完整" }, "tip": "你可以使用 The main purpose of this tour is...", "answerHint": "The main purpose of this tour is to learn knowledge about local traditional crafts.", "img": "0000800.png", "inputSet": [] }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_message_sentence", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "Grape (词形 - 拼写规律)", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
39 图片单选 cId: 0000800 mid_image_choose
已保存 ▶
jsonData

cType |
cId |
title |
meaning |
resourceMapping | { "Vicky": 658 }
question | { "desc": "Find $warm$ water.", "content": "Find $warm$ water." }
imageInfo | { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }
optionList | [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" } ]
answer | [ 2 ]
preDialog | [ { "type": "user", "content": "Look!" } ]
tip |
corFeedback | { "type": "npc", "npcName": "User", "content": "Warm water here!" }
errFeedback | { "type": "npc", "npcName": "User", "content": "It doesn't seem like there's warm water." }
postDialog | []
cDesc |

{ "cType": "mid_image_choose", "cId": "0000800", "title": "选择合适的河段取水", "meaning": "", "resourceMapping": { "Vicky": 658 }, "question": { "desc": "Find $warm$ water.", "content": "Find $warm$ water." }, "imageInfo": { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }, "optionList": [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" } ], "answer": [ 2 ], "preDialog": [ { "type": "user", "content": "Look!" } ], "tip": "warm 指“温暖的”。", "corFeedback": { "type": "npc", "npcName": "User", "content": "Warm water here!" }, "errFeedback": { "type": "npc", "npcName": "User", "content": "It doesn't seem like there's warm water." }, "postDialog": [], "cDesc": "You found the warm water for getting water. (你找到了温暖的水来取水。)" }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": "0220004", "kpType": "vocab", "kpTitle": "warm", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_image_choose", "cId": "0000800", "kpInfo": [ { "kpId": "0220004", "kpType": "vocab", "kpTitle": "warm", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
40 图片多选 cId: 0000800 mid_image_multiple
已保存 ▶
jsonData

cType |
cId |
title |
meaning |
resourceMapping | { "Vicky": 658 }
question | { "desc": "Find parts of the $house$.", "content": "Find parts of the $house$." }
imageInfo | { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }
optionList | [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" }, { "option": "0000800_option_03.png" }, { "option": "0000800_option_04.png" } ]
answer | [ 2, 3, 4 ]
preDialog | [ { "type": "npc", "npcName": "Peter", "content": "Let's fix the house!" }, { "type": "user", "content": "Okay." } ]
tip |
corFeedback | { "type": "user", "content": "These are all parts of the house." }
errFeedback | { "type": "user", "content": "Let's check again." }
postDialog | []
cDesc |

{ "cType": "mid_image_multiple", "cId": "0000800", "title": "选出需要修复的部分", "meaning": "", "resourceMapping": { "Vicky": 658 }, "question": { "desc": "Find parts of the $house$.", "content": "Find parts of the $house$." }, "imageInfo": { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }, "optionList": [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" }, { "option": "0000800_option_03.png" }, { "option": "0000800_option_04.png" } ], "answer": [ 2, 3, 4 ], "preDialog": [ { "type": "npc", "npcName": "Peter", "content": "Let's fix the house!" }, { "type": "user", "content": "Okay." } ], "tip": "house 指“房子”。", "corFeedback": { "type": "user", "content": "These are all parts of the house." }, "errFeedback": { "type": "user", "content": "Let's check again." }, "postDialog": [], "cDesc": "You found the broken parts of the house. (你找到了房子需要修复的部分。)" }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "house", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_image_multiple", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "house", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }
41 图片有序 cId: 0000800 mid_image_sequence
已保存 ▶
jsonData

cType |
cId |
title |
meaning |
resourceMapping | { "Vicky": 658 }
question | { "desc": "We must go $one by one$." }
imageInfo | { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }
optionList | [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" }, { "option": "0000800_option_03.png" } ]
answer | [ 0, 1, 2, 3 ]
preDialog | []
tip |
corFeedback | {}
errFeedback | { "type": "npc", "npcName": "Dan", "content": "We can't jump like that." }
postDialog | []
cDesc |

{ "cType": "mid_image_sequence", "cId": "0000800", "title": "排序跳格子顺序", "meaning": "", "resourceMapping": { "Vicky": 658 }, "question": { "desc": "We must go $one by one$." }, "imageInfo": { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }, "optionList": [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" }, { "option": "0000800_option_03.png" } ], "answer": [ 0, 1, 2, 3 ], "preDialog": [], "tip": "one by one指\"一个接一个\"", "corFeedback": {}, "errFeedback": { "type": "npc", "npcName": "Dan", "content": "We can't jump like that." }, "postDialog": [], "cDesc": "You arranged the hopscotch order one by one. (你把跳格子的顺序一个接一个排好了。)" }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "sentence", "kpTitle": "... one by one.", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ]

{ "pushType": "relationKp", "cType": "mid_image_sequence", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "sentence", "kpTitle": "... one by one.", "kpSkill": "sentence_meaning", "kpSkillName": "语义" } ] }
42 图片拖拽 cId: 0000800 mid_image_drag
已保存 ▶
jsonData

cType |
cId |
title |
meaning |
resourceMapping | { "Vicky": 658 }
question | { "desc": "Let's pick the $fish$, $crab$ and $octopus$ in order." }
imageInfo | { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }
optionList | [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" }, { "option": "0000800_option_03.png" } ]
answer | [ 0, 2, 1 ]
preDialog | [ { "type": "npc", "npcName": "Sarah", "content": "Look! So many gloves there!" } ]
tip |
corFeedback | { "type": "npc", "npcName": "Daisy", "content": "Yes! You got it right!" }
errFeedback | { "type": "npc", "npcName": "Daisy", "content": "This doesn't seem like a crab." }
postDialog | [ { "type": "npc", "npcName": "Daisy", "content": "very good!" } ]
cDesc |

{ "cType": "mid_image_drag", "cId": "0000800", "title": "选出正确的物品", "meaning": "", "resourceMapping": { "Vicky": 658 }, "question": { "desc": "Let's pick the $fish$, $crab$ and $octopus$ in order." }, "imageInfo": { "questionImg": "0000800_question.png", "answerImg": "0000800_answer.png" }, "optionList": [ { "option": "0000800_option_00.png" }, { "option": "0000800_option_01.png" }, { "option": "0000800_option_02.png" }, { "option": "0000800_option_03.png" } ], "answer": [ 0, 2, 1 ], "preDialog": [ { "type": "npc", "npcName": "Sarah", "content": "Look! So many gloves there!" } ], "tip": "fish 指“鱼”；crab 指“螃蟹”；octopus 指“章鱼”", "corFeedback": { "type": "npc", "npcName": "Daisy", "content": "Yes! You got it right!" }, "errFeedback": { "type": "npc", "npcName": "Daisy", "content": "This doesn't seem like a crab." }, "postDialog": [ { "type": "npc", "npcName": "Daisy", "content": "very good!" } ], "cDesc": "You picked fish, crab and octopus in order. (你按顺序找出了鱼、螃蟹和章鱼。)" }
kpInfo JSON

pushType |
cType |
cId |
kpInfo | [ { "kpId": null, "kpType": "vocab", "kpTitle": "hammer （词义）", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ]

{ "pushType": "relationKp", "cType": "mid_image_drag", "cId": "0000800", "kpInfo": [ { "kpId": null, "kpType": "vocab", "kpTitle": "hammer （词义）", "kpSkill": "vocab_meaning", "kpSkillName": "词义" } ] }