📍 无忆研习社 › 开源解码 › AntV Infographic 深度解析:用 Markdown 语法生成专业信息图的开源利器

AntV Infographic 深度解析:用 Markdown 语法生成专业信息图的开源利器

摘要:AntV Infographic是一款国产开源信息图生成引擎,通过类Markdown语法快速生成专业信息图。它采用JSX渲染引擎和AI友好的设计,支持200+模板、流式渲染和可视化编辑,解决了传统工具效率低、风格不统一的问题,特别适合与AI大模型集成实现人机协同创作。
字号 100%
行距 2.05
当前可见 60% 的内容

AntV Infographic 深度解析:用 Markdown 语法生成专业信息图的开源利器

本文由 无忆研习社 原创首发,深度拆解这款国产开源信息图引擎的技术架构与实战玩法。

写在前面

最近技术圈流传一个段子:"四年前你绝对想不到,AGI 的重要组成部分竟然是 Markdown 文档。"

虽然是调侃,但确实点出了一个趋势——在生成式 AI 时代,人与大模型高效协作的媒介,往往是结构清晰、语法简洁的纯文本格式。Markdown 这类语言正是其中的典范代表。

作为一个长期关注开源项目的技术博主,我最近发现了一个相当有意思的国产开源项目:AntV Infographic。

它在 GitHub 上开源仅一个多月,Star 数就突破了 3000。考虑到它的定位相当垂直(专注信息图生成),这种关注度说明它确实切中了一类现实需求。

今天这篇文章,无忆研习社 就来带大家深入拆解这个项目的技术原理和实际操作方法。无论你是前端开发者、内容创作者,还是对 AI 可视化感兴趣的技术爱好者,相信都能从中有所收获。


一、什么是 AntV Infographic?

1.1 项目定位

AntV Infographic 是蚂蚁集团 AntV 团队开源的一款声明式、AI 友好的信息图生成与渲染引擎。

简单来说,它做的事情是:让你用类似 Markdown 的简洁语法,快速生成专业级别的信息图。

项目地址:https://github.com/antvis/Infographic

在线体验:https://infographic.antv.vision

1.2 解决了什么问题?

如果你从事过内容创作、技术写作或者产品运营工作,应该对"画信息图"这件事不陌生。

传统的信息图制作流程通常是这样的:

  • 方案一:PPT 手动画 —— 灵活但效率低,风格难统一
  • 方案二:专业设计软件(Figma、Sketch) —— 门槛高,需要设计功底
  • 方案三:在线设计工具(Canva 等) —— 模板多但定制性差,免费版功能受限
  • 方案四:AI 生成工具 —— 快但风格不可控,难以精确编辑

用过这些工具的朋友可能都有同感:免费、可控、可集成,几乎是信息图工具的"不可能三角"。

AntV Infographic 的出现,正是为了打破这个困局。它提供了:

  • 免费开源:MIT 协议,商用无忧
  • 高度可控:通过结构化语法精确控制内容和样式
  • 易于集成:标准化 API,可嵌入各类业务系统
  • AI 友好:天然适配大模型的生成与编辑

1.3 核心特性一览

在深入技术细节之前,先给大家一个整体印象。AntV Infographic 的核心特性包括:

特性

说明

类 Markdown 语法

学习成本低,非程序员也能快速上手

200+ 内置模板

覆盖时间线、对比分析、层级结构等多种场景

流式渲染支持

完美适配 AI 逐字生成的输出方式

可视化编辑器

支持所见即所得的交互式修改

多种导出格式

支持 SVG、PNG 等主流格式

TypeScript 类型支持

为 AI 提供精确的数据结构指引


二、技术架构深度剖析

好,铺垫完毕,接下来进入 无忆研习社 的拿手环节——技术架构拆解。

AntV Infographic 的整体架构可以分为三层:JSX Engine(引擎层)、Runtime(运行时层) 和 API(接口层)。

这三层各司其职,共同支撑起一个面向 AI 时代的信息图生成系统。

2.1 JSX Engine:为什么选择 JSX 而非 JSON?

这是 AntV 团队做出的一个相当有意思的技术决策。

传统方案的局限

从 Figma 的插件生态到许多经典的可视化库,采用轻量的 JSON 来序列化和存储画布内容几乎是标准做法。JSON 结构清晰、对机器友好,是数据交换的理想载体。

但问题在于,当创作主体从人类转向 AI 时,JSON 的局限性便逐渐暴露。

JSON 本质上是面向程序的数据载体,存在以下问题:

  • 缺乏语义表达力:难以描述复杂的布局逻辑
  • 无逻辑控制能力:条件分支、循环等需要额外处理
  • 动态组合能力差:组件嵌套关系表达繁琐
  • Schema 约束复杂:为确保数据有效性,往往需额外引入校验机制

