# 2026-05-21 工作记忆 ## 事件记录 ### 1. 口语题目句型知识点改写(刘彦江) - 多轮 JSON 改写任务,将指定句型知识点嵌入 speaking_qa 题目 - 句型包括:It's ... now / It's bad for your health to ... / We are ... now / We want to catch ... / Please help me ... / I want to buy ... / I only need ... / We must not ... / I will use it to ... / It was ... / It helped a lot to ... / It tastes like ... / I've decided to ... - 规则:知识点必须是答案,每个问题设计确保回答必然触发目标句型 ### 2. 单元挑战听力拖拽题解析补充(刘彦江) - 涉及 ID:010501, 010601, 010701, 010801, 010901 - 多维表格:App Token `CMHSbUUjka3TrUsaxxEc297ongf`,表 `听力-P7-听力拖拽` (tbly9SvPEa44k3yX) - 每个 ID 包含 first 和 second 两组(题组1和题组2),两组都需要补充完整解析 ### 3. bitable 操作经验教训 - **Shell 转义陷阱再次确认**:jsonData 中包含大量嵌套 JSON,Shell 变量展开会破坏数据。必须用 Python subprocess + curl 直接构造请求体 - **`¥¥` 分隔符与 bitable API 不兼容**:原数据中用 `¥¥` 作为解析分隔符,写入 bitable 后会导致 jsonData 损坏。后续改用 `||` 替代 - **explanation 字段路径**:位于 `questionSet[0].explanation`,而非 section 层级的 `explanation` - **operate_bitable.sh 限制**:仅适用于简单字段更新,复杂嵌套 JSON 场景不可用 ### 4. Python bitable 更新脚本模式 ```python import subprocess, json # 获取 token # curl GET records 获取数据 data = json.loads(response)['data'] record = data['items'][0] # 或 data['item'] fields = record['fields'] jd = json.loads(fields['jsonData']) # 修改数据 jd['first']['questionSet'][0]['explanation'] = '...' jd['second']['questionSet'][0]['explanation'] = '...' # 序列化并更新(注意 ensure_ascii=False) fields['jsonData'] = json.dumps(jd, ensure_ascii=False) body = json.dumps({"fields": fields}) subprocess.run(['curl', '-X', 'PUT', url, '-H', f'Authorization: Bearer {token}', ...]) ``` - 关键:读取后立即备份原始数据,写完后回读验证完整性 ### 5. 解析生成规则 - 每道题的解析需包含:听力原文引用 → 答案对应 → 关键特征 → 冗余排除/语用推理 - first 和 second 的解析需分别定制,不可复制模板 - 干扰抑制类题目:标注冗余信息类型(位置/情绪/动作/大小等) - 否定纠错类题目:标注否定信号词和身份替换逻辑 - 跨句整合类题目:标注需整合的信息来源和推理路径 ### 6. 剧本内嵌 Sheet 组件配置回填(刘彦江) - 文档:L1-S2-U17-L5 笨蛋坏蛋?(wiki token `U1zEwHZaaie07TkjmOOchurgnIh`) - 内嵌 Sheet `wMQVyV`,剧本表 265 行 × 9 列(A=类型, B=ID, C=配置整理, D=剧情描述, E=角色名, F=英文台词, G=组件配置, H=知识点, I=编剧台词) - 共 17 个互动行:对话朗读-配图(6) / 对话朗读(1) / 对话挖空-配图(1) / 对话挖空(4) / 对话选择-配图(1) / 对话选读(2) / 对话组句-配图(1) / 对话组句(1) / 看图说话(1) #### 组件类型 A 列取值与技能映射(新增类型) | A列类型 | 对应技能 | 备注 | |---------|---------|------| | 对话朗读 / 对话朗读-配图 | dialogue-reading-config | -配图需加图片时机和音频载体 | | 对话挖空 / 对话挖空-配图 | dialogue-fill-in-blanks-config | 同上 | | 对话选择 / 对话选择-配图 | dialogue-choose-config | 同上 | | **对话选读** | dialogue-selective-reading-config | 开放表达,无正确选项,每选项必带反馈 | | **对话组句** | dialogue-sentence-building-config | 单词排序组句,含答案+辅助信息 | | **看图说话** | dialogue-image-description-config | 导览配置+对话配置,含Q&A/通过规则/示例对话 | #### 类型区别关键点 - **对话选择 vs 对话选读**:前者有对错判断(正确选项标注),后者开放表达(无正确选项,每选项均带反馈) - **对话挖空**:`___` 必需三下划线,选项2-3个,反馈角色非 User - **对话组句**:选项为独立单词/短语,答案填完整正确句,必须有辅助信息 - **看图说话 v2.0**:结构最复杂,包含导览配置(任务标题/背景/描述/知识)+ 对话配置(角色/背景/Q&A/通过规则/示例对话) - **-配图后缀**:资源配置需添加 `图片时机:互动内容\n互动反馈\n\n音频载体:Pioneer Band` #### 写入脚本模式 - G 列写入使用 Python subprocess + curl(避免 shell 转义) - SST = spreadsheet_token, SID = sheet_id(格式 `SST!G{row}:G{row}`) - 写入后必须回读验证内容完整性