name: page-builder description: "PPT pipeline 逐页生成器 — 接收 slide-architect 的 Storyboard 单页规格和 decision brief 摘要,按 PageType 专属 prompt 写出 SlideSpec JSON 片段。12 个 PageType 各一份 prompt,统一嵌入 anti-ai-tone 约束。"
page-builder
本 skill 把 storyboard.json 里每一页的"PageType + 单页意图 + claim + evidence_refs + density"翻译成最终 SlideSpec JSON。12 个 PageType 各有独立 prompt(见 prompts/),共享 context/anti-ai-tone-rules.md 的硬禁用词表和评分规则。
输入
单页规格(slide-architect 产出 $MIRISE_WORKSPACE/.artifacts/ppt/{docId}/storyboard.json 里的一条,附带 decision brief summary 与 evidence ledger):
{
"page": 2,
"page_type": "Dashboard",
"intent": "show the KPI proof layer",
"audience_question": "What evidence supports the claim?",
"takeaway": "Q4 KPI proves the offer works",
"claim": "Revenue momentum is real",
"support_points": [
"Revenue up 18%",
"Lead velocity stable"
],
"evidence_refs": [
"q4-sales",
"crm-pipeline"
],
"density": "standard",
"decision_brief_summary": {
"main_takeaway": "Momentum is real"
},
"evidence_sources": [
{ "id": "q4-sales", "tier": "✅", "url": "..." }
]
}
Mode 1:SlideSpec 片段生成
流程
- 根据
page_type载入对应 prompt(prompts/<PageType>.md)。 - 把
context/anti-ai-tone-rules.md作为 Handlebars partial 嵌入 system prompt({{> ../../context/anti-ai-tone-rules.md }})。 - 按 prompt 的 slot schema 填充文案,引用
evidence_sources时按 5 级 ledger 打 tag(✅🔶🧮📌❓)。 - 返回 SlideSpec JSON 片段,落地到
$MIRISE_WORKSPACE/.artifacts/ppt/{docId}/slides/{page:02d}.json。 - 先调用
ppt-pipeline:validate-slide(脚本scripts/validate-slide.ts)对片段做校验:内部先跑validateSlide()通用结构校验,再跑validateSlideForDocType()读取doc-types/{doc_type}/page-layouts.yaml做 doc-type-aware budget 校验。失败则 reject 并触发单页重写(同一 page 重试最多 2 次;仍失败则升级slide-architect重规划该页——例如自动拆页或改 PageType)。
输出(SlideSpec 片段示例)
{
"page": 2,
"page_type": "Dashboard",
"css_class": "slide--dashboard",
"content": {
"title": "Q4 KPI",
"metrics": [
{
"label": "营收",
"value": "AED 3.2M",
"evidence": "✅ [evidence:q4-sales]"
}
]
}
}
合并
全部 12 页生成完成后,由 pipeline-check 下游步骤合并成完整 SlideSpec 写回 $MIRISE_WORKSPACE/.artifacts/ppt/{docId}/slides.json 和 Notion body(通过 workflows/_shared/notion-body-sync.md)。
12 个 PageType prompt 清单(位于 prompts/)
| 文件 | PageType | 对应 CSS |
|---|---|---|
| Cover.md | Cover | .slide--cover |
| Dashboard.md | Dashboard | .slide--dashboard |
| Timeline.md | Timeline | .slide--timeline |
| TOC.md | TOC | .slide--toc |
| ChapterCover.md | ChapterCover | .slide--chapter |
| BulletGrid.md | BulletGrid | .slide--bullet-grid |
| ComparisonTable.md | ComparisonTable | .slide--comparison-table |
| StructureTable.md | StructureTable | .slide--structure-table |
| ProcessFlow.md | ProcessFlow | .slide--process-flow |
| Callout.md | Callout | .slide--callout |
| FeeTable.md | FeeTable | .slide--fee-table |
| ClosingCover.md | ClosingCover | .slide--closing |
每份 prompt 的结构:
## 适用场景— 何时用该 PageType。## 槽位 schema— 必填字段 + 可选字段 + 类型。## 写作规则— PageType 专属的长度/句式/数据要求。## Anti-AI-tone 约束— 内嵌context/anti-ai-tone-rules.md核心规则(硬禁用词 +ai_tone_score ≥ 85通过,< 60强制 Revising,见 plan §1368)。## 输出 JSON 模板— 该 PageType 的 SlideSpec 片段模板。
契约
- 不允许跨页引用;每 prompt 只消费输入里显式传入的
storyboard/decision brief summary/evidence_sources。 - 禁用词命中立即重写,不进入 QA gate(详见
context/anti-ai-tone-rules.md)。 - SlideSpec 片段的
css_class必须来自config/page-types.yaml,不得自造。 page-builder不允许直接回读 Brief,也不允许直接消费原始 DeckPlan slide;结构约束来自storyboard.json的 page/page_type parity。- Dashboard / Callout / ChapterCover 的最小内容预算以
page-layouts.yaml为准:reportDashboard 可到 5 metrics,marketingDashboard 上限 4;空 Callout、空 ChapterCover 必须在 validator 层被拦下。