JSX 的优势

大模型作为"类人创作者",更擅长理解和生成语义丰富的结构。因此,在 AI 驱动的画布生成场景中,使用代码来描述内容比使用纯数据结构更自然、更高效。

基于这一洞察,AntV 团队选择 JSX 作为信息图的描述语言,并围绕它构建了一套独立于 React 的 JSX 渲染引擎。

这套引擎的特点:

  • 开发者可以直接使用 JSX 描述信息图
  • 渲染器将 JSX 转化为最终的 SVG 输出
  • 内置几何图形、文本、分组等原语组件
  • 支持由基础组件组合出复杂结构
  • 提供比 React JSX 更灵活可控的布局机制

举个例子,一个简单的信息图组件可能长这样:

<Structure
data={data}
Title={TitleComponent}
Item={ItemComponent}
Items={itemsArray}
options={parsedOptions}
{...structureProps}
/>

这种声明式的写法,既便于人类理解,也便于 AI 生成。

2.2 信息图语法:AI 友好的核心设计

为什么需要专门的语法?

大模型以 token 为单位逐字生成,天然支持流式输出。而类 Markdown 语法恰好是逐行或逐块可解析的。

它不依赖成对标签,而是通过缩进、连字符、空格等简单符号表达结构,用最少的 token 传递最丰富的语义。

对 LLM 而言,这意味着:

  • 更低的出错率:简单语法减少生成错误
  • 更快的生成速度:token 数量更少
  • 更低的推理成本:计算资源消耗更小

对人类用户同样友好:打开一份信息图语法文件,即便没有编程基础的人也能立刻理解、直接修改;AI 则可基于修改后的文本继续生成。

这种双向可读、可编辑的特性,正是"人机协同"的理想形态。

语法结构详解

Infographic 的信息图语法以 infographic [template-name] 为入口,通过缩进块(block)组织四大核心部分:

① 模板(template)

在入口处直接通过 infographic <template-name> 指定要使用的模板。

infographic timeline-basic

② 设计块(design)

用于选择结构、卡片与标题等模块的具体样式。

design:
structure: stairs
item: card-basic
title: heading-1

③ 数据块(data)

这是信息结构的核心,通常包含标题、描述与列表项,支持嵌套层级。

data:
title: "项目发展历程"
description: "从创立到上市的关键节点"
items:
- title: "2020年"
description: "项目启动"
- title: "2021年"
description: "获得A轮融资"
- title: "2022年"
description: "用户突破百万"

④ 主题块(theme)

用于切换主题与调整色板、字体与风格化能力。用户可以使用预设主题,也可以自定义。

theme:
palette: blue
font: "PingFang SC"
style: hand-drawn

渲染模式

这套语法通过 render(syntax) 方法直接渲染,支持两种典型模式:

常规渲染:传入完整语法,一次性生成信息图。

const infographic = new Infographic();
const svg = infographic.render(completeSyntax);

流式渲染:结合大模型使用,模型逐段输出后,将片段追加至缓冲区并调用 render(buffer) 重新渲染,让画面与输出同步更新。

let buffer = '';

// AI 流式输出时
onChunk((chunk) => {
buffer += chunk;
infographic.render(buffer);
});

这种设计让信息图可以随着 AI 的生成过程实时呈现,用户体验极佳。

2.3 Runtime 层:三大核心模块

Runtime 层是连接信息图语法与最终可视化结果的核心执行环境,由三个关键模块组成。

模块一:模板生成器

模板生成器是唯一直接解析和处理用户输入的模块。它的任务是将一段信息图语法转化为可被渲染的 JSX 组件。

为了降低 AI 的生成门槛,Infographic 设计了一套类似 Mermaid 的声明式语法,将信息图抽象为"信息结构 × 图形表意"。

AI 无需理解坐标、SVG 路径等底层细节,只需关注内容逻辑与视觉意图。

设计资产体系

模板生成器的核心任务,是将语法映射到设计资产。设计资产是 Infographic 的可复用单元,分为三类:

结构(Structure)

决定信息图的整体布局。它不绘制具体图形,而是接收已绑定数据的 Title 和 Item 等组件,决定它们的位置关系,同时可以置入装饰性元素。

比如,同样的数据可以呈现为"阶梯式布局"或"时间线布局",这就是不同结构的效果。

数据项(Item)

是信息图中内容单元的可视化载体。它将 data.items 中的数据转换为信息图中的视觉元素。

