ai_member_xiaoyan/skills/interactive-component-json/SKILL.md

14 KiB
Raw Blame History

name version description metadata
interactive-component-json 8.0.0 LLM驱动的互动组件配置JSON生成器。 触发场景:用户发送"组件配置-json"或包含飞书剧本文档链接wiki URL/token时自动触发。 覆盖全部27种中互动组件类型 + 12种核心互动类型从飞书wiki剧本文档出发 经过sheet数据解析、组件类型匹配、LLM生成jsonData、MySQL知识点库匹配kpInfo 最终输出组件配置JSON和HTML报告。
requires identity llm
tools python
exec
read
write
requests
pymysql
bot
provider model endpoint
volcano doubao-1.8-volcano ep-20260106175024-6stxn

注意: 需求描述请更新到 project.md 中!变更记录请更新到 prd.md 中!

互动组件配置JSON生成器

触发场景

用户发送以下格式的消息时触发完整处理流水线:

组件配置json {飞书剧本文档链接}

处理完成后生成 HTML 报告文件,并直接通过飞书 Bot 将 HTML 文件发送给请求者,而不是仅返回文件路径。

发送规则

  • 私聊场景:自动发送给当前对话的用户(使用 --send-to <user_id>
  • 群聊场景:发送到当前群组(使用 --send-to-chat <chat_id>
  • 发送失败时回退为返回文件路径

Agent 调用指引

当收到用户的“组件配置-json”请求时agent 应执行:

# user_id 从 USER.md 中查找(非 open_id
cd /root/.openclaw/workspace-xiaoyan/skills/interactive-component-json && \
python3 scripts/pipeline.py "<wiki_url>" --send-to <user_id>

关键点:

  • 默认写入本地 SQLite 数据库(db/components.db)保留生成记录
  • 远程数据库推送通过 HTML 报告中的推送按钮完成(用户手动触发)
  • --send-to 参数使用租户级 user_id(如 4aagb443),不是 open_id
  • 群聊中使用 --send-to-chat <chat_id>
  • pipeline 会自动完成整个流程并发送文件agent 无需额外处理发送逻辑
  • 如果发送成功,结尾会输出 ✅ HTML报告已发送: <message_id>
  • 如果发送失败,会输出 ❌ 发送失败: <error>,此时应回退为告知用户文件路径
  • 可加 --dry-run 仅生成不写入本地DB测试用

HTML 报告推送功能

生成的 HTML 报告内嵌以下推送能力(用户在浏览器中打开 HTML 后操作):

  1. 单组件推送:每个成功组件旁有 [配置↑][知识↑] 按钮
    • [配置↑] 推送组件配置 JSON 到远程数据库
    • [知识↑] 推送知识点关联到远程数据库
  2. 一键推送全部:顶部 一键推送全部配置+知识点 按钮,带进度条和成功/失败统计
  3. 可编辑:推送前可直接在 HTML 中修改 JSON 值和知识点 ID

推送通过 CORS 代理服务中转(解决本地 file:// 打开 HTML 时浏览器 Origin 限制):

  • 代理服务:scripts/proxy_server.py(端口/IP/速率限制见 config.json
  • pipeline 执行时自动检测并启动代理服务
  • 目标接口:POST https://api-test.valavala.com/content/feishu/notify

概述

本skill实现从飞书wiki剧本文档结构化组件配置JSON的完整生产流水线。 覆盖全部27种中互动组件类型 + 12种核心互动类型(合作阅读、看图选词、口语快答、口语妙问、看图说话、合作听力、听力拖拽、听力选择、看图组句、看图撰写、邮件组句、邮件撰写),使用**LLMdoubao-seed-2.0-pro**驱动核心JSON生成。

核心流程

飞书wiki URL
    ↓
[1] feishu_client.py — 读取文档 → 提取内嵌sheet → 读取sheet全量数据
    ↓
[2] parse_script.py — 识别组件行 + 提取角色-section对应 + 配置信息
    ↓
[3] match_component.py — 中文类型名 → cType英文标识 + bitable_token
    ↓
[4] generate_json.py — per-type prompt模板 → jsonData + 规则化kpInfo
    ↓                  section映射解析resourceMapping
[5] db_manager.py — 写入本地SQLite数据库
    ↓
[6] html_report.py — 生成交互式HTML报告
    ↓
[7] send_report_via_bot() — 通过飞书Bot发送HTML文件给请求者

快速使用

# 端到端处理写入DB
python3 scripts/pipeline.py <wiki_url_or_token>

# 仅生成不写入DB
python3 scripts/pipeline.py <wiki_url_or_token> --dry-run

# 限制处理前N个组件
python3 scripts/pipeline.py <wiki_url_or_token> --dry-run --limit 3

# 生成后自动发送给指定用户(私聊)
python3 scripts/pipeline.py <wiki_url_or_token> --dry-run --send-to <user_id>

# 生成后自动发送到群组
python3 scripts/pipeline.py <wiki_url_or_token> --dry-run --send-to-chat <chat_id>

# 查看中英类型对照表
python3 scripts/match_component.py

# 查看DB统计
python3 scripts/db_manager.py stats

目录结构

interactive-component-json/
├── SKILL.md                            # 本文件
├── references/
│   ├── component_registry.md           # 组件类型注册表27种中互动 + 15种核心互动
│   ├── examples/
│   │   └── all_types_examples.json     # 从bitable预取的27种类型参考样例few-shot用
│   ├── script_format_spec.md           # 输入格式规范
│   └── json_output_spec.md             # 输出格式规范
├── prompts/
│   ├── __init__.py
│   ├── prompt_registry.py              # 16种中互动per-type prompt模板 + 结构化字段解析
│   ├── core_reading_prompts.py         # 合作阅读7步prompt模板
│   ├── core_imagedrag_prompts.py       # 看图选词5步prompt模板 (2中间+3最终JSON)
│   ├── core_speaking_prompts.py        # 口语快答7步prompt模板 (3中间+4最终JSON)
│   ├── core_speaking_inquiry_prompts.py # 口语妙问7步prompt模板 (3中间+4最终JSON)
│   ├── core_speaking_image_prompts.py  # 看图说话8步prompt模板 (2中间+6最终JSON)
│   ├── core_listening_order_prompts.py # 合作听力6步prompt模板 (2中间+4最终JSON)
│   ├── core_listening_drag_prompts.py  # 听力拖拽7步prompt模板 (2中间+5最终JSON)
│   ├── core_listening_choose_prompts.py # 听力选择5步prompt模板 (2中间+3最终JSON)
│   ├── core_writing_img_prompts.py    # 看图组句/看图撰写6步prompt模板 (2中间+4最终JSON)
│   └── core_writing_question_prompts.py # 邮件组句/邮件撰写6步prompt模板 (2中间+4最终JSON)
├── prd.md                                  # 变更记录(持续更新)
├── project.md                              # 需求描述
├── scripts/
│   ├── pipeline.py                     # 端到端流水线(主入口)
│   ├── llm_client.py                   # LLM调用客户端火山doubao-1.8
│   ├── feishu_client.py                # 飞书API客户端wiki/sheet/bitable
│   ├── parse_script.py                 # 剧本解析器sheet数据→组件行
│   ├── match_component.py              # 组件类型匹配器27种中互动 + 核心互动)
│   ├── generate_json.py                # LLM驱动的jsonData/kpInfo生成器含核心互动多步流水线
│   └── db_manager.py                   # SQLite数据库管理
└── db/
    └── components.db                   # SQLite数据库运行时生成

组件类型注册表

27种中互动组件已完成

中文名 cType bitable_token
对话互动 mid_sentence_dialogue GH0hbBT0ZavkCesaVQ7c40Zfnub
对话朗读 mid_dialog_repeat MuwubKXoSaJe55sO4k9c63VSnmh
对话表达 mid_dialog_express IC2kbvgP0aLrj7sfzZicIozZn1e
对话选读 mid_dialog_select GsNEbjVVYarWqpsNanTcf8UnnPf
对话选择 mid_dialog_choose MsETbgiUAaG8h4sct0ycTOzGnfb
对话挖空 mid_dialog_fillin X6nHbUztFaGY5tsSHnKcmeJtnm5
对话组句 mid_dialog_sentence OfgZbhomiaYj2psBNhuc7THMnF9
信息描写 mid_message_trace Nd8cb0tnKankIHsVgw1caL1Xn3f
信息拼词 mid_message_spell X0sPb1KERarvocs4rb3cK35AnFg
信息组句 mid_message_combine TXYobOAuaakk6KslHp9caUB7nXa
信息补词 mid_message_fillin FxwMb8MJmarcRsso2tQcV8thn5g
信息填词 mid_message_word ElRebtQe3aeCyOsRjg6cEniznwg
信息填句 mid_message_sentence CNFgbIIszaPWXfsekt7cCZjHnVh
物品互动 mid_vocab_item BD9Wbi2l9akojasifEvcJG06n3g
图片互动 mid_vocab_image VJ1kb9xp8amX8PskntmcLhjpnQe
图片单选 mid_image_choose XyIVbYciraBkoasJtV1c3N5Gnhh
图片多选 mid_image_multiple XZo5bwagdau3VvsTDL9cJPrInQd
图片有序 mid_image_sequence BZWebQROpagkJ0sxArGcsBjwnCU
图片拖拽 mid_image_drag Qqq9bVv19aH6LisRrsVcvf6xnqe
材料互动 mid_sentence_material Yd84buD91aGxyqstpXqceftHnvM
指令互动 mid_vocab_instruction UorxbVCNYaqpx3sOUdTcF6bUnAh
挖空互动 mid_grammar_cloze TaU5baUEEagdlusiWXnc7nrGn5b
组句互动 mid_grammar_sentence X5w7bWQXGaWu3dsMEE1c3Tp8nBb
填词互动 mid_vocab_fillBlank TtjlbkLFgaDi6hsriHZcHBJnnRH
语音互动 mid_sentence_voice Qd2kbHD8has9mys3UhWcJbMznrf
造句互动 mid_sentence_makeSentence WfHMbzBYPau6hZsmFD0cBwWuncc
发音互动 mid_pron_pron CeH5bO3FhaG5cNsPZ4Xc72axnrb

核心互动组件已实现12种其余待定义

  • 合作阅读 core_reading_order — 7步LLM调用输出 taskData/textData/sequenceData/learningData
  • 看图选词 core_reading_imageDrag — 5步LLM调用输出 taskData/questionGroupData/studyData
  • 口语快答 core_speaking_reply — 7步LLM调用输出 taskData/settingData/configData/learningData
  • 口语妙问 core_speaking_inquiry — 7步LLM调用输出 taskData/settingData/configData/learningData
  • 看图说话 core_speaking_image — 8步LLM调用输出 taskData/configData/imageInfo/optionList/questionList/learningData
  • 合作听力 core_listening_order — 6步LLM调用输出 taskData/textData/sequenceData/learningData
  • 听力拖拽 core_listening_drag — 7步LLM调用输出 taskData/preDialogData/dialogListData/questionListData/learningData
  • 听力选择 core_listening_choose — 5步LLM调用输出 taskData/questionGroupData/learningData
  • 看图组句 core_writing_imgMakeSentence — 6步LLM调用输出 taskInfo/textInfo/studyInfo/evalInfo
  • 看图撰写 core_writing_imgWrite — 6步LLM调用输出 taskInfo/textInfo/studyInfo/evalInfo
  • 邮件组句 core_writing_questionMakeSentence — 6步LLM调用输出 taskInfo/textInfo/studyInfo/evalInfo
  • 邮件撰写 core_writing_questionWrite — 6步LLM调用输出 taskInfo/textInfo/studyInfo/evalInfo

其余7种详见 scripts/match_component.py 中的 CORE_INTERACTION_TYPES

LLM 配置

项目
Provider 火山引擎 Ark
模型 doubao-seed-2.0-pro
Endpoint ep-m-20260301164317-vmmj4
API Key 环境变量 VOLCANO_API_KEY 或内置默认值
参考样例 references/examples/all_types_examples.json从bitable预取

数据库设计

components 表

  • component_id, script_id, script_title, component_index
  • category(mid/core), cType, type_name, has_image
  • level, unit_id, knowledge_points_raw, raw_config
  • final_config_json(jsonData), kp_info_json(kpInfo)
  • task_data_json, text_data_json, sequence_data_json, learning_data_json (核心互动-通用)
  • question_group_json, study_data_json (核心互动-看图选词)
  • setting_data_json, config_data_json (核心互动-口语快答/口语妙问)
  • image_info_json, option_list_json, question_list_json (核心互动-看图说话)
  • pre_dialog_json, dialog_list_json (核心互动-听力拖拽)
  • intermediate_json (核心互动中间结果)
  • status: draft → generated → validated → exported
  • bitable_token, db_table, created_at, updated_at

generation_logs 表

  • log_id, component_id, step, model_used, success, error_message

开发进度

  • Phase 1: LLM客户端封装llm_client.py, doubao-1.8-volcano
  • Phase 2: 飞书API客户端feishu_client.py, wiki/sheet/bitable
  • Phase 3: 剧本解析器增强parse_script.py, sheet数据解析
  • Phase 4: 组件类型匹配完善match_component.py, 27种+配图后缀)
  • Phase 5: LLM驱动JSON生成generate_json.py, few-shot参考样例
  • Phase 6: 端到端流水线pipeline.py, 已验证15/15组件成功
  • Phase 7: v2 per-type prompt模板prompts/prompt_registry.py, 16种组件
  • Phase 8: section-character映射parse_script.py, resourceMapping解析
  • Phase 9: generate_json.py v2重写模板优先 + 回退few-shot
  • Phase 10: pipeline.py v2section_char_map传递, 15/15验证通过
  • Phase 11: 核心互动组件支持 — 合作阅读(core_reading_order) 7步LLM流水线已验证通过
  • Phase 12: 核心互动扩展 — 看图选词(core_reading_imageDrag) 5步 + 口语快答(core_speaking_reply) 7步bitable样例验证通过
  • Phase 12.5: v6核心互动 — 口语妙问(core_speaking_inquiry) 7步 + 看图说话(core_speaking_image) 8步bitable样例验证通过
  • Phase 12.6: v7听力类核心互动 — 合作听力(core_listening_order) 6步 + 听力拖拽(core_listening_drag) 7步 + 听力选择(core_listening_choose) 5步
  • Phase 12.7: v8写作类核心互动 — 看图组句/看图撰写/邮件组句/邮件撰写 各6步LLM流水线
  • Phase 13: JSON校验与质量对比
  • Phase 14: 批量处理 + 公司DB推送