就绪
成功: 0 失败: 0

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

生成时间: 2026-05-07 12:13:27 模型: doubao-seed-2.0-pro Wiki: AEPJwf0DUiDkWska4SbceSAbnyc
42
总组件
35
成功
6
失败
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": "我们来认识一下这段话中的重点单词 points。points在这里的意思是积分、分数，攒积分就可以说save points哦。", "npcName": "Brainy", "learning": [ { "answer": [ 1 ], "meaning": "句意选择题", "optionList": [ { "feedback": { "type": "npc", "content": "不对哦，礼物的英文是gift，不是我们这里的points，再回忆下points的意思吧。", "npcName": "Brainy" }, "option": "但是你需要礼物来升级。" }, { "feedback": { "type": "npc", "content": "太棒啦！你已经掌握了重点单词points和这个句子的意思啦～", "npcName": "Brainy" }, "option": "但是你需要积分来升级。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来看下包含 points 的句子 But you need points to level up! 是什么意思呢？" } }, { "answer": [ 0 ], "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": "不对哦，班级的英文是class，不是我们这里的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": [ 1 ], "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": "我们来认识一下这段话中的重点单词 points。points在这里的意思是积分、分数，攒积分就可以说save points哦。", "npcName": "Brainy", "learning": [ { "answer": [ 1 ], "meaning": "句意选择题", "optionList": [ { "feedback": { "type": "npc", "content": "不对哦，礼物的英文是gift，不是我们这里的points，再回忆下points的意思吧。", "npcName": "Brainy" }, "option": "但是你需要礼物来升级。" }, { "feedback": { "type": "npc", "content": "太棒啦！你已经掌握了重点单词points和这个句子的意思啦～", "npcName": "Brainy" }, "option": "但是你需要积分来升级。" } ], "question": { "type": "npc", "npcName": "Brainy", "content": "接下来，我们来看下包含 points 的句子 But you need points to level up! 是什么意思呢？" } }, { "answer": [ 0 ], "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": "不对哦，班级的英文是class，不是我们这里的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": [ 1 ], "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: 我们来认识一下这段话中的重点单词 points。points在这里的意思是积分、分数，攒积分就可以说save points哦。
    1. 句意选择题
    Brainy：接下来，我们来看下包含 points 的句子 But you need points to level up! 是什么意思呢？
    - 但是你需要礼物来升级。
      Brainy：不对哦，礼物的英文是gift，不是我们这里的points，再回忆下points的意思吧。
    - 但是你需要积分来升级。[正确]
      Brainy：太棒啦！你已经掌握了重点单词points和这个句子的意思啦～

    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：不对哦，班级的英文是class，不是我们这里的club，再回忆下club的意思吧。
    - 你可以选择你最喜欢的俱乐部加入。[正确]
      Brainy：完美！你已经掌握了重点单词club和这个句子的意思啦～

    2. 段落大意题
    Brainy：了解了单词和句子的意思，我们来看看这段主要讲了什么内容吧？
    - 你可以自主选择感兴趣的俱乐部加入，也可以自己创建新俱乐部。
      Brainy：不对哦，这段内容里没有提到可以创建新俱乐部的相关信息，再仔细看看段落内容吧。
    - 你可以选择喜欢的俱乐部加入，如果你对某件事感兴趣，就能找到对应的俱乐部。[正确]
      Brainy：太厉害啦！你完全理解了这段内容的核心意思哦。
    # 完结反馈
    Brainy: 恭喜你完成了所有段落的学习，你真棒！继续加油哦～
    ```

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

cId |
cType |
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 | To enter the magical word castle, you first figure out the answer to Ben’s question about hippos’ home, and fill the blank with "lake" to complete the sentence "in the lake". Next, you reply to Brainy’s question about other zoo animals, and pick "tree" as the fitting answer to tell what else can be found in the zoo.

{ "cId": "0000800", "cType": "core_reading_imageDrag", "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": "To enter the magical word castle, you first figure out the answer to Ben’s question about hippos’ home, and fill the blank with \"lake\" to complete the sentence \"in the lake\". Next, you reply to Brainy’s question about other zoo animals, and pick \"tree\" as the fitting answer to tell what else can be found in the zoo." }
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": "小朋友，今天我们要认识3个和自然相关的单词哦，先来考考你，哪个单词的意思是“湖”呀？" }, "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": "答对啦！河马是生活在湖里的，所以答案就是lake，跟着我大声朗读这个句子：in the lake~" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "河马不会生活在树上哦，这不符合常识，再想一想河马平时待在哪里，重新选一次吧~" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "河马不是生活在草里的哦，再结合你知道的河马的生活环境选一下吧~" } } ], "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": "小朋友，今天我们要认识3个和自然相关的单词哦，先来考考你，哪个单词的意思是“湖”呀？" }, "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": "答对啦！河马是生活在湖里的，所以答案就是lake，跟着我大声朗读这个句子：in the lake~" } }, { "option": "tree", "feedback": { "type": "npc", "npcName": "Brainy", "content": "河马不会生活在树上哦，这不符合常识，再想一想河马平时待在哪里，重新选一次吧~" } }, { "option": "grass", "feedback": { "type": "npc", "npcName": "Brainy", "content": "河马不是生活在草里的哦，再结合你知道的河马的生活环境选一下吧~" } } ], "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：小朋友，今天我们要认识3个和自然相关的单词哦，先来考考你，哪个单词的意思是“湖”呀？
    - 选项 A：tree
      Brainy：不对哦，tree的意思是“树”，不是我们要找的“湖”，再试试吧~
    - 选项 B：grass
      Brainy：不对哦，grass的意思是“草”，不是“湖”的意思，再选一次呀~
    - 选项 C：lake [正确]
      Brainy：太棒啦！lake就是“湖”的意思，这个知识点你掌握得很好哦~

    ### 2. 原题降级
    Brainy：现在我们来看这道题，Ben问“河马生活在哪里？”，你要选一个单词填到句子里，回答“在____里”哦。想一想河马的生存环境，选最合适的单词吧~
    - 选项 A：lake [正确]
      Brainy：答对啦！河马是生活在湖里的，所以答案就是lake，跟着我大声朗读这个句子：in the lake~
    - 选项 B：tree
      Brainy：河马不会生活在树上哦，这不符合常识，再想一想河马平时待在哪里，重新选一次吧~
    - 选项 C：grass
      Brainy：河马不是生活在草里的哦，再结合你知道的河马的生活环境选一下吧~

    ---

    # 小题 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这几个单词的意思，还学会了在实际情境里用这些单词回答问题，真的很厉害哦，继续加油！
    ```