同一条数据,可以呈现为"简约卡片"、"图标卡片"或"数字高亮卡片"等不同样式,这就是不同数据项的效果。

基础组件

基础组件是 Infographic 设计体系的"积木",封装了字号、颜色等设计规范。

结构和数据项组件在开发时,不直接操作底层图形指令,而是组合基础组件。这确保了:

  • 全图视觉一致性
  • 渲染器和编辑器能准确识别不同元素
  • 减少重复代码和逻辑

模板组装流程

模板生成器的组装过程可以简化为两个关键步骤:

步骤一:配置解析

解析器会把语法中的配置转换成高阶组件。这个高阶组件已经绑定了主题上下文,能根据当前的主题风格动态调整样式。

function parseDesignItem(config, options) {
const { type, ...userProps } = normalizeWithType(config);
const item = getItem(type);

return {
...item,
component: (props) => {
const { indexes } = props;
const { data, themeConfig } = options;

const themeColors = generateColors(
getPaletteColor(themeConfig?.palette, indexes, data?.items?.length)
);

return item.component({
themeColors,
...props,
...userProps,
});
},
};
}

步骤二:模板组装与渲染

compose 方法将解析后的组件通过 JSX 组织成完整的模板树,然后交给渲染引擎生成最终的 SVG 输出。

compose() {
const { design, data } = this.parsedOptions;
const { title, item, structure } = design;

const { component: Structure, props: structureProps } = structure;
const Title = title.component;
const Item = item.component;

const svg = renderSVG(
<Structure
data={data}
Title={Title}
Item={Item}
options={this.parsedOptions}
{...structureProps}
/>
);

return parseSVG(svg);
}

模块二:渲染器

渲染器接收由模板生成器组装好的 SVG 节点树,为其注入具体的视觉风格,最终输出风格统一的信息图。

渲染器的工作流程可以理解为深度遍历。它逐个检查 SVG 节点树中的每个子节点,并根据类型执行特定的渲染逻辑。

核心能力包括:

模块

功能

renderer

渲染器主类

composites

对背景、按钮、图标、插图、形状、文本和 SVG 容器等不同元素类型的专门渲染

fonts

字体的加载、注册与管理

palettes

色板的加载、注册与管理

stylize

风格化层,集成手绘、渐变、纹理等视觉效果

风格化层 stylize 是一个亮点,它让信息图可以呈现多种视觉风格,比如:

  • 专业商务风格
  • 手绘涂鸦风格
  • 渐变现代风格
  • 纹理复古风格

模块三:编辑器

AI 生成的信息图通常只是初稿。用户需要调整文本措辞、更换配色、移动元素位置,甚至增删数据项。

Infographic 提供了完整的编辑器,支持对信息图进行交互式修改。

关键设计理念:用户编辑的始终是原始的信息图语法,而不是渲染后的 SVG。每次修改后,系统会重新走一遍模板生成和渲染的流程,确保输出始终与声明式配置一致。

编辑器由 5 个核心模块组成:

模块

功能

Editor

调用入口,接受配置项和信息图实例作为输入

Managers

编辑能力的调度中枢

Commands

命令实现,所有操作都需要通过命令执行

Plugins

内置插件实现

Interactions

内置交互实现

其中 Managers 包含四个子模块:

  • Command:负责执行命令,并提供撤销、重做能力
  • State:管理状态,所有数据更新都需要通过状态模块进行变更
  • Interaction:交互控制,选区管理、控制交互触发和冲突解决
  • Plugin:加载和管理插件

这种架构确保了:人类用户能在所见即所得的编辑器中安全地调整细节,并将修改结果导出为与原始输入结构一致的配置,支持复用、存档或重新生成。

2.4 API 层:面向 AI 系统的标准化接口

API 是 AntV Infographic 对外暴露能力的唯一入口,由 Infographic 类统一提供。

它支持的基本操作包括:

  • 创建实例
  • 渲染信息图
  • 导出图片
  • 监听事件

特别值得一提的是 getTypes 方法。

与柱状图、折线图等传统统计图表不同,信息图不是单一类型的图表,而是由标题、数据项、插图、装饰元素、布局结构等组合而成,不同的模板对数据结构的要求可能完全不同。

为了让 AI 在生成信息图时能准确组织数据,Infographic 提供了 getTypes 方法,用于获取给定设计的信息图模板所需要的数据的 TypeScript 类型。

const types = Infographic.getTypes(design);
// 返回类似:
// {
// title: string;
// description?: string;
// items: Array<{
// title: string;
// description?: string;
// value?: number;
// }>;
// }

这为 AI 的数据抽取和结构化过程提供了明确的类型指引,大大提高了生成准确率。


