Install
openclaw skills install @zslzxy/render-business-graphicsopenclaw skills install @zslzxy/render-business-graphics本 skill 负责把用户的业务内容转换为合法的 V2 渲染请求,并提交到图形服务生成 PNG 或 SVG。它适用于投标文件、技术方案、项目管理、汇报材料、系统设计和业务说明等场景。它不是简单的接口封装,而是一套分层的领域导航和数据建模流程:
domain/:先理解业务实体和实体关系,再决定图形家族。references/selection-and-themes.md:负责类型路由和色系选择。references/graphics/:逐类说明稳定图形 ID、适用场景、数据结构和限制。scripts/:查询线上能力、色系、参考图、单图契约,并上传最终 JSON 渲染。服务只负责校验、布局、配色、分页和栅格化,不理解自然语言。Agent 负责语义理解和数据建模,服务负责确定性渲染。
/v2/contracts 和 /v2/catalog 是最终事实,优先级高于本 skill 中的示例和静态说明。theme。省略会使用服务默认的 tech-blue,不能写成 theme: null 或空字符串。detail、note 或 description。单个节点不要塞入完整句群。默认服务地址是 https://chart.cqccjy.cn,也可以用 CHART_RENDER_BASE_URL 或 --base-url 覆盖。需要鉴权时使用 CHART_RENDER_API_KEY 或 --api-key。
python3 scripts/get_capabilities.py
python3 scripts/get_themes.py
如果服务查询失败,先报告连接、鉴权或就绪状态,不要切换到未记录的接口。
先读 domain/README.md,再读对应领域文件。先判断“数据之间是什么关系”,不要先凭视觉偏好选图:
| 业务关系 | 图形家族 |
|---|---|
| 分类、数值、系列、评分 | chart.* |
| 父子职责、组织归属 | organization |
| 有向步骤、判断、回退 | flow.* |
| 有界的概念结构 | smartart.* |
| 工期、前置任务、里程碑 | schedule.* |
| 参与方之间的调用与返回 | sequence |
| 日期、阶段、历史里程碑 | timeline.* |
如果用户给的是多个互相独立的关系,生成多张图,不要把所有内容硬塞进一张复杂图。
图形类型不明确,或同一类有多个版式时,先查线上目录:
python3 scripts/get_reference_images.py --output-dir ./graphic-references
python3 scripts/get_reference_images.py --kind smartart --output-dir ./graphic-references/smartart
依据返回的稳定 id、中文名称、kind、variant、预览尺寸和本地 SVG 参考图选择版式。完整索引见 references/graphics/index.md。
选定稳定 ID 后,必须获取该 ID 的精确 JSON Schema 和示例:
python3 scripts/get_graphic_contract.py timeline.milestone \
--preview-output ./graphic-references/timeline.milestone.svg \
--output ./graphic-contract.json
生成请求前必须阅读:
parameters.required:必填字段;parameters.properties:允许字段;parameters.additionalProperties:是否拒绝未知字段;parameters.oneOf、parameters.$defs:真实的数组、对象和递归结构;exampleRequest:可复用的结构骨架,但必须替换全部示例业务内容。不要只看大类契约。单个目录项可能进一步限定 variant、项目数量、页面方向、比较结构或字段要求。
选择规则见 references/selection-and-themes.md。如果部署版本可能不同,必须调用 get_themes.py 获取实际支持的色系。
theme,不要自作主张传入一个静态默认值。page,让服务自动选择 A4 方向。严格按照单图 parameters 生成请求,不增加未知字段。常用实体字段如下:
label、value、多系列时增加 series;name、可选 role、headcount、children;ref、text,连线 from、to;title,可选 note、icon;ref、name、duration,可选 predecessors;ref/name,消息 from/to/message;ref、date、title,可选 description/position/icon。技术标识只在契约需要时生成,并保持短且稳定。例如流程图和排期图使用 A、B、review、service 这类 ref;不要生成坐标、像素宽高、关键路径样式或内部节点 ID。
在渲染前运行:
python3 scripts/lint_render_request.py request.json
该脚本会区分接口硬上限和“建议更短”的 warning。图形用于文档、汇报或独立图片时,都要求文字短、结构清楚;如果 warning 很多,优先压缩标签,而不是直接 --strict 忽略问题。建议目标:
| 文字位置 | 建议长度 |
|---|---|
| 图表分类标签 | 14 字以内 |
| 流程节点标题 | 14 字以内 |
| 组织节点名称 | 12 字以内 |
| SmartArt 标题 | 14 字以内 |
| 排期任务名称 | 16 字以内 |
| 时序消息 | 24 字以内 |
| 时间轴事件标题 | 14 字以内 |
压缩时保留业务含义,使用“动词 + 对象”或“名词短语”。例如“完成项目实施方案的内部合规性检查工作”改为“内部合规审查”,详细说明放到 detail 或 description。不能压缩的关键原文不要擅自改写,应拆图或向用户确认。
python3 scripts/render_graphic.py request.json \
--format png \
--output output/graphic.png \
--metadata-output output/graphic.metadata.json
rasterScale: 1 只用于快速预览;普通 PNG 省略该字段,服务默认 2 倍;高清打印使用 3。渲染完成后检查图片和 metadata。写入 Word 时使用 X-Display-Width-Mm,不要把 PNG 像素宽度当成毫米。
完整 ID 索引见 references/graphics/index.md。各类详细说明:
parameters,删除或修正错误字段。page 重试自动方向,再考虑横版或拆分图形;不要静默缩小、截断或删除内容。| 脚本 | 作用 |
|---|---|
get_capabilities.py | 获取当前 kind、variant、色系、页面、默认值,或完整 V2 契约 |
get_themes.py | 获取 /v1/themes 的实际色系 ID |
get_reference_images.py | 获取图形目录并保存参考 SVG |
get_graphic_contract.py | 获取单个图形 ID 的精确 Schema、示例和参考图 |
lint_render_request.py | 检查请求基本结构和文字长度 |
render_graphic.py | POST 到 /v2/render/png 或 /v2/render/svg |
脚本只使用 Python 标准库,共享 _client.py,不会在上传前偷偷修改请求 JSON。