中间结果: 互动描述

    To enter the magical word castle, you first figure out the answer to Ben’s question about hippos’ home, and fill the blank with "lake" to complete the sentence "in the lake".
    Next, you reply to Brainy’s question about other zoo animals, and pick "tree" as the fitting answer to tell what else can be found in the zoo.

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

cType |
cId |
title |
taskDesc |
sceneDesc | 你是Logan，在 Wander Port 的清洁站工作。清洁站附近有一只大象，人们都很喜欢她，喂她吃香蕉，帮她洗澡。这天你接到电话，几个孩子说大象需要洗澡，你意识到一定是饲养员粗心忘记了！孩子们说愿意帮助大象洗澡，需要借一些干净的水，你立刻答应。
img |
key | [ { "desc": "", "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": "", "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,banana", "promptInfo": { "default": "\n# 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- 除开场轮次外，每次回应，可以先基于用户的话给一句反馈。然后再推进你的任务。\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,banana", "promptInfo": { "default": "\n# 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- 除开场轮次外，每次回应，可以先基于用户的话给一句反馈。然后再推进你的任务。\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": "太棒啦，你选对了！跟着我大声朗读这句话吧：The elephant needs a shower. Let's set up a shower for her." } }, { "option": "The elephant is hungry. She wants to eat bananas.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，现在我们要和对方说大象需要洗澡的事，这句话是说大象饿了想吃香蕉，和当前情境不匹配，再选一次吧。" } }, { "option": "The elephant is lost. Let's find her keeper.", "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 can wait for the keeper to come and help her.", "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": "你太厉害了，选对了！跟着我大声朗读这句话吧：Instead of waiting here, we'd better get some water for her first." } }, { "option": "We need to go home now, we have no time to help.", "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": "完全正确！跟着我大声朗读这句话吧：We'd love to help." } }, { "option": "We are afraid we can't help you.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，我们是愿意帮忙的，这句话是说我们恐怕帮不了你，和我们要表达的意思不一样，再选一次吧。" } }, { "option": "We don't know how to shower an elephant.", "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": "太棒啦！你已经顺利完成了这次对话任务，成功和清洁站的工作人员沟通好了给大象送水帮忙洗澡的事，你真棒！" } }

