---
name: script-component-production
description: 剧本互动组件内容生产/审校/回填技能（不涉及JSON转换）。触发方式：(1) `/组件生产 --feishu-url <链接>` (2) 飞书链接 + "组件生产"/"组件回填"。不会误触发：仅含"互动"不触发；含"组件配置"不触发（属于 interactive-component-json 技能）。覆盖27种中互动+14种核心互动，从剧本sheet读取→识别→生成组件内容（结构化文本格式）→审校→回填。
---

# 剧本互动组件内容生产技能

## ⚡ 触发方式（防误触发机制）

| 触发方式 | 格式 | 说明 |
|---------|------|------|
| 命令触发（推荐） | **`/组件生产 --feishu-url <链接>`** | 精确匹配，绝不会误触发 |
| 链接触发 | 飞书文档链接 + **"组件生产"/"组件回填"** | 自然语言触发 |

**不会触发的情况：**
- ❌ 仅说"互动" → 不触发（太模糊）
- ❌ 仅说"组件" → 不触发（需要结合文档链接）
- ❌ 消息含 **"组件配置"** → 不触发（属于 `interactive-component-json` 技能，由它独立响应）
- ✅ 正确使用：`/组件生产 --feishu-url https://... --mode backfill`

---

## 核心功能

- ✅ **智能组件识别**：读取剧本sheet，根据列A「类型」字段识别组件行（互动 / 核心互动-xxx）
- ✅ **组件类型自动匹配**：根据剧情上下文、前后台词自动匹配27种中互动或14种核心互动类型
- ✅ **组件内容生成**：调用LLM生成结构化文本格式的组件内容（【任务标题】【资源配置】... 等字段）
- ✅ **自动审校**：校验ID格式/字段完整性/题型匹配/知识点一致性/格式规范/文本规范（禁止Markdown、英式拼写、标点符号）
- ✅ **飞书回填**：将生成的组件内容写入剧本sheet的「组件配置」列（列G），**以结构化文本格式存储，非JSON**

---

## 职责边界（重要）

```
/组件生产（本技能）              /组件配置（interactive-component-json 技能）
     │                                    │
  剧本组件内容生产                      JSON配置格式转换
  输出：结构化文本                      输入：结构化文本
     │                                    │
     ├─ 教研员二轮审校 ────────────────────→ 确认无误后触发
     │
  不生成JSON！                           生成标准JSON配置
```

- **本技能产出**：结构化文本格式的组件内容（见下方「输出格式」）
- **本技能不负责**：将组件内容转换为JSON、定义JSON schema、生成JSON配置
- **下游流程**：教研员审校确认后，通过 `/组件配置`（`interactive-component-json` 技能）转换

---

## 执行流程（6个节点）

```
读取飞书文档 → 解析Sheet列结构 → 识别组件行 → 匹配组件类型 → LLM生成组件内容 → 审校 → 回填
```

### 节点1：文档读取
- 解析 feishu-url → 获取 wiki_token → 读取文档内容
- 识别嵌入的 Sheet token（如 `<sheet token="xxx_yyy"/>`）
- 读取 Sheet 元数据（sheet_id / 行数 / 列数 / 冻结行）

### 节点2：列结构解析
标准剧本表格列：
| A | B | C | D | E | F | G | H |
|---|---|---|---|---|---|---|---|
| **类型** | 配置信息 | 剧情描述 | 角色名 | 编剧台词 | 英文台词 | **组件配置** | 知识点 |

- 列A「类型」：TL / 互动 / 核心互动-XXX / 空
- 列G「组件配置」：目标回填列（存入结构化文本，非JSON）

### 节点3：组件行识别
遍历列A，提取所有组件标记行：
- `互动` → 中互动组件（对话朗读/对话表达/对话选择/对话选读/对话挖空/对话组句/看图说话/物品互动/图片单选/... 共27种）
- `核心互动-听力` → 核心互动-听力组件（合作听力/听力拖拽/听力选择）
- `核心互动-口语` → 核心互动-口语组件（口语快答/口语独白/口语妙问/看图说话/口语探讨）
- `核心互动-阅读` → 核心互动-阅读组件（合作阅读/...）
- `核心互动-写作` → 核心互动-写作组件（写作互动/看图组句/看图撰写/邮件组句/邮件撰写）

### 节点4：组件类型匹配
根据上下文信息综合判断组件类型：

**输入信号：**
1. 列A的「类型」值（最优先）
2. 剧情描述（列C）中的动作/场景提示
3. 前后台词（列E/F）的语义内容
4. 知识点参考表（zbfYO4或文档内的知识点区）

**匹配逻辑：**
- `核心互动-听力` → 匹配听力类核心互动（合作听力/听力拖拽/听力选择）
- `核心互动-口语` → 匹配口语类核心互动
- `核心互动-阅读` → 匹配阅读类核心互动
- `核心互动-写作` → 匹配写作类核心互动
- `互动`（中互动）→ 根据对话场景匹配：
  - 台词含"(朗读)" → 对话朗读
  - 台词含"选项"/"choose" → 对话选择/对话选读
  - 台词含"__"（挖空）→ 对话挖空
  - 台词含"组句"/"拼句子" → 对话组句
  - 剧情描述含"表达"/"说出" → 对话表达
  - 剧情描述含"看图"/"图片" → 看图说话

### 节点5：LLM生成组件内容（结构化文本）

调用大模型生成结构化文本格式的组件内容，遵循 `component-design` 技能规范。

**输出格式（结构化文本，非JSON）：**

所有组件内容按以下字段顺序输出，无内容的字段填「无」：

