docs: refine lark-slides imported material workflow

This commit is contained in:
zhanghuanxu
2026-06-23 19:07:44 +08:00
parent 2c302810f7
commit 50d5b38b18
4 changed files with 116 additions and 69 deletions

View File

@@ -14,7 +14,8 @@ metadata:
| 用户需求 | 优先动作 | 关键文档 / 命令 |
|----------|----------|-----------------|
| 新建 PPT | 先解析并盘点用户附件,规划 `slide_plan.json`,再按复杂度选择一步或两步创建 | `planning-layer.md``visual-planning.md``asset-planning.md``slides +create` |
| 用户提供 PDF/PPTX/slides 材料并要求生成或改写 PPT | 必须先导入/回读材料,并以导入后的 presentation 作为目标底稿二次创作;即使材料“只作为模板/视觉线索”,也要在导入后的 presentation 内替换内容模块 | `drive +import --type slides``planning-layer.md``asset-planning.md` |
| 新建 PPT | 仅在没有用户提供可导入材料、用户明确要求另建,或导入失败/回读失败时,先解析并盘点用户附件,规划 `slide_plan.json`,再按复杂度创建 | `planning-layer.md``visual-planning.md``asset-planning.md``slides +create` |
| 大幅改写页面 | 先回读现有 XML写入新 plan再替换或重建相关页面 | `xml_presentations.get``+replace-slide``lark-slides-edit-workflows.md` |
| 编辑单个标题、文本块、图片或局部元素 | 优先块级替换/插入,不改页序 | `slides +replace-slide``lark-slides-replace-slide.md` |
| 读取或分析已有 PPT | 解析 slides/wiki token回读全文或单页 XML保存 `xml_presentation_id``slide_id``revision_id` | `xml_presentations.get``xml_presentation.slide.get` |
@@ -23,7 +24,7 @@ metadata:
| 在 slide 中绘制柱/条/折线/面积/雷达/饼等有数据序列的图表 | 使用原生 `<chart>` 元素 | `xml-schema-quick-ref.md` |
| 在 slide 中绘制流程图、时序图、架构图、散点图、漏斗图或装饰图案 | 必须先用 Read 工具读取参考文档,再生成 `<whiteboard>` 元素 | [`lark-slides-whiteboard.md`](references/lark-slides-whiteboard.md) |
| 使用语义图标 | 先检索 IconPark再写 `<icon iconType="...">` | `iconpark_tool.py search → resolve``iconpark.md` |
| 用户提到模板、主题、版式 | 先检索模板,再摘要,必要时裁切骨架 | `template_tool.py search → summarize → extract` |
| 用户提到模板、主题、版式但没有提供本地/在线模板材料 | 先检索内置模板,再摘要,必要时裁切骨架 | `template_tool.py search → summarize → extract` |
| 创建失败、空白页、3350001、布局异常 | 先回读状态,再按排障清单修复,不假设原操作原子成功 | `troubleshooting.md``validation-checklist.md` |
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),认证、权限和全局参数均以 lark-shared 为准。**
@@ -37,7 +38,7 @@ metadata:
> [!NOTE]
> `scripts/template_tool.py` 需要 Python 3。`references/template-index.json` 是脚本缓存/轻量路由索引,不是默认给 agent 阅读的文档;`assets/templates/*.xml` 是机器资源,只应通过脚本摘要或裁切,不要全文读取。
使用模板生成或改写页面时,先 `summarize` 目标页型;只有需要具体布局骨架时才 `extract`
使用内置模板生成或改写页面时,先 `summarize` 目标页型;只有需要具体布局骨架时才 `extract`如果用户已经提供本地/在线模板材料,优先按用户材料导入二创,不走内置模板检索。
**编辑已有幻灯片页面**:优先用 [`+replace-slide`](references/lark-slides-replace-slide.md)(块级替换/插入,不动页序);选择 action 和完整读-改-写流程见 [`lark-slides-edit-workflows.md`](references/lark-slides-edit-workflows.md)。
@@ -123,7 +124,9 @@ lark-cli auth login --domain slides
- 不要把素材缺失表现为空白图片框;必须按 `fallback_if_missing` 生成 XML-native 视觉。
- 不要留下模板占位文案、示例公司名、示例日期或与用户主题无关的原模板内容。
### 创建方式选择
### 无用户导入材料时的创建方式
以下创建方式仅适用于没有用户提供可导入材料、用户明确要求另建 deck或导入失败/`xml_presentations.get` 无法回读的异常场景。
| 场景 | 推荐方式 |
|------|----------|
@@ -139,7 +142,7 @@ lark-cli auth login --domain slides
### 模板与脚本优先流程
模板细则见 [template-catalog.md](references/template-catalog.md)。主流程只记住:先 `search`,锁定后 `summarize`,需要骨架时才 `extract`;不要直接读取完整模板 XML 或照搬占位文案。
模板细则见 [template-catalog.md](references/template-catalog.md)。仅在用户没有提供本地/在线模板材料时使用内置模板流程:先 `search`,锁定后 `summarize`,需要骨架时才 `extract`;不要直接读取完整模板 XML 或照搬占位文案。
```bash
python3 skills/lark-slides/scripts/template_tool.py search --query "<用户需求原文>" --limit 3
@@ -149,19 +152,19 @@ python3 skills/lark-slides/scripts/template_tool.py extract --template <template
```text
Step 1: 需求澄清 & 读取知识
- 澄清主题、受众、页数、风格;模板需求按“模板与脚本优先流程”处理
- 澄清主题、受众、页数、风格;没有用户提供模板材料时,模板需求按“模板与脚本优先流程”处理
- 读取 xml-schema-quick-ref.md新建 / 大幅改写时还要读取 planning-layer.md、visual-planning.md、asset-planning.md
- 如果用户提供附件、文件路径、素材目录或类似“附件文件路径:...”的文本,先按 asset-planning.md 解析路径、枚举文件、读取/导入/上传可用素材;不要直接跳到大纲或 XML
Step 2: 生成大纲 → 用户确认 → 写入 slide_plan.json
- 生成结构化大纲供用户确认;如使用用户附件、导入后的参考 slides 或模板,标明每类素材如何参与二次创作
- 生成结构化大纲供用户确认;如使用用户附件、导入后的 slides 或模板材料,标明每类素材如何参与二次创作
- 新建 / 大幅改写必须先创建目录并写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`
- plan 字段、路径命名、模板边界和 `asset_need` 结构按 planning-layer.md / asset-planning.md 执行
Step 3: 按 slide_plan.json 生成 XML → 创建
- 逐页消费 plankey_message 定主结论layout_type 定几何visual_focus 定主视觉text_density 定文本量
- 缺少真实素材时必须用 `fallback_if_missing` 生成 XML-native 兜底视觉;不要留空
- 创建方式按“创建方式选择”判断;图片、复杂 XML、转义和 3350001 排查按 lark-slides-create.md、media-upload.md、troubleshooting.md 执行
- 如果 plan 有 `target_xml_presentation_id`,默认在该 presentation 内创建、替换或删除页面;只有无导入材料、用户明确要求另建,或导入失败/回读失败时,才按“无用户导入材料时的创建方式”新建 deck
Step 4: 审查 & 交付
- 创建完成后,必须用 xml_presentations.get 读取全文 XML并按 validation-checklist.md 做显式验证记录,包括 XML 文本重叠检查
@@ -171,7 +174,7 @@ Step 4: 审查 & 交付
### jq 命令模板(编辑已有 PPT 时使用)
新建 PPT 推荐`+create --slides`。以下 jq 模板适用于向已有演示文稿追加页面的场景,可以避免手动转义双引号:
无用户导入材料的新建 PPT `+create --slides`。以下 jq 模板适用于向已有演示文稿追加页面的场景,可以避免手动转义双引号:
```bash
# 追加到末尾
@@ -271,13 +274,14 @@ lark-cli slides <resource> <method> [flags] # 调用 API
## 核心规则
1. **先规划再写 XML**:新建演示文稿或大幅改写页面时,必须先写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`;模板、风格和大纲只能作为规划输入,不能绕过规划层
2. **创建流程**:简单短 XML1-3 页、结构简单、特殊字符少)可用 `slides +create --slides '[...]'` 一步创建;复杂内容、含图片/中文大段文本/嵌套引号/较多特殊字符,或超过 10 页时,默认先 `slides +create` 创建空白 PPT再用 `xml_presentation.slide.create` 逐页添加
3. **`<slide>` 直接子元素只有 `<style>``<data>``<note>`**:文本和图形必须放在 `<data>`
4. **文本通过 `<content>` 表达**:必须用 `<content><p>...</p></content>`,不能把文字直接写在 shape
5. **保存关键 ID**:后续操作需要 `xml_presentation_id``slide_id``revision_id`
6. **删除谨慎**:删除操作不可逆,且至少保留一页幻灯片
7. **编辑已有页面优先块级替换**:修改单个 shape/img 用 `+replace-slide``block_replace` / `block_insert`),不要整页重建;只有需要替换整页结构时才用 `slide.delete` + `slide.create`
8. **`<img src>` 只能用上传到飞书 drive 的 `file_token`,禁止使用 http(s) 外链 URL**:飞书 slides 渲染端不会代理外链图片,外链 src 在 PPT 里通常不显示或显示破图。流程必须是「先把图存到本地 → 用 `slides +media-upload` 上传或 `+create --slides``@./path` 占位符自动上传 → 拿 `file_token` 写进 `<img src>`」。如果用户给了网图链接,先 `curl`/下载到 CWD 内再走上传流程,不要直接把外链 URL 塞进 `src`。**图片最大 20 MB**slides upload API 不支持分片上传)。
1. **用户材料默认作为二创底稿**:用户提供 PDF/PPTX/slides 材料并要求生成、改写、二创、压缩页数或保留材料风格/资产时,必须先导入或回读为 slides默认 `target_xml_presentation_id` 等于导入或已有材料的 `xml_presentation_id`,在该 presentation 内继续创作。“只作为模板/视觉线索”只表示不复制原文案,不表示可以跳过导入或新建脱离材料的 deck
2. **先规划再写 XML**:新建演示文稿或大幅改写页面时,必须先写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`;模板、风格和大纲只能作为规划输入,不能绕过规划层
3. **创建流程**:仅在没有用户提供可导入材料、用户明确要求新建 deck或导入失败/`xml_presentations.get` 无法回读时,才使用 `slides +create` 新建目标 deck页数多、内容不可用、只参考风格、布局复杂或 PDF 是正文资料都不是新建理由
4. **`<slide>` 直接子元素只有 `<style>``<data>``<note>`**:文本和图形必须放在 `<data>`
5. **文本通过 `<content>` 表达**:必须用 `<content><p>...</p></content>`,不能把文字直接写在 shape 内
6. **保存关键 ID**:后续操作需要 `xml_presentation_id``slide_id``revision_id`
7. **删除谨慎**:删除操作不可逆,且至少保留一页幻灯片
8. **编辑已有页面优先块级替换**:修改单个 shape/img 用 `+replace-slide``block_replace` / `block_insert`),不要整页重建;只有需要替换整页结构时才用 `slide.delete` + `slide.create`
9. **`<img src>` 只能用上传到飞书 drive 的 `file_token`,禁止使用 http(s) 外链 URL**:飞书 slides 渲染端不会代理外链图片,外链 src 在 PPT 里通常不显示或显示破图。流程必须是「先把图存到本地 → 用 `slides +media-upload` 上传或 `+create --slides``@./path` 占位符自动上传 → 拿 `file_token` 写进 `<img src>`」。如果用户给了网图链接,先 `curl`/下载到 CWD 内再走上传流程,不要直接把外链 URL 塞进 `src`。**图片最大 20 MB**slides upload API 不支持分片上传)。
> **注意**:如果 md 内容与 `slides_xml_schema_definition.xml` 或 `lark-cli schema slides.<resource>.<method>` 输出不一致,以后两者为准。

