auto backup: 2026-06-03 08:10:02

This commit is contained in:
ai_member_only 2026-06-03 08:10:02 +08:00
parent 9365f60be9
commit 65e6a5233e
183 changed files with 46545 additions and 262 deletions

View File

@ -5,7 +5,6 @@ find-skills fc331652faaa71746a3f63a6bd46ae57da7679c5081b03e84c930ed366493503
skill-builder 20cdb6ec00e493cdfac624a9a844207acf1bf155c6f3f8e07c2bbf591ba2e73b
kids-english-script-production 3cb6929e4f5a43e7245adb79091e56ce4cc2ae77198dc795fe1cc088575c3a78
lark_wiki_operate_as_bot 2a37701f568849f03eb46dd938baeda171380fe252b698ac8bda69caa19aea08
vala_git_workspace_backup 4cf352bec88fe84af065ba1ffcbb06647b77df0e01860faaf0bca9fd64b968ec
cambridge-yle-ket-exam-library 5c87898002c7d6175b8076ad18c46dea043e1d4e971371b90647d188bbbb06a9
task-router 08d85461f17ee0bad2ad6f64f84f3c826cd69a515fe56aa847909d097cc40fab
vala-interactive-components ec339d3314d3874e366199a14f71b1c94b8965cc1c64e34d9ea4211583696cef
@ -47,3 +46,4 @@ interactive-component-json 243023a4e9ba4482347b84a69c21f33d1d06a2a5cff6b8e15da05
audit_l1_config 88298b77e28be383fa31b75c8e48c3c05c950848af656126c45c35e93219e8f1
bitable-reader 8e1beacd3612c102c1b210307532f1f61a0351ef24ae32b62f1c62998bcd5363
core-content-json-standard 261bfe87076f0700d68811db431702bc22e647d3fa6bbcd8c6b75d573103f911
vala_git_workspace_backup 6e07e4904702dd2b8c4041fee5bdeed5ea3e80f15fc440fafbfeaa334c0684a1

160
AGENTS.md
View File