{ "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": "太棒啦，你选对了！跟着我大声朗读这句话吧：The elephant needs a shower. Let's set up a shower for her." } }, { "option": "The elephant is hungry. She wants to eat bananas.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，现在我们要和对方说大象需要洗澡的事，这句话是说大象饿了想吃香蕉，和当前情境不匹配，再选一次吧。" } }, { "option": "The elephant is lost. Let's find her keeper.", "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 can wait for the keeper to come and help her.", "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": "你太厉害了，选对了！跟着我大声朗读这句话吧：Instead of waiting here, we'd better get some water for her first." } }, { "option": "We need to go home now, we have no time to help.", "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": "完全正确！跟着我大声朗读这句话吧：We'd love to help." } }, { "option": "We are afraid we can't help you.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，我们是愿意帮忙的，这句话是说我们恐怕帮不了你，和我们要表达的意思不一样，再选一次吧。" } }, { "option": "We don't know how to shower an elephant.", "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": "太棒啦！你已经顺利完成了这次对话任务，成功和清洁站的工作人员沟通好了给大象送水帮忙洗澡的事，你真棒！" } } }
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：太棒啦，你选对了！跟着我大声朗读这句话吧：The elephant needs a shower. Let's set up a shower for her.
    B. The elephant is hungry. She wants to eat bananas.
      Brainy：不对哦，现在我们要和对方说大象需要洗澡的事，这句话是说大象饿了想吃香蕉，和当前情境不匹配，再选一次吧。
    C. The elephant is lost. Let's find her keeper.
      Brainy：不对哦，现在我们要和对方说大象需要洗澡的事，这句话是说大象走失了要找饲养员，和当前情境不匹配，再选一次吧。
    Logan：Are you saying she hasn't had a shower yet? Maybe someone will probably come soon.

    # 中间回合2
    Brainy：Logan问你是不是说大象还没洗澡，还说可能很快就会有人来啦。现在你需要和对方说与其在这里等，不如我们先去给她拿点水哦。
    用户选项:
    A. We can wait for the keeper to come and help her.
      Brainy：不对哦，现在我们要表达不等了先去拿水的想法，这句话是说我们可以等饲养员来帮忙，和我们要表达的意思相反，再选一次吧。
    B. Instead of waiting here, we'd better get some water for her first. ✓
      Brainy：你太厉害了，选对了！跟着我大声朗读这句话吧：Instead of waiting here, we'd better get some water for her first.
    C. We need to go home now, we have no time to help.
      Brainy：不对哦，我们是想要帮忙给大象洗澡的，这句话是说我们现在要回家没时间帮忙，不符合情境，再选一次吧。
    Logan：The keepers are too careless! Thank you! Can you help her shower?

    # 中间回合3
    Brainy：Logan说饲养员太粗心了，还问你们能不能帮忙给大象洗澡，现在你需要告诉对方你们很乐意帮忙哦。
    用户选项:
    A. We'd love to help. ✓
      Brainy：完全正确！跟着我大声朗读这句话吧：We'd love to help.
    B. We are afraid we can't help you.
      Brainy：不对哦，我们是愿意帮忙的，这句话是说我们恐怕帮不了你，和我们要表达的意思不一样，再选一次吧。
    C. We don't know how to shower an elephant.
      Brainy：不对哦，现在我们要先告诉对方我们愿意帮忙，这句话是说我们不知道怎么给大象洗澡，不符合当前回应的要求，再选一次吧。
    Logan：Great. We will send some water to her right away.

    # 结尾回合
    Brainy：太棒啦！你已经顺利完成了这次对话任务，成功和清洁站的工作人员沟通好了给大象送水帮忙洗澡的事，你真棒！
    ```

中间结果: 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,banana

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 ? 失败 ▶
错误: LLM返回内容不是合法JSON: Expecting property name enclosed in double quotes: line 1 column 869 (char 868) 内容: {"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":
原始组件配置

    【任务标题】
    询问空乘关于健身房的信息
    【任务背景】
    吃太饱，头晕晕，连刚刚去过的健身房都不记得怎么走了。好在 Chole 永远笑意盈盈地准备提供帮助，赶紧问问她怎么去！以及记得向她要一条新毛巾哦！
    【任务描述】
    你要向 Chloe 询问健身房的位置，以及讨要毛巾，做好开始运动的准备。
    【通关知识】
    Where can I find the gym？我在哪里能找到健身房？
    Can I have a towel please?？我能要一条毛巾吗？
    What else can I do there? 我在那儿还能做些什么？

    【对话角色】
    Chloe
    【任务背景】
    你是 Chloe，是 Twilight 的空乘，服务好每一位乘客是你的使命。
    用户之前帮你在另一位乘客面前解了围，你很感谢用户的帮忙，对用户的态度也格外友善热情。
    你发现用完餐的用户正在东张西望，似乎在寻找什么，你确认用户需要帮助，于是上前询问。你发现用户想去健身房消消食，但是不知道方向，于是回答了用户的问题，提供了你的帮助。
    【知识库】
    你知道健身房就在前方过道的尽头。
    你会为有需要的用户准备一条新毛巾。
    你会解答用户的问题，告诉用户在健身房可以进行的活动：运动、看宇宙风光（sightseeing），或者可以拉伸放松、进行休息。
    对用户的任何提问，你都耐心安抚并一一回答。
    【回合设定】
    检测回合：3
    最大回合：5
    【通过规则】
    过程：用户成功问出“健身房在哪里”、“可以给我一条毛巾吗”以及“在哪儿我还能做什么”的三个问题。
    结果：Chloe回答了用户关于健身房的问题，提供了耐心友好的帮助。
    【示例对话】
    Chloe: Can I help you?
    User: Where can I find the gym?
    Chloe: Look, it's over there at the end of this walkway.
    User: Oh, and can I have a towel please?
    Chloe: Of course! I'll bring a new one for you soon.
    User: What else can I do there?
    Chloe: Well, you can do some exercise and enjoy sightseeing there. Or you can just relax.

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": "", "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": "Great! You know a lot about winter. Now let's go and enjoy the warm food!" } } ] } ]

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": "Great! You know a lot about winter. Now let's go and enjoy the warm food!" } } ] } ], "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. Go 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. Third, you do not need much money. 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. Go 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. Third, you do not need much money. 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, 2, 3 ] } ]

{ "sequence": [ { "audio": [ 0 ] }, { "question": [ 0 ] }, { "audio": [ 1 ] }, { "question": [ 1, 2, 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": [ 1 ], "meaning": "听音选句", "optionList": [ { "feedback": { "type": "npc", "content": "哎呀，这句话说的是 eat outside（出去吃），并不是我们听到的 bake at home 哦，再仔细听听音频内容吧！", "npcName": "Brainy" }, "option": "When you really want sweet food, like biscuits or cake, you can eat outside." }, { "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." } ], "question": { "type": "npc", "content": "接下来，我们来试试，你能不能听出以下哪一句话和播放的音频内容一致呢？", "npcName": "Brainy" } }, { "answer": [ 0 ], "meaning": "听音选意", "optionList": [ { "feedback": { "type": "npc", "content": "答对啦！你完全理解了这句话的意思，还掌握了 bake at home 这个实用短语哦，真厉害！", "npcName": "Brainy" }, "option": "当你非常想吃甜食，比如饼干或者蛋糕的时候，你可以在家烘焙。" }, { "feedback": { "type": "npc", "content": "这句话里的内容和我们听到的不一样哦，音频里说的是甜食和在家烘焙，再仔细想一想吧~", "npcName": "Brainy" }, "option": "当你非常想吃咸食，比如薯片或者汉堡的时候，你可以在家做饭。" } ], "question": { "type": "npc", "content": "那这句话是什么意思呢？我们来选选正确的中文翻译吧！", "npcName": "Brainy" } } ] } ]

{ "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": [ 1 ], "meaning": "听音选句", "optionList": [ { "feedback": { "type": "npc", "content": "哎呀，这句话说的是 eat outside（出去吃），并不是我们听到的 bake at home 哦，再仔细听听音频内容吧！", "npcName": "Brainy" }, "option": "When you really want sweet food, like biscuits or cake, you can eat outside." }, { "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." } ], "question": { "type": "npc", "content": "接下来，我们来试试，你能不能听出以下哪一句话和播放的音频内容一致呢？", "npcName": "Brainy" } }, { "answer": [ 0 ], "meaning": "听音选意", "optionList": [ { "feedback": { "type": "npc", "content": "答对啦！你完全理解了这句话的意思，还掌握了 bake at home 这个实用短语哦，真厉害！", "npcName": "Brainy" }, "option": "当你非常想吃甜食，比如饼干或者蛋糕的时候，你可以在家烘焙。" }, { "feedback": { "type": "npc", "content": "这句话里的内容和我们听到的不一样哦，音频里说的是甜食和在家烘焙，再仔细想一想吧~", "npcName": "Brainy" }, "option": "当你非常想吃咸食，比如薯片或者汉堡的时候，你可以在家做饭。" } ], "question": { "type": "npc", "content": "那这句话是什么意思呢？我们来选选正确的中文翻译吧！", "npcName": "Brainy" } } ] } ] }
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 eat outside.
      - Brainy：哎呀，这句话说的是 eat outside（出去吃），并不是我们听到的 bake at home 哦，再仔细听听音频内容吧！
    - When you really want sweet food, like biscuits or cake, you can bake at home. [正确]
      - Brainy：太棒了！你准确匹配到了音频里的句子，精准听出了重点短语 bake at home！

    2. 听音选意
    Brainy：那这句话是什么意思呢？我们来选选正确的中文翻译吧！
    - 当你非常想吃甜食，比如饼干或者蛋糕的时候，你可以在家烘焙。[正确]
      - Brainy：答对啦！你完全理解了这句话的意思，还掌握了 bake at home 这个实用短语哦，真厉害！
    - 当你非常想吃咸食，比如薯片或者汉堡的时候，你可以在家做饭。
      - Brainy：这句话里的内容和我们听到的不一样哦，音频里说的是甜食和在家烘焙，再仔细想一想吧~
    ---
    # 完成反馈
    Brainy：很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!
    ```

