---
name: core-content-json-standard
version: 2.0.0
description: "核心互动内容 JSON 配置标准。覆盖全部 14 种核心互动题型的完整 JSON 结构，含通用字段定义和各题型专属规范。用于内容生产、审校、自动化校验。"
metadata:
  triggers:
    - "生产/审校核心互动内容"
    - "需要了解核心互动题型 JSON 配置格式"
    - "验证核心互动 JSON 配置完整性"
  requires:
    knowledge: ["互动内容库 wiki (7487521512283799556)"]
    skills: ["bitable-reader"]
  coverage: "14 种题型（口语探讨暂无数据）"
---

# core-content-json-standard — 核心互动内容 JSON 配置标准

## 数据源

- Wiki: `https://makee-interactive.feishu.cn/wiki/TbbGwZLIVizXeGkMEKQc2hKRnCc`
- Space ID: `7487521512283799556`
- 通过 `bitable-reader` 技能按 node_token 定位具体 bitable

---

# 第一部分：通用结构（所有核心互动共用）

## 0. 文本输出规范（所有字段文本内容强制遵守）

1. 禁止 Markdown 标记：所有 jsonData 内文本字段禁止使用 `**` `*` `__` `_` `#` `>` `-` 等 Markdown 语法，纯文本输出
2. 英式拼写优先：英美式拼写差异统一英式（colour/centre/travelling 等）
3. 标点符号规范：中文内容全角标点（，。！？），英文内容半角标点（. , ! ?），不混用

## 1. 通用字段

| 字段 | 类型 | 说明 | 出现率 |
|------|------|------|:-----:|
| `ID` | string | 记录唯一标识 | 15/15 |
| `dataStatus` | string | 数据状态（`"0"`=正常） | 15/15 |
| `kpStatus` | string | 知识点状态（`"0"`/`"1"`） | 15/15 |
| `kpInfo` | JSON | 知识点绑定信息 | 15/15 |
| `kpListSentence` | list | 关联句型ID列表 | 阅读/听力/口语有 |
| `kpListVocab` | list | 关联单词ID列表 | 阅读/听力/口语有 |
| `互动描述` | text | 中文剧情/内容产出描述 | 15/15 |
| `关联知识点` | text | 知识点文本汇总 | 14/15 |
| `专有名词` | list | 专有名词对照表 | 部分有 |

## 2. kpInfo — 知识点绑定（通用结构）

```json
{
  "pushType": "relationKp",
  "cType": "<题型标识>",
  "cId": "<与ID字段一致>",
  "kpInfo": [
    {
      "kpId": "0000007",
      "kpType": "vocab",           // vocab / pattern
      "kpTitle": "passport",
      "kpSkill": "vocab_meaning",  // 知识点技能
      "kpSkillName": "词义"
    }
  ]
}
```

**约束：**
- `cType` 必须与本记录所属题型的 cType 一致
- `cId` 必须与字段 `ID` 一致
- `kpInfo[]` 每一项对应一个知识点

## 3. taskData / taskInfo — 任务元信息（通用结构）

```json
{
  "cType": "core_xxx_xxx",        // 题型唯一标识（见下表）
  "cId": "0000001",                // 任务ID
  "title": "任务中文名",
  "taskDesc": "任务描述",           // 或以 sceneDesc 命名
  "sceneDesc": "场景背景描述"
}
```

> ⚠️ 字段名有两种：`taskData`（阅读/听力/口语）和 `taskInfo`（写作/看图选词）。内容结构相同。

## 4. cType 对照表