@ -135,9 +135,9 @@ System: [...] Feishu[xiaobian] group oc_xxx | 发送者 (ou_xxx) [msg:om_xxx]
| 目录 | 用途 | 说明 |
|------|------|------|
| `memory/` | 短期记忆 | 按天记录工作日志,格式 `YYYY-MM-DD.md` |
| `business_knowledge/` | 业务知识库 | **所有业务知识统一存放于此**包括业务术语、数据表说明、SQL 模板、数据抽取脚本等 |
| `business_production/` | 核心业务生产区 | 按业务模块独立隔离,包含「剧本翻译/课程组件/巩固题/单元挑战/英文台词/组件生产/组件配置」等独立子目录。其中 `review/` 为**业务决策沉淀层**(非审校流程目录),记录每次模块调整的「为什么」,帮助小研理解规则背后的 know-why 以便更准确判断。下设「课程组件」(对应组件生产模块的决策依据)「剧本翻译」(对应英文台词模块的决策依据)两个子目录,未来其他模块产生决策时同样在此记录 |
| `scripts/` | 脚本文件 | 所有 `.py`、`.sh`、`.sql` 等脚本文件必须放在此目录 |
| `business_knowledge/` | 业务知识库 | **所有业务知识统一存放于此**包括业务术语、数据表说明、SQL 模板、数据抽取脚本等。其中 `skills/` 为**业务知识技能层**考试题型库、JSON标准规范、标书规范等被其他模块引用的通用知识技能 |
| `business_production/` | 核心业务生产区 | 按业务模块独立隔离,包含「剧本翻译/课程组件/巩固题/单元挑战/英文台词/组件生产/组件配置」等独立子目录。每个模块下可含 `skills/`(模块专属技能)、`scripts/`(模块专属脚本)、`memory/`(模块专属记忆)。其中 `_shared/` 为**业务共享工具层**(多模块共用的飞书操作技能),`review/` 为**业务决策沉淀层**(非审校流程目录),记录每次模块调整的「为什么」,帮助小研理解规则背后的 know-why 以便更准确判断。下设「课程组件」(对应组件生产模块的决策依据)「剧本翻译」(对应英文台词模块的决策依据)两个子目录,未来其他模块产生决策时同样在此记录 |
| `scripts/` | 通用脚本文件 | 仅存放跨业务模块的通用脚本(备份、同步等)。业务模块专属脚本放在对应 `business_production/<模块>/scripts/` |
| `output/` | 输出文件 | 所有生成的报表(`.xlsx`、`.csv`)、日志(`.log`)、导出文件等必须放在此目录 |
| `skills/` | 技能定义 | 个人技能目录 |
| `tmp/` | 临时文件 | 临时中间产物,可定期清理 |
@ -149,7 +149,7 @@ System: [...] Feishu[xiaobian] group oc_xxx | 发送者 (ou_xxx) [msg:om_xxx]
### 强制规则
1. **脚本文件** → 始终创建在 `scripts/` 目录下,绝不放在根目录
1. **通用脚本文件** → 放在 `scripts/` 目录下;**业务模块专属脚本** → 放在 `business_production/<模块>/scripts/` 下,绝不放在根目录
2. **输出文件**xlsx/csv/log/报表等)→ 始终创建在 `output/` 目录下,绝不放在根目录
3. **定时任务/脚本生成的文件** → 默认也输出到 `output/` 目录下,可根据需求在 `output/` 内创建子目录分类存放(如 `output/daily_reports/`**绝不放在根目录**
4. **业务知识** → 统一记录到 `business_knowledge/` 目录
@ -160,20 +160,150 @@ System: [...] Feishu[xiaobian] group oc_xxx | 发送者 (ou_xxx) [msg:om_xxx]
Skills 提供你的工具。当你需要某个工具时,查看它的 `SKILL.md`。在 `TOOLS.md` 中保存环境相关的备注数据库连接、API 配置等)。
你需要查看两个目录下的skills
1.你个人的skill目录:
./skills
Skills 按四层架构组织:
2.通用级别的skills:
/root/.openclaw/skills
### 第一层:通用工具能力(`./skills/`
跨业务通用技能,如身份识别、消息发送、知识库读取等。
### 业务生产技能
### 第二层:业务知识技能(`./business_knowledge/skills/`
被多个业务模块引用的通用知识/标准/资源技能如考试题型库、JSON标准规范、标书规范等。不独立执行由其他 skill 引用。
以下技能位于 `business_production/` 目录下,收到对应触发词时直接查阅其 `SKILL.md`
### 第三层:业务共享工具(`./business_production/_shared/`
多业务模块共用的飞书操作技能如内嵌Sheet读写、多维表格操作、文档正文写入、L1配置审校等。
| 触发词 | SKILL.md 路径 |
|--------|--------------|
| `组件配置-json` | `business_production/组件配置/interactive-component-json/SKILL.md` |
### 第四层:模块专属技能(`./business_production/<模块>/skills/`
仅服务于特定业务模块的技能如组件配置JSON生成、单元挑战题型生产、对话组件配置等。
### 系统级技能
`/root/.openclaw/skills` — 系统内置通用技能(定时任务、天气等)。
> 🔍 **搜索互联网信息** → 优先加载并使用 `cloudsways-search` skill已配置密钥开箱即用而非系统内置 web_search 工具。
### 飞书文档操作技能速查
| 场景 | 技能 | 路径 | 身份 |
|------|------|------|------|
| 读知识库文档 | `lark_wiki_operate_as_bot` | `./skills/lark_wiki_operate_as_bot/SKILL.md` | Bot |
| 读/写文档内嵌Sheet | `feishu-embedded-sheet` | `./business_production/_shared/feishu-embedded-sheet/SKILL.md` | Bot |
| 多维表格CRUD | `lark_bitable_operate_as_bot` | `./business_production/_shared/lark_bitable_operate_as_bot/SKILL.md` | Bot |
| 更新文档正文 | `lark_docx_update_as_bot` | `./business_production/_shared/lark_docx_update_as_bot/SKILL.md` | Bot |
| 发送飞书消息 | `lark-send-message-as-bot` | `./skills/lark-send-message-as-bot/SKILL.md` | Bot |
| 身份识别 | `lark-identify-sender` | `./skills/lark-identify-sender/SKILL.md` | — |
| 多维表格结构读取 | `bitable-reader` | `./business_production/_shared/bitable-reader/SKILL.md` | Bot |
| L1配置审校 | `audit_l1_config` | `./business_production/_shared/audit_l1_config/SKILL.md` | — |
| 知识点掌握度计算 | `knowledge-mastery-calculator` | `./business_production/_shared/knowledge-mastery-calculator/SKILL.md` | — |
### 业务知识技能速查(被引用,不独立触发)
| 场景 | 技能 | 路径 |
|------|------|------|
| 剑桥YLE/KET考试题型库 | `cambridge-yle-ket-exam-library` | `./business_knowledge/skills/cambridge-yle-ket-exam-library/SKILL.md` |
| 14种核心互动JSON标准 | `core-content-json-standard` | `./business_knowledge/skills/core-content-json-standard/SKILL.md` |
| 标书/需求文档规范 | `biaoshu` | `./business_knowledge/skills/biaoshu/SKILL.md` |
### 业务生产技能(强制执行:匹配到触发词时直接调用对应 SKILL.md不走 MEMORY.md 兜底)
收到以下触发词时,**必须先读取对应 SKILL.md 再执行**,禁止跳过 skill 直接用 MEMORY.md 规则手动处理。
#### 英文台词English Script Production
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `/英文台词`、`英文台词生产` | `kids-english-script-production` | `business_production/英文台词/skills/kids-english-script-production/SKILL.md` |
| 飞书文档表格读写通用I/O层 | `feishu-doc-io` | `business_production/英文台词/skills/feishu-table-translate-fill/SKILL.md` |
> **示例:** 用户发来飞书 wiki 链接说「英文台词生产」→ 调用 `kids-english-script-production`,用 `--feishu-url` 模式读 F 列编剧台词 → 英语思维重构 → 写回 G 列
#### 组件生产Component Production
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `/组件生产`、`组件生产`、`组件回填` | `script-component-production` | `business_production/组件生产/skills/script-component-production/SKILL.md` |
| `组件设计`、`设计组件` | `component-design` | `business_production/组件生产/skills/component-design/SKILL.md` |
| `对话互动配置`、`对话组件配置` | `dialogue-interaction-config` | `business_production/组件生产/skills/dialogue-interaction-config/SKILL.md` |
| `互动组件规范`、`组件格式参考` | `vala-interactive-components` | `business_production/组件生产/skills/vala-interactive-components/SKILL.md` |
| `组件标准化`、`对话组件标准化` | `task-router``dialogue-components-standardizer` | `business_production/组件生产/skills/task-router/SKILL.md` |
##### 对话类组件配置子技能(由 `dialogue-interaction-config` 调度)
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `对话选择配置`、`choose config` | `dialogue-choose-config` | `business_production/组件生产/skills/dialogue-choose-config/SKILL.md` |
| `核心导航配置`、`core navigation config` | `dialogue-core-navigation-config` | `business_production/组件生产/skills/dialogue-core-navigation-config/SKILL.md` |
| `对话挖空配置`、`fill in blanks config` | `dialogue-fill-in-blanks-config` | `business_production/组件生产/skills/dialogue-fill-in-blanks-config/SKILL.md` |
| `看图说话配置`、`image description config` | `dialogue-image-description-config` | `business_production/组件生产/skills/dialogue-image-description-config/SKILL.md` |
| `对话朗读配置`、`reading config` | `dialogue-reading-config` | `business_production/组件生产/skills/dialogue-reading-config/SKILL.md` |
| `对话选读配置`、`selective reading config` | `dialogue-selective-reading-config` | `business_production/组件生产/skills/dialogue-selective-reading-config/SKILL.md` |
| `对话组句配置`、`sentence building config` | `dialogue-sentence-building-config` | `business_production/组件生产/skills/dialogue-sentence-building-config/SKILL.md` |
| `图片单选配置`、`single choice image config` | `dialogue-single-choice-image-config` | `business_production/组件生产/skills/dialogue-single-choice-image-config/SKILL.md` |
| `信息组句配置`、`info sentence building` | `info-sentence-building-config` | `business_production/组件生产/skills/info-sentence-building-config/SKILL.md` |
| `信息拼词配置`、`info word spelling` | `info-word-spelling-config` | `business_production/组件生产/skills/info-word-spelling-config/SKILL.md` |
> **示例:** 用户发来飞书 wiki 链接说「组件生产」→ 调用 `script-component-production`,读剧本表 → 生成互动组件内容 → 回填对应列
#### 组件配置Component JSON Config
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `组件配置-json`、`组件配置JSON`、`互动组件JSON` | `interactive-component-json` | `business_production/组件配置/interactive-component-json/SKILL.md` |
> **示例:** 用户说「组件配置-json」→ 调用 `interactive-component-json`,根据组件类型生成标准化 JSON 配置
#### 单元挑战Unit Challenge
##### 总控 & 核心 & 审校
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `单元挑战`、`出题`、`生成题包`、`听力题`、`阅读题`、`口语题`、`写作题`、`题包组合` | `unit_challenge_master`(总控调度) | `business_production/单元挑战/skills/unit_challenge/master/unit_challenge_master/SKILL.md` |
| 单元挑战全局规则/通用资源 | `unit_challenge_core`(核心层) | `business_production/单元挑战/skills/unit_challenge/core/unit_challenge_core/SKILL.md` |
| `审校`、`单元挑战审校`、`题目校验` | `audit_unit_challenge` | `business_production/单元挑战/skills/audit_unit_challenge/SKILL.md` |
##### 听力Listening
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `听力拖拽`、`听力Part1`、`图片连线`、`人物匹配` | `listening-drag`L1 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L1/listening-drag/SKILL.md` |
| `听力信息匹配`、`listening matchInfo`L1 | `listening_matchInfo`L1 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L1/listening_matchInfo/SKILL.md` |
| `听力选图`、`听力Part6` | `listening_picture_selection`L1 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L1/listening_picture_selection/SKILL.md` |
| `听力图片选择`、`听力Part3`、`三选一图片` | `listening-choicePic`L2 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L2/listening-choicePic/SKILL.md` |
| `听力表格填空`、`听力Part2` | `listening_form_fill`L2 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L2/listening_form_fill/SKILL.md` |
| `听力信息匹配`、`听力Part5`L2 | `listening_info_match`L2 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L2/listening_info_match/SKILL.md` |
| `听力长对话`、`听力Part3`L2 | `listening_long_conversation`L2 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L2/listening_long_conversation/SKILL.md` |
| `听力短对话`、`听力Part4` | `listening_short_conversation`L2 | `business_production/单元挑战/skills/unit_challenge/questions/listening/L2/listening_short_conversation/SKILL.md` |
##### 阅读Reading
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `阅读看图判断`、`reading pic judge` | `reading_pic_judge` | `business_production/单元挑战/skills/unit_challenge/questions/reading/common/reading_pic_judge/SKILL.md` |
| `阅读看图回答`、`reading pic qa` | `reading_pic_qa` | `business_production/单元挑战/skills/unit_challenge/questions/reading/common/reading_pic_qa/SKILL.md` |
| `阅读完形填空`、`reading cloze` | `reading_cloze` | `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_cloze/SKILL.md` |
| `阅读信息匹配`、`阅读Part1` | `reading_info_match` | `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_info_match/SKILL.md` |
| `阅读长文选择`、`阅读Part3` | `reading_long_passage` | `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_long_passage/SKILL.md` |
| `阅读开放填空`、`阅读Part5` | `reading_open_fill` | `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_open_fill/SKILL.md` |
| `阅读段落匹配`、`阅读Part2` | `reading_paragraph_match` | `business_production/单元挑战/skills/unit_challenge/questions/reading/reading_paragraph_match/SKILL.md` |
##### 口语Speaking
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `口语日常回答`、`口语Part1` | `speaking_daily_qa` | `business_production/单元挑战/skills/unit_challenge/questions/speaking/common/speaking_daily_qa/SKILL.md` |
| `口语看图回答`、`口语Part2` | `speaking_pic_qa`L1 | `business_production/单元挑战/skills/unit_challenge/questions/speaking/L1/speaking_pic_qa/SKILL.md` |
| `口语看图识物` | `speaking_pic_recognize`L1 | `business_production/单元挑战/skills/unit_challenge/questions/speaking/L1/speaking_pic_recognize/SKILL.md` |
| `口语问答` | `speaking_qa`L1 | `business_production/单元挑战/skills/unit_challenge/questions/speaking/L1/speaking_qa/SKILL.md` |
| `口语话题讨论`L1 | `speaking_topic`L1 | `business_production/单元挑战/skills/unit_challenge/questions/speaking/L1/speaking_topic/SKILL.md` |
| `口语话题讨论`L2 | `speaking_topic_discussion`L2 | `business_production/单元挑战/skills/unit_challenge/questions/speaking/L2/speaking_topic_discussion/SKILL.md` |
##### 写作Writing
| 触发词 | 技能 | 路径 |
|--------|------|------|
| `写作看图回答`、`writing pic qa` | `writing_pic_qa` | `business_production/单元挑战/skills/unit_challenge/questions/writing/common/writing_pic_qa/SKILL.md` |
| `写作邮件回复`、`writing email` | `writing_email_reply` | `business_production/单元挑战/skills/unit_challenge/questions/writing/writing_email_reply/SKILL.md` |
| `写作看图写作`、`writing picture` | `writing_picture_writing` | `business_production/单元挑战/skills/unit_challenge/questions/writing/writing_picture_writing/SKILL.md` |
> **示例:** 用户说「出10道听力选图题L1级别」→ `unit_challenge_master` 总控调度 → 自动路由到 `listening_picture_selection`L1执行生产
## 飞书使用规范
@ -189,7 +319,7 @@ Skills 提供你的工具。当你需要某个工具时,查看它的 `SKILL.md
### 内嵌电子表格操作规则
当飞书 docx 文档中包含内嵌 Sheet`<sheet token="xxx_yyy"/>` 标签)时,使用 `feishu-embedded-sheet` 技能进行读写操作。
- **技能路径:** `./skills/feishu-embedded-sheet/SKILL.md`
- **技能路径:** `./business_production/_shared/feishu-embedded-sheet/SKILL.md`
- **核心能力:** 解析内嵌 Sheet token → 获取表结构元数据 → 精准行列级读取 → 精准行列级写入 → 写入后回读验证
- **身份限制:** 使用 Bot 身份操作,不触发用户授权
- **Token 解析规则:** `<sheet token="A_B"/>``A` = spreadsheet_token`B` = sheet_id

