# 2026-05-18 工作日志

## 单元挑战全题型审核 + 修复

### 背景
[刘彦江] 要求对单元挑战全部20种题型审核，重点：解析不能纯英文、答案格式正确性。题目内容不修改。

### 审核结果
- 审核范围：20张表、244条记录
- 答案格式：零问题
- 纯英文解析：13处（听力-P2 021901 ×10，口语-P1 032701/032901，口语-P2 032801）
- 解析为空：83处（听力-P1 000001+110101~110401 ×50，听力-P4 021701/022101/032501/032901 ×20，共写作-P3复查后实际OK）

### 修复执行
- 13条纯英文→中文化翻译（通过模型翻译）
- 70条空解析→从题目内容+ability关键词智能生成
- 全部通过 Python+curl 写回 bitable（避免shell转义）
- 写入后回读验证：107条全部含中文，零错误

### 审校结果列更新
- 格式：`✅ OK | 2026-05-18 小研审校` / `📝 空模板 | 2026-05-18 小研审校`
- 已更新：18张表、241条记录
- 缺失列：写作-P2（tblSAwlMumKoyjws）、口语-P4（tblsD2dxaRpLmkXD）无「审校结果」列

### 经验
- 写作-P3 解析在 questionList 嵌套层级，初审误判为空，复查后确认含中文
- bitable curl 写回嵌套JSON时，Python subprocess构造完整body比shell变量展开安全
- 听力-P1 000001 虽有5条first+5条second，但确有题目内容，不是纯占位，按实际内容生成了解析
# 2026-05-18 工作日志

## 单元挑战全题型审核 + 修复

### 背景
[刘彦江] 要求对单元挑战全部20种题型审核，重点：解析不能纯英文、答案格式正确性。题目内容不修改。

### 审核结果
- 审核范围：20张表、244条记录
- 答案格式：零问题
- 纯英文解析：13处（听力-P2 021901 ×10，口语-P1 032701/032901，口语-P2 032801）
- 解析为空：83处（听力-P1 000001+110101~110401 ×50，听力-P4 021701/022101/032501/032901 ×20，共写作-P3复查后实际OK）

### 修复执行
- 13条纯英文→中文化翻译（通过模型翻译）
- 70条空解析→从题目内容+ability关键词智能生成
- 全部通过 Python+curl 写回 bitable（避免shell转义）
- 写入后回读验证：107条全部含中文，零错误

### 审校结果列更新
- 格式：`✅ OK | 2026-05-18 小研审校` / `📝 空模板 | 2026-05-18 小研审校`
- 已更新：18张表、241条记录
- 缺失列：写作-P2（tblSAwlMumKoyjws）、口语-P4（tblsD2dxaRpLmkXD）无「审校结果」列

### 经验
- 写作-P3 解析在 questionList 嵌套层级，初审误判为空，复查后确认含中文
- bitable curl 写回嵌套JSON时，Python subprocess构造完整body比shell变量展开安全
- 听力-P1 000001 虽有5条first+5条second，但确有题目内容，不是纯占位，按实际内容生成了解析

---

## P4 短对话选择题批量改写（[刘彦江]）

### 问题
短对话选择题用户只能听音频，无人名标签显示。三人对话中问题问"Whose/Who"，用户无法分辨谁是谁。

### 方案（刘彦江确认）
1. 三人对话 → 两人对话（一男一女）
2. 对话中嵌入名字互称：`Ben: Hi, Lucy. ...` / `Lucy: You're right, Ben. ...`
3. 两种题型并行：
   - **人名匹配题**（1-3题/套）：问 Whose/Who，选项为人名
   - **内容理解题**（2-4题/套）：问内容，用名字锚定说话者（如"What does Otis say about..."）
4. 不改考点和难度（L1 B级）
5. 答案A/B/C平均分配
6. 全部中文解析 + ability标签

### 改写结果
- 表：听力-P4-短对话选择题（tblVmeDtBDKsAEfz）
- 改写范围：9个QSID，约85题
- 写入方式：rewrite_p4_all.py → 先dry run验证 → 再write模式写回
- 一条（021801）因shell转义损坏，Python curl直连修复
- 9/9 全部回读验证通过

### 待办
- ⚠️ 音频文件需重新录制：旧mp3为三人口播，新对话文本已改为两人

### 改写详细汇总

| QSID | 题数 | first题型(M/C) | second题型(M/C) | 答案分布(first/second) | 状态 |
|------|:--:|:--:|:--:|:--:|:--:|
| 021301 | 5+5 | 2/3 | 1/4 | A2B1C2 / A2B2C1 | ✅ |
| 021401 | 5+5 | 1/4 | 1/4 | A1B2C2 / A2B2C1 | ✅ |
| 021501 | 5+5 | 2/3 | 2/3 | A1B2C2 / A2B2C1 | ✅ |
| 021601 | 5+0 | 2/3 | — | A2B2C1 | ✅ |
| 021701 | 5+0 | 2/3 | — | A2B2C1 | ✅ |
| 021801 | 5+5 | 1/4 | 1/4 | A2B2C1 / A2B2C1 | ✅ |
| 022101 | 5+0 | 1/4 | — | A2B2C1 | ✅ |
| 032501 | 5+0 | 3/2 | — | A2B2C1 | ✅ |
| 032901 | 5+0 | 3/2 | — | A2B2C1 | ✅ |
# 2026-05-18 工作日志

