GPT Academic Mermaid 图表生成实战:从对话与文档到九类可视化图表的完整流程解析
【免费下载链接】gpt_academic为GPT/GLM等LLM大语言模型提供实用化交互接口,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&函数插件,支持Python和C++等项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持chatglm3等本地模型。接入通义千问, deepseekcoder, 讯飞星火, 文心一言, llama2, rwkv, claude2, moss等。项目地址: https://gitcode.com/GitHub_Trending/gp/gpt_academic
本篇指南围绕 GPT Academic 的「生成多种 Mermaid 图表」插件展开,讲清楚它如何从当前对话历史或上传的 PDF/Word/Markdown 文档中提取结构化信息,由 LLM 自动判断并渲染出流程图、序列图、思维导图等九种图表类型。读完后,您将掌握该功能的两种输入方式、图表类型手动指定的参数配置,以及插件内部「切分—摘要—选型—绘制」四步流水线在源码层面的具体实现与调优技巧。
一、功能定位:用文本描述的图表语言驱动可视化
Mermaid 是一种基于文本的图表绘制语言:用简洁的代码语法描述图表结构,再自动渲染为可视化图形。与传统绘图工具相比,它的「源代码」是纯文本,这带来两个关键优势——图表可以被 AI 轻松生成和迭代修改,也可以直接嵌入 Markdown 文档、README 或网页中。
GPT Academic 内置了 Mermaid 渲染引擎,AI 生成的 Mermaid 代码会直接在对话区渲染为可视化图表,无需安装任何额外工具即可预览。插件在 crazy_functional.py 中注册,归属「对话」分类,描述为「基于当前对话或文件生成多种Mermaid图表,图表类型由模型判断」,对应的插件类为 Mermaid_Figure_Gen.py 中的Mermaid_Gen。
二、支持的图表类型
系统支持九种常用图表类型,每种类型对应一条独立的 Prompt 模板(PROMPT_1至PROMPT_9),每种类型都有其独特的适用场景:
| 图表类型 | 标识符 | 适用场景 | 对应 Prompt |
|---|---|---|---|
| 流程图 | flowchart | 描述工作流程、决策逻辑、步骤顺序 | PROMPT_1 |
| 序列图 | sequenceDiagram | 展示对象之间的交互顺序、API 调用流程 | PROMPT_2 |
| 类图 | classDiagram | 描述类之间的关系、系统架构 | PROMPT_3 |
| 饼图 | pie | 展示数据占比、分类统计 | PROMPT_4 |
| 甘特图 | gantt | 项目进度规划、任务时间线 | PROMPT_5 |
| 状态图 | stateDiagram | 描述状态机、生命周期、状态转换 | PROMPT_6 |
| 实体关系图 | erDiagram | 数据库设计、实体关系建模 | PROMPT_7 |
| 象限提示图 | quadrantChart | 分类对比、优先级矩阵 | PROMPT_8 |
| 思维导图 | mindmap | 知识梳理、头脑风暴、概念关联 | PROMPT_9 |
需要注意:默认情况下,系统会让 AI 根据内容特点自动选择最合适的图表类型,但思维导图被有意排除在自动选择之外(源码注释见 第 23 行:「没有思维导图!!!测试发现模型始终会优先选择思维导图」)。如需思维导图,必须在插件参数中手动指定。
三、基本使用
该功能可以从两个来源提取内容:当前的对话历史,或者您上传的文档文件。
3.1 从对话生成图表
当您与 AI 进行了一段有实质内容的讨论后(例如讨论了一个系统的工作原理、梳理了某个流程的步骤),可以直接基于这段对话生成图表。
操作方式:在函数插件区找到对话分类,点击生成多种 Mermaid 图表(从当前对话或路径(.pdf/.md/.docx)中生产图表)插件。系统会遍历对话历史,提取每个片段的核心内容形成摘要;接着 AI 根据摘要特点判断适合的图表类型;最后生成对应的 Mermaid 代码并渲染显示。
整个过程可能需要几十秒到几分钟不等,具体取决于对话长度和所选模型的响应速度,过程中对话区会实时显示进度和中间结果。
3.2 从文件生成图表
除了对话历史,还可以上传文档让系统分析并生成图表。目前支持以下格式(源码依据见 parse_word.py 中对.pdf、.md、.docx的逐一扫描):
- PDF 文件(
.pdf):学术论文、技术文档 - Word 文件(
.docx):报告、规范文档(注意:旧版.doc格式不被支持,源码会在检测到.doc时返回异常提示,要求先转换为.docx,见 parse_word.py 第 35-37 行) - Markdown 文件(
.md):README、技术博客
使用方式是将文件上传到系统,在输入框中输入文件路径,然后点击插件按钮。系统会先提取文件内容,再按照与对话生成相同的流程进行分析和图表绘制。
从源码结构看,文件解析由 extract_text_from_files 完成,它通过 get_files_from_everything 定位目标文件。这个工具函数还支持三种输入形态:
http开头的网络地址:会下载文件到本地日志目录下的临时文件夹后再解析;- 直接给定单个文件路径(路径以
.pdf/.md/.docx结尾); - 本地目录:通过
glob递归搜索目录下所有匹配后缀的文件。
多文件处理:如果您输入的路径是一个目录,且包含多个符合条件的文件,系统会依次处理每个文件并分别生成图表(Mermaid_Figure_Gen.py 第 373-383 行 的
for i in range(file_num)循环),对话区会以[i/n] 处理文件xxx的形式提示进度。这在需要批量可视化多篇文档时非常实用。
依赖方面需要注意:解析 PDF 需要pymupdf(缺少时报错pip install --upgrade pymupdf);解析 Word 需要python-docx、pywin32(缺少时报错pip install --upgrade python-docx pywin32),安装指引均直接硬编码在 Mermaid_Figure_Gen.py 第 335-358 行 的异常分支中。
四、内部流水线:切分、摘要、选型、绘制四步
插件的核心逻辑集中在 解析历史输入 函数中,可分为四步。理解这条流水线有助于解释为什么长内容处理较慢、以及在哪里可以人工干预。
第 0 步:按 token 限制切分输入
无论来源是对话还是文件,文本都会先被切分。第 188 行 设定TOKEN_LIMIT_PER_FRAGMENT = 2500,即每个片段控制在 2500 token 以内,切分函数为 breakdown_text_to_satisfy_token_limit。该函数采用五级降级策略寻找切分点:
- 优先以双空行(
\n\n,段落边界)切分; - 失败则退化为单换行(
\n)切分; - 再失败则以英文句号为切分点;
- 再失败则以中文句号为切分点;
- 最后才允许「暴力切分」(任意位置截断)。
为保证切分效率,maintain_storage 还会把超出 10 万字符的部分暂存、低于 5 万字符时再取回,避免对超长文本反复做 token 计数;整个切分还运行在带 60 秒超时保护的子进程中(第 113 行)。
第 1 步:滚动式迭代摘要
对切分后的每个片段txt[i],插件向模型发起一次请求:用不超过4096 // 片段数个字(MAX_WORD_TOTAL = 4096,见 第 201 行)的中文复述该片段内容。
这里有一个值得注意的实现细节:每次请求都把上一片段的摘要作为history传入(第 214-217 行),形成「滚动摘要」链——后一片段的摘要是在已知前文主旨的语境下产生的,最后再用\n.join 合并所有片段摘要(第 224 行),作为后续选型和绘图的输入results_txt。对话区会以[i/n] Read this section...的形式展示每一步的进度。
第 2 步:图表类型选择(可被插件参数短路)
- 若插件参数
plugin_kwargs已被用户指定为"1"~"9"之一,则跳过本步,直接进入第 3 步——这既省去一次 API 调用,也保证得到期望的图表形式; - 否则使用 SELECT_PROMPT 让模型从 1~8 号类型中「仅输出单个不带任何标点符号的数字」。该 Prompt 只列出 1~8 项、刻意不含思维导图,与自动模式排除思维导图的策略一致;
- 类型判断带最多 3 次重试(第 244-264 行),若返回值不在合法数字集合内就再次询问;3 次仍失败则兜底为
"1"(流程图)(第 265-266 行)。对话区会提前提示「如连续3次判断失败将会使用流程图进行绘制」。
第 3 步:按选定类型绘制图表
第 268-285 行 将类型编号映射到PROMPT_1~PROMPT_9,把合并后的摘要填入{subject}占位符,让模型输出 Mermaid 代码。每个 Prompt 模板都内嵌了该类型的语法示例(few-shot),并统一强调「需要使用双引号将内容括起来」,这对中文节点的正确渲染很关键。
一个值得留意的工程细节:实体关系图(ER 图)的模板因为示例中自带{}花括号(Mermaid 的实体字段块),无法用str.format处理,所以单独用replace("{subject}", results_txt)注入(第 281 行 及注释)。
最终结果追加到history并刷新界面,Mermaid 代码块由前端渲染为图表。
五、手动指定图表类型
如果您已明确想要什么类型的图表,可以使用插件的参数功能。点击插件按钮后,系统会弹出配置面板,其中「绘制的 Mermaid 图表类型」下拉菜单(Type_of_Mermaid,由 define_arg_selection_menu 基于 ArgProperty 定义)提供以下选项:
| 选项 | 说明 |
|---|---|
| 由 LLM 决定 | 默认选项,AI 自动判断最合适的图表类型(不包括思维导图) |
| 流程图 | 强制生成流程图 |
| 序列图 | 强制生成序列图 |
| 类图 | 强制生成类图 |
| 饼图 | 强制生成饼图 |
| 甘特图 | 强制生成甘特图 |
| 状态图 | 强制生成状态图 |
| 实体关系图 | 强制生成实体关系图 |
| 象限提示图 | 强制生成象限图 |
| 思维导图 | 强制生成思维导图 |
参数映射机制:execute 方法 通过options.index(plugin_kwargs['Type_of_Mermaid'])把下拉菜单中的中文选项按下标转换成数字字符串("0"~"9")传给Mermaid_Figure_Gen。其中「由 LLM 决定」对应下标"0",不属于"1"~"9"的合法编号,因此自然触发第 2 步的模型判断流程;选中具体类型则直接短路到绘制步骤。
关于思维导图:在自动判断模式下,AI 往往会认为「思维导图」最能概括各种内容,导致其他图表类型很少被选中。因此自动模式故意排除了思维导图选项(源码注释:「由于不管提供文本是什么,模型大概率认为'思维导图'最合适,因此思维导图仅能通过参数调用」,见 第 243 行)。如果您确实需要思维导图,请手动在下拉菜单中选择它。
六、图表类型详解
不同类型的图表适用于不同的场景,选择恰当的图表类型能让信息传达更加高效。
6.1 流程图
流程图是最通用的图表类型,适合描述任何具有步骤或分支的过程。当您讨论的内容涉及「先做什么,再做什么」、「如果满足条件则执行 A,否则执行 B」这类逻辑时,流程图是理想的选择:
6.2 序列图
序列图专门用于展示多个参与者之间的交互顺序,特别适合描述 API 调用流程、通信协议,或者系统组件之间的消息传递。图中的垂直轴代表时间顺序,水平方向展示不同的参与者:
6.3 类图
类图来源于 UML(统一建模语言),用于描述类的结构和类之间的关系。在软件架构设计、面向对象分析,或者解释代码结构时非常有用。
6.4 饼图
饼图用于展示各部分占整体的比例,适合呈现统计数据、市场份额、时间分配等具有「占比」概念的信息。
6.5 甘特图
甘特图以时间轴的形式展示项目进度,每个任务用水平条表示,条的长度代表任务持续时间。它是项目管理中规划和跟踪进度的经典工具。
6.6 状态图
状态图描述了一个对象在其生命周期中可能经历的各种状态,以及触发状态转换的事件。订单状态、用户账号状态、连接状态等都适合用状态图来表达。
6.7 实体关系图
实体关系图(ER 图)是数据库设计的基础,它展示了数据实体及其之间的关系。当您讨论数据模型、表结构设计时,ER 图能清晰地呈现整体架构。
6.8 思维导图
思维导图以放射状结构展示概念之间的关联,从中心主题向外延伸出分支。它特别适合知识梳理、头脑风暴,或者文章大纲的可视化。
七、使用技巧
内容要有结构性:AI 生成图表的质量很大程度上取决于原始内容的结构性。如果您的对话或文档中已经包含了明确的步骤、分类、关系描述,生成的图表会更加准确。相反,如果内容是散乱的,AI 需要更多推断,结果的准确性也会下降——这与第 1 步摘要链依赖片段内结构信息的事实一致。
先提炼再生成:对于很长的对话或文档,可以先让 AI 帮您总结要点,确认总结内容无误后,再基于总结生成图表。这种两步法通常能得到更精炼的图表。
适时调整和迭代:生成的图表可能不是一次就完美的。您可以查看 Mermaid 源代码,复制到在线编辑器中手动调整,或者用自然语言告诉 AI「请把 XX 节点的名称改为 YY」来微调结果。
复杂图表的处理:当内容非常复杂时,生成的图表可能节点过多导致渲染困难。这时建议将内容拆分为多个主题,分别生成图表,或者选择更简洁的图表类型(如思维导图)来概括核心脉络。插件在收尾提示中也给出了相同建议(「过大的图表可能需要复制到在线编辑器中进行渲染」,见 第 286 行)。
八、常见问题
图表渲染不完整或显示异常?这通常是因为生成的图表过于复杂,超出了页面渲染的限制。您可以:
- 展开对话中的代码块,复制 Mermaid 源代码;
- 访问 mermaid.live 等在线编辑器;
- 粘贴代码进行查看和调整。
在线编辑器通常能处理更复杂的图表,还支持导出为 PNG/SVG 图片。
AI 选择的图表类型不合适?在自动判断模式下,AI 可能会选择一个不太符合您预期的图表类型。解决方法很简单:重新调用插件时,在配置面板的下拉菜单中手动指定您想要的图表类型即可。
生成的图表内容不准确?图表内容的准确性取决于 AI 对原始内容的理解。如果发现有偏差,您可以:
- 在原始内容中补充更明确的结构描述;
- 在对话中直接指出需要修正的地方,让 AI 重新生成;
- 手动编辑 Mermaid 代码进行调整。
为什么自动模式不会选择思维导图?实验发现,AI 在判断图表类型时对思维导图有明显的偏好——几乎任何内容它都认为思维导图是「最合适的」。为了让其他图表类型有机会被选中,自动模式故意排除了思维导图(SELECT_PROMPT只列出 1~8 号类型)。如果您确实需要思维导图,请在配置面板中手动选择。
支持中文内容吗?完全支持。您可以用中文进行对话或上传中文文档,生成的图表节点文字也会是中文。Mermaid 语法本身对中文有良好的支持,只需确保文字内容用引号包裹即可正确渲染——这正是九条 Prompt 模板反复强调「需要使用双引号将内容括起来」的原因。
九、相关文档
- 基础功能 — 了解 GPT Academic 内置的基础功能按钮
- 源码分析 — 分析代码项目,生成结构图
- 虚空终端 — 用自然语言指挥 AI 生成图表
- 对话保存与载入 — 保存包含图表的对话记录
【免费下载链接】gpt_academic为GPT/GLM等LLM大语言模型提供实用化交互接口,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&函数插件,支持Python和C++等项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持chatglm3等本地模型。接入通义千问, deepseekcoder, 讯飞星火, 文心一言, llama2, rwkv, claude2, moss等。项目地址: https://gitcode.com/GitHub_Trending/gp/gpt_academic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考