中间结果: 互动描述

    You listened to the audio How to live a healthy life, and learned that a healthy routine like going to bed on time and getting up early is needed, and you should stay away from smoking and alcohol. (你听了《如何健康生活》的音频，了解到要保持早睡早起的健康作息，还要远离烟酒。)
    You also learned from the audio that keeping healthy doesn't need much money or expensive things, and good habits are the most important part of living a healthy life. (你还从音频中了解到保持健康不需要很多钱或者昂贵的物品，好习惯是健康生活最重要的部分。)

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，意思是夏天，是一年里最热的季节哦。", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "仔细听音频，下面哪一句话和你听到的内容一致呢？", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "This winter!", "feedback": { "type": "npc", "content": "哎呀，这句话里的是winter（冬天），不是我们听到的summer哦，再听一遍试试吧~", "npcName": "Brainy" } }, { "option": "This summer!", "feedback": { "type": "npc", "content": "太棒啦！你准确听出了句子里的summer，听力小耳朵超厉害！", "npcName": "Brainy" } } ], "answer": [ 1 ] }, { "question": { "content": "This summer!", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "这句话的中文意思是“这个夏天”，对不对呀？", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "错 / No", "feedback": { "type": "npc", "content": "再想想哦，summer对应的中文意思不是其他季节，再猜一猜吧~", "npcName": "Brainy" } }, { "option": "对 / Yes", "feedback": { "type": "npc", "content": "完全正确！你已经牢牢记住了summer是“夏天”的意思，太厉害了！", "npcName": "Brainy" } } ], "answer": [ 1 ] } ] } ]

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

