---
name: writing_pic_qa
description: K12英语写作看图回答题标准化设计、生产、审校工具。对应题型：写作 - 看图回答题【阶段归属：L1&L2共用，通过难度参数区分】。学生观察图片，根据提示问题写出答案，提供提示答案开头辅助填空。考察核心能力：图文匹配、书写表达。使用场景：(1) 根据给定知识点、难度等级生成符合教研规范的写作看图回答题；(2) 校验题目格式、难度匹配、内容合规性；(3) 批量生产写作看图回答题；(4) 产出后自动写入飞书多维表格。触发关键词：写作看图回答、看图写作、writing pic qa、看图写词、书写表达题
---


## 文本输出规范（强制执行）

所有输出的文本内容（台词、题目、选项、解析、音频文本、阅读文章等）必须遵守以下规则：

1. 禁止 Markdown 标记：禁止使用 ** * __ _ 等加粗/斜体标识，也禁止使用 # > - 等块级 Markdown 语法。所有文本纯文本输出。
2. 英式拼写优先：单词涉及英美式拼写差异时（如 colour/color、centre/center、travelling/traveling），统一选择英式拼写。
3. 标点符号规范：严格区分全角/半角符号。中文内容使用全角标点（，。！？），英文内容使用半角标点（. , ! ?），不得混用。

# Writing Pic QA 写作看图回答题生产技能

## 一、题型说明

本技能对应题型：**写作 - 看图回答题【阶段归属：L1&L2共用，通过难度参数区分】**。

**核心能力**：图文匹配（图片信息提取 + 书写表达）—— 学生观察图片，根据提示问题写出答案，题目提供提示答案开头（sentence starter），学生只需填写核心词/短语完成句子。

---

## 二、输入规范（生产请求格式）

| 参数 | 必填 | 格式示例 | 说明 |
|------|------|----------|------|
| 题型类型 | ✅ | `writing_pic_qa` | 固定值 |
| 难度等级 | ✅ | `A级` | A/B/C/D 四级 |
| 题目集合 ID | ✅ | `000001` | 6位数字，全题型唯一 |
| 题组定义 | ✅ | 见下方 | 每个题组包含：核心句型 + 题量 |

### 题组定义格式
```
题组N：{核心句型1} / {核心句型2}
各{题量}个小题
```

**示例：**
```
题组1：I am... / I am going to...
各1个小题
题组2：I am ready! / Thank you for...
各1个小题
```

---

## 三、题目设计核心原则（强制执行）

### 3.1 挖空 = 考察知识点本身

> 挖空必须是句型结构中的**核心知识词**（be动词、介词、状态词等），不能是题干已给出的附带信息。

| ❌ 错误做法 | ✅ 正确做法 | 原因 |
|-----------|-----------|------|
| `Thank you (3) the book.` → **you** | `Thank you (3) the book.` → **for** | you 是固化搭配，for 是介词知识点 |
| `I (2) Anna.` → **I** | `I (2) Anna.` → **am** | 名字 Anna 是信息复述，am 是 be动词知识点 |
| `I am from (5).` → **China** | `I am (4) China.` → **from** | 国家名是图片信息，from 是介词知识点 |

**规则：**
- 只能为**1个单词**挖空，禁止多词填空
- 挖空词必须是对应句型结构中需要掌握的**功能词/结构词**（am/is/are/going/ready/for 等）
- 题干已给信息（姓名、地点、物品名等）用于提供语境，不挖空

**问句型知识点的挖空方向：**
- 当知识点是一个问句（如 What should we do?），在**问句上挖空**，答句作为已知信息完整呈现
- 示例：`"What (6) we do? We should go home now."` → 挖空 should（6字母），答句整句给出
- 反例：不要写成 `"What should we do? We should (2) home."` → 挖空了答句的 go，但知识点在问句的 should 上

### 3.2 考察点多样化

同一句型结构应覆盖多种搭配用法，避免单一考察模式：

| 句型 | 考察变体 | 示例 |
|------|---------|------|
| Thank you for... | for + 名词 | `Thank you (3) the book.` → for |
| Thank you for... | for + 动名词 | `Thank you for (7) me.` → helping |
| I am... | be + 状态词 | `I am (5)!` → ready |
| I am... | be + 身份 | `I (2) a student.` → am |
| I am going to... | 动名词 going | `I am (5) to school.` → going |

### 3.3 语言难度 = 欧标 A1-A2