| cType | 题型中文名 | 分类 |
|-------|-----------|:--:|
| `core_reading_order` | 合作阅读 | 📖 阅读 |
| `core_reading_imageDrag` | 看图选词 | 📖 阅读 |
| `core_listening_order` | 合作听力 | 🎧 听力 |
| `core_listening_drag` | 听力拖拽 | 🎧 听力 |
| `core_listening_choose` | 听力选择 | 🎧 听力 |
| `core_speaking_reply` | 口语快答 | 🗣 口语 |
| `core_speaking_monologue` | 口语独白 | 🗣 口语 |
| `core_speaking_inquiry` | 口语妙问 | 🗣 口语 |
| `core_speaking_image` | 看图说话 | 🗣 口语 |
| `core_writing_questionMakeSentence` | 写作互动 / 邮件组句 | ✏️ 写作 |
| `core_writing_imgMakeSentence` | 看图组句 | ✏️ 写作 |
| `core_writing_imgWrite` | 看图撰写 | ✏️ 写作 |
| `core_writing_questionWrite` | 邮件撰写 | ✏️ 写作 |

> 口语探讨 (`core_speaking_discuss`) — S0 表当前为空，待后续补充

---

# 第二部分：题型专区

---

## 📖 阅读类

### 合作阅读 `core_reading_order`

**Bitable:** `HIuLbJ6E8aNw2lsdT1YcvNOmnog` / S0–S3  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cType, cId, title, sceneDesc, img, key, cDesc}` | key=核心词汇列表，cDesc=中英产出概括 |
| `sequenceData` | `{sequence: [{text|[i]}/{question|[j]}/{dialog}]}` | 流程推进引擎 |
| `textData` | `{text: [{textType, textTitle, textBody}], question: [{type,npcName,content,optionList,answer,meaning,explain}]}` | 阅读材料+理解题 |
| `learningData` | `{closing, learningPart: [{leadIn, type, npcName, content, learning: [{answer, meaning, optionList, question}]}]}` | 词汇/句型学习流程 |

**流程编排两种模式：**
- **交替型：** text[i] → question[i] → text[i+1] → ...
- **集中型：** text[0] → dialog → question[0] → dialog → question[1] → ...

**阅读题 meaning 标签（开放型）：**
实际数据中的 meaning 为自由文本，常见分类：
- 细节提取类：提取文章中的关键/具体/细节信息、识别文章中的形状细节
- 概念理解类：理解文章中的关键概念、行为准则、求助对象、关键角色
- 描述识别类：理解文章中的形容词/形状描述、动作指令、未知信息
- 推理推测类：根据细节进行合理推测

**生产规范：**
- 每篇至少覆盖「细节信息」+「主旨大意」两个维度
- optionList 每项必须有 feedback
- NPC 名称需与 角色配置 一致

**审校清单：**
- [ ] JSON 可解析
- [ ] taskData.cId = kpInfo.cId = ID
- [ ] sequenceData 索引不越界
- [ ] textData.question[].answer 在 optionList 范围内
- [ ] optionList feedback 不为空
- [ ] textData.question[].meaning 不为空
- [ ] LearningData 的 answer 在范围内
- [ ] 角色配置 NPC 一致性
- [ ] taskData.key 与 kpInfo.kpInfo 对应

---

### 看图选词 `core_reading_imageDrag`

**Bitable:** `Qf0Ob6TyEaShufsORGBc8WTinFf` / L1  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskInfo` | `{cId, cType, title, taskDesc, sceneDesc}` | 任务元信息 |
| `questionGroup` | `[{...}]` list | 题目组（含图片+单词拖拽） |
| `studyInfo` | `{learningPart: [...], closing}` | 学习流程 |
| `学习流程配置` | text | Markdown 格式的学习流程 |

与 合作阅读 的区别：无 sequenceData/textData，聚焦于图片+单词的视觉匹配。

---

## 🎧 听力类

### 合作听力 `core_listening_order`

