@antv/gpt-vis

中文文档
1.3.1发布于 2026/11/04MITTypeScriptES Module构建来源已验证近 30 天下载 3.2万

Components for GPTs, generative AI, and LLM projects. Not only UI Components.

原始使用文档
文档目录19 节
  1. ✨ 特性
  2. 🚀 快速开始
  3. 安装
  4. 基础用法
  5. 流式渲染
  6. 📚 语法指南
  7. 对象配置
  8. DSL 语法
  9. 📊 图表类型
  10. 统计图表(18 种)
  11. 关系图表(6 种)
  12. 文本可视化(2 种)
  13. 🔧 框架集成
  14. 🧩 Shadcn/ui
  15. 基础组件
  16. 类型化图表组件
  17. 🤖 AI 生态
  18. 🤝 贡献
  19. 📄 开源协议

English | 简体中文

GPT-Vis

面向 LLM 时代的 AI 原生可视化库,框架无关,开箱即用。

npm version npm downloads License

📖 文档 · 🎨 图表示例 · 🔌 MCP 服务 · 🧩 图表技能

GPT-Vis Hero Image

✨ 特性

  • 🚀 框架无关 — 原生 JavaScript、React、Vue、Angular,任何框架均可使用
  • ✍️ 类 Markdown 语法 — LLM 可以直接生成的简洁语法,易学易用
  • 🌊 流式渲染 — 原生支持 AI 模型流式输出,边生成边渲染
  • 🛡️ 高容错 — 优雅处理不完整、格式异常的数据,适配 AI 生成内容的不确定性
  • 📊 26 种图表 — 统计图表、关系图表、文本可视化,覆盖主流场景
  • 🎨 可复用主题 — 一份 ThemeSpec 应用于所有图表,在 Theme Studio 预览微调,也可通过 AI Skill 创建

🚀 快速开始

安装

npm install @antv/gpt-vis

基础用法

import { GPTVis } from '@antv/gpt-vis';

const gptVis = new GPTVis({
  container: 'container',
  width: 600,
  height: 400,
});

gptVis.render({
  type: 'line',
  data: [
    { time: '2020', value: 100 },
    { time: '2021', value: 120 },
    { time: '2022', value: 150 },
  ],
});

流式渲染

AI 模型边生成、图表边渲染,无需等待完整响应:

import { GPTVis, isVisSyntax } from '@antv/gpt-vis';

const gptVis = new GPTVis({ container: 'container', width: 600, height: 400 });
let buffer = '';

function onToken(token) {
  buffer += token;
  if (isVisSyntax(buffer)) {
    gptVis.render(buffer);
  }
}

📚 语法指南

render() 支持两种输入格式:对象配置(适合程序化调用)和 DSL 语法(适合 LLM 流式生成)。

对象配置

直接传入 JSON 对象,适合程序化图表创建:

折线图:

gptVis.render({
  type: 'line',
  data: [
    { time: '2020', value: 100 },
    { time: '2021', value: 120 },
    { time: '2022', value: 150 },
  ],
});

饼图:

gptVis.render({
  type: 'pie',
  data: [
    { category: 'Android', value: 72 },
    { category: 'iOS', value: 28 },
  ],
  innerRadius: 0.6,
});

主题:

内置三套主题,通过 theme 属性切换:

主题标识背景色色板
默认(亮色)default#FFF#5B6CFF #2DAF9E #F2B84B #EF6A6A #55A6D9 ...
暗色dark#141414#5B6CFF #2DAF9E #F2B84B #EF6A6A #55A6D9 ...
学术academy#FFF#4e79a7 #f28e2c #e15759 #76b7b2 #59a14f ...
gptVis.render({
  type: 'line',
  data: [
    { time: '2020', value: 100 },
    { time: '2021', value: 120 },
  ],
  theme: 'dark',
});

可复用的自定义主题:

向构造函数的 theme 传入 ThemeSpec 对象,即可让全部 26 种图表共享颜色、字体、间距和 Mark 样式,包括关系图、Table 和 Summary:

import { GPTVis, type ThemeSpec } from '@antv/gpt-vis';

const theme: ThemeSpec = {
  id: 'my-report',
  label: 'My report',
  tokens: { colorDefault: '#7047eb', fontFamily: 'Arial, sans-serif', radius: 6 },
};
const chart = new GPTVis({ container: '#chart', theme });

优先级:单图 config > 自定义 ThemeSpec > GPT-Vis 内置主题。具体合并顺序:内置默认值 < Tokens < 全局 style < charts[type].style < 单图 style。嵌套对象合并,数组整体替换。单图显式指定 theme 时,会替换构造函数选择的主题。Summary 通过构造函数接收主题,渲染输入仍为 T8 文本,没有单次渲染的 style 对象入口。