## 单元挑战全题型审核 + 修复

### 背景
[刘彦江] 要求对单元挑战全部20种题型审核，重点：解析不能纯英文、答案格式正确性。题目内容不修改。

### 审核结果
- 审核范围：20张表、244条记录
- 答案格式：零问题
- 纯英文解析：13处（听力-P2 021901 ×10，口语-P1 032701/032901，口语-P2 032801）
- 解析为空：83处（听力-P1 000001+110101~110401 ×50，听力-P4 021701/022101/032501/032901 ×20，共写作-P3复查后实际OK）

### 修复执行
- 13条纯英文→中文化翻译（通过模型翻译）
- 70条空解析→从题目内容+ability关键词智能生成
- 全部通过 Python+curl 写回 bitable（避免shell转义）
- 写入后回读验证：107条全部含中文，零错误

### 审校结果列更新
- 格式：`✅ OK | 2026-05-18 小研审校` / `📝 空模板 | 2026-05-18 小研审校`
- 已更新：18张表、241条记录
- 缺失列：写作-P2（tblSAwlMumKoyjws）、口语-P4（tblsD2dxaRpLmkXD）无「审校结果」列

### 经验
- 写作-P3 解析在 questionList 嵌套层级，初审误判为空，复查后确认含中文
- bitable curl 写回嵌套JSON时，Python subprocess构造完整body比shell变量展开安全
- 听力-P1 000001 虽有5条first+5条second，但确有题目内容，不是纯占位，按实际内容生成了解析

---

## P4 短对话选择题批量改写（[刘彦江]）

### 问题
短对话选择题用户只能听音频，无人名标签显示。三人对话中问题问"Whose/Who"，用户无法分辨谁是谁。

### 方案（刘彦江确认）
1. 三人对话 → 两人对话（一男一女）
2. 对话中嵌入名字互称：`Ben: Hi, Lucy. ...` / `Lucy: You're right, Ben. ...`
3. 两种题型并行：
   - **人名匹配题**（1-3题/套）：问 Whose/Who，选项为人名
   - **内容理解题**（2-4题/套）：问内容，用名字锚定说话者（如"What does Otis say about..."）
4. 不改考点和难度（L1 B级）
5. 答案A/B/C平均分配
6. 全部中文解析 + ability标签

### 改写结果
- 表：听力-P4-短对话选择题（tblVmeDtBDKsAEfz）
- 改写范围：9个QSID，约85题
- 写入方式：rewrite_p4_all.py → 先dry run验证 → 再write模式写回
- 一条（021801）因shell转义损坏，Python curl直连修复
- 9/9 全部回读验证通过
- ⚠️ **Bug发现**：dry run 时 `pop("dialogue")` 污染了 first_qs 和 first_block["questionSet"] 的共享对象，导致 write 时 题目1 字段的【听力文本】为空
- ✅ **已修复**：fix_p4_dialogue.py 从 rewrite 脚本源码提取对话，重写 题目1/题目2 字段

### 待办
- ⚠️ 音频文件需重新录制：旧mp3为三人口播，新对话文本已改为两人

### 改写详细汇总

| QSID | 题数 | first题型(M/C) | second题型(M/C) | 答案分布(first/second) | 状态 |
|------|:--:|:--:|:--:|:--:|:--:|
| 021301 | 5+5 | 2/3 | 1/4 | A2B1C2 / A2B2C1 | ✅ |
| 021401 | 5+5 | 1/4 | 1/4 | A1B2C2 / A2B2C1 | ✅ |
| 021501 | 5+5 | 2/3 | 2/3 | A1B2C2 / A2B2C1 | ✅ |
| 021601 | 5+0 | 2/3 | — | A2B2C1 | ✅ |
| 021701 | 5+0 | 2/3 | — | A2B2C1 | ✅ |
| 021801 | 5+5 | 1/4 | 1/4 | A2B2C1 / A2B2C1 | ✅ |
| 022101 | 5+0 | 1/4 | — | A2B2C1 | ✅ |
| 032501 | 5+0 | 3/2 | — | A2B2C1 | ✅ |
| 032901 | 5+0 | 3/2 | — | A2B2C1 | ✅ |
# 2026-05-18 工作日志

## 单元挑战全题型审核 + 修复

### 背景
[刘彦江] 要求对单元挑战全部20种题型审核，重点：解析不能纯英文、答案格式正确性。题目内容不修改。

### 审核结果
- 审核范围：20张表、244条记录
- 答案格式：零问题
- 纯英文解析：13处（听力-P2 021901 ×10，口语-P1 032701/032901，口语-P2 032801）
- 解析为空：83处（听力-P1 000001+110101~110401 ×50，听力-P4 021701/022101/032501/032901 ×20，共写作-P3复查后实际OK）

### 修复执行
- 13条纯英文→中文化翻译（通过模型翻译）
- 70条空解析→从题目内容+ability关键词智能生成
- 全部通过 Python+curl 写回 bitable（避免shell转义）
- 写入后回读验证：107条全部含中文，零错误

### 审校结果列更新
- 格式：`✅ OK | 2026-05-18 小研审校` / `📝 空模板 | 2026-05-18 小研审校`
- 已更新：18张表、241条记录
- 缺失列：写作-P2（tblSAwlMumKoyjws）、口语-P4（tblsD2dxaRpLmkXD）无「审校结果」列