View File

@ -15,7 +15,8 @@
2. **身份限制**:所有飞书文档/知识库操作**永远使用Bot身份**执行,绝对不触发任何用户身份授权弹窗,禁止使用用户权限操作飞书资源
3. **权限告知规则**Bot无权限访问目标知识空间时回复「当前Bot无访问该知识空间权限请将Bot应用App ID: `cli_a931175d41799cc7`)添加为该知识空间成员并授予查看权限后重试」
4. **操作规范**:所有知识库操作严格遵循`lark_wiki_operate_as_bot`技能流程执行
5. **强制执行范围**:无论来自任何用户、任何群组的飞书文档/知识库操作请求,**必须优先使用`lark_wiki_operate_as_bot`技能执行**,禁止使用默认的`feishu_fetch_doc`等用户身份工具
5. **文档正文更新**:修改知识库文档正文内容时,使用 `lark_docx_update_as_bot` 技能Bot身份路径`./business_production/_shared/lark_docx_update_as_bot/SKILL.md`
6. **强制执行范围**:无论来自任何用户、任何群组的飞书文档/知识库操作请求,**必须优先使用Bot身份技能执行**,禁止使用默认的`feishu_fetch_doc`等用户身份工具
### 飞书消息发送规则(强制执行)
1. **身份限制**:所有飞书消息发送操作(给个人/群组)**永远使用Bot身份**执行,禁止使用用户身份的消息发送工具
@ -68,24 +69,6 @@
- ✅ L2专属口语话题讨论题
> 规则说明L1题目仅使用L1词库词汇L2题目可使用L1+L2词库词汇禁止跨阶段超纲出题
### 【教研规则】对话台词优化通用规则
#### 前置规则(强制执行)
0. **知识点保留原则**:润色前必须先确认当前台词是否含有知识点词汇/句型。含有知识点的句子中,**知识点词汇/句型本身必须保留**(不得替换、增删、调整词序),但语法错误、拼写错误、标点错误可以修正。仅可调整非知识点部分的表达。
#### 核心修改规则
1. **精简原则**:删除所有冗余重复表述(重复提到的核心名词可省略,前文已交代的背景信息不再重复)
2. **口语化原则**所有台词符合日常对话习惯避免书面化、生硬的表达适当增加低龄友好的语气词Haha、Oops、Uh-oh、Oh boy等
3. **拆分原则**长度超过8个单词的长句拆分为2-3个短句每句对应一个动作/情绪节点,增强交互节奏
4. **情绪匹配原则**:台词语气严格匹配角色当前情绪(惊讶时拆分句子加问号,欢呼时用短词,失落时用省略号)
5. **场景适配原则**:可通过动画/画面表达的内容,不再用台词重复表述,减少信息冗余
#### 统一风格标准
整体风格定位:低龄友好、活泼生动、节奏感强、代入感高
- 单句最长不超过10个单词核心知识点相关句子不超过7个单词
- 每个角色的台词符合其人设
- 对话节奏快每2-3句台词对应一个剧情节点或互动环节
- 弱化说教感,所有指令和引导都以自然对话的方式呈现
### 【教研规则】文本输出格式规范(强制执行)
1. **禁止 Markdown 标记**:生成单元挑战的音频文本、阅读文本等任何内容文本时,禁止使用 `**` `*` `__` `_` 等 Markdown 加粗/斜体标识,也禁止使用 `#` `>` `-` 等块级 Markdown 语法。输出纯文本即可。
2. **适用场景**:单元挑战所有文本输出(音频台词、阅读理解文章、写作提示、口语话题等),以及任何需要嵌入题目 jsonData 的文本内容