- 句型控制在 Starters（L1）/ Flyers-KET（L2）级别
- L1 对标 A1（Starters/Movers），L2 对标 A1-A2（Flyers/KET）
- 题干用词优先使用 L1 词库词汇（`business_knowledge/L1_word_list.json`）
- 基础功能词（代词、be动词、介词）当前 L1/L2 词库暂不收录，写题时绕过词汇校验硬性约束

### 3.4 阶段变化原则

当前规格适用 **L2 U1-U6（阶段1，A级，Flyers入门）**，后续阶段规则将随难度递增而变化：

| 维度 | L2 U1-U6（阶段1，A级） | 后续阶段 |
|------|----------------------|---------|
| 挖空单位 | 1 个单词 | 短语 / 完整句子 |
| 题组小题数 | 2 小题 / 题组 | 4 小题 / 题组 |
| 能力标签 | 简短作答 / 一词答案 | （待补充） |

> **L2 8阶段难度体系（每2阶段为1个难度等级）：**
> - A级 = U1-U12（阶段1-2）：Flyers入门→Flyers基础
> - B级 = U13-U24（阶段3-4）：Flyers达标→KET入门
> - C级 = U25-U36（阶段5-6）：KET基础→KET强化
> - D级 = U37-U48（阶段7-8）：KET高位→KET达标

### 3.5 题干多样化

同一题包内的 question 不能全部相同，应随语境微调：

| ❌ 千篇一律 | ✅ 随语境变化 |
|-----------|-------------|
| 全部 `What does the girl say?` | `What does the girl say about herself?` / `Where does the girl say she is going?` / `What does the girl say to her friend?` |

**规则：** question 与 questionDesc 的人称必须一致。question 问角色说了什么 → questionDesc 用第一人称直接引语。

---

## 四、图片资源规则

### 4.1 一个题组 = 一张共享图

- 每个题组内所有小题**共享同一张图片**
- 图片需同时支撑该题组所有小题的语境线索
- 命名：`{questionSetID}-{序号}.png`，序号跨全题组连续递增（00 起始）

### 4.2 图片描述格式

**中文纯文本格式**，每张图独立编号，直接写入 bitable `图片描述` 列（非 JSON 包裹）：

```
1.

风格: 卡通，简单线条
场景：{场景名称}
{角色特征} - {动作描述} ；
{角色特征} - {动作描述} 。

2.

风格: 卡通，简单线条
场景：{场景名称}
{角色特征} - {动作描述} ；
{角色特征} - {动作描述} 。
```

**样例：**
```
1.

风格: 卡通，简单线条
场景：学校门口，晴朗早晨
扎马尾的小女孩 - 穿着蓝色校服、胸前别有姓名牌、背着红色书包，站在校门口指着自己微笑 ；
同一个扎马尾的小女孩 - 背着红色书包正往校门里走，回头笑着招手 。

2.

风格: 卡通，简单线条
场景：生日派对，客厅装饰彩色气球，桌上放着蛋糕和蜡烛
戴条纹派对帽的小男孩 - 站在门口举起双手、表情兴奋准备迎接客人 ；
扎双马尾的小女孩 - 双手接过朋友递来的一本包装好的书、面带微笑说谢谢 。
```

**要求：**
- 图序编号：`1.` / `2.` 自上而下，编号后空一行
- 风格固定：`风格: 卡通，简单线条`
- 场景一行概括
- 每行一个角色：`{特征} - {动作}`，以 `；` 或 `。` 结尾
- 同图多角色时用 `；` 分隔，最后用 `。` 收尾
- 角色特征含发型/服饰/配饰，动作含姿态/表情/手持物品/位置
- 同一角色出现在同图多处时标注「同一个{角色}」
- 无需 JSON 包裹，纯中文文本直接存入 bitable

### 4.3 图片产出与存储

- 图片描述纯中文文本直接写入飞书多维表格 `图片描述` 列
- 图片资源由设计师根据描述另行制作

---

## 五、输出规范

### 5.1 JSON 结构（bitable 写入格式）