### 经验
- 写作-P3 解析在 questionList 嵌套层级，初审误判为空，复查后确认含中文
- bitable curl 写回嵌套JSON时，Python subprocess构造完整body比shell变量展开安全
- 听力-P1 000001 虽有5条first+5条second，但确有题目内容，不是纯占位，按实际内容生成了解析

---

## P4 短对话选择题批量改写（[刘彦江]）

### 问题
短对话选择题用户只能听音频，无人名标签显示。三人对话中问题问"Whose/Who"，用户无法分辨谁是谁。

### 方案（刘彦江确认）
1. 三人对话 → 两人对话（一男一女）
2. 对话中嵌入名字互称：`Ben: Hi, Lucy. ...` / `Lucy: You're right, Ben. ...`
3. 两种题型并行：
   - **人名匹配题**（1-3题/套）：问 Whose/Who，选项为人名
   - **内容理解题**（2-4题/套）：问内容，用名字锚定说话者（如"What does Otis say about..."）
4. 不改考点和难度（L1 B级）
5. 答案A/B/C平均分配
6. 全部中文解析 + ability标签

### 改写结果
- 表：听力-P4-短对话选择题（tblVmeDtBDKsAEfz）
- 改写范围：9个QSID，约85题
- 写入方式：rewrite_p4_all.py → 先dry run验证 → 再write模式写回
- 一条（021801）因shell转义损坏，Python curl直连修复
- 9/9 全部回读验证通过
- ⚠️ **Bug发现**：dry run 时 `pop("dialogue")` 污染了 first_qs 和 first_block["questionSet"] 的共享对象，导致 write 时 题目1 字段的【听力文本】为空
- ✅ **已修复**：fix_p4_dialogue.py 从 rewrite 脚本源码提取对话，重写 题目1/题目2 字段

### 待办
- ⚠️ 音频文件需重新录制：旧mp3为三人口播，新对话文本已改为两人

### 改写详细汇总

| QSID | 题数 | first题型(M/C) | second题型(M/C) | 答案分布(first/second) | 状态 |
|------|:--:|:--:|:--:|:--:|:--:|
| 021301 | 5+5 | 2/3 | 1/4 | A2B1C2 / A2B2C1 | ✅ |
| 021401 | 5+5 | 1/4 | 1/4 | A1B2C2 / A2B2C1 | ✅ |
| 021501 | 5+5 | 2/3 | 2/3 | A1B2C2 / A2B2C1 | ✅ |
| 021601 | 5+0 | 2/3 | — | A2B2C1 | ✅ |
| 021701 | 5+0 | 2/3 | — | A2B2C1 | ✅ |
| 021801 | 5+5 | 1/4 | 1/4 | A2B2C1 / A2B2C1 | ✅ |
| 022101 | 5+0 | 1/4 | — | A2B2C1 | ✅ |
| 032501 | 5+0 | 3/2 | — | A2B2C1 | ✅ |
| 032901 | 5+0 | 3/2 | — | A2B2C1 | ✅ |
# 2026-05-18 工作日志

## 单元挑战全题型审核 + 修复

### 背景
[刘彦江] 要求对单元挑战全部20种题型审核，重点：解析不能纯英文、答案格式正确性。题目内容不修改。

### 审核结果
- 审核范围：20张表、244条记录
- 答案格式：零问题
- 纯英文解析：13处（听力-P2 021901 ×10，口语-P1 032701/032901，口语-P2 032801）
- 解析为空：83处（听力-P1 000001+110101~110401 ×50，听力-P4 021701/022101/032501/032901 ×20，共写作-P3复查后实际OK）

### 修复执行
- 13条纯英文→中文化翻译（通过模型翻译）
- 70条空解析→从题目内容+ability关键词智能生成
- 全部通过 Python+curl 写回 bitable（避免shell转义）
- 写入后回读验证：107条全部含中文，零错误

### 审校结果列更新
- 格式：`✅ OK | 2026-05-18 小研审校` / `📝 空模板 | 2026-05-18 小研审校`
- 已更新：18张表、241条记录
- 缺失列：写作-P2（tblSAwlMumKoyjws）、口语-P4（tblsD2dxaRpLmkXD）无「审校结果」列

### 经验
- 写作-P3 解析在 questionList 嵌套层级，初审误判为空，复查后确认含中文
- bitable curl 写回嵌套JSON时，Python subprocess构造完整body比shell变量展开安全
- 听力-P1 000001 虽有5条first+5条second，但确有题目内容，不是纯占位，按实际内容生成了解析

---

## P4 短对话选择题批量改写（[刘彦江]）

### 问题
短对话选择题用户只能听音频，无人名标签显示。三人对话中问题问"Whose/Who"，用户无法分辨谁是谁。

### 方案（刘彦江确认）
1. 三人对话 → 两人对话（一男一女）
2. 对话中嵌入名字互称
3. 两种题型并行：人名匹配题（1-3题/套）+ 内容理解题（主体）
4. 不改考点和难度（L1 B级），答案均匀，中文解析，ability标签