三、实战操作指南

理论讲完了,接下来 无忆研习社 带大家进入实战环节。

3.1 快速开始:在线体验

最简单的体验方式是访问官网:https://infographic.antv.vision

进入 AI 生成入口(/ai),输入一段文字描述,就能获得一张可编辑的信息图。

比如输入:

请帮我做一张信息图,展示前端开发的学习路线:
1. HTML/CSS 基础
2. JavaScript 核心
3. 前端框架(React/Vue)
4. 工程化工具
5. 性能优化

系统会自动选择合适的模板,生成结构化的信息图。

3.2 项目集成:安装与基本使用

安装

npm install @AntV/Infographic
# 或
yarn add @AntV/Infographic

基本使用

import { Infographic } from '@AntV/Infographic';

// 创建实例
const infographic = new Infographic({
container: document.getElementById('container'),
width: 800,
height: 600,
});

// 定义信息图语法
const syntax = `
infographic timeline-basic
design:
structure: vertical-timeline
item: card-icon
theme:
palette: blue
data:
title: "产品迭代历程"
items:
- title: "V1.0"
description: "基础功能上线"
icon: "rocket"
- title: "V2.0"
description: "性能大幅优化"
icon: "speed"
- title: "V3.0"
description: "AI 能力集成"
icon: "ai"
`;

// 渲染
infographic.render(syntax);

导出图片

// 导出为 PNG
const pngData = await infographic.toImage('png');

// 导出为 SVG
const svgData = infographic.toSVG();

3.3 与 AI 大模型集成

这是 Infographic 最强大的应用场景之一。

流式渲染示例

import { Infographic } from '@AntV/Infographic';
import { streamChat } from 'your-ai-sdk';

const infographic = new Infographic({
container: document.getElementById('container'),
});

let buffer = '';

// 调用 AI 接口,流式输出
const stream = await streamChat({
prompt: '请生成一张关于敏捷开发流程的信息图,使用 Infographic 语法',
});

for await (const chunk of stream) {
buffer += chunk;

// 每收到新内容就重新渲染
// 语法解析器会智能处理不完整的输入
infographic.render(buffer);
}

使用 getTypes 提高生成准确率

// 先获取目标模板的类型定义
const design = {
structure: 'pyramid',
item: 'card-basic',
};

const types = Infographic.getTypes(design);

// 将类型信息包含在 prompt 中
const prompt = `
请根据以下数据结构要求,生成信息图语法:
${JSON.stringify(types, null, 2)}

主题:马斯洛需求层次理论
`;

const response = await chat(prompt);
infographic.render(response);

3.4 自定义模板开发

Infographic 支持开发自定义的结构和数据项样式。

开发自定义结构

在 src/designs/structures/ 目录下创建新的结构组件:

// src/designs/structures/my-custom-structure.jsx
export const MyCustomStructure = ({
data,
Title,
Item,
options,
}) => {
return (
<g className="my-custom-structure">
<Title data={data} />
<g className="items-container">
{data.items.map((item, index) => (
<Item
key={index}
data={item}
indexes={{ item: index }}
/>
))}
</g>
</g>
);
};

开发自定义数据项

在 src/designs/items/ 目录下创建新的数据项组件:

// src/designs/items/my-custom-item.jsx
export const MyCustomItem = ({
data,
themeColors,
indexes,
}
🔒
该内容仅对更高等级社区用户开放
请谨慎解锁时效性强且发布日期较早的文章
单篇解锁后若未显示全文请刷新页面
您当前:游客 · 可见 60% 内容 · 升级至 注册用户 可见 70%
👀
游客
可见 60%
✓ 当前
注册用户
注册用户
可见 70%
社区精英
社区精英
可见 100%
社区守护
社区守护
可见 100%
仅解锁本文,永久有效。如需PDF珍藏版,请联系站长获取。 当前单篇价格 ¥9.9
✏️ 发表评论

请先登录后发表评论

前往登录
📊 站点统计
今日发布0 篇
文章总数1107 篇
昨日发布1 篇
本月发布31 篇
建站时间456 天
🔍 搜索
站长微语

联系站长

QQ:2805463528
AIGC 技术社区
致力于解码 AI前沿技术 与经验分享
纯粹的技术应用社区

💡 欢迎您的建议与反馈,让社区变得更好

快速通道
联系站长
站长QQ二维码
AI交流群
AI交流群
仍在路上

那些寒夜里追赶过的方向

那些冷眼下没放弃的理想

一篇一篇写到现在

仍在路上

"不羁放纵爱自由"

—— 致敬 Beyond
持续创作中 莫潇羽 · 无忆研习社
▲