View File

@@ -10,11 +10,11 @@
## Core Rules
- 本地素材优先。用户给了文件、目录、截图、PDF、PPTX、文案、数据表、链接或已有 slides 时,先按 Attachment Resolution 解析并盘点用途;禁止忽略附件直接生成大纲或 XML。
- 没有合适本地素材时才考虑联网搜索、内置模板、IconPark 或 XML-native 兜底。联网搜索只用于确实需要外部事实、图片、logo、公开截图或背景补充的场景
- 没有合适本地素材时才考虑联网搜索、内置模板、IconPark 或 XML-native 兜底。用户已提供模板材料时,这些能力只能补缺,不能替代导入后的目标 presentation 或主视觉系统
- 素材进入 plan 前必须分类并写清用途;不要把“有文件”直接等同于“应出现在页面上”。
- 页面不能依赖不可获得素材才能完成。每个 `asset_need` 都必须有 `fallback_if_missing`
- 真实图片进入 slides 前必须走支持的上传路径:`slides +media-upload``+create --slides``@./path` 占位符。禁止把 http(s) 外链直接写进 `<img src>`
- `.pptx` / `.pdf` 被用户称为模板、风格参考、参考 PPT、教案 PPT、品牌手册、研究报告或含有页面截图/图表时,按 Local Material Handling 判断是否导入回读,用作二次创作素材。导入是写操作;如果用户已经明确要求“根据附件制作 PPT”可视为已有意图否则先确认
- `.pptx` / `.pdf` / online slides 参与制作或改写 PPT 时,按 Local Material Handling 判断 `rewrite_source` / `copy_source`;可作为视觉底稿的材料必须导入或回读为 slides
## Attachment Resolution
@@ -34,7 +34,7 @@
- 文档/表格/图片/PPT/PDF 至少要记录 `source``resolved_path``kind``usage``status`
- 如果素材会进入页面,`asset_need.candidate_sources` 必须使用解析后的可用路径,而不是原始不可用的路径文本。
- 如果素材只用于理解或风格参考,也必须在 `material_inventory.inputs` 中出现,避免后续 XML 生成阶段遗忘。
- 如果素材只用于理解或提供视觉线索,也必须在 `material_inventory.inputs` 中出现,避免后续 XML 生成阶段遗忘。
## Material Roles
@@ -42,13 +42,14 @@
| Role | 用途 | 常见来源 | 默认处理 |
|------|------|----------|----------|
| `background_reference` | 补充主题背景、事实、约束、术语、受众信息 | PDF、文档、网页、PRD、报告、会议纪要 | 读取/摘要后影响叙事和页面重点 |
| `style_reference` | 参考 PPT 风格、配色、版式、字体层级、页面流 | PDF、PPTX、已有 slides、内置模板 | 提取设计语言,不默认复制正文 |
| `background_reference` | 补充主题背景、事实、约束、术语、受众信息 | 文档、网页、PRD、报告、会议纪要 | 读取/摘要后影响叙事和页面重点 |
| `visual_asset` | 可直接进入页面的视觉素材 | 图片、截图、logo、图表、论文 figure | 上传后放入计划区域;不合适则重绘或兜底 |
| `copy_source` | 文案、标题、大纲、讲稿、卖点、结论来源 | Markdown、TXT、Docx、用户 prompt、会议纪要 | 改写成低密度 slide 文案 |
| `data_source` | 生成表格、指标卡、图表的数据来源 | CSV、XLSX、表格截图、结构化数据 | 转成 chart/table/数字卡 |
| `brand_asset` | 品牌识别和视觉约束 | logo、VI 色板、品牌手册 | 影响 `theme_style` / `visual_system` |
| `rewrite_source` | 需要在原内容、页序或框架基础上二次创作的稿 | 用户已有 PPTX/PDF/slides、旧版汇报、待美化稿 | 导入/回读后逐页规划保留、精简、新增和重排 |
| `rewrite_source` | 导入后承载二次创作的目标底稿 | 用户已有 PPTX/PDF/slides、背景模板、旧版汇报、待美化稿 | 导入/回读后作为 target presentation规划保留、替换、删除和重排 |
PDF/PPTX/slides 的主角色只能是 `rewrite_source``copy_source`。如需表达背景、视觉或品牌信息,只写进 `usage`,不能改变目标 presentation。
## Source Priority
@@ -63,15 +64,39 @@
## Local Material Handling
- `.pptx`:如果是模板或风格参考,先用 `lark-cli drive +import --type slides` 导入为 online slides再用 `slides xml_presentations.get` 回读 XML提取页面流、配色、背景、字体层级、布局骨架和 motif。先判断模板是否包含需要复用的背景图、装饰图、品牌图片或复杂图片版式如果需要复用优先把导入后的 slides 作为工作底稿做局部编辑,保留原有图片 token如果只需要风格和布局骨架再新建 XML-native 页面。默认不复制模板原文案;如果用户要求“结合模板内容”,再按页角色提取可复用结构
- `.pptx` 作为待改写原稿:当用户说“在此基础上”“调整布局”“美化”“精简”“增加目录”“内容不用改”“不要随便修改内容”“保留框架”“已有一版 PPT”“根据这份 PPT 生成/丰富/修改”时,该 PPTX 不只是 `style_reference`,必须同时作为 `rewrite_source`。导入并回读全文 XML 后,规划时逐页说明原内容哪些保留、哪些精简、哪些新增、哪些重排。用户明确要求“内容不用改”或“不要随便修改内容”时,默认只改布局、视觉层次、图片/图表表达和页间组织,不改事实、数值和主要文案。优先保留导入页上的既有图片资产并做局部编辑;整页结构变化、换模板或导入页块级编辑不可靠时,才按源页重建 XML-native 页面,再替换或删除旧页
- `.pdf`:如果是模板、品牌手册或包含可复用页面视觉,先用 `lark-cli drive +import --type slides` 导入并回读 XML提取视觉系统或页面骨架如果是论文、报告、PRD 或正文资料,先按内容角色读取/摘要。含可复用 figure/logo/品牌色时,优先作为 `visual_asset``brand_asset`,不能只用作普通背景文字
- 已有 online slides直接回读 XML把它作为 `style_reference``rewrite_source`;不要再走导入
- `.pptx` / `.pdf` / online slides 若承担模板、背景模板、旧稿、待美化稿、品牌视觉或页面结构角色,默认是 `rewrite_source`:先导入或回读为 slides`target_xml_presentation_id` 默认等于导入/已有 presentation并在同一个 presentation 内创建、替换、删除或重排页面
- “内容不可用”“只作为背景模板”“不要使用模板文字”“只参考风格”只表示该材料不是 `copy_source`;它仍默认是 `rewrite_source`,用于保留或重绘背景、版式、图片资产和页面结构
- `.pdf` 若只是论文、报告、PRD、教案正文等内容资料可以作为 `copy_source` 读取/摘要;但 `copy_source` 不得替代已有 `rewrite_source`,也不得成为新建 deck 的理由
- 用户明确说“只参考风格”时,不新增单独角色;仍把 PDF/PPTX/slides 作为 `rewrite_source` 导入/回读,只在 `usage` 中说明“不复制模板文案,仅沿用或重绘风格、版式和页面结构”
- 已有 online slides直接回读 XML默认把它作为 `rewrite_source`;不要再走导入。
- `.png` / `.jpg` / `.jpeg` 等图片:判断是可直接展示、需要裁切/缩放、还是只用于理解。进入 XML 前必须上传或使用 `@./path` 占位符。
- `.md` / `.txt` / 文档类内容:作为 `copy_source``background_reference`,提炼为低密度页面文案,不要整段搬进 slide。
- `.docx` / `.doc`:通常是 `copy_source``background_reference`。先读取或转换提取正文、标题层级、表格和内嵌图片线索,再改写为 slide 叙事。用户要求“不要杜撰数据”时,数值和图表只能来自这类源文件或表格源;缺数据则在 plan 中标注缺口。
- `.xlsx` / `.xls` / `.csv`:通常是 `data_source`。先识别工作表、列名、时间范围、指标和关键数值,再规划 `<chart>` / 表格 / 数字卡。用户明确要求精准图表时,必须让图表数据来自表格,不要手工编造。
## PDF Template Pre-slicing
大 PDF 模板用于二次创作时,可以先切出关键模板页生成小 PDF再用 `drive +import --type slides` 导入小 PDF。这样减少导入和回读成本同时仍保留在导入后的 presentation 内二创的主路径。
仅在同时满足这些条件时才切割:
- 任务是制作、改写、二创、压缩页数或替换内容模块,而不是单纯导入 PDF。
- PDF 是 `rewrite_source`,只需要其中的视觉骨架、背景、版式、图片资产或页面结构。
- 已能明确选择关键页,例如封面、目录、章节页、图谱/流程页、表格页、结尾页,通常保留 6-10 页或用户指定页。
禁止切割的场景:
- 用户只要求“导入 PDF 为 slides”“转换格式”“保留完整 PDF”“检查导入效果”。
- 用户要求保留全部页序、全部页面内容或逐页迁移。
- 无法判断关键页,且切割会丢失用户可能需要的视觉结构。
切割后在 `material_inventory.inputs[]` 中记录原 PDF 和压缩 PDF 的关系:
- 原 PDF 仍记录为 `source``usage` 说明只取关键视觉页。
- 压缩 PDF 记录为实际导入对象,`status: "preprocessed"``"imported"`
- 记录 `selected_pages``preprocessed_path`、选择理由,以及后续导入得到的 `imported_xml_presentation_id` / `target_xml_presentation_id`
- 生成新页并回读成功后,再按计划删除或替换导入模板中的旧内容页。
## Image Asset Migration
导入的 PPTX/PDF 页面里可能已有 `<img src="file_token">`、背景图或品牌图。这些图片 token 可以在同一个导入后的 presentation 内复用;只有跨到另一个新建 presentation 时,才不能直接复制旧 XML 里的 `<img src>`
@@ -80,29 +105,27 @@
- `preserve_imported_page`:模板页含需要复用的背景图、装饰图、品牌图或复杂图片版式。优先在导入页上用 `+replace-slide` / `block_insert` / `block_replace` 做局部编辑,保留现有 `<img>` token。
- `rebuild_in_imported_presentation`:需要重做 XML-native 页面,但仍在同一个导入后的 presentation 内创建/替换页面。可以复用该 presentation 内已有图片 token无需下载再上传删除旧页前先确认新页已创建成功。
- `rebuild_new_presentation`:需要另建一个新 presentation。若要复用导入页图片必须先把图片下载到本地再上传到目标演示文稿或在 `+create --slides` 中使用 `@./relative/path` 占位符让 CLI 为新文稿上传并替换 token。
- `mixed`:同一 deck 中部分页面保留导入页图片资产,部分页面重建。每页在 plan 里说明来源页、目标 presentation、是否复用同一 presentation 的图片 token、是否需要重新上传。
首次运行时先判断目标页是否仍在导入后的同一个 presentation 内。只要同一 presentation就可以复用回读 XML 里的图片 token跨 presentation 时才需要下载/重新上传。若不能确认目标 presentation写入 `open_issues`不要静默复制图片 token 到新文稿。
首次运行时先判断目标页是否仍在导入后的同一个 presentation 内。只要同一 presentation就可以复用回读 XML 里的图片 token不要静默复制图片 token 到新文稿。异常新建只能由用户明确要求另建,或导入失败/回读失败触发;若需要复用导入页图片,必须记录下载/重新上传方案
如果选择 `preserve_imported_page``rebuild_in_imported_presentation``mixed`,且导入后的 slides 会作为最终交付物继续编辑,完成后必须把在线文件标题改成用户任务对应的新标题,避免仍保留导入时的模板/原附件名称。标题修改走 `lark-drive``drive files patch`,使用 `new_title` 字段;不要为了改标题重建整份 PPT。
## Secondary Creation From Attachments
## Imported Material As Draft
用户要求“根据附件制作/改写/生成 PPT时,附件不是可选参考,而是主要创作输入。默认执行以下策略
用户提供 PDF/PPTX/slides 材料并要求制作改写 PPT 时,先在 plan 中定两类来源
- 先用文档类附件建立叙事和事实边界:标题层级、关键结论、数据、案例、限制条件
- 再按 Local Material Handling 使用 PPTX/PDF/slides 类附件:作为 `rewrite_source` 时保留并重排原页内容;作为 `style_reference` 时提取页流、配色、版式、字体层级和图形 motif作为内容资料时提取事实、结构和可复用图表
- 再用图片/截图/logo/figure 建立页面视觉重点:可直接用的图片走上传;不适合直接用的图像改绘成 XML-native 图表、流程图或信息图。
- 表格数据优先生成真实 `<chart>`、表格或数字卡;禁止为了好看而杜撰趋势、比例或数值
- 如果附件里有素材但 plan 没有使用,必须在 `material_inventory.inputs[].usage` 说明“不使用”的原因,例如低清晰度、与主题无关、重复、版权不明或数据不可解析。
- `rewrite_source`:导入/回读后的目标视觉底稿,记录 `imported_xml_presentation_id``target_xml_presentation_id``template_asset_strategy``target_title`;默认策略是 `preserve_imported_page``rebuild_in_imported_presentation``mixed`
- `copy_source`:真正提供文案、事实、标题层级、数据或案例的材料
只有用户明确要求新建,或导入失败/`xml_presentations.get` 无法回读时,才允许新建 deck并说明原因和图片资产迁移策略。“页数不超过 N 页”、内容不可用、只参考风格、PDF 是正文资料或布局复杂,都不是新建 deck 的理由。如果附件里有素材但 plan 没有使用,必须在 `material_inventory.inputs[].usage` 说明原因
## Search Policy
联网搜索不是默认动作。只有出现以下情况才搜索:
- 用户要求查找公开事实、行业背景、竞品、logo、截图、图片或最新资料。
- plan 中存在关键视觉缺口,本地素材和内置模板都不能满足
- plan 中存在关键视觉缺口,且用户模板材料无法满足;搜索结果只能补缺,不能替代用户模板的主视觉系统
- 用户给出的主题需要真实世界背景才能避免空泛表达。
搜索结果使用规则:
@@ -124,9 +147,15 @@ Deck 级 `material_inventory` 片段示例:
{
"source": "./template.pdf",
"resolved_path": "./template.pdf",
"kind": "style_reference",
"usage": "Import as slides and extract palette, page flow, typography hierarchy, and motif.",
"status": "available"
"kind": "rewrite_source",
"usage": "Import key visual pages as slides and use as the target visual draft; do not copy placeholder text.",
"preprocessed_path": "./template_key_pages.pdf",
"selected_pages": [1, 2, 5, 8, 12, 20],
"status": "imported",
"imported_xml_presentation_id": "SOURCE_PRESENTATION_ID",
"target_xml_presentation_id": "SOURCE_PRESENTATION_ID",
"template_asset_strategy": "rebuild_in_imported_presentation",
"target_title": "New deck title"
},
{
"source": "./notes.md",
@@ -138,8 +167,8 @@ Deck 级 `material_inventory` 片段示例:
{
"source": "./draft.pptx",
"resolved_path": "./draft.pptx",
"kind": ["style_reference", "rewrite_source"],
"usage": "Import and read back XML; preserve source claims and restyle each page.",
"kind": "rewrite_source",
"usage": "Import and read back XML; preserve visual structure and restyle each page.",
"status": "available"
}
],
@@ -213,7 +242,7 @@ Match source type to slide role. Detailed geometry belongs in `visual-planning.m
- `comparison` layout often works with `icon`, `chart`, or `infographic`.
- `timeline` layout often works with `icon`, `chart`, or shape-based milestone markers.
- `big-number` layout often works with `chart`, `data_source`, or `infographic`.
- `image-left-text-right` and `image-right-text-left` can use `screenshot`, `paper_figure`, `logo`, `infographic`, or a style reference layout.
- `image-left-text-right` and `image-right-text-left` can use `screenshot`, `paper_figure`, `logo`, `infographic`, or a layout derived from imported material.
`suggested_query` is a future lookup hint. Execute the search only when the search policy says remote material is needed and local sources are insufficient.
@@ -235,9 +264,10 @@ Weak fallbacks to avoid:
When generating XML:
1. Apply `material_inventory` first: local style references, copy sources, data sources, and visual assets decide what each page can use.
2. If a real visual asset exists and the workflow supports it, place it in the planned visual region.
3. If no asset exists, immediately render `fallback_if_missing` with XML-native shapes, text, lines, arrows, tables, whiteboard diagrams, or chart-like elements.
4. Size the fallback to satisfy `visual_focus`; it should be a real page element, not a tiny decoration.
5. Keep text-density limits. Do not compensate for missing assets by adding long bullet text.
6. After creation, fetch the presentation and verify asset pages are not blank and that each planned fallback is visible when no real asset was used.
1. Apply `material_inventory` first: imported target material, copy sources, data sources, and visual assets decide what each page can use.
2. If `target_xml_presentation_id` points to imported user material, create, replace, reorder, or delete pages in that presentation; do not call `slides +create` for a detached new deck unless the plan records an explicit user request to create a new deck or an import/readback failure.
3. If a real visual asset exists and the workflow supports it, place it in the planned visual region.
4. If no asset exists, immediately render `fallback_if_missing` with XML-native shapes, text, lines, arrows, tables, whiteboard diagrams, or chart-like elements.
5. Size the fallback to satisfy `visual_focus`; it should be a real page element, not a tiny decoration.
6. Keep text-density limits. Do not compensate for missing assets by adding long bullet text.
7. After creation, fetch the presentation and verify asset pages are not blank and that each planned fallback is visible when no real asset was used.

View File

@@ -15,11 +15,13 @@
7. 按规划文件、视觉规划和素材规划规则逐页生成 XML`layout_type``visual_focus``text_density` 转成具体页面几何和文本量约束,并把缺失素材转成可执行兜底视觉。
8. 创建或大幅改写后,按 `validation-checklist.md` 做显式验证;本文件只要求验证记录能说明规划到 XML 的对应关系。
素材和模板不能代替规划文件素材处理层只能影响背景理解、`theme_style``visual_system`、页面流、文案输入、布局选择和局部视觉骨架;最终仍必须有 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`
素材和模板不能代替规划文件,但素材处理层可以决定材料角色、目标 presentation、改写方式和资产复用策略;最终仍必须有 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`
如果用户提供 `.pptx``.pdf`,并称其为 PPT 模板、幻灯片模板、版式/风格参考,先按 `lark-drive``drive +import --type slides` 导入为在线幻灯片,并把回读 XML 作为 `style_reference`。模板/风格参考不等于一定重建新页:如果模板含需要复用的背景图、装饰图、品牌图片或复杂图片版式,优先把导入后的在线幻灯片作为工作底稿,保留图片令牌并局部编辑;如果只需要风格和布局骨架,再新建 XML 原生页面。导入是写操作;用户已经明确要求“根据该附件生成/改写 PPT”时可视为已有意图否则先确认
可导入为 slides 的用户材料(`.pptx``.pdf` 或已有 online slides参与制作/改写 PPT 时,默认是 `rewrite_source`:先导入或回读为 slides`target_xml_presentation_id` 默认等于导入/已有 presentation并在该 presentation 内继续创作
如果用户提供 `.pptx`,并要求“在此基础上修改 / 调整布局 / 美化 / 精简 / 增加目录 / 内容不用改 / 不要随便修改内容 / 保留框架 / 已有一版 PPT”该文件是 `rewrite_source`,不是普通模板。导入回读 XML 后,`slide_plan.json` 必须逐页记录原稿内容的保留、精简、新增和重排策略;优先保留导入页上的既有图片资产并局部编辑,整页结构变化、换模板或导入页块级编辑不可靠时,才按源页重建 XML 原生页面,再替换或删除旧页。不得直接新生成一套脱离原稿的页面
“内容不可用”“只作为背景模板”“不要使用模板文字”“只参考风格”只排除 `copy_source`,不排除 `rewrite_source`。这类材料仍要导入/回读,并在导入后的 presentation 内替换、插入或删除页面内容。只有用户明确要求另建,或导入失败/`xml_presentations.get` 无法回读时,才新建演示文稿,并在 plan 中写明原因
如果大 PDF 模板只用于二次创作的视觉底稿,可先按 `asset-planning.md` 选择关键模板页生成压缩版 PDF再导入这个小 PDF。纯导入、归档、格式转换或用户要求保留完整 PDF 页序的任务,不做切割。
不要把附件路径只当作提示词文本。像 `附件文件路径path/to/report.docx` 这样的路径必须解析到真实文件;相对路径按当前工作目录和用户明确给出的素材根目录解析,不能硬编码某个固定附件目录。
@@ -70,9 +72,12 @@
{
"source": "./reference.pdf",
"resolved_path": "./reference.pdf",
"kind": "style_reference",
"usage": "导入为在线幻灯片后,提取页面流、配色、字体层级和可复用视觉母题。",
"status": "available"
"kind": "rewrite_source",
"usage": "导入为在线幻灯片后,在导入 presentation 内二次创作。",
"status": "imported",
"imported_xml_presentation_id": "SOURCE_PRESENTATION_ID",
"target_xml_presentation_id": "SOURCE_PRESENTATION_ID",
"template_asset_strategy": "rebuild_in_imported_presentation"
}
],
"missing": [
@@ -207,12 +212,11 @@
本地素材优先于远程搜索。常见素材角色:
- `background_reference`:用于理解主题、事实、受众或约束的文件或链接。
- `style_reference`:用于配色、字体、布局、母题和页面流的 PDF、PPTX、在线幻灯片或模板。
- `background_reference`:用于理解主题、事实、受众或约束的非模板文档或链接。
- `visual_asset`:可能出现在页面中的图片、截图、标志、图标、图表、示意图或论文图。
- `copy_source`作为内容输入的正文、提纲、笔记、PRD、报告或转写稿。
- `data_source`用于图表或表格的数据表、CSV/XLSX、指标或结构化数值。
- `rewrite_source`需要保留、优化、精简、扩展或重组的已有 PPT/PDF/在线幻灯片,不应只当作宽泛风格参考
- `rewrite_source`导入后承载二次创作的目标底稿,可提供背景、版式、图片资产和页面结构;即使其文案不可用,也不应只当作宽泛视觉线索
规划页面前,先解析所有附件路径,并写入 `material_inventory.inputs`。每个可用本地输入应包含:
@@ -223,13 +227,13 @@
- `status``available``imported``uploaded``read``skipped``missing`
- `notes`:可选映射细节,例如“用户提供的相对路径已按指定素材目录解析”。
如果附件是模板/风格演示文稿或 PDF,并已导入为在线幻灯片,在已知时还要记录 `imported_xml_presentation_id``import_ticket`,然后把导入 XML 作为 `style_reference`
如果附件是可导入为 slides 的用户材料,并已导入为在线幻灯片,在已知时记录 `imported_xml_presentation_id``import_ticket`。按 `asset-planning.md` 判断角色;默认把可作为视觉底稿的导入 XML 作为 `rewrite_source` 使用,并记录 `target_xml_presentation_id`
对导入的模板/风格演示文稿,还要按 `asset-planning.md` 记录 `template_asset_strategy``preserve_imported_page``rebuild_in_imported_presentation``rebuild_new_presentation``mixed`。在同一个已导入演示文稿内创建或替换页面时,可以复用导入页的图片令牌;不要把 `<img src>` 令牌直接复制到另一个新演示文稿,除非已经把图片下载并重新上传到目标演示文稿。如果导入的在线幻灯片文件会成为编辑后的最终交付物,记录 `target_title`,并在编辑完成后重命名在线文件,避免仍保留源模板或附件标题。
对导入的用户材料,还要按 `asset-planning.md` 记录 `template_asset_strategy``preserve_imported_page``rebuild_in_imported_presentation``mixed`。在同一个已导入演示文稿内创建或替换页面时,可以复用导入页的图片令牌;不要把 `<img src>` 令牌直接复制到另一个新演示文稿。如果导入的在线幻灯片文件会成为编辑后的最终交付物,记录 `target_title`,并在编辑完成后重命名在线文件,避免仍保留源材料或附件标题。异常新建只能由用户明确要求另建,或导入失败/回读失败触发,并必须记录原因和图片资产迁移方式。
如果附件是 `rewrite_source`,每个受影响页面计划都应说明来源页或来源章节,以及预期操作:`preserve``condense``expand``reorder``restyle``replace_visual_only`。对于“内容不用改”类请求,默认使用 `replace_visual_only``restyle`,并保持原始论断、数字、名称和页面意图不变。
如果附件是 `rewrite_source`,每个受影响页面计划都应说明来源页或来源章节,以及预期操作:`preserve``condense``expand``reorder``restyle``replace_visual_only``delete`。对于“内容不用改”类请求,默认使用 `replace_visual_only``restyle`,并保持原始论断、数字、名称和页面意图不变。对于“材料页数多于目标页数”的任务,先规划要保留或改写的来源页,再删除无关页;不要因为需要压缩页数就另建脱离材料的新 deck。
如果本地 `.pdf` / `.pptx` 是风格参考,使用 `lark-drive` 将其导入为在线幻灯片,再用 `xml_presentations.get` 读取 XML 后规划。这是写操作,需要用户意图。默认只提取设计语言;除非用户要求,否则不要复制源文本
用户提供的 PDF/PPTX/slides 即使只参考风格,也不能脱离导入后的 presentation 新建;除非用户明确要求另建,或导入失败/回读失败
单个计划素材使用对象,多个真实需求使用数组;没有有用素材时使用 `asset_type: "none"`。每个计划素材必须包含:
@@ -251,7 +255,7 @@
写每页页面 XML 前,把规划字段映射成具体决策:
- `key_message` 决定标题、主导论断或主要结论。
- `material_inventory` 决定哪些本地素材、导入风格参考、远程搜索结果或兜底方案允许影响页面。
- `material_inventory` 决定哪些本地素材、导入材料、文案来源、远程搜索结果或兜底方案允许影响页面。
- `layout_type` 决定坐标结构和元素类型。具体布局规则见 `visual-planning.md`
- `visual_focus` 决定最大视觉区域或被强调对象。
- `text_density` 限制可见文字量。

View File

@@ -9,12 +9,15 @@
1. 记录创建或编辑返回的 `xml_presentation_id`,以及已知的 `slide_id` / `revision_id`
2.`xml_presentations.get` 回读全文 XML。
3. 检查实际页数是否符合计划或用户要求。
4. 检查每页 `<data>` 是否有预期主要元素
5. 检查没有明显空白页、破损页、缺失标题或缺失主视觉
6. 检查页面不是全部退化为标题加 bullet list
7. 检查视觉层级:标题、主视觉、支撑信息三者可区分
8. 检查明显溢出和布局风险:重叠、越界、底部拥挤、长文本框
9. 在最终回复中给出简短验证记录
4. 如果计划基于导入 PDF/PPTX/slides 材料二次创作,检查最终 `xml_presentation_id` 是否等于 `target_xml_presentation_id`;如果另建了 presentation必须在验证记录中说明用户明确要求另建或导入/回读失败原因
5. 如果用户材料只用于模板风格或视觉线索,检查它是否仍作为 `rewrite_source` 导入/回读,并确认最终没有交付脱离该材料的新 deck
6. 检查每页 `<data>` 内是否有预期主要元素
7. 检查没有明显空白页、破损页、缺失标题或缺失主视觉
8. 检查页面不是全部退化为标题加 bullet list
9. 检查视觉层级:标题、主视觉、支撑信息三者可区分
10. 检查没有遗留模板占位文案、示例公司名、示例日期或与用户主题无关的源模板文字。
11. 检查明显溢出和布局风险:重叠、越界、底部拥挤、长文本框。
12. 在最终回复中给出简短验证记录。
回读命令:
@@ -65,6 +68,8 @@ python3 skills/lark-slides/scripts/xml_text_overlap_lint.py --input <presentatio
- `visual_focus` 是页面中最醒目或最大的信息区域之一。
- `text_density` 影响了文本量,没有用长 bullet 框替代规划。
- `asset_need` 有真实素材时已放入正确区域;没有真实素材时,`fallback_if_missing` 已用 XML 形状、线条、标签、表格或图表兜底。
- `template_asset_strategy``preserve_imported_page``rebuild_in_imported_presentation``mixed` 时,不能交付一份脱离导入材料的新 deck。
- 如果计划声明保留材料背景、装饰图、品牌图或复杂图片版式,回读 XML 中应仍存在对应的 `<img src>`、背景图片或等效重绘结构;如果未保留,验证记录必须说明原因。
如果用户指定了关键页例如“架构解释”“Self-Attention 机制解释”“对比或演进视角”“总结页”,最终验证记录必须逐项说明这些页已存在。
@@ -106,9 +111,13 @@ python3 skills/lark-slides/scripts/xml_text_overlap_lint.py --input <presentatio
```text
验证记录:
- 回读:已执行 xml_presentations.get实际页数 N / 预期 N。
- 导入底稿:如使用导入材料二次创作,最终 presentation 与 target_xml_presentation_id 一致;如不一致,已说明用户明确要求另建或导入/回读失败原因。
- 视觉底稿:如用户材料只提供模板风格或视觉线索,已确认它仍作为 rewrite_source 导入/回读并承载最终二创。
- 内容来源:如模板材料内容不可用,已确认未复制其占位文案;正文来自计划中的 copy_source 或用户输入。
- 截图:截图能力可用时,已用截图辅助判断最终效果。
- 关键页:架构解释 / Self-Attention / 对比或演进 / 总结页均存在。
- 结构:检查了主要 shape/img/table/chart 元素,无明显空白页或破损页。
- 模板清理:未发现模板占位文案、示例公司名、示例日期或无关模板文字。
- 布局:检查了标题层级、主视觉、重叠/越界/文本溢出风险。
```