### 改写结果
- 表：听力-P4-短对话选择题（tblVmeDtBDKsAEfz），9个QSID ~85题
- rewrite_p4_all.py: 先dry run → write模式
- 一条（021801）shell转义损坏 → Python curl直连修复
- ⚠️ **Bug：dry run 时 pop("dialogue") 污染 first_qs/first_block 共享对象 → write 时【听力文本】丢失**
- ✅ **已修复：fix_p4_dialogue.py 提取对话重写题目1/题目2**
- 待办：音频重录（旧mp3三人口播 → 需两人）

### 改写汇总

| QSID | 题数 | 答案分布 | 状态 |
|------|:--:|:--:|:--:|
| 021301 | 5+5 | A2B1C2 / A2B2C1 | ✅ |
| 021401 | 5+5 | A1B2C2 / A2B2C1 | ✅ |
| 021501 | 5+5 | A1B2C2 / A2B2C1 | ✅ |
| 021601 | 5+0 | A2B2C1 | ✅ |
| 021701 | 5+0 | A2B2C1 | ✅ |
| 021801 | 5+5 | A2B2C1 / A2B2C1 | ✅ |
| 022101 | 5+0 | A2B2C1 | ✅ |
| 032501 | 5+0 | A2B2C1 | ✅ |
| 032901 | 5+0 | A2B2C1 | ✅ |


## 口语-P1 审校（[刘彦江]）

### 范围
QSID: 121301, 121401, 121501（口语-P1-日常回答，tblRGv7k4WH58Jgq）

### 发现问题
- **121301**: 6题 ability 全空
- **121401**: ability 重复（"听觉抓取关键信息"×2）+ 标签偏向听力而非口语
- **121501**: 6题 ability 全空
- answer 为空 → 正常（speaking_qa 参考回答在 explanation 内）

### 修复
- 全部补充/替换为口语向标签（语用表达能力等）
- 3/3 审校结果列更新为 `✅ OK | 2026-05-18 小研审校`

### Record ID 映射
| QSID | Record ID |
|------|-----------|
| 121301 | recvjW9RVwziwL |
| 121401 | recvjW9RVwGzba |
| 121501 | recvjW9RVwj4aQ |

---

## 听力-P1 图片选择题 生产+回填+审校（[刘彦江]）

### 范围
QSID: 121301, 121401, 121501（听力-P1-图片选择题）
难度: L1 B级

### 词汇词库命中率
29个词中仅6个在L1/L2词库（sofa, zoo, study, play, mat, mouth），23个超纲。
业务负责人放行，优先生产，词库后补。

### 产出
| QSID | Record ID | 词表(first/second) | 答案分布 |
|------|-----------|------|:--:|
| 121301 | recvjWrIXVjkWY | home/house/sofa/cupboard/bedroom // zoo/hippo/bear/live | A2B2C1 ×2 |
| 121401 | recvjWrJos9LH7 | study/play/art/spell/letter // crayon/board/desk/schoolbag/handbag | A2B2C1 ×2 |
| 121501 | recvjWrJQ9Njnl | meet/friend/board game/ping-pong // body/head/mouth/ear | A2B2C1 ×2 |

### 审校通过
全部检查项合格：jsonData结构、audio/image命名、答案分布、ability标签、中文解析、题目1/2字段。

### 待办
⚠️ 23个超纲词需后续补入L1词库（home, house, cupboard, bedroom, hippo, bear, live, art, spell, letter, English, crayon, board, desk, schoolbag, handbag, meet, friend, board game, ping-pong, body, head, ear）


---

## L1-S2-U18-L5 双龙会 台词润色审校（[王璐辰]）

### 背景
审查飞书知识库剧本表格「台词润色列」错误。文档为内嵌 Sheet（block_type 30），需用 blocks API 才能发现。

### 审校结果
- 语法/拼写硬错误：5处（Rows 41, 55, 126, 153, 178）
- 表达优化建议：4处（Rows 77, 84, 207, 63）
- 一致性遗漏：4行无润色 + dragon/Loong 混用不统一
- 润色质量好的部分：长句拆分、语法/拼写修正、知识点保留 ✓

### D列知识点统计
- 6个知识点（class/fun/playground/English/Have fun with.../Over here.），共20次
- English 在知识点列未标注但实际台词出现9次

### 交互模式收获
- 用户（王璐辰）偏好直接在 bitable 中写入统计表格而非仅输出文字/卡片 → 后续同类需求优先写入原表
# 2026-05-18 工作日志

## 单元挑战全题型审核 + 修复

### 背景
[刘彦江] 要求对单元挑战全部20种题型审核，重点：解析不能纯英文、答案格式正确性。题目内容不修改。

### 审核结果
- 审核范围：20张表、244条记录
- 答案格式：零问题
- 纯英文解析：13处（听力-P2 021901 ×10，口语-P1 032701/032901，口语-P2 032801）
- 解析为空：83处（听力-P1 000001+110101~110401 ×50，听力-P4 021701/022101/032501/032901 ×20，共写作-P3复查后实际OK）

### 修复执行
- 13条纯英文→中文化翻译（通过模型翻译）
- 70条空解析→从题目内容+ability关键词智能生成
- 全部通过 Python+curl 写回 bitable（避免shell转义）
- 写入后回读验证：107条全部含中文，零错误