```
【组件ID】020501
【任务标题】介绍照片
【资源配置】
图片时机：无
音频载体：无

【情境引入】
Johnny : What's That?

【互动内容】
This is my picture. It's ___, green and orange.（音频）
选项1：blue（正确）
选项2：black

【互动反馈】
正确：无
错误：Johnny : Come on! It's not what you said.

【后置对话】
无

【知识点】
单词：blue, orange
句型：It is...
```

**各组件类型的字段模板参考：**
- 中互动 → 遵循 `component-design` 技能中各类型专属规则
- 核心互动 → 遵循 `core-content-json-standard` 技能中的内容结构描述
- 对话类互动 → 遵循 `dialogue-interaction-config` 技能规范

### 节点6：审校 & 回填

#### 审校检查项
| # | 检查项 | 规则 |
|---|--------|------|
| 1 | 组件ID | `[2位季][2位单元][3位自增]`，同类型不重复、序号连续 |
| 2 | 字段完整 | 组件类型对应必填字段全部存在，无内容填「无」 |
| 3 | 题型匹配 | 生成的字段结构与列A标注的组件类型一致 |
| 4 | 知识点一致 | 组件内容中的知识点与知识点参考表匹配 |
| 5 | 任务标题 | 无序号、无"-"连接、10字以内 |
| 6 | 选项格式 | 对话类用「选项1：XXX」、图片类用00/01/02编号 |
| 7 | 反馈格式 | 错误反馈带角色名、自然对话、非指令式 |
| 8 | 高亮规则 | 图片类仅知识点词加$、对话类不加 |
| 9 | 情境引入 | 无内容填「无」，多句换行，格式为「角色名: 台词」。**禁止直接复制前一行台词原文**，相同则填「无」 |
| 10 | 后置对话 | 取组件行之后的紧接台词，无则填「无」。**禁止直接复制后一行台词原文**，相同则填「无」 |
| 11 | 超纲检查 | 词汇/句型在对应级别词库/句型库范围内 |
| 12 | 标点符号 | 统一使用标准英文标点，禁止「～」「!!!」等非标准标点 |
| 13 | 图片类资源配置 | 图片类互动（图片单选/多选/有序/拖拽）**不包含【资源配置】字段** |
| 14 | 图片类辅助信息 | 图片类互动在「正确：XX」后添加 `辅助信息：{单词} {中文释义}。`，释义参考知识点 Sheet |
| 15 | 对话朗读反馈 | 对话朗读**不包含【互动反馈】字段** |
| 16 | 配图资源配置 | A列含"配图"时，仅保留`图片时机`（不写`音频载体`），根据有内容的 section 动态列出 |

#### 回填
- 将生成的结构化文本写入列G（组件配置）
- 组件内容写入其ID对应行（TAxx编号行）
- 写入后用PUT API回填，写入后回读验证
- **回填格式为结构化文本，不是JSON**

---

## 组件类型速查

### 中互动（27类）
```
对话互动、对话朗读、对话表达、对话选择、对话选读、对话挖空、对话组句、
信息描写、信息拼词、信息组句、信息补词、信息填词、信息填句、
物品互动、图片互动、图片单选、图片多选、图片有序、
材料互动、指令互动、挖空互动、组句互动、填词互动、
语音互动、造句互动、发音互动
```

### 核心互动（14类）
```
合作阅读、口语快答、口语独白、口语妙问、看图说话、口语探讨、
合作听力、听力拖拽、听力选择、
写作互动、看图组句、看图撰写、邮件组句、邮件撰写
```

---

## 与上下游技能的协作

```
/英文台词          →   /组件生产（本技能）    →  [教研员审校]  →  /组件配置
(kids-english-)       (script-component-)                    (interactive-component-json)
     │                       │
  列E→列F                 列G（结构化文本）                  列G→标准JSON
```

1. **先**：`/英文台词` → 生产列E→列F的英文台词
2. **后**：`/组件生产` → 生产列G的组件内容（结构化文本）
3. **然后**：教研员二轮审校，确认无误
4. **最后**：`/组件配置` → 将确认后的组件内容转为标准JSON配置

---

## 使用示例

```bash
# 1. 完整流程：生产 + 审校 + 回填
/组件生产 --feishu-url https://makee-interactive.feishu.cn/wiki/FkKgw4jBPix9lNkRemLcSwYOnid

# 2. 仅生产，不回填
/组件生产 --feishu-url https://makee-interactive.feishu.cn/wiki/xxx --mode produce

# 3. 仅审校已有内容
/组件生产 --feishu-url https://makee-interactive.feishu.cn/wiki/xxx --mode audit

# 4. 指定难度等级
/组件生产 --feishu-url https://makee-interactive.feishu.cn/wiki/xxx --stage S2
```

---

## 错误处理

| 场景 | 处理 |
|------|------|
| 文档无权限 | 提示Bot需要加入知识空间 |
| 文档无内嵌Sheet | 提示文档不包含剧本表格 |
| 无组件行 | 提示未发现需生产的组件行 |
| LLM生成失败 | 重试1次，仍失败则跳过该行并在报告中标注 |
| 飞书写入失败 | 自动备份组件内容到本地output目录 |
| ID冲突 | 自动递增查找下一个可用ID |

---

## 版本历史

- v1.2.0（2026-06-08）：审校检查项新增 #13-#16（图片类资源配置、辅助信息、对话朗读反馈、配图资源配置）；更新 #9-#10 情境引入/后置对话去重规则
- v1.1.0（2026-05-13）：明确职责边界，产出格式从JSON改为结构化文本，与 interactive-component-json 解耦
- v1.0.0（2026-05-13）：初始版本，覆盖27种中互动 + 14种核心互动，完整6节点流程