可在 Theme Studio 预览和分享主题,阅读主题文档,或使用主题创建指南 根据品牌参考资料生成 ThemeSpec。

工作台的预设是 ThemeSpec 示例,使用时需要把完整对象传给 theme;id 只是元数据,不是已注册的主题名称。

自定义样式:

gptVis.render({
  type: 'line',
  data: [
    { time: '2020', value: 100 },
    { time: '2021', value: 120 },
  ],
  style: { mark: { line: { lineWidth: 3 } }, palette: ['#5B8FF9', '#5AD8A6'] },
});

DSL 语法

类 Markdown 的声明式语法,LLM 无需学习复杂 API 即可生成:

vis [图表类型]
[属性] [值]
data
  - [字段] [值]

饼图:

vis pie
data
  - category 销售
    value 30
  - category 市场
    value 25
innerRadius 0.6

主题:

vis line
data
  - time 2020
    value 100
  - time 2021
    value 120
theme dark

自定义样式:

通过 style 设置线宽、自定义配色等:

vis line
data
  - time 2020
    value 100
  - time 2021
    value 120
style
  mark
    line
      lineWidth 3
  palette
    - #5B8FF9
    - #5AD8A6

包含空格的值用引号包裹:

vis pie
data
  - category "Q1 销售额"
    value 30
  - category "Q2 销售额"
    value 25

层级数据:

vis mindmap
data
  - name 项目规划
    children
      - name 第一阶段
      - name 第二阶段

使用 DSL 语法渲染:

const visSyntax = `
vis line
data
  - time 2020
    value 100
  - time 2021
    value 120
  - time 2022
    value 150
`;

gptVis.render(visSyntax);

📊 图表类型

支持 26 种图表,覆盖统计分析、关系网络、文本可视化三大类。

统计图表(18 种)

图表类型标识
折线图line
面积图area
柱状图column
条形图bar
饼图pie
散点图scatter
雷达图radar
漏斗图funnel
瀑布图waterfall
双轴图dual-axes
直方图histogram
箱线图boxplot
小提琴图violin
韦恩图venn
桑基图sankey
树图treemap
词云word-cloud
水波图liquid

关系图表(6 种)

图表类型标识
流程图flow-diagram
网络图network-graph
思维导图mindmap
缩进树indented-tree
组织架构图organization-chart
鱼骨图fishbone-diagram

文本可视化(2 种)

图表类型标识
表格table
文本摘要summary

查看全部示例 → 图表示例

🔧 框架集成

原生 JavaScript
import { GPTVis } from '@antv/gpt-vis';

const gptVis = new GPTVis({ container: 'chart', width: 600, height: 400 });
gptVis.render(visSyntaxString);
React
import { GPTVis } from '@antv/gpt-vis';
import { useEffect, useRef } from 'react';

function ChartComponent({ visSyntax }) {
  const containerRef = useRef();
  const gptVisRef = useRef();

  useEffect(() => {
    gptVisRef.current = new GPTVis({ container: containerRef.current, width: 600, height: 400 });
    return () => gptVisRef.current?.destroy();
  }, []);

  useEffect(() => {
    if (gptVisRef.current && visSyntax) {
      gptVisRef.current.render(visSyntax);
    }
  }, [visSyntax]);

  return <div ref={containerRef} />;
}
Vue
<template>
  <div ref="chartRef"></div>
</template>

<script setup>
import { ref, watch, onUnmounted } from 'vue';
import { GPTVis } from '@antv/gpt-vis';

const props = defineProps(['visSyntax']);
const chartRef = ref(null);
let gptVis = null;

watch(
  () => props.visSyntax,
  (syntax) => {
    if (!gptVis) {
      gptVis = new GPTVis({ container: chartRef.value, width: 600, height: 400 });
    }
    gptVis.render(syntax);
  },
  { immediate: true },
);

onUnmounted(() => gptVis?.destroy());
</script>
Markdown 渲染器(marked)

GPT-Vis 的 vis 语法天然兼容 Markdown code fence,可以与任何 Markdown 渲染器集成。以下示例使用 marked + marked-highlight,普通代码块走语法高亮,vis 代码块自动渲染为交互式图表。

安装依赖:

npm install @antv/gpt-vis marked marked-highlight highlight.js

完整示例:

import { Marked } from 'marked';
import { markedHighlight } from 'marked-highlight';
import hljs from 'highlight.js';
import { GPTVis } from '@antv/gpt-vis';