### 审校结果列更新
- 格式：`✅ OK | 2026-05-18 小研审校` / `📝 空模板 | 2026-05-18 小研审校`
- 已更新：18张表、241条记录
- 缺失列：写作-P2（tblSAwlMumKoyjws）、口语-P4（tblsD2dxaRpLmkXD）无「审校结果」列

### 经验
- 写作-P3 解析在 questionList 嵌套层级，初审误判为空，复查后确认含中文
- bitable curl 写回嵌套JSON时，Python subprocess构造完整body比shell变量展开安全
- 听力-P1 000001 虽有5条first+5条second，但确有题目内容，不是纯占位，按实际内容生成了解析

---

## P4 短对话选择题批量改写（[刘彦江]）

### 背景
短对话选择题用户只能听音频，无人名标签显示。三人对话中问题问"Whose/Who"，用户无法分辨谁是谁。

### 方案（刘彦江确认）
1. 三人对话 → 两人对话（一男一女），对话中嵌入名字互称
2. 两种题型并行：人名匹配题（1-3题/套）+ 内容理解题（主体）
3. 不改考点和难度（L1 B级），答案均匀，中文解析，ability标签

### 改写结果
- 表：听力-P4-短对话选择题（tblVmeDtBDKsAEfz），9个QSID ~85题
- rewrite_p4_all.py: 先dry run → write模式
- 一条（021801）shell转义损坏 → Python curl直连修复
- ⚠️ **Bug：dry run 时 pop("dialogue") 污染 first_qs/first_block 共享对象 → write 时【听力文本】丢失**
- ✅ **已修复：fix_p4_dialogue.py 提取对话重写题目1/题目2**
- 待办：音频重录（旧mp3三人口播 → 需两人）

### 改写汇总

| QSID | 题数 | 答案分布 | 状态 |
|------|:--:|:--:|:--:|
| 021301 | 5+5 | A2B1C2 / A2B2C1 | ✅ |
| 021401 | 5+5 | A1B2C2 / A2B2C1 | ✅ |
| 021501 | 5+5 | A1B2C2 / A2B2C1 | ✅ |
| 021601 | 5+0 | A2B2C1 | ✅ |
| 021701 | 5+0 | A2B2C1 | ✅ |
| 021801 | 5+5 | A2B2C1 / A2B2C1 | ✅ |
| 022101 | 5+0 | A2B2C1 | ✅ |
| 032501 | 5+0 | A2B2C1 | ✅ |
| 032901 | 5+0 | A2B2C1 | ✅ |

---

## 口语-P1 审校（[刘彦江]）

### 范围
QSID: 121301, 121401, 121501（口语-P1-日常回答，tblRGv7k4WH58Jgq）

### 修复
- ability 全空/偏向听力 → 全部补充为口语向标签
- 3/3 审校结果列更新为 `✅ OK | 2026-05-18 小研审校`

### Record ID 映射
| QSID | Record ID |
|------|-----------|
| 121301 | recvjW9RVwziwL |
| 121401 | recvjW9RVwGzba |
| 121501 | recvjW9RVwj4aQ |

---

## 听力-P1 图片选择题 生产+回填+审校（[刘彦江]）

### 范围
QSID: 121301, 121401, 121501（听力-P1-图片选择题，L1 B级）
29词中仅6个在词库，23个超纲。业务负责人放行，优先生产，词库后补。

### 产出
| QSID | Record ID | 答案分布 |
|------|-----------|:--:|
| 121301 | recvjWrIXVjkWY | A2B2C1 ×2 |
| 121401 | recvjWrJos9LH7 | A2B2C1 ×2 |
| 121501 | recvjWrJQ9Njnl | A2B2C1 ×2 |

### 待办
⚠️ 23个超纲词需补入L1词库

---

## 图片文本输出（[刘彦江]）

### 背景
听力-P1 121301/121401/121501 选项图 prompt 需输出给图片生成人员。