{ "learningPart": [ { "type": "npc", "npcName": "Brainy", "content": "This summer!", "learning": [ { "question": { "content": "刚刚听到的音频里，有一个很常用的短语 summer，意思是夏天，是一年里最热的季节哦。", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "仔细听音频，下面哪一句话和你听到的内容一致呢？", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "This winter!", "feedback": { "type": "npc", "content": "哎呀，这句话里的是winter（冬天），不是我们听到的summer哦，再听一遍试试吧~", "npcName": "Brainy" } }, { "option": "This summer!", "feedback": { "type": "npc", "content": "太棒啦！你准确听出了句子里的summer，听力小耳朵超厉害！", "npcName": "Brainy" } } ], "answer": [ 1 ] }, { "question": { "content": "This summer!", "type": "npc", "npcName": "Brainy" }, "extendQuestion": { "content": "这句话的中文意思是“这个夏天”，对不对呀？", "type": "npc", "npcName": "Brainy" }, "optionList": [ { "option": "错 / No", "feedback": { "type": "npc", "content": "再想想哦，summer对应的中文意思不是其他季节，再猜一猜吧~", "npcName": "Brainy" } }, { "option": "对 / Yes", "feedback": { "type": "npc", "content": "完全正确！你已经牢牢记住了summer是“夏天”的意思，太厉害了！", "npcName": "Brainy" } } ], "answer": [ 1 ] } ] } ], "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，意思是夏天，是一年里最热的季节哦。
    1. 听音选句
    Brainy：仔细听音频，下面哪一句话和你听到的内容一致呢？
    - This winter!
      - Brainy：哎呀，这句话里的是winter（冬天），不是我们听到的summer哦，再听一遍试试吧~
    - This summer! [正确]
      - Brainy：太棒啦！你准确听出了句子里的summer，听力小耳朵超厉害！

    2. 听音选意
    Brainy：这句话的中文意思是“这个夏天”，对不对呀？
    - 错 / No
      - Brainy：再想想哦，summer对应的中文意思不是其他季节，再猜一猜吧~
    - 对 / Yes [正确]
      - Brainy：完全正确！你已经牢牢记住了summer是“夏天”的意思，太厉害了！
    ---
    # 完成反馈
    Brainy：很好！你已经回答完了全部问题，相信你已经听懂了这个任务中所有的重点句子。现在让我们来查看结果吧!
    ```

中间结果: 互动描述

    请你提供具体的题目材料和对应的相关核心信息、正确答案内容，我会按照要求为你生成符合规范的叙事化描述。

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

    【任务名称】
    报告飞船坠毁事件
    【任务背景】
    在森林中，Otis、Skylar 和你通过小熊猫 Bam 和无人机照片搜集到了关于飞船坠落的重要线索。你们需要将这些信息整理并汇报给 Luisa 教授，以便确定飞船的具体坠落位置。
    【任务描述】
    请根据图片内容，用英文写一段求救报告，说明你们现在的处境、遇到的困难和需要的帮助。
    【剧情提要】
    *可选配置* 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.
    【题干类型】
    图片
    【题干描述】
    3
    【知识】
    - 地点描述
    I think the spaceship fell...  我认为飞船坠落在……
    I saw trees with...  我看到有…… 的树。
    I heard a loud noise in...  我听到…… 方向有巨大的声音。

    【写作类型】
    组句
    【写作材料】
    # 句子 1
    ## 句子类型
    全句预置
    ## 句子内容
    1. 句子主干
    Dear Alex,
    2. 选项
    /
    3. 答案
    /
    # 句子 2
    ## 句子类型
    全句录入
    ## 句子内容
    1. 句子主干
    /
    2. 选项
    - well
    - this email
    - you
    - finds
    - I hope
    - [干扰]：fine
    3. 答案
    I hope this email finds you well.
    ## 图片编号
    01
    # 句子 3
    ## 句子类型
    挖空录入
    ## 句子内容
    ```
    1. 句子主干
    We can ___ each other.
    2. 选项
    - of
    - take
    - care
    - [干扰]：look
    - [干扰]：for
    3. 答案
    take care of
    ```
    ## 图片编号
    00
    【通过规则】
    用户写出：
    1. 坠机在一个湖附近
    2. 湖周边树木有红黄色的叶子
    3. Bam 听到东北方向的噪音

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动词is不匹配，应该使用单数形式的名词，再试一下吧。" } }, { "option": "projects", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，projects是可数名词复数，和句子里的be动词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什么时候会抵达，需要补全句子\"___ you arrive?\"。" }, "optionList": [ { "option": "When will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！询问对方将来到达的时间要用一般将来时，\"When will you arrive?\"意为“你什么时候会到？”，符合邮件里询问行程的语境。" } }, { "option": "When is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，arrive是实义动词原形，不能和be动词is搭配使用，一般将来时需要用助动词will，再试一下吧。" } }, { "option": "How is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，首先be动词is不能和实义动词原形arrive搭配，其次how是询问方式，这里你想要询问的是到达的时间，不符合语境，再试一下吧。" } } ], "answer": [ 0 ], "write": { "desc": "When will you arrive?", "trans": "你什么时候会到？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ]

closing | { "type": "npc", "npcName": "Brainy", "content": "恭喜你，你已经掌握了名词单复数和be动词的搭配规则、\"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动词is不匹配，应该使用单数形式的名词，再试一下吧。" } }, { "option": "projects", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，projects是可数名词复数，和句子里的be动词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什么时候会抵达，需要补全句子\"___ you arrive?\"。" }, "optionList": [ { "option": "When will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "答对啦！询问对方将来到达的时间要用一般将来时，\"When will you arrive?\"意为“你什么时候会到？”，符合邮件里询问行程的语境。" } }, { "option": "When is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，arrive是实义动词原形，不能和be动词is搭配使用，一般将来时需要用助动词will，再试一下吧。" } }, { "option": "How is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "不对哦，首先be动词is不能和实义动词原形arrive搭配，其次how是询问方式，这里你想要询问的是到达的时间，不符合语境，再试一下吧。" } } ], "answer": [ 0 ], "write": { "desc": "When will you arrive?", "trans": "你什么时候会到？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "恭喜你，你已经掌握了名词单复数和be动词的搭配规则、\"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... 这份工作...... 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 ] } ] }
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动词is不匹配，应该使用单数形式的名词，再试一下吧。
    （选项 C）projects
      Brainy: 不对哦，projects是可数名词复数，和句子里的be动词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什么时候会抵达，需要补全句子"___ you arrive?"。
    用户选项:
    （选项 A）When will [正确]
      Brainy: 答对啦！询问对方将来到达的时间要用一般将来时，"When will you arrive?"意为“你什么时候会到？”，符合邮件里询问行程的语境。
    （选项 B）When is
      Brainy: 不对哦，arrive是实义动词原形，不能和be动词is搭配使用，一般将来时需要用助动词will，再试一下吧。
    （选项 C）How is
      Brainy: 不对哦，首先be动词is不能和实义动词原形arrive搭配，其次how是询问方式，这里你想要询问的是到达的时间，不符合语境，再试一下吧。
    ```