class GPTVisElement extends HTMLElement {
  connectedCallback() {
    const syntax = decodeURIComponent(this.dataset.syntax);
    this._instance = new GPTVis({ container: this });
    this._instance.render(syntax);
  }
  disconnectedCallback() {
    this._instance?.destroy();
  }
}
if (!customElements.get('gpt-vis')) {
  customElements.define('gpt-vis', GPTVisElement);
}

const marked = new Marked(
  markedHighlight({
    langPrefix: 'hljs language-',
    highlight(code, lang) {
      if (lang?.startsWith('vis')) return code;
      const language = hljs.getLanguage(lang) ? lang : 'plaintext';
      return hljs.highlight(code, { language }).value;
    },
  }),
  {
    renderer: {
      code({ text, lang }) {
        if (lang?.startsWith('vis')) {
          const syntax = encodeURIComponent(lang + '\n' + text);
          return `<gpt-vis data-syntax="${syntax}" style="min-height:300px"></gpt-vis>`;
        }
        return false;
      },
    },
  },
);

const markdown = `# My Report

\`\`\`vis bar
data
  - category Python
    value 28.1
  - category JavaScript
    value 18.5
  - category Java
    value 15.6
  - category "C/C++"
    value 12.3
title 2024 Programming Language Popularity
\`\`\`
`;

document.getElementById('content').innerHTML = marked.parse(markdown);

🧩 Shadcn/ui

通过 shadcn CLI 将 GPT-Vis React 组件直接复制到你的项目中 — 完全源代码控制,高度可定制。

基础组件

通用的 GPTVis 组件,支持全部 26 种图表类型的 vis 语法字符串或 JSON 配置对象:

npx shadcn@latest add @gpt-vis/gpt-vis
import { GPTVis } from '@/components/ui/gpt-vis';

<GPTVis
  content="vis line
data
  - time 2020
    value 100
  - time 2021
    value 120
  - time 2022
    value 150
title 销售趋势"
  theme="academy"
/>;

类型化图表组件

每种图表类型都有独立的组件,提供类型安全的 config 属性 — 仅支持 JSON,带 TypeScript 类型校验:

npx shadcn@latest add @gpt-vis/line
import { Line } from '@/components/ui/line';

<Line
  config={{
    data: [
      { time: '2020', value: 100 },
      { time: '2021', value: 120 },
      { time: '2022', value: 150 },
    ],
    title: '销售趋势',
    axisXTitle: '年份',
  }}
  height={400}
/>;

全部 26 种图表类型均可用,按名称安装即可:

npx shadcn@latest add @gpt-vis/pie
npx shadcn@latest add @gpt-vis/bar
npx shadcn@latest add @gpt-vis/mindmap
# ...等等

每个类型化组件自动将基础 GPTVis 组件作为依赖安装。width、height、theme、wrapper、locale、className、containerStyle 等属性在所有组件中保持一致。

🤖 AI 生态

GPT-Vis 提供完整的 AI 集成方案:

  • MCP 服务 — 通过 Model Context Protocol 让 AI 模型直接调用可视化能力
  • 图表技能 — 为 AI 助手提供图表选择、JSON、Syntax 和集成代码生成能力,内含 Theme Creator 参考文档,可创建可复用的自定义主题

🤝 贡献

AI 生成代码策略:本项目仅合并 AI 生成的代码。

  1. 提交 Issue 描述问题或需求
  2. 标记 @copilot 生成实现方案
  3. 提交包含 AI 生成代码的 PR

📄 开源协议

MIT © AntV

版本与发布记录

@antv/gpt-vis 共发布 51 个版本,首次发布于 2024/08/14;过去 12 个月发布了 16 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.3.1latest2026/11/041 天前
1.3.02026/10/298 天前
1.0.22026/09/171 个月前
1.0.12026/09/032 个月前
1.2.02026/05/195 个月前
1.1.02026/05/195 个月前

其他发布通道:beta → 1.0.0-beta.2。

关于 @antv/gpt-vis 的常见问题

@antv/gpt-vis 是什么?

Components for GPTs, generative AI, and LLM projects. Not only UI Components.

如何安装 @antv/gpt-vis?

在项目目录运行 npm install @antv/gpt-vis,或使用 pnpm add / yarn add / bun add。

@antv/gpt-vis 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@antv/gpt-vis 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@antv/gpt-vis 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@antv/gpt-vis 可以商用吗?

@antv/gpt-vis 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@antv/gpt-vis 的下载量有多少?

根据 npm 官方下载统计,@antv/gpt-vis 在 2026/10/06 – 2026/11/04 这 30 天内被下载 31,777 次,日均约 1,059 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@antv/gpt-vis 还在维护吗?

最新版本 1.3.1 发布于 2026/11/04(1 天前);至今共发布 51 个版本,其中过去 12 个月发布了 16 个;首次发布于 2024/08/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。