### 飞书消息格式陷阱 🔴
直接输出 `[1-A-选项图彩图]:{"prompt":"..."}` 到飞书对话中，被飞书渲染引擎吃掉（方括号+JSON格式被当标签/链接处理），用户看不到内容。
**解决方案：必须用代码块（```）包裹或通过 message() 工具以编程方式发送。**

---

## 题型-能力标签映射（[刘彦江]）

### 背景
用户要求：把所有单元挑战题型与 45 个标准能力 tag 做映射。

### 能力标签源文件
- 路径: `business_knowledge/ability_tags.md`（Vala 英语能力标签体系，2026-05-13更新）
- 45 个标准标签：听力(11)、口语(10)、阅读(13)、写作(11)

### ability 格式不统一问题（重要发现）🔴
提取过程中发现 ability 标签在 bitable jsonData 中存在两种不同格式和位置：

**格式A: JSON 数组（每题内部）**
```json
{"first": {"questionSet": [{"ability": ["听觉抓取关键信息", "多特征整合"]}]}}
```
适用题型：听力-P1/P2/P3/P4/P7，阅读全7个，口语全4个

**格式B: ¥¥ 分隔字符串（顶层）**
```json
{"first": {"ability": "听觉抓取关键信息¥¥多特征整合"}}
```
适用题型：听力-P5，写作-P1/P2/P3

### 映射结果（修正后）
- **写作-P1** ✅ 有标签：短消息写作｜邮件/便条、衔接与连贯｜连词使用、描述性写作｜人物与地点、描述性写作｜场景与情绪、句型组织、问题解决｜求助与建议（部分非标准标签名）
- **写作-P2** ⚠️ 格式不规范（模板残留）：看图写故事，衔接与连贯、连词使用
- **写作-P3** ❌ 纯占位符 "xxxx"，确实无标签
- **听力-P5** ✅ 有标签（¥¥格式补抓）：听觉抓取关键信息、多特征整合

### 已修正的其他发现
- 口语-P1/P2/P3/P4 ability 标签已正确提取（格式A路径）
- 20 个未覆盖标签 = 45 标准标签中历史数据从未出现的（情绪/态度理解、长对话理解、图片对比、故事讲述、发音语调、写作全11个等）

### 产出文件
- `business_knowledge/unit_challenge_type_ability_mapping.md` — 完整映射表（已修正）
- `/tmp/unit_challenge_ability_doc.md` — 对外分享版

---

## L1-S2-U18-L5 双龙会 台词润色审校（[王璐辰]）

### 审校结果
- 语法/拼写硬错误：5处（Rows 41, 55, 126, 153, 178）
- 表达优化建议：4处（Rows 77, 84, 63, 207）
- 一致性遗漏：4行无润色 + dragon/Loong 混用不统一
- D列知识点：6个知识点，共20次

### 交互模式收获
- 用户（王璐辰）偏好直接在 bitable 中写入统计表格 → 后续同类需求优先写入原表
# 2026-05-18 工作日志

## 单元挑战全题型审核 + 修复

### 背景
[刘彦江] 要求对单元挑战全部20种题型审核，重点：解析不能纯英文、答案格式正确性。题目内容不修改。

### 审核结果
- 审核范围：20张表、244条记录
- 答案格式：零问题
- 纯英文解析：13处（听力-P2 021901 ×10，口语-P1 032701/032901，口语-P2 032801）
- 解析为空：83处（听力-P1 000001+110101~110401 ×50，听力-P4 021701/022101/032501/032901 ×20，共写作-P3复查后实际OK）

### 修复执行
- 13条纯英文→中文化翻译（通过模型翻译）
- 70条空解析→从题目内容+ability关键词智能生成
- 全部通过 Python+curl 写回 bitable（避免shell转义）
- 写入后回读验证：107条全部含中文，零错误

### 审校结果列更新
- 格式：`✅ OK | 2026-05-18 小研审校` / `📝 空模板 | 2026-05-18 小研审校`
- 已更新：18张表、241条记录
- 缺失列：写作-P2（tblSAwlMumKoyjws）、口语-P4（tblsD2dxaRpLmkXD）无「审校结果」列

### 经验
- 写作-P3 解析在 questionList 嵌套层级，初审误判为空，复查后确认含中文
- bitable curl 写回嵌套JSON时，Python subprocess构造完整body比shell变量展开安全
- 听力-P1 000001 虽有5条first+5条second，但确有题目内容，不是纯占位，按实际内容生成了解析

---

## P4 短对话选择题批量改写（[刘彦江]）

### 背景
短对话选择题用户只能听音频，无人名标签显示。三人对话中问题问"Whose/Who"，用户无法分辨谁是谁。

### 方案（刘彦江确认）
1. 三人对话 → 两人对话（一男一女），对话中嵌入名字互称
2. 两种题型并行：人名匹配题（1-3题/套）+ 内容理解题（主体）
3. 不改考点和难度（L1 B级），答案均匀，中文解析，ability标签

### 改写结果
- 表：听力-P4-短对话选择题（tblVmeDtBDKsAEfz），9个QSID ~85题
- rewrite_p4_all.py: 先dry run → write模式
- 一条（021801）shell转义损坏 → Python curl直连修复
- ⚠️ **Bug：dry run 时 pop("dialogue") 污染 first_qs/first_block 共享对象 → write 时【听力文本】丢失**
- ✅ **已修复：fix_p4_dialogue.py 提取对话重写题目1/题目2**
- 待办：音频重录（旧mp3三人口播 → 需两人）

| QSID | 题数 | 答案分布 | 状态 |
|------|:--:|:--:|:--:|
| 021301 | 5+5 | A2B1C2 / A2B2C1 | ✅ |
| 021401 | 5+5 | A1B2C2 / A2B2C1 | ✅ |
| 021501 | 5+5 | A1B2C2 / A2B2C1 | ✅ |
| 021601 | 5+0 | A2B2C1 | ✅ |
| 021701 | 5+0 | A2B2C1 | ✅ |
| 021801 | 5+5 | A2B2C1 / A2B2C1 | ✅ |
| 022101 | 5+0 | A2B2C1 | ✅ |
| 032501 | 5+0 | A2B2C1 | ✅ |
| 032901 | 5+0 | A2B2C1 | ✅ |

---

## 口语-P1 审校（[刘彦江]）

### 范围
QSID: 121301, 121401, 121501（口语-P1-日常回答，tblRGv7k4WH58Jgq）

### 修复
- ability 全空/偏向听力 → 全部补充为口语向标签
- 3/3 审校结果列更新为 `✅ OK | 2026-05-18 小研审校`

| QSID | Record ID |
|------|-----------|
| 121301 | recvjW9RVwziwL |
| 121401 | recvjW9RVwGzba |
| 121501 | recvjW9RVwj4aQ |

---

## 听力-P1 图片选择题 生产+回填+审校（[刘彦江]）

### 范围
QSID: 121301, 121401, 121501（听力-P1-图片选择题，L1 B级）
29词中仅6个在词库，23个超纲。业务负责人放行，优先生产，词库后补。

| QSID | Record ID | 答案分布 |
|------|-----------|:--:|
| 121301 | recvjWrIXVjkWY | A2B2C1 ×2 |
| 121401 | recvjWrJos9LH7 | A2B2C1 ×2 |
| 121501 | recvjWrJQ9Njnl | A2B2C1 ×2 |

### 待办
⚠️ 23个超纲词需补入L1词库

---

## 图片文本输出（[刘彦江]）

### 飞书消息格式陷阱 🔴
直接输出 `[1-A-选项图彩图]:{"prompt":"..."}` 到飞书对话中，被渲染引擎吃掉（方括号+JSON当标签处理），用户看不到内容。
**解决方案：代码块包裹或 message() 工具发送。**

---

## 题型-能力标签映射（[刘彦江]）

### 背景
把所有单元挑战题型与 45 个标准能力 tag 做映射。

### 能力标签源文件
- 路径: `business_knowledge/ability_tags.md`（Vala 英语能力标签体系，2026-05-13更新）
- 45 个标准标签：听力(11)、口语(10)、阅读(13)、写作(11)

### ability 格式不统一问题（重要发现）🔴
提取中发现 ability 存在两种不同格式/位置：

**格式A: JSON 数组（每题内部）**
```json
{"first": {"questionSet": [{"ability": ["听觉抓取关键信息", "多特征整合"]}]}}
```
适用：听力-P1/P2/P3/P4/P7，阅读全7个，口语全4个

**格式B: ¥¥ 分隔字符串（顶层）**
```json
{"first": {"ability": "听觉抓取关键信息¥¥多特征整合"}}
```
适用：听力-P5，写作-P1/P2/P3

### 映射结果（修正后）
- **写作-P1** ✅ 有标签（格式B）：短消息写作｜邮件/便条、衔接与连贯｜连词使用、描述性写作｜人物与地点、描述性写作｜场景与情绪、句型组织、问题解决｜求助与建议（部分非标准标签名）
- **写作-P2** ⚠️ 格式不规范（模板残留）
- **写作-P3** ❌ 纯占位符 "xxxx"
- **听力-P5** ✅ 有标签（格式B补抓）：听觉抓取关键信息、多特征整合
- **20 个未覆盖标签** = 45 标准标签中历史数据从未出现的（写作全11个、听力 情绪/态度理解+长对话理解、口语 图片对比+故事讲述+发音语调 等）

### 产出
- `business_knowledge/unit_challenge_type_ability_mapping.md` — 完整映射表
- `/tmp/unit_challenge_ability_doc.md` — 对外分享版（已发送文件 + 飞书文档）

---

## L1-S2-U18-L5 双龙会 台词润色审校（[王璐辰]）

### 审校结果
- 语法/拼写硬错误：5处（Rows 41, 55, 126, 153, 178）
- 表达优化建议：4处（Rows 77, 84, 63, 207）
- 一致性遗漏：4行无润色 + dragon/Loong 混用不统一
- D列知识点：6个知识点，共20次

### 交互模式收获
- 用户（王璐辰）偏好直接在 bitable 中写入统计表格 → 后续同类需求优先写入原表

## [刘彦江] 口语-P4-看图识物 内容生产（2026-05-18 19:34）

### 生产范围（3条记录，全部双题组，全部回填验证通过 ✅）

| ID | record_id | 题组1 | 题组2 | 状态 |
|----|-----------|-------|-------|------|
| 100001 | recvjYhcXkYXIM | 6题(颜色) | 5题(衣物) | ✅ |
| 110101 | recvjYhdvUxDgs | 6题(身体) | 6题(颜色) | ✅ |
| 110201 | recvjYhe4opOGm | 6题(食物) | 4题(动物) | ✅ |

### 题型结构

**口语-P4 (speaking_pic_recognize)**:
- textTitle: "Look and answer."
- 每词1题，配1图（白底中央展示单个物体/颜色）
- 颜色题: "What colour is it?"，物体题: "What's this?"
- ability: 图文匹配
- explanation: 含回答要点、图片内容、能力、评估标准、回答指导

### 审校结果
- ✅ 全部27题 jsonData 结构完整、explanation 全中文、题目格式正确
- ✅ 题目集合ID一致、图片编号连续（00-10/00-11/00-09）
- ✅ 题目配置（人类可读）格式规范
- ⚠️ 口语-P4表无「审校结果」列，无法标记审校状态
- ℹ️ 110101题组2 "colour"出现2次（调色盘+彩虹）— 按规格生成
- ℹ️ 110201 "mice"(复数) 使用 "What are these?" 区分于 "mouse"(单数) 使用 "What's this?"
- ℹ️ 以下词汇未在L1词库中检索到（词库仅160词/声称980词，疑似文件不完整）：jacket, T-shirt, hair, monster, colour, bread, cake, candy, chocolate, ice cream, mice, mouse — 按用户指定词汇生产，未做替换

### Bitable信息
- App Token: CMHSbUUjka3TrUsaxxEc297ongf
- Table ID: tblsD2dxaRpLmkXD
- 操作方式: Python subprocess + curl（避免shell转义）

## [李应瑛] L1-S2-U17-L3 紧急拜访 组件配置（2026-05-18 20:58）

### 背景
李应瑛发送知识库关卡制作文档链接 `K6DIwFqpgi1SjZkEPS9cNESfn0d`，要求为剧本中的互动环节生成组件配置。

### 完成事项
- ✅ 读取文档完整内容（剧本表Nr3Ovs 243行、知识点表zbfYO4、剧情摘要等5个子表）
- ✅ 识别16个互动点（对话朗读-配图、对话挖空、对话选择-配图、听力选择等），其中10个H列已有配置
- ✅ 方案3（both）：行159 H列文本配置 + LV1多维表格正式JSON

### H列配置（行159）
写入 `Nr3Ovs!H159`，内容包含任务标题「听听爷爷的来信」、情境引入、互动内容和后置对话。回读验证通过。

### LV1 多维表格 JSON（ID: 1217310）
- **App Token:** `C7e9bzA1GaZ61FsTz87cEM8Ynoe`
- **Table:** LV1 (`tblH4xNpAmKJ7gEq`)
- **Record ID:** `recvjYze7B5cDQ`
- **cType:** `core_listening_choose`
- **题目组：** 2组（Q1: Who will come to visit? → Grandfather / Q2: Who else is coming? → Grandmother）
- **学习过程：** 3个重点句（visit / grandmother / grandfather）
- **音频来源：** 爷爷Justin念信（剧本行160-163）
- **写入方式：** Python subprocess + curl（避免shell转义）

### 待补充
| 项目 | 说明 |
|------|------|
| 图片素材 | 6张选项图 `1217310_option_00~05.png` 待配置 |
| kpListSentence/kpListVocab | 待填入Unit 1217对应的句型/单词知识ID |
| kpInfo.kpId | grandfather/grandmother/visit 的具体知识ID待确认 |
| 音频录制 | Justin念信4句音频待录制 |

### 互动组件脚本参考路径
- `business_knowledge/skills/core-content-json-standard/SKILL.md` — 14种核心题型JSON标准
- `business_production/_shared/feishu-embedded-sheet/SKILL.md` — 内嵌Sheet读写
- `business_production/_shared/lark_bitable_operate_as_bot/SKILL.md` — Bot身份多维表格操作


## [李应瑛] L1-S2-U17-L4 门关啦 组件配置（2026-05-18 21:00）

### 背景
李应瑛发送知识库文档 `SAadwW8YaiObl8k4op3c6vs8nqb`（L1-S2-U17-L4 门关啦），要求根据组件类型生成配置，回填到 **F列**（不同于L3的H列）。

### 文档结构
- Wiki token: `SAadwW8YaiObl8k4op3c6vs8nqb`
- Space ID: `7412143055920414722`
- Spreadsheet token: `It4AsFkC7hXHc4te9yUcyLHRnOe`
- Script sheet: `wMQVyV`（202行×8列）
- Knowledge points sheet: `eXTXJ8`（6个知识点：open, closed, door, home, 2个句型）
- 列结构：A=类型, B=配置信息, C=剧情描述, D=角色名, E=英文台词, **F=组件配置**, G=知识点, H=编剧台词

### 互动组件识别
- 16个互动组件（ID 1217401-1217416），全部F列为空
- 类型分布：对话朗读×6、对话挖空×4、图片单选×1、对话选择×2、对话组句×2、看图拼词×1
- 知识点覆盖：open/closed/door/home 及对应句型

### 写入方式
- Sheets v2 API PUT values，range 格式注意：sheet_id不加引号
- 先试 `'wMQVyV'!F10` 报 "sheetId not found" → 修正为 `wMQVyV!F10` 成功
- 16/16 全部回读验证通过

### 脚本
`scripts/write_L4_F_configs.py`

---

## [李应瑛] L1-S2-U17-L5 笨蛋坏蛋？英文生产（2026-05-18 21:15）

### 背景
李应瑛发送知识库文档 `U1zEwHZaaie07TkjmOOchurgnIh`（L1-S2-U17-L5 笨蛋坏蛋？），要求"英文生产"。

### 文档结构（与L3/L4不同）
- Wiki token: `U1zEwHZaaie07TkjmOOchurgnIh`
- Spreadsheet token: `DCcKsLbrmhfXgrtB7N2c9GA4ntf`
- Script sheet: `wMQVyV`（186行×9列）
- Knowledge points sheet: `DCcKsLbrmhfXgrtB7N2c9GA4ntf_NtIcXt`
- 列结构：A=类型, D=剧情描述, E=角色名, F=编剧台词（English已填好）, **G=组件配置**
- 知识点：point, talk, understand, a lot of + `talk to...` / `I can/can't understand...`

### 交互模式差异
- L5 文档 B列/C列 为空，无详细组件类型标签（仅 A=互动/核心互动-口语）
- 编剧台词F列已全部填写（英文）
- 互动行的 User 台词含红色标注知识点词

### 完成事项
- 24个互动行全部生成G列配置（组件类型推断：听力挖空、朗读台词、口语表达）
- 写入方式：同上 Sheets v2 API
- 24/24 全部回读验证通过

### 脚本
`scripts/write_L5_G_configs.py`