```json
{
  "first": {
    "category": "writing",
    "type": "writing_pic_qa",
    "questionSetID": "000001",
    "textDesc": "Look and write.",
    "questionSet": [
      {
        "questionImage": "000001-00.png",
        "questionList": [
          {
            "question": "What does the girl say about herself?",
            "questionDesc": "I (2) a student.",
            "answerText": "am",
            "ability": ["简短作答", "一词答案"],
            "explanation": "图中女孩穿校服指着胸前名牌，表明自己是学生。需填写系动词 am（I am 固定搭配），字母数2。"
          },
          {
            "question": "Where does the girl say she is going?",
            "questionDesc": "I am (5) to school.",
            "answerText": "going",
            "ability": ["简短作答", "一词答案"],
            "explanation": "同一场景中女孩背书包站校门前，表示正要进学校。需填写 going（be going to 表示打算），字母数5。"
          }
        ]
      }
    ]
  },
  "second": {
    "category": "writing",
    "type": "writing_pic_qa",
    "questionSetID": "000001",
    "textDesc": "Look and write.",
    "questionSet": [
      {
        "questionImage": "000001-01.png",
        "questionList": [
          {
            "question": "What does the boy say at the party?",
            "questionDesc": "I am (5)!",
            "answerText": "ready",
            "ability": ["简短作答", "一词答案"],
            "explanation": "图中男孩戴派对帽、举起双手站在门口，表示已准备好迎接客人。需填写状态词 ready，字母数5。"
          },
          {
            "question": "What does the girl say to her friend?",
            "questionDesc": "Thank you (3) the book.",
            "answerText": "for",
            "ability": ["简短作答", "一词答案"],
            "explanation": "同一场景中女孩从朋友手中接过一本书，微笑表示感谢。需填写介词 for（Thank you for + 名词），字母数3。"
          }
        ]
      }
    ]
  }
}
```

### 5.2 字段规范

| 字段 | 必填 | 类型 | 说明 |
|------|------|------|------|
| first/second | ✅ | object | 外层 key，对应题组1/题组2 |
| first.category | ✅ | string | 固定值 `writing` |
| first.type | ✅ | string | 固定值 `writing_pic_qa` |
| first.questionSetID | ✅ | string | 题型唯一标识，6位数字 |
| first.textDesc | ✅ | string | 做题要求，固定为 `Look and write.` |
| first.questionSet | ✅ | array | 图片组（每个题组1张图） |
| questionSet[].questionImage | ✅ | string | 图片文件名，格式 `{questionSetID}-{序号}.png` |
| questionSet[].questionList | ✅ | array | 该图片对应的题目列表（1-3题） |
| questionList[].question | ✅ | string | 问题（问角色说了什么，口语化，各题微调） |
| questionList[].questionDesc | ✅ | string | 提示答案开头，含字母数标记如 `(5)` |
| questionList[].answerText | ✅ | string | 标准答案（1个单词） |
| questionList[].ability | ✅ | array | L2 U1-U6（阶段1，A级）固定 `["简短作答", "一词答案"]` |
| questionList[].explanation | ✅ | string | 解析：图片内容 + 考点 + 字母数 |

---

## 六、飞书多维表格写入规范（通用流程）

### 6.1 目标表格定位

1. 从用户提供的 wiki 链接中提取 `wiki_token`
2. 通过 Wiki V2 API 获取节点信息 → 确认 `obj_type` 为 `bitable`，获取 `app_token`
3. 调用 `lark_bitable_operate_as_bot` 列出所有数据表（`list_tables`）
4. 按题型名称匹配目标表（如 `写作-P3-看图回答题`）

### 6.2 写入字段

| bitable 列名 | 写入内容 | 格式 |
|-------------|---------|------|
| 题目集合 ID | questionSetID | 纯文本，如 `000001` |
| jsonData | 完整 JSON（含 first/second 包裹） | JSON 字符串 |
| 图片描述 | 图片描述 | 纯中文文本（4.2格式） |

### 6.3 写入流程

```bash
# 1. 定位表
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_tables <app_token>

# 2. 新建记录
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh create_record \
  <app_token> <table_id> '{"题目集合 ID":"000001","jsonData":"...","图片描述":"..."}'

# 3. 回读验证
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_records \
  <app_token> <table_id> 5
```

> 📌 **通用化说明**：上述写入流程适用于单元挑战全部题型（听力/阅读/写作/口语各子型）。各题型仅 `jsonData` 结构不同（对应各自的 `first`/`second` wrapper），写入步骤统一。

### 6.4 Bot 身份要求

- 凭据路径：`/root/.openclaw/credentials/xiaoyan/config.json`
- App ID：`cli_a931175d41799cc7`
- 目标多维表格需将 Bot 添加为协作者（至少编辑权限）

---

## 七、完整生产流程（端到端）