69
add_month_week.py Normal file
View File

@ -0,0 +1,69 @@
import pandas as pd
# 文件路径
file_path = r'/root/.openclaw/workspace-xiaoyan/business_knowledge/新知识库初版/全包词汇/L2知识库-三级+A2.xlsx'
# 读取文件
df = pd.read_excel(file_path)
print("现有表格的列名:")
print(df.columns.tolist())
print("\n现有表格的前5行")
print(df.head())
print(f"\n现有表格总行数:{len(df)}")
# 定义要添加的单词、词性和词义
words_to_add = [
# 月份
("January", "n", "一月"),
("February", "n", "二月"),
("March", "n", "三月"),
("April", "n", "四月"),
("May", "n", "五月"),
("June", "n", "六月"),
("July", "n", "七月"),
("August", "n", "八月"),
("September", "n", "九月"),
("October", "n", "十月"),
("November", "n", "十一月"),
("December", "n", "十二月"),
# 星期
("Monday", "n", "星期一"),
("Tuesday", "n", "星期二"),
("Wednesday", "n", "星期三"),
("Thursday", "n", "星期四"),
("Friday", "n", "星期五"),
("Saturday", "n", "星期六"),
("Sunday", "n", "星期日"),
]
# 按字母顺序排序
words_to_add_sorted = sorted(words_to_add, key=lambda x: x[0].lower())
print("\n" + "="*80)
print("要添加的单词(按字母顺序):")
for word, pos, meaning in words_to_add_sorted:
print(f"{word:15s} {pos:5s} {meaning}")
# 创建新行的DataFrame
new_rows = pd.DataFrame(words_to_add_sorted, columns=['单词', '词性', '中文释义'])
# 填充其他列(为空)
for col in df.columns:
if col not in ['单词', '词性', '中文释义']:
new_rows[col] = ""
# 合并到原数据
df_updated = pd.concat([df, new_rows], ignore_index=True)
# 按单词字母顺序排序
df_updated = df_updated.sort_values(by='单词', key=lambda x: x.str.lower())
# 保存结果
df_updated.to_excel(file_path, index=False)
print("\n" + "="*80)
print(f"已添加 {len(new_rows)} 个单词")
print(f"更新后表格总行数:{len(df_updated)}")
print(f"已保存到:{file_path}")

