关于 visualise
visualise 是面向聊天内容创作的可视化技能,可生成在对话中内嵌呈现的 SVG 图表与 HTML 交互组件。它针对流式输出和沙箱 iframe 设定了明确的结构与样式约束。
主要功能
- 01生成内嵌 SVG 图表
- 02创建 HTML 交互组件
- 03支持内容流式呈现
- 04通过 sendPrompt 触发对话
- 05提供不同视觉类型的选择规则
适用场景
- 01在聊天中展示流程或结构图
- 02用图表呈现数据
- 03创建带控件的交互式说明
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bentossell/ visualise --skill visualise安装后在 Claude Code 中输入/visualise确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdreferences/client-implementation.mddesign-system.mdcharts.mdcomponents.mddiagrams.md详细介绍
Inline Visualizer
直接在聊天对话中呈现丰富的视觉内容——SVG 图表、HTML 交互式小组件、图表。输出会逐个 token 流式传输到沙盒 iframe 中。最终效果就像对话的自然延伸,而不是附件。
工作原理
生成原始 HTML 或 SVG 片段。客户端会在沙盒 iframe 中呈现这些内容,并注入设计系统的 CSS 变量。不要使用 <html>、<head> 或 <body> 标签——只需内容片段。
两种输出模式:
- SVG 模式:输出以
<svg>开头。客户端会自动将其包装在卡片中。最适合静态图表。 - HTML 模式:原始 HTML 片段。最适合交互式内容(滑块、标签页、图表、控件)。可在 HTML 模式中嵌入
<svg>元素。
客户端会根据输出是否以 <svg> 开头来判断模式。
生成任何视觉内容之前
在对话中首次生成视觉内容之前,请先阅读设计系统参考文档:
- 务必先阅读:
references/design-system.md— CSS 变量、色阶、排版、核心规则 - 然后阅读相关模块:
- 图表(流程图、结构图、示意图):
references/diagrams.md - 交互式说明、比较、数据记录:
references/components.md - 图表(Chart.js、数据可视化):
references/charts.md
- 图表(流程图、结构图、示意图):
每次对话只需阅读一次设计系统文件。根据需要阅读各类视觉内容对应的模块文件。
流式传输限制
输出会逐个 token 流式传输到 DOM 中,因此必须遵循以下结构:
- 先输出
<style>(控制在 15 行以内——优先使用内联样式) - 接着输出可见的 HTML/SVG 内容(用户会看到内容逐步构建)
- 最后输出
<script>(流式传输完成后才会执行)
由于流式传输的特性:
- 不要使用渐变、阴影、模糊或辉光——它们会在 DOM 差异更新时闪烁。请使用纯色填充。
- 不要使用
display:none或隐藏内容——它们会在流式传输过程中不可见。 - 不要使用 `` 或
/* comments */——这会浪费 token 并破坏流式传输。 - 优先使用内联
style="...",而不是<style>块,这样元素在流式传输过程中也能正确显示。 - 不要使用初始处于隐藏状态的标签页或轮播组件——流式传输期间应将所有内容垂直堆叠显示。流式传输完成后,可通过 JS 添加交互功能。
Iframe 沙盒规则
视觉内容会在沙盒 iframe 中呈现。以下是硬性限制:
- 不要使用 localStorage / sessionStorage——所有状态必须保存在内存中
- 不要使用 position: fixed——iframe 会根据内容高度自动调整大小;固定定位元素会使其折叠
- 不要进行外部 fetch——CSP 会阻止小组件内部的 API 调用
- 仅允许使用以下 CDN:
cdnjs.cloudflare.com、esm.sh、cdn.jsdelivr.net、unpkg.com - 不要使用 DOCTYPE、
<html>、<head>或<body>——只需内容片段 - 背景为透明——宿主会提供容器/卡片样式
- 通过
<script src="https://cdnjs.cloudflare.com/ajax/libs/...">加载库(UMD 全局变量)
sendPrompt 桥接函数
iframe 中提供了全局 sendPrompt(text) 函数。它会向聊天发送一条消息,效果等同于用户输入该消息。使用它让视觉内容参与对话——例如,点击图表中的节点即可触发后续说明。
如果用户的下一步操作需要模型进行思考,请使用 sendPrompt。筛选、排序、切换和计算则应在本地 JS 中处理。
选择合适的可视化类型
根据动词来选择,而不是名词。同一主题会根据用户的提问方式采用不同的呈现形式:
| 用户说 | 类型 | 要构建的内容 |
|---|---|---|
| “X 是如何运作的” | 示意图 | 用空间隐喻展示其运作机制 |
| “X 由哪些组件构成” | 结构图 | 用带标签的方框展示包含关系 |
| “带我逐步了解” | 流程图 | 使用顺序排列的方框和箭头 |
| “比较 X 和 Y” | 对比布局 | 使用并排卡片展示指标 |
| “给我看看数据” | 图表 | 使用 Chart.js 或内联数据可视化 |
| “解释 X”(空间概念) | 交互式讲解图 | 使用滑块、控件和实时状态 |
回答“X 是如何运作的”时,默认使用示意图——这是更有野心的选择。不要因为流程图看起来更稳妥就退而求其次。
单个回答中的多个可视化
在同一个回答中生成多个可视化,并与文字交替呈现:
- 文本块(引入/解释)
- 可视化
- 文本块(过渡)
- 可视化(如有需要)
不要连续放置多个可视化,中间不加文字。
输出包装格式
将可视化输出放在语言标签为 visualizer 的代码围栏中,这样客户端就能检测到内容并将其路由到 iframe 渲染器:
```visualizer
<svg width="100%" viewBox="0 0 680 400">
...
</svg>
```
客户端会移除代码围栏,并将内容注入 iframe,同时预先加入主题变量。
快速参考
| 规则 | 值 |
|---|---|
| SVG viewBox 宽度 | 始终为 680px |
| 字号 | 标签 14px,仅副标题使用 12px |
| 描边宽度 | 边框和边缘均为 0.5px |
| 每张图表的颜色上限 | 2-3 个色阶 |
| 方框副标题长度 | ≤5 个词 |
| 圆角半径(SVG) | 默认使用 rx="4",强调时使用 rx="8" |
| 圆角半径(HTML) | var(--border-radius-md) 或 -lg |
| 最小字号 | 11px |
| 文本字重 | 仅使用 400 常规字重和 500 粗体 |
| 标题字号 | h1=22px,h2=18px,h3=16px |