中间结果: 互动描述

    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 | [ "Tell her your decision and why.", "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": [ "Tell her your decision and why.", "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?\n（亲爱的丽贝卡：我知道你很担心。但这是我们探索漫游港的最好机会。这项工作对我们来说很重要。这就是我们必须留下来的原因。你会不会哪天来漫游港呀？如果会的话，你什么时候到呢？）" }
textInfo

inputType |
passCondition |

textList

[ { "mode": "preset", "desc": "Dear Rebecca,", "answerText": "" }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "" }, { "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": "" }, { "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": "" }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "" }, { "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": "" }, { "mode": "fillingInput", "desc": "If so, _________ you arrive?", "answerText": "when will", "hint": "如果是这样的话，你什么时候将会（when will）到达？" } ] }
studyInfo

learningPart

[ { "leadIn": { "desc": "Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你准备给Rebecca写邮件，首先要写邮件的称呼，下列哪个选项是正确的开头？" }, "optionList": [ { "option": "Dear Rebecca,", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！这是英文邮件给熟人写称呼的标准正确表达，非常合适。" } }, { "option": "Hello Rebecca!", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达虽然日常对话里可以用，但正式或者半正式邮件开头给对方写称呼时，用\"Dear + 名字\"是更规范的用法哦，再试试吧。" } }, { "option": "Rebecca:", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这种称呼格式不符合英文邮件的常用规范哦，给对方写邮件开头的标准称呼应该是\"Dear + 名字\"，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "Dear Rebecca,", "trans": "亲爱的丽贝卡：" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你要在邮件里先回应Rebecca的担心，同时说明你们留下的原因，下列哪个句子能正确表达这个意思？" }, "optionList": [ { "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 happy. But this is our best chance to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "前面说Rebecca很开心不符合背景哦，背景里Rebecca是担心你们的安全，这句话语义和实际情况不符，再试试吧。" } }, { "option": "I know you are worried. But we don't want to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "后半句说你们不想探索Wander Port就不对啦，你们正是要留下来完成探索任务，语义和你的目的相反哦，再试一次吧。" } } ], "answer": [ 0 ], "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": "Tell her your decision and why." }, "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": "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": "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": "Do you come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个是一般现在时的提问，用来问经常性、习惯性的动作，但你是问将来会不会来，时态不对哦，再试试吧。" } }, { "option": "Are you come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个句子语法是错误的哦，be动词不能直接和动词原形come搭配使用，正确询问将来的动作应该用will引导疑问句，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "Will you come to Wander Port some day?", "trans": "你会不会哪天来漫游港呀？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Ask her when she will arrive." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你接着问如果她来的话，什么时候会到，句子\"If so, _________ you arrive?\"的横线处应该填什么内容呢？" }, "optionList": [ { "option": "when will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！询问将来的时间要用一般将来时，特殊疑问句的结构是“特殊疑问词+will+主语+动词原形”，这里的表达完全符合语法和语义要求。" } }, { "option": "when is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "后面已经有动词原形arrive了，不能用be动词is哦，语法结构错误，而且也不符合将来时的表达，再试试吧。" } }, { "option": "how is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "\"how\"是询问方式的疑问词，你这里要问的是到达的时间，疑问词就不对，而且同样存在be动词和后面arrive搭配错误的问题哦，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "If so, when will you arrive?", "trans": "如果会的话，你什么时候到呢？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ]

closing | { "type": "npc", "npcName": "Brainy", "content": "恭喜你，你已经掌握了英文邮件的称呼规范，还学会了用句子回应他人担心、说明做某事的原因，以及询问对方未来行动和时间的正确表达，成功完成了给Rebecca的邮件编写！" }

{ "learningPart": [ { "leadIn": { "desc": "Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你准备给Rebecca写邮件，首先要写邮件的称呼，下列哪个选项是正确的开头？" }, "optionList": [ { "option": "Dear Rebecca,", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！这是英文邮件给熟人写称呼的标准正确表达，非常合适。" } }, { "option": "Hello Rebecca!", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个表达虽然日常对话里可以用，但正式或者半正式邮件开头给对方写称呼时，用\"Dear + 名字\"是更规范的用法哦，再试试吧。" } }, { "option": "Rebecca:", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这种称呼格式不符合英文邮件的常用规范哦，给对方写邮件开头的标准称呼应该是\"Dear + 名字\"，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "Dear Rebecca,", "trans": "亲爱的丽贝卡：" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Tell her your decision and why." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你要在邮件里先回应Rebecca的担心，同时说明你们留下的原因，下列哪个句子能正确表达这个意思？" }, "optionList": [ { "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 happy. But this is our best chance to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "前面说Rebecca很开心不符合背景哦，背景里Rebecca是担心你们的安全，这句话语义和实际情况不符，再试试吧。" } }, { "option": "I know you are worried. But we don't want to explore Wander Port.", "feedback": { "type": "npc", "npcName": "Brainy", "content": "后半句说你们不想探索Wander Port就不对啦，你们正是要留下来完成探索任务，语义和你的目的相反哦，再试一次吧。" } } ], "answer": [ 0 ], "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": "Tell her your decision and why." }, "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": "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": "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": "Do you come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个是一般现在时的提问，用来问经常性、习惯性的动作，但你是问将来会不会来，时态不对哦，再试试吧。" } }, { "option": "Are you come to Wander Port some day?", "feedback": { "type": "npc", "npcName": "Brainy", "content": "这个句子语法是错误的哦，be动词不能直接和动词原形come搭配使用，正确询问将来的动作应该用will引导疑问句，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "Will you come to Wander Port some day?", "trans": "你会不会哪天来漫游港呀？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] }, { "leadIn": { "desc": "Ask her when she will arrive." }, "learning": [ { "question": { "type": "npc", "npcName": "Brainy", "content": "你接着问如果她来的话，什么时候会到，句子\"If so, _________ you arrive?\"的横线处应该填什么内容呢？" }, "optionList": [ { "option": "when will", "feedback": { "type": "npc", "npcName": "Brainy", "content": "太棒了！询问将来的时间要用一般将来时，特殊疑问句的结构是“特殊疑问词+will+主语+动词原形”，这里的表达完全符合语法和语义要求。" } }, { "option": "when is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "后面已经有动词原形arrive了，不能用be动词is哦，语法结构错误，而且也不符合将来时的表达，再试试吧。" } }, { "option": "how is", "feedback": { "type": "npc", "npcName": "Brainy", "content": "\"how\"是询问方式的疑问词，你这里要问的是到达的时间，疑问词就不对，而且同样存在be动词和后面arrive搭配错误的问题哦，再试一次吧。" } } ], "answer": [ 0 ], "write": { "desc": "If so, when will you arrive?", "trans": "如果会的话，你什么时候到呢？" }, "feedback": { "type": "npc", "npcName": "Brainy", "content": "你写的很好！" } } ] } ], "closing": { "type": "npc", "npcName": "Brainy", "content": "恭喜你，你已经掌握了英文邮件的称呼规范，还学会了用句子回应他人担心、说明做某事的原因，以及询问对方未来行动和时间的正确表达，成功完成了给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": "" }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "" }, { "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": "" }, { "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": "" }, { "mode": "preset", "desc": "I know you are worried. But this is our best chance to explore Wander Port.", "answerText": "" }, { "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": "" }, { "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: 太棒了！这是英文邮件给熟人写称呼的标准正确表达，非常合适。
    （选项 B）Hello Rebecca!
      Brainy: 这个表达虽然日常对话里可以用，但正式或者半正式邮件开头给对方写称呼时，用"Dear + 名字"是更规范的用法哦，再试试吧。
    （选项 C）Rebecca:
      Brainy: 这种称呼格式不符合英文邮件的常用规范哦，给对方写邮件开头的标准称呼应该是"Dear + 名字"，再试一次吧。

    # 问题2：
    Brainy: 你要在邮件里先回应Rebecca的担心，同时说明你们留下的原因，下列哪个句子能正确表达这个意思？
    用户选项:
    （选项 A）I know you are worried. But this is our best chance to explore Wander Port. [正确]
      Brainy: 太对啦！这句话既回应了Rebecca的担心，也说明了留下来是因为这是探索Wander Port的好机会，完全符合你要表达的意思。
    （选项 B）I know you are happy. But this is our best chance to explore Wander Port.
      Brainy: 前面说Rebecca很开心不符合背景哦，背景里Rebecca是担心你们的安全，这句话语义和实际情况不符，再试试吧。
    （选项 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）job [正确]
      Brainy: 答对啦！be动词是is，说明主语是单数，"job"是可数名词单数，符合语法和语义要求，这句话就是说这份工作对我们很重要。
    （选项 B）jobs
      Brainy: "jobs"是复数形式，后面的be动词应该用are才对，和句子里的is不匹配哦，再试试吧。
    （选项 C）projects
      Brainy: "projects"是复数形式，后面的be动词应该用are，和句子里的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）Do you come to Wander Port some day?
      Brainy: 这个是一般现在时的提问，用来问经常性、习惯性的动作，但你是问将来会不会来，时态不对哦，再试试吧。
    （选项 C）Are you come to Wander Port some day?
      Brainy: 这个句子语法是错误的哦，be动词不能直接和动词原形come搭配使用，正确询问将来的动作应该用will引导疑问句，再试一次吧。

    # 问题6：
    Brainy: 你接着问如果她来的话，什么时候会到，句子"If so, _________ you arrive?"的横线处应该填什么内容呢？
    用户选项:
    （选项 A）when will [正确]
      Brainy: 太棒了！询问将来的时间要用一般将来时，特殊疑问句的结构是“特殊疑问词+will+主语+动词原形”，这里的表达完全符合语法和语义要求。
    （选项 B）when is
      Brainy: 后面已经有动词原形arrive了，不能用be动词is哦，语法结构错误，而且也不符合将来时的表达，再试试吧。
    （选项 C）how is
      Brainy: "how"是询问方式的疑问词，你这里要问的是到达的时间，疑问词就不对，而且同样存在be动词和后面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 wrote down grape as the fruit you need. (你写下了grape作为你需要的水果。)", "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 wrote down the question "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 wrote down the question \"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 complete 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 \"knowledge\" in the information form. (你在信息表中填入了“知识”。)", "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 filled the 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": "user", "npcName": "User", "content": "Warm water here!" }
errFeedback | { "type": "user", "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": "user", "npcName": "User", "content": "Warm water here!" }, "errFeedback": { "type": "user", "npcName": "User", "content": "It doesn't seem like there's warm water." }, "postDialog": [], "cDesc": "You found the warm water area. (你找到了温暖的水域。)" }
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 parts of the house to fix. (你找到了需要修复的房子部位。)" }
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 jumped the grids $one\\ by\\ one$ in order. (你按顺序一个接一个跳格子。)" }
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 ? 失败 ▶
错误: LLM返回内容不是合法JSON: Expecting ',' delimiter: line 1 column 432 (char 431) 内容: {"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_op
原始组件配置

    【任务标题】
    选出正确的物品

    【情境引入】
    Sarah : Look! So many gloves there!

    【互动内容】
    Let's pick the $fish$, $crab$ and $octopus$ in order.
    选项：
    00
    01
    02
    03
    答案：
    00
    02
    01
    辅助信息：fish 指“鱼”；crab 指“螃蟹”；octopus 指“章鱼”

    【互动反馈】
    正确 Daisy ：Yes! You got it right!
    错误 Daisy：This doesn't seem like a crab.

    【后置对话】
    Daisy：very good!