View File

@ -208,6 +208,31 @@ curl -s -X GET \
6. **数据类型**:写入时,数字直接用 number 类型,文本用 string空值用 null
7. **换行符**:需要在单元格内换行时,在字符串中使用 `\n`
### ⚠️ 批量写入前必须验证行号连续性(强制执行)
**问题:** 飞书 Sheets API 的 range 写入是按连续区域覆盖的。如果 range 指定 `F4:F67`API 会把数据依次写入 Row 4, 5, 6, ..., 67**不管这些行是否对应正确的数据行**。
**场景:** 剧本表格中E 列有内容的行号不连续Row 4 有台词、Row 5 是剧情描述空行、Row 6 又有台词),如果按连续 range 批量写入,会导致 Row 6 的英文台词写到 Row 5 上,造成全列偏移。
**强制规则:**
1. 写入前,先统计目标行号列表,检查是否连续(`rows[i+1] - rows[i] == 1`
2. **行号连续** → 可以用 range 批量写入(如 `F4:F67`
3. **行号不连续** → 必须逐行写入(每个行号单独一个 range`F4:F4`, `F6:F6`, ...),或先清空整列再逐行写入
4. 写入后必须抽样验证 E/F 列行号对齐(至少抽查前 5 行、中间 5 行、末尾 5 行)
```python
# 示例:检查行号连续性
rows = sorted(data.keys())
is_continuous = all(rows[i+1] - rows[i] == 1 for i in range(len(rows)-1))
if is_continuous:
# 安全:批量 range 写入
write_range(f"F{rows[0]}:F{rows[-1]}", values)
else:
# 不安全:逐行写入
for row in rows:
write_range(f"F{row}:F{row}", [data[row]])
```
## 异常处理
| 错误码 | 含义 | 处理方式 |

View File

@ -1,3 +1,8 @@
---
name: knowledge-mastery-calculator
description: 瓦拉英语课程知识点掌握度精准计算器,解决传统判定方法「跟读通过=掌握」的核心痛点,真实反映用户语言学习实际掌握情况
---
# Skill: 知识点掌握度计算器
## 基本信息
- **技能名称:** 知识点掌握度精准计算器

View File

@ -30,23 +30,23 @@ metadata:
## 使用示例
### 1. 列出多维表格所有数据表
```bash
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_tables <app_token>
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_tables <app_token>
```
### 2. 读取数据表记录
```bash
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_records <app_token> <table_id> [page_size]
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_records <app_token> <table_id> [page_size]
```
### 3. 新增记录
```bash
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh create_record <app_token> <table_id> '{"字段名1":"值1","字段名2":"值2"}'
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh create_record <app_token> <table_id> '{"字段名1":"值1","字段名2":"值2"}'
```
### 4. 更新记录
```bash
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh update_record <app_token> <table_id> <record_id> '{"字段名1":"新值"}'
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh update_record <app_token> <table_id> <record_id> '{"字段名1":"新值"}'
```
### 5. 删除记录
```bash
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh delete_record <app_token> <table_id> <record_id>
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh delete_record <app_token> <table_id> <record_id>
```
## 完整执行流程
1. 自动获取Bot租户访问凭证有效期2小时自动复用

View File

@ -0,0 +1,135 @@
---
name: lark_docx_update_as_bot
version: 1.0.0
description: "飞书文档正文Bot身份写入技能使用 lark-cli docs +update --api-version v2 --as bot 更新文档正文内容补齐「读文档→读内嵌Sheet→回填文档正文」全链路Bot身份闭环"
metadata:
requires:
permissions: ["docx:document", "docx:document:write_only"]
---
# lark_docx_update_as_bot 技能规范
## 核心规则(强制执行)
1. **身份限制**:所有文档正文更新操作**永远使用Bot身份**执行(`--as bot`),绝对不触发任何用户身份授权弹窗
2. **文档范围限制**:支持知识库文档(`/wiki/`)和个人文档(`/doc/`前提是Bot有对应文档的编辑权限
3. **权限告知规则**
- Bot无权限编辑目标文档回复「当前Bot无编辑该文档权限请将Bot应用App ID: `cli_a931175d41799cc7`)添加为文档协作者并授予编辑权限后重试」
- 权限不足时提示需要开通的权限:`docx:document` 或 `docx:document:write_only`
## 适用场景
- 将润色后的台词/文本回填到文档正文段落
- 更新文档中的配置说明、备注等文本内容
- 批量替换文档中的特定文本
- 在文档中追加新章节/段落
- 所有需要Bot身份修改文档正文的操作
## 前置条件
- Bot应用已在飞书开发者后台开通 `docx:document` 权限
- Bot已被添加为目标文档的协作者至少「可编辑」权限
## 完整执行链路
### 步骤1获取文档内容和 block 结构
先用 `lark_wiki_operate_as_bot``lark-cli docs +fetch --api-version v2 --as bot` 获取文档内容,定位需要修改的文本/block。
```bash
# 读取文档(获取 block_id 用于精确编辑)
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
lark-cli docs +fetch --api-version v2 --doc "<doc_token>" --as bot
```
### 步骤2执行更新
#### 方式Astr_replace — 全文文本查找替换(推荐,无需 block_id
```bash
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
lark-cli docs +update --api-version v2 --doc "<doc_token>" --as bot \
--command str_replace \
--pattern "要替换的原文" \
--content "替换后的新文本"
```
**Markdown 模式(支持跨行匹配 + 省略号语法):**
```bash
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
lark-cli docs +update --api-version v2 --doc "<doc_token>" --as bot \
--command str_replace \
--doc-format markdown \
--pattern "开头文本...结尾文本" \
--content "替换后的完整内容"
```
#### 方式Bblock_replace — 替换指定 block需先获取 block_id
```bash
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
lark-cli docs +update --api-version v2 --doc "<doc_token>" --as bot \
--command block_replace \
--block-id "blkcnXXXX" \
--content '<p>替换后的段落内容</p>'
```
#### 方式Cappend — 在文档末尾追加
```bash
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
lark-cli docs +update --api-version v2 --doc "<doc_token>" --as bot \
--command append \
--content '<h2>新章节</h2><p>追加的内容</p>'
```
#### 方式Dblock_insert_after — 在指定 block 后插入
```bash
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
lark-cli docs +update --api-version v2 --doc "<doc_token>" --as bot \
--command block_insert_after \
--block-id "blkcnXXXX" \
--content '<p>插入的内容</p>'
```
### 步骤3验证更新结果
```bash
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan \
lark-cli docs +fetch --api-version v2 --doc "<doc_token>" --as bot
```
## 指令速查表
| 指令 | 说明 | 必需参数 | 适用场景 |
|------|------|----------|----------|
| `str_replace` | 全文文本查找替换 | `--pattern` `--content` | 回填润色文本、修正错别字 |
| `block_replace` | 替换指定 block | `--block-id` `--content` | 替换整段内容 |
| `block_insert_after` | 在指定 block 后插入 | `--block-id` `--content` | 插入新段落 |
| `append` | 文档末尾追加 | `--content` | 追加新章节 |
| `block_delete` | 删除指定 block | `--block-id` | 删除废弃内容 |
| `overwrite` | ⚠️ 全文覆盖 | `--content` | 完全重建文档(慎用) |
## 最佳实践
1. **优先 str_replace**:回填润色文本等场景,直接用 str_replace 匹配原文替换,无需获取 block_id
2. **Markdown 模式跨行匹配**:需要替换大段内容时,用 `--doc-format markdown` + `前缀...后缀` 省略号语法
3. **精确操作优于全文覆盖**:避免使用 `overwrite`,会丢失图片、评论等
4. **保护不可重建内容**:替换时避开包含图片、画板、电子表格 token 的 block
5. **写入后必须验证**:每次更新后回读确认内容正确
## 与其他技能的配合
| 场景 | 技能链路 |
|------|----------|
| 读文档 → 读内嵌Sheet → 回填正文 | `lark_wiki_operate_as_bot``feishu-embedded-sheet`**本技能** |
| 读文档 → 修改正文 | `lark_wiki_operate_as_bot`**本技能** |
| 读文档 → 读内嵌Sheet → 写Sheet | `lark_wiki_operate_as_bot``feishu-embedded-sheet` |
## 异常处理
| 错误码 | 含义 | 处理方式 |
|--------|------|---------|
| `99991400` | 频率限制 | 等待后重试,使用指数退避 |
| `429` | 并发编辑限制 | 同一文档每秒最多3次编辑排队重试 |
| `403` | 无权限 | Bot未被添加为文档协作者需用户授权 |
| `400` | 参数错误 | 检查 doc_token、block_id、pattern 格式 |
| `404` | 文档/block不存在 | 检查 token 是否正确block 是否已被删除 |

View File

@ -2,7 +2,7 @@
"""Apply answer distribution fixes to rewrite_p4_all.py"""
import sys
with open('/root/.openclaw/workspace-xiaoyan/scripts/rewrite_p4_all.py', 'r') as f:
with open('/root/.openclaw/workspace-xiaoyan/business_production/单元挑战/scripts/rewrite_p4_all.py', 'r') as f:
content = f.read()
fixes = [
@ -100,7 +100,7 @@ for i, line in enumerate(lines):
break
# Write back
with open('/root/.openclaw/workspace-xiaoyan/scripts/rewrite_p4_all.py', 'w') as f:
with open('/root/.openclaw/workspace-xiaoyan/business_production/单元挑战/scripts/rewrite_p4_all.py', 'w') as f:
f.write('\n'.join(lines))
print(f'\nApplied {patches_applied} patches')

View File

@ -4,7 +4,7 @@ Unit Challenge 听力审校脚本P1/P2/P4/P7P5/P6无数据P3跳过
import json, subprocess, sys, os
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
CRED_FILE = "/root/.openclaw/credentials/xiaoyan/config.json"
# Standard ability tags (from ability_tags.md)

View File

@ -17,7 +17,7 @@ import json, subprocess, os, sys
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
WORKSPACE = os.path.dirname(SCRIPT_DIR)
BITABLE_SCRIPT = os.path.join(WORKSPACE, "skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
BITABLE_SCRIPT = os.path.join(WORKSPACE, "business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
TABLES = {

View File

@ -12,7 +12,7 @@ import json, subprocess, os
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
WORKSPACE = os.path.dirname(SCRIPT_DIR)
BITABLE_SCRIPT = os.path.join(WORKSPACE, "skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
BITABLE_SCRIPT = os.path.join(WORKSPACE, "business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
TABLES = {

View File

@ -5,7 +5,7 @@
import json, subprocess, sys
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
def exec_bash(cmd):
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30)

View File

@ -4,7 +4,7 @@
import json, subprocess, copy
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
# ===== Standard Reading Ability Tags =====
STANDARD_TAGS_L1 = {

View File

@ -4,7 +4,7 @@
import json, subprocess, sys
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
# Standard ability tags
TAG_L1 = {"显性信息定位|关键词识别","基础语境理解|场景/行为理解","图文判断|句图一致性",

View File

@ -4,7 +4,7 @@
import json, subprocess
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
SKILL_SCRIPT = "/root/.openclaw/workspace-xiaoyan/business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh"
records = [
{

View File

@ -4,7 +4,7 @@
import json, subprocess, copy
APP_TOKEN = 'CMHSbUUjka3TrUsaxxEc297ongf'
SKILL = 'skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh'
SKILL = 'business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh'
# ===== Ability tag mappings =====
TAG_MAP = {

View File

@ -8,7 +8,7 @@ import json, subprocess, os, sys, time
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
TABLE_ID = "tblVmeDtBDKsAEfz"
BASE_DIR = os.path.expanduser("~/.openclaw/workspace-xiaoyan")
OPERATE_SCRIPT = os.path.join(BASE_DIR, "skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
OPERATE_SCRIPT = os.path.join(BASE_DIR, "business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
def run_operate(action, *args):
"""Run the operate_bitable.sh script"""

View File

@ -6,7 +6,7 @@ import json, subprocess, os, sys
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
WORKSPACE = os.path.dirname(SCRIPT_DIR)
BITABLE_SCRIPT = os.path.join(WORKSPACE, "skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
BITABLE_SCRIPT = os.path.join(WORKSPACE, "business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh")
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
TABLES = {

View File

@ -203,16 +203,16 @@ Step 5: 写回 — 将审校结果写入对应表的「审校结果」/「审核
| 脚本 | 用途 | 对应表 |
|------|------|--------|
| `scripts/audit_unit_challenge_listening.py` | 听力 P1-P7 第1轮基础审校 | 所有听力表 |
| `scripts/audit_unit_challenge_listening_v2.py` | 听力 P1-P7 第2轮深度审校 | 同上 |
| `scripts/audit_unit_challenge_reading.py` | 阅读基础审校 | 所有阅读表 |
| `scripts/audit_unit_challenge_v2.py` | 全题型基础检查 | 所有表 |
| `scripts/audit_unit_challenge_v3.py` | 全题型深度检查 | 所有表 |
| `scripts/write_audit_results_v3.py` | 审校结果写回 bitable | 所有表 |
| `scripts/fill_speaking_expl.py` | 口语-P1 explanation 补充 | 口语-P1 |
| `scripts/gen_writing_speaking.py` | 写作/口语内容生成 | 写作-P1/口语-P1/P2 |
| `scripts/gen_writing_speaking_batch2.py` | 写作/口语批量生成 | 同上 |
| `scripts/gen_batch3.py` | 写作/口语 C级批量生成 | 同上 |
| `../../scripts/audit_unit_challenge_listening.py` | 听力 P1-P7 第1轮基础审校 | 所有听力表 |
| `../../scripts/audit_unit_challenge_listening_v2.py` | 听力 P1-P7 第2轮深度审校 | 同上 |
| `../../scripts/audit_unit_challenge_reading.py` | 阅读基础审校 | 所有阅读表 |
| `../../scripts/audit_unit_challenge_v2.py` | 全题型基础检查 | 所有表 |
| `../../scripts/audit_unit_challenge_v3.py` | 全题型深度检查 | 所有表 |
| `../../scripts/write_audit_results_v3.py` | 审校结果写回 bitable | 所有表 |
| `../../scripts/fill_speaking_expl.py` | 口语-P1 explanation 补充 | 口语-P1 |
| `../../scripts/gen_writing_speaking.py` | 写作/口语内容生成 | 写作-P1/口语-P1/P2 |
| `../../scripts/gen_writing_speaking_batch2.py` | 写作/口语批量生成 | 同上 |
| `../../scripts/gen_batch3.py` | 写作/口语 C级批量生成 | 同上 |
## 已知能力标签库

View File

@ -1,37 +0,0 @@
---
name: reading_pic_judge
description: K12英语阅读看图判断题标准化设计、生产、审校工具。使用场景(1) 根据给定知识点、难度等级生成符合教研规范的阅读看图判断题;(2) 校验题目格式、难度匹配、内容合规性;(3) 批量生产阅读看图判断题。触发关键词阅读看图判断、reading pic judge、看图判断题生产
---
## 文本输出规范(强制执行)
所有输出的文本内容(台词、题目、选项、解析、音频文本、阅读文章等)必须遵守以下规则:
1. 禁止 Markdown 标记:禁止使用 ** * __ _ 等加粗/斜体标识,也禁止使用 # > - 等块级 Markdown 语法。所有文本纯文本输出。
2. 英式拼写优先:单词涉及英美式拼写差异时(如 colour/color、centre/center、travelling/traveling统一选择英式拼写。
3. 标点符号规范:严格区分全角/半角符号。中文内容使用全角标点(,。!?),英文内容使用半角标点(. , ! ?),不得混用。
# Reading Pic Judge 阅读看图判断题生产技能
## 题型说明
阅读看图判断题学生查看图片然后回答关于图片内容的判断题通常是Yes/No问题。
## JSON结构示例
```json
{
"category": "reading",
"type": "reading_pic_judge",
"questionSetID": "010401",
"textTitle": "A Letter from Tom",
"questionSet": [{
"questionImage": "010401-00.png",
"question": "What can you do at Sunny Salon?",
"answerText": "Yes",
"ability": ["听觉抓取关键信息", "听觉抓取关键信息", "多特征整合", "语用推断"],
"explanation": "根据图片内容判断正确答案。"
}]
}
```
## 生产规则
1. 提供图片和相关问题
2. 答案为Yes或No
3. 绑定相应的能力标签

View File

@ -1,37 +0,0 @@
---
name: reading_pic_qa
description: K12英语阅读看图回答题标准化设计、生产、审校工具。使用场景(1) 根据给定知识点、难度等级生成符合教研规范的阅读看图回答题;(2) 校验题目格式、难度匹配、内容合规性;(3) 批量生产阅读看图回答题。触发关键词阅读看图回答、reading pic qa、看图回答题生产
---
## 文本输出规范(强制执行)
所有输出的文本内容(台词、题目、选项、解析、音频文本、阅读文章等)必须遵守以下规则:
1. 禁止 Markdown 标记:禁止使用 ** * __ _ 等加粗/斜体标识,也禁止使用 # > - 等块级 Markdown 语法。所有文本纯文本输出。
2. 英式拼写优先:单词涉及英美式拼写差异时(如 colour/color、centre/center、travelling/traveling统一选择英式拼写。
3. 标点符号规范:严格区分全角/半角符号。中文内容使用全角标点(,。!?),英文内容使用半角标点(. , ! ?),不得混用。
# Reading Pic QA 阅读看图回答题生产技能
## 题型说明
阅读看图回答题:学生查看图片,然后回答关于图片内容的开放性问题。
## JSON结构示例
```json
{
"category": "reading",
"type": "reading_pic_qa",
"questionSetID": "010401",
"textTitle": "Look and read. Write yes or no.",
"textImage":"010401-00.png",
"questionSet": [{
"question": "The man has got black hair and glasses. ",
"answerText": "Yes",
"ability": ["听觉抓取关键信息", "听觉抓取关键信息", "多特征整合", "语用推断"],
"explanation": "根据图片内容回答问题。"
}]
}
```
## 生产规则
1. 提供图片和相关问题
2. 答案为开放性回答
3. 绑定相应的能力标签

View File

@ -282,14 +282,14 @@ description: K12英语写作看图回答题标准化设计、生产、审校工
```bash
# 1. 定位表
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_tables <app_token>
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_tables <app_token>
# 2. 新建记录
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh create_record \
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh create_record \
<app_token> <table_id> '{"题目集合 ID":"000001","jsonData":"...","图片描述":"..."}'
# 3. 回读验证
./skills/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_records \
./business_production/_shared/lark_bitable_operate_as_bot/scripts/operate_bitable.sh list_records \
<app_token> <table_id> 5
```

View File

@ -1,35 +0,0 @@
---
name: writing_pic_qa
description: K12英语写作看图回答题标准化设计、生产、审校工具。完整规范见 common/writing_pic_qa/SKILL.md。触发关键词写作看图回答、writing pic qa、看图回答题生产
---
## 文本输出规范(强制执行)
所有输出的文本内容(台词、题目、选项、解析、音频文本、阅读文章等)必须遵守以下规则:
1. 禁止 Markdown 标记:禁止使用 ** * __ _ 等加粗/斜体标识,也禁止使用 # > - 等块级 Markdown 语法。所有文本纯文本输出。
2. 英式拼写优先:单词涉及英美式拼写差异时(如 colour/color、centre/center、travelling/traveling统一选择英式拼写。
3. 标点符号规范:严格区分全角/半角符号。中文内容使用全角标点(,。!?),英文内容使用半角标点(. , ! ?),不得混用。
# Writing Pic QA 写作看图回答题生产技能
> 📌 **完整生产规范请参阅:** `common/writing_pic_qa/SKILL.md`
>
> 本文件保留为快速参考入口,含题型 JSON 输出结构摘要。
## 题型说明
写作看图回答题:学生查看图片,根据提示写出答案。考察图文匹配 + 书写表达。
## JSON 结构bitable 写入格式)
```json
{
"first": { "category": "writing", "type": "writing_pic_qa", "questionSetID": "...", ... },
"second": { "category": "writing", "type": "writing_pic_qa", "questionSetID": "...", ... }
}
```
wrapper 以 `first`/`second` 分别对应题组1/题组2。每个题组内 `questionSet` 包含共享图片及题组内全部小题。
## 快速链接
- **完整生产规范**`common/writing_pic_qa/SKILL.md`11节完整规范
- **参考样例**bitable `单元挑战 → 写作-P3-看图回答题`record_id: `recviZlAxxXlAb`ID=000001

Some files were not shown because too many files have changed in this diff Show More