```
[1] 接收生产请求
    ├── 提取：题型类型 / 难度等级 / 题目集合ID / 题组定义
    │
[2] 题目设计
    ├── 按题组拆分知识点 → 确定每道小题的挖空词
    ├── 应用核心原则（3.1-3.4）
    ├── 设计共享图片场景（一个题组一张图）
    │
[3] 产出 JSON
    ├── 按 5.1 结构构造 `{"first": {...}, "second": {...}}`
    ├── questionDesc 中的字母数 = answerText 的实际字母数
    ├── 自检：挖空词是否为知识点核心词 ✓ 是否仅1词 ✓ 题干是否多样化 ✓
    │
[4] 产出图片描述
    ├── 按 4.2 中文格式为每张图写描述
    ├── 纯文本编号：1. / 2. 自上而下
    │
[5] 对话框反馈
    ├── 仅输出题目总览表格（题组/#/questionDesc/答案/考察点）
    ├── **不在对话框输出完整 JSON**（已写入 bitable，避免冗余）
    │
[6] 写入飞书多维表格
    ├── 按 6.1 定位目标表
    ├── 创建/更新记录，写入：题目集合 ID + jsonData + 图片描述
    ├── 回读验证
    │
[7] 记忆沉淀
    └── 写入 memory/YYYY-MM-DD.md
```

---

## 八、校验规则

自动校验不通过直接返回错误：

1. **挖空校验**：
   - 挖空词必须是核心知识点词，禁止挖空题干已知信息
   - 每空仅1个单词
   - questionDesc 中数字标记 = 答案字母数

2. **人称一致性校验**：
   - question 与 questionDesc 人称对应
   - question 问角色说了什么 → questionDesc 用第一人称直接引语

3. **词汇校验**：
   - L1级别仅限 L1 词库（`business_knowledge/L1_word_list.json`）
   - L2级别可用 L1 + L2 词库
   - 基础功能词（代词/be动词/介词）暂豁免

4. **格式校验**：JSON 结构缺少必填字段或格式不符合规范

5. **逻辑校验**：
   - 答案与图片语境匹配
   - questionDesc 引导词与答案语法一致（单复数、时态）
   - 同一题包内题目题干不重复

6. **图片命名连续性**：questionImage 序号从 00 开始跨题组连续递增

---

## 九、阶段与难度对应

当前首个阶段为 **L2 U1-U6（阶段1，A级，Flyers入门）**，后续阶段规则将随难度递增：

| 阶段 | 难度 | 对标 | 挖空单位 | 小题/题组 | 能力标签 |
|------|------|------|---------|----------|---------|
| L2 U1-U6（阶段1） | A级 | Flyers入门 | 1个核心词 | 2 小题 | 简短作答 / 一词答案 |
| L2 后续阶段 | B/C/D | (待补充) | 短语 / 句子 | 4 小题 | (待补充) |

> **L2 完整 8 阶段难度体系（每2阶段为1个难度等级）：**
> - A级 = U1-U12（阶段1-2）：Flyers入门→Flyers基础
> - B级 = U13-U24（阶段3-4）：Flyers达标→KET入门
> - C级 = U25-U36（阶段5-6）：KET基础→KET强化
> - D级 = U37-U48（阶段7-8）：KET高位→KET达标

> **历史 L1 规则（供参考）：**
>
> | 难度等级 | 对应阶段 | 剑桥对标 | 答案要求 |
> |----------|---------|---------|---------|
> | A级 | L1 第1-2阶段 | Starters 1-2 | 1个核心词（功能词/名词），questionDesc 提供完整句子骨架 |
> | B级 | L1 第3-4阶段 | Starters 3 | 1-2词短语（形容词+名词/动词+名词） |
> | C级 | L1 第5-6阶段 | Movers 1 | 2-3词动作描述 |
> | D级 | L2 第1-2阶段 | Movers 2-3 | 完整简单句或3-5词短语 |

---

## 十、能力标签

- **L2 U1-U6（阶段1，A级）：** `["简短作答", "一词答案"]`
- 后续阶段的能力标签将在交付时逐个补充
- 所有同阶段产出的题目，能力标签必须统一

---

## 十一、词汇资源路径

| 资源 | 路径 | 说明 |
|------|------|------|
| L1 词库 | `business_knowledge/L1_word_list.json` | 980词，L1级别题目强制使用 |
| L2 词库 | `business_knowledge/L2_word_list.json` | 1470词，L2级别题目可扩展使用 |
| L1 句型库 | `business_knowledge/L1_pattern_list.json` | 490句型，L1句型参考 |
| L2 句型库 | `business_knowledge/L2_pattern_list.json` | 380句型，L2句型参考 |

---

## 十二、参考样例

### 完整样例：questionSetID = 000001
- **难度**：A级
- **题组1**（first）：I am... / I am going to... — 校门口场景
- **题组2**（second）：I am ready! / Thank you for... — 生日派对场景
- **bitable 记录**：`单元挑战` → `写作-P3-看图回答题`，record_id: `recviZlAxxXlAb`
