Files
Starlight_Lancher/.agents/skills/lark-doc/references/lark-doc-whiteboard.md

8.9 KiB
Raw Blame History

lark-doc 画板处理指南

前置条件: 先阅读 ../../lark-shared/SKILL.md 了解认证、全局参数和安全规则。

两个 Skill 的职责边界

Skill 核心职责 约束
lark-doc 识别画板机会、使用 Mermaid/SVG 创建图表、调度 SubAgent、插入简单 SVG 画板或复杂空白画板 主 Agent 不直接创作画板内容;
lark-whiteboard 查询/导出已有画板复杂图表生成Mermaid/DSL/SVG 路由、场景选型、渲染验证);写入已有/空白画板 仅特别复杂的图表或已有画板更新时由独立 SubAgent 读取

画板适用规则

写文档时,核心流程、系统架构、方案对比、风险链路、里程碑、指标趋势、因果归因、组织关系、能力分层等内容,如果图示能明显降低理解成本,可以规划为画板;结构简单或文字更清楚的内容不必强行画板化。

同一篇文档可以有多个画板。确有多个独立图示点时,可拆成多个聚焦画板,而不是把所有信息塞进一张大图。

文档与画板协同流程

步骤 1识别画板机会

场景 入口
文档中需要思维导图、时序图、类图、饼图、甘特图 步骤 2A:使用 mermaid 插入图表
文档中需要插入其他图表/自定义图形 步骤 2B: 使用 SVG 插入图表
已有画板需要更新内容 docs +fetch 获取 board_token,跳至步骤 3B
只查看 / 下载已有画板 切换至 lark-whiteboard,不走本流程

Important

⚠️ 分别对每个图表进行决策

如果有多个位置需要插入图表,你需要根据每个图表的内容分别决定采用步骤 2A 还是 2B 中的方式插入这个图表。在需要插入思维导图、时序图、类图、饼图、甘特图的时候可以插入 mermaid 块,在需要插入其他类型图表时启动 SubAgent 插入 SVG。

建议优先使用 SVG 插入图表,除非其属于思维导图、时序图、类图、饼图、甘特图这类可以直接使用 mermaid 语法描述,且不适宜用 SVG 绘制的图表

步骤 2A: 使用 mermaid 插入图表


<whiteboard type="mermaid">
    mermaid 代码...
</whiteboard>

如果 Mermaid 已在本地文件中,可写成 <whiteboard type="mermaid" path="@diagram.mmd"></whiteboard>CLI 会在写入前读取文件并展开为内联内容。

步骤 2B: SubAgent 使用 SVG 插入图表

主 Agent 启动 SubAgent让它用 docs +create / docs +update 插入:


<whiteboard type="svg">
    <svg...>...
    </svg>
</whiteboard>

如果 SVG 已在本地文件中,可写成 <whiteboard type="svg" path="@diagram.svg"></whiteboard>PlantUML 文件同理使用 <whiteboard type="plantuml" path="@sequence.puml"></whiteboard>

Sub Agent 需要携带以下的最小上下文,以及后续的 [SVG 设计 Workflow] 章节指南:

  • doc token、插入位置标题 / block_id / command
  • 图表目标、受众、源段落或数据
  • 要求读取 lark-doc-xml.md;不需要读取 lark-whiteboard
  • SVG 必须完整自包含:包含 <svg> 根节点和 viewBox,不引用外部图片、脚本、远程资源

画板 SVG 设计指南

使用 SVG 插入画板时,最终交付是画板跨越重排渲染的节点(你写 SVG → 画板解析) 核心心智纠正 (重要)

  • 大多数 AI 如果只考虑“绝对不报错/完美映射”, 最终给出的都是全篇纯白底色加单层 <rect> 的方正卡片网格, 极其死板单调, * 这将被视为不及格!*
  • SVG 给你了完全的设计自由, 请大胆使用你脑内的图标路径 (<path>), 连接指引 (流畅的 <path>), 各种环境氛围点缀, 大胆一点, 充分信任你的品味, 发挥出你的顶级艺术创造力!
SVG 设计 Workflow
1. 想清楚要画什么
  • 核心信息是什么? 能做到一图胜千言, 绝对不要只生成平平无奇的文字表格, 要有设计感
  • 内容充实度:如果用户描述稀疏简略, 利用你的领域知识扩展, 保证信息维度和内容充实, 但不要过度堆砌, 淹没重点
  • 视觉层级与隐喻:这个没有固定的形式, 你自由判断, 比如: 给重要的节点加光环, 加高亮背景;给对比项设计天平或对称结构