**Bitable:** `B8Z1b2TnYaKRa1sWSljcV4Q9nYf` / S1–S3, LV1  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cType, cId, title, sceneDesc, img}` | 无 key/cDesc（词汇在 kpInfo） |
| `sequenceData` | `{sequence: [...]}` | 同 合作阅读 |
| `textData` | `{audio: [...], question: [...options+answer+meaning...]}` | ⚠️ 用 `audio` 替代 `text` |
| `learningData` | `{closing, learningPart: [...]}` | 同 合作阅读 |

**与 合作阅读 的关键差异：**
- `textData.audio[]` 替代 `textData.text[]`（音频材料 vs 文本材料）
- sequence 中用 `{"audio": [i]}` 替代 `{"text": [i]}`
- taskData 无 key/cDesc 字段

---

### 听力拖拽 `core_listening_drag`

**Bitable:** `Uey8bhdLBa66TIsGrFBcIQKRnsg` / S3, LV1  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cType, cId, title, sceneDesc, key}` | 有 key 词汇表 |
| `dialogList` | `[{...}]` list | 听力对话列表 |
| `preDialog` | `[{...}]` list | 前置对话 |
| `questionList` | `[{...}]` list | 拖拽题目列表 |
| `learningData` | `{learningPart, closing}` | 学习流程 |
| `听力材料` | text | 音频文本材料 |
| `父记录` | list | 关联的父记录 |

---

### 听力选择 `core_listening_choose`

**Bitable:** `C7e9bzA1GaZ61FsTz87cEM8Ynoe` / S3, LV1  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cType, cId, title, sceneDesc, key}` | 任务元信息 |
| `questionGroup` | `[{...}]` list | 选择题组 |
| `learningData` | `{learningPart, closing}` | 学习流程 |

---

## 🗣 口语类

### 口语快答 `core_speaking_reply`

**Bitable:** `D0Tpbs6D6aIRXdsKDLec0V0on3b` / S0–S3  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cType, cId, title, taskDesc, sceneDesc}` | 任务元信息 |
| `configData` | `{config: {...}}` | 对话配置（ASR/评分相关） |
| `settingData` | `{setting: {...}}` | 场景设定 |
| `exampleDialog` | `[{...}]` list | 对话样例 |
| `learningData` | `{learningPart: [...]}` | 学习流程（无 closing） |
| `promptInfo配置` | text | prompt 配置 |
| `教研-任务规则与NPC设定` | text | 任务规则 |

**结构特点：** 侧重对话交互，有 configData/settingData 控制口语识别和评分。

---

### 口语妙问 `core_speaking_inquiry`

**Bitable:** `Ct4ebNgxUatyUssuVHycfhbgnXf` / S0–S3  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cType, cId, title, taskDesc, sceneDesc}` | 同 口语快答 |
| `configData` | `{config: {...}}` | 对话配置 |
| `settingData` | `{setting: {...}}` | 场景设定 |
| `exampleDialog` | `[{...}]` list | 对话样例 |
| `learningData` | `{learningPart: [...]}` | 学习流程 |
| `任务设定` | text | 任务规则 |

**与 口语快答 的区别：** 口语妙问侧重主动提问场景，口语快答侧重回答场景。JSON 结构基本相同，差异在内容配置中体现。

---

### 口语独白 `core_speaking_monologue`

**Bitable:** `JtsAbFoSbaWWvssLsxXcAgdEnkh` / L2  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cId, cType, title, taskDesc, sceneDesc}` | 任务元信息 |
| `configData` | `{sentenceMin, sentenceMax, monologueExample, passCondition, asrPrompt}` | ⚠️ 独白配置（句子数限制等） |
| `npclistData` | `[{...}]` list | NPC 列表 |
| `learningData` | `{learningPart, closing}` | 学习流程 |
| `npc站位列表` | text | NPC 站位 |

**与 口语快答/妙问 的区别：** 独白型（无 exampleDialog），有句子数量约束（sentenceMin/Max）。

---

### 看图说话 `core_speaking_image`

**Bitable:** `DOVHbQamCaZPTCsuzJrclG1an6b` / S3, LV1  
**核心 JSON 字段：**

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskData` | `{cType, cId, title, taskDesc, sceneDesc}` | 任务元信息 |
| `configData` | `{config: {...}}` | 对话配置 |
| `imageInfo` | `{questionImg: [...]}` | 图片素材信息 |
| `questionList` | `[{...}]` list | 问题列表 |
| `optionList` | `[{...}]` list | 选项列表 |
| `learningData` | `{learningPart, closing}` | 学习流程 |

**结构特点：** 有 imageInfo 管理图片素材 + questionList/optionList 管理图文互动题。

---

## ✏️ 写作类

**5 种写作题型共享相同的 JSON 结构框架**，差异体现在 `textInfo` 和素材类型上：

| 题型 | cType | 素材来源 |
|------|-------|---------|
| 写作互动 | `core_writing_questionMakeSentence` | 文字问题 |
| 邮件组句 | `core_writing_questionMakeSentence` | 邮件文本 |
| 看图组句 | `core_writing_imgMakeSentence` | 图片 |
| 看图撰写 | `core_writing_imgWrite` | 图片 |
| 邮件撰写 | `core_writing_questionWrite` | 邮件文本 |

### 写作类通用 JSON 结构

| 字段 | 结构 | 说明 |
|------|------|------|
| `taskInfo` | `{cId, cType, title, taskDesc, sceneDesc}` | 任务元信息 |
| `textInfo` | `{inputType, passCondition, textList: [...]}` | ⚠️ 写作素材+通过条件 |
| `evalInfo` | `{title, taskDesc, sceneDesc, knowledge, passCondition}` | 评分/评价配置 |
| `studyInfo` | `{learningPart: [...], closing}` | 学习流程 |
| `kpInfo` | 通用结构 | 知识点绑定 |
| `任务信息` | text | 中文任务描述 |
| `写作材料` | text | 写作素材文本 |

**textInfo 字段详解：**
```json
{
  "inputType": "sentence_building",   // 输入类型
  "passCondition": "...",             // 通关条件描述
  "textList": [                       // 素材列表
    {"type": "...", "content": "..."}
  ]
}
```

**evalInfo 字段详解：**
```json
{
  "title": "任务中文名",
  "taskDesc": "任务描述",
  "sceneDesc": "场景背景",
  "knowledge": "...",    // 所需知识点
  "passCondition": "..."  // 通过条件
}
```

⚠️ 写作互动/邮件组句 cType 相同（`core_writing_questionMakeSentence`），通过 `textInfo.textList[].type` 区分素材是文本问题还是邮件格式。

---

# 第三部分：自动化审校规则

## 通用检查（所有题型）

```python
# 规则列表（适用于所有 14 种题型）
通用检查项 = [
    "JSON字段可解析性（json.loads 不抛异常）",
    "taskData/taskInfo.cId == kpInfo.cId == ID",
    "kpInfo.cType 正确",
    "dataStatus 不为空",
    "互动描述 不为空",
]
```

## 分题型检查

```python
题型专属检查 = {
    "阅读类": [
        "sequenceData 索引不越界",
        "question[].answer 在 optionList 范围内",
        "optionList 每项有 feedback",
        "question[].meaning 不为空",
    ],
    "听力类": [
        "textData.audio 不为空",
        "sequenceData 索引不越界",
        "听力材料 不为空",
    ],
    "口语类": [
        "configData/settingData 可解析",
        "learningData 可解析",
    ],
    "写作类": [
        "textInfo.textList 不为空",
        "evalInfo 可解析",
        "studyInfo 可解析",
    ],
}
```

---

# 第四部分：扩展指南

新增题型时：
1. 用 `bitable-reader` 获取 bitable → 列出表 → 读取第一个内容表
2. 采样 1–2 条记录 → 提取 JSON 字段名和 cType
3. 与已有结构对比 → 归类到阅读/听力/口语/写作
4. 按本文件格式补充新章节
5. 更新顶部 coverage 计数

**待补充:** 口语探讨 (`core_speaking_discuss`) — S0 表当前无数据