2. 写 SVG

Important

布局, 配色, 信息密度, 装饰物——全部由你判断, 打破单调的 <rect> 牢笼, 严禁通篇用矩形和文字应付用户 操作边界约束:

  • 语言跟随用户:图表文字的语言与用户 prompt 保持一致, 技术术语用行业里通用的写法, 不机械翻译
  • 文字用 <text>(不是 <path>), 容器宽度留够——画板按 CJK ≈ 1em / Latin ≈ 0.6em 重排
  • 连线使用正交折线替代斜直线(<polyline> 带水平/垂直折点)视觉效果更好
  • 可自由使用 translate, rotate, scale但请尽量避免使用 skewX / skewY / matrix(...) 发生空间级扭曲
画板怎么处理 SVG

画板的 svg-parser 把可识别元素转成可编辑节点, 其余降级为内嵌图片(渲染没问题, 虽然不可编辑, 但是可以正常显示);但非阴影用途的 <filter> / <pattern> / <clipPath> / <mask> 等装饰特性画板不支持(见下方⚠️ 不需要所有元素都可编辑, 但必须避免使用不支持的装饰特性, 且要兼顾可编辑和美观漂亮

可识别的元素

  • 形状:<rect> / <circle> / <ellipse> / <polygon>
  • 连线:<line> / <polyline> / <path>(自动识别为直线 / 折线 / 曲线)
  • 文本:<text> / <tspan> 画板硬编码 Noto Sans SC 文字必须用 <text>
  • 分组:<g> / <a> / <use> 引用 <symbol>
  • 变换:translate / rotate / scale 正常;skewX / skewY / matrix(...) 降级
  • 阴影:<filter> 里放 <feDropShadow> 或标准 drop/inner primitive 链 (<feGaussianBlur in="SourceAlpha"> + <feOffset> + <feFlood> + <feComposite> + <feMerge>), 会被识别成节点阴影, drop 至多 1 个, inner 至多 1 个; 其余 filter 效果不识别
  • 渐变:<linearGradient> / <radialGradient><defs> 中定义, 通过 fill="url(#id)" 引用 (载体限 <rect> / <circle> / <ellipse> / <polygon> / <path>), 需要至少 2 个 <stop>, gradientUnits 只支持默认的 objectBoundingBox (不写即可)

Important

⚠️ 不支持的装饰特性

  • <pattern> / <clipPath> / <mask> / 非阴影用途的 <filter> (blur / hue-rotate / 复合合成 / flood-color=url(...) / 多个 <feDropShadow> 等) → 画板不支持,请避免使用,否则会导致画板渲染问题
  • 渐变边界:gradientUnits="userSpaceOnUse" / spreadMethod="reflect|repeat" / stops 少于 2 个 / 复杂 gradientTransform 会变成不可编辑图片, 视觉正确但失去可编辑性, 若无必要请沿用默认 objectBoundingBox
3.插入后审查

插入画板后,可以从返回值使用 lark-cli 指令,将画板内容导出为 png 图片。若是对设计不满意,可以修改后,删除原来的画板再重新插入,或是调用 ../../lark-whiteboard/SKILL.md 编辑。

lark-cli whiteboard +export \
  --whiteboard-token "wbcnxxxxxxxx" \
  --output-type preview \
  --output ./preview.png

步骤 3B编辑已有画板 — 启动 lark-whiteboard SubAgent

复杂图和已有画板更新必须启动 SubAgent。主 Agent 只传最小上下文,不直接执行 lark-whiteboard 的渲染和写入流程。

复杂图 SubAgent 的最小上下文:

  • board_token
  • 图表目标、推荐画板类型、受众
  • 与图表直接相关的源段落或数据
  • 要求读取 ../../lark-whiteboard/SKILL.md,按其完整流程写入该 board_token

多个画板互不依赖时,可并行启动多个 SubAgent每个 SubAgent 只负责一个画板或一个 SVG 插入点,不要互相复用上下文。

步骤 4完成校验

  • Mermaid: 确认插入的是 <whiteboard type="mermaid">,且内容 mermaid 语法完整
  • SVG: 确认插入的是 <whiteboard type="svg">,且内容是完整 <svg ...>...</svg>
  • 不保留空白占位画板;复杂路径只有空白画板而无内容视为任务未完成


关联参考