如何使用大语言模型绘制专业图表

news2024/11/24 15:46:25

  过去的一年里,我相信大部分人都已经看到了大语言模型(后文简称LLM)所具备的自然语言理解和文本生成的能力,还有很多人将其应用于日常工作中,比如文案写作、资料查询、代码生成……今天我要向大家介绍LLM的一种新使用方式——绘图。这里说的绘图不是像StableDifusion或者Midjourney那样的文生图,而是偏严格的图表,比如流程图、甘特图、时序图……。

Mermaid介绍

  Mermaid.js 是一个强大的基于文本的图表生成工具,它通过使用类似Markdown的语法,可以通过简单的文本描述来生成复杂的图表,完全不依赖于繁琐的图形编辑软件。这极大地简化了图表的创建过程,尤其是很多Markdown渲染软件已经完全集成了Mermaid,完全可以做到仅使用一个Markdown编辑器完成写作和绘图的工作。

  Mermaid.js 目前支持多种类型的图表,可以满足绝大多数的日常使用场景:

  • 流程图(Flowcharts):用于展示过程或系统的操作流程。
  • 序列图(Sequence diagrams):适合描述对象或参与者之间的交互序列。
  • 甘特图(Gantt charts):常用于项目管理中,显示项目的时间线和阶段。
  • 类图(Class diagrams):用于展示系统中类的结构和类之间的关系。
  • 状态图(State diagrams):描述系统状态的变化和触发这些状态变化的事件。
  • 实体关系图(ER diagrams):用于描述数据库结构和实体之间的关系。
  • 饼图(Pie chart):用于简单的比例和统计显示。
  • Git图:git合并记录。
  • 思维导图、象限图、柱状图、折线图:不过说实话,这些图样式略丑。

  具体类型可以在官方编辑器中体验到:官方编辑器。

  即便是作者在极力去简化它的语法,但它仍然存在比较高的上手门槛,尤其是对一些没有编程基础的同学来说极难使用。然而在有了LLM之后,这一切都变得简单了。我们不再需要完全掌握Mermaid的语法,只需要用自然语言将数据和需求描述出来,LLM就可以生成Mermaid图表,然后再借助一些Markdown渲染器直接渲染出来。

示例

  我们来看几个实际使用示例:

已知2015年-2024年高考人数分别为942万, 940万, 940万, 975万, 1031万, 1071万, 1078万, 1193万, 1291万, 1342万,而对应1997-2006年之间的人口出生人数分别为2028万, 1934万, 1827万, 1765万, 1696万, 1641万, 1594万, 1588万, 1612万, 1581万。

  我们可以直接让大模型将这两份数据放在一张图里,方便对比出生人口和高考人数变化趋势。于是我得到了下面这张图(使用 Notion 渲染,很多Markdown编辑器都支持):
在这里插入图片描述
温馨提示:Marmaid 中折线图还是 beta 版本,各大 LLM 对这种图支持不太好,我在提示词中给出了官方示例代码后,gpt-4o才能在无语法错误的情况下给出,这里我贴出我的提示词供大家参考。

已知2015年-2024年高考人数分别为 942万, 940万, 940万, 975万, 1031万, 1071万, 1078万, 1193万, 1291万, 1342万,而对应 1997-2006 年之间的人口出生人数分别为2028万, 1934万, 1827万, 1765万, 1696万, 1641万, 1594万, 1588万, 1612万, 1581万

mermaid
    xychart-beta
    title "Sales Revenue"
    x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
    y-axis "Revenue (in $)" 4000 --> 11000
    bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
	  line [4000, 4000, 4500, 4200, 5500, 10500, 10000, 10200, 9200, 8500, 7000, 6000]

请参考以上mermaid中xychart-beta示例,用 mermaid 将两份数据画在一起。 

  再来举个时序图的例子。我曾经用LLM+Mermaid快速生成过一个时序图,向别人解释过线上一个bug产生的过程。这个bug的原因是我们数据库做了读写分离,从库数据延迟,导致另外一个流程读到了旧数据,做出错误的决策。这类的问题用语言向别人解释,对解释双方都是一个考验。我先用语言描述下这个bug,然后再让LLM生成对应的时序图,大家看下是不是对着图理解这个问题的成本就低很多。

  首先背景是我们服务操作数据库做了读写分离。数据修改时操作的是主库,数据读取的是从库。用户打开网页要看摄像头直播时,网页会向我们后端服务发起一个请求。我们后端服务会在数据库里标记这个摄像头有人在看直播,之后后端服务会向摄像头下发开启直播的指令。然而同时还有另外一个直播检测的流程,如果到数据库中摄像头没有被标记为有人看直播,会给摄像头下发指令关闭直播。这两个流程加上主从延时导致数据不一致,偶尔会出现时序图收到开启直播后又立即收到关闭直播的情况,导致用户看不了直播。

  以上描述我直接让LLM生成了对应的时序图,看起来是不是清晰明了很多了。提示词也很简单:“请用Mermaid画一个时序图,描述下上面这个问题产生的过程。”然后用Notion渲染出了下面这个图。
在这里插入图片描述

  对于绘制这些折线图、时序图、饼图、甘特图这些简单图表,LLM和Mermaid大部分情况下还是很得心应手的。那么在绘制复杂流程图的情况下,LLM+Mermaid的方式是否还能保持高效和准确?其实这对操作人的表述能力和LLM的理解能力都有非常大的挑战,但也不是完全不可能。我这里给出一个可以尝试的方法——分而治之。其实就是将大的复杂的问题,拆分成多个小而简单的问题挨个解决,然后将所有的结果汇总到一起。

  这里我就以一个稍微复杂一点的流程为例,展示下这个过程。还是以我们智慧工地这边工地绑定摄像头的流程为例,其实绑定大流程就两步:校验以及操作绑定。但细分流程里就有很多细节,比如校验的流程又可以细分出摄像头合法性校验,以及操作合法性校验,然后摄像头合法性又可以拆成多个校验……有些还可以细分好几层才能到最终的if else。下面我就用分而治之的思路,描述下整个摄像头绑定的流程(其实就是金字塔原理),然后让LLM将这个流程画出来,看对不对。

 摄像头绑定工地核心就是两个步骤,绑定前的校验 加上操作绑定。 
 # 绑定前校验
 校验的流程里可以细分出摄像头合法性校验,以及操作合法性校验
 
 ## 摄像头合法性校验
 1. 首先判断这个摄像头是否真实存在。
 2. 判断这个摄像头是否是在这个租户下面。 
 3. 判断这个摄像头是否还在服务期内。
 以上任意一条校验未通过直接结束。 
 
 ## 操作合法性校验
 1. 这个摄像头是否还绑定了其他工地。 
 2. 这个摄像头是否可以绑定这个工地。
 3. 操作人是否有权限做这个操作?   
 以上任意一条校验未通过直接结束。 
 
 # 绑定操作
 1. 更新摄像头和工地的绑定关系。
 2. 记录摄像头操作记录。
 3. 如果摄像头在线,立即初始化摄像头。 

在这里插入图片描述

结语

  通过上文中的介绍和示例,我们不难看出,只要我们能够清晰地通过自然语言描述需求,LLM就可以帮助我们用Mermaid生成符合需求的图表展示。在LLM和Mermaid的加持下,有些图表的绘制过程变得异常简单,甚至都不需要用绘图软件。不过不得不说这种方法也有一些缺陷:

  1. 生成的图表样式很丑,无法放在一些很正式的场合使用。
  2. 图中的布局无法控制,比如在上文摄像头绑定流程中,几个子图的位置我就完全无法调整。
  3. 图表种类和样式局限性,支持的图形就上文中那么多,而且样式有限,比如折线图这种常用图表居然在Mermaid中还是beta版本。
  4. 语言描述、LLM理解和Mermaid展示的局限性,导致很难绘制出复杂的图表。简单来说,有些内容你可能用语言描述不出来,即便能描述出来,LLM也理解不了,甚至即便LLM理解了,用Mermaid也很难画出来。

  不过这些局限性仍然有弥补的可能性。如果你不满意LLM用Mermaid绘制出来的图表,你还可以把它贴到Draw.io里做二次编辑(操作路径:工具栏/➕/高级/Mermaid),借助专业的绘图工具,就可以绘制出更专业好看的图表。我经常的使用习惯就是让LLM用Mermaid快速打个稿,然后贴到Draw.io里再改改,也是能极大节省时间成本的。

最后感谢大家阅读这篇文章,希望大家能有所收获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HydraRPC: RPC in the CXL Era——论文阅读

ATC 2024 Paper CXL论文阅读笔记整理 问题 远程过程调用(RPC)是分布式系统中的一项基本技术,它允许函数在远程服务器上通过本地调用执行来促进网络通信,隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…

Transformer-Bert---散装知识点---mlm,nsp

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点,有时间就会整理收录,希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同,bert是使用大量无标签的数据进行预训…

Spring 整合MongoDB xml解析

beans引用 xmlns:mongo"http://www.springframework.org/schema/data/mongo"xsi:schemaLocation"http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd " 具体…

学习使用Sklearn【LDA】线性判别分析,对iris数据分类!

数据集、代码均来自kaggle。地址:https://www.kaggle.com/datasets/himanshunakrani/iris-dataset?resourcedownload 🚀 揭示线性分类器的力量:线性判别分析的探索 欢迎来到线性分类器的世界和线性判别分析(LDA)的迷人领域!🌟在本笔记本中…

在服务器调用api操作rabbitmq

不同的rabbitmq版本可能api不同,仅做参考,RabbitMQ 3.7.18。同时,我基本没看官方api文档,根据rabbitmq客户端控制台调用接口参数来决定需要什么参数。例如: 1、添加用户 curl -u 用户名:密码 -H “Content-Type: a…

[亲测可用]俄罗斯方块H5-网页小游戏源码-HTML源码

本站的HTML模板资源:所见文章图片即所得,搭建和修改教程请看这篇文章:https://yizhi2024.top/8017.html

Maven 的模块化开发示例

Maven 的模块化开发是一种非常有效的软件开发方式,它允许你将一个大型的项目分割成多个更小、更易于管理的模块(modules)。每个模块都可以独立地构建、测试和运行,这不仅提高了开发效率,也便于团队协作和项目的维护。以…

华为云.云日志服务LTS及其基本使用

云计算 云日志服务LTS及其基本使用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550…

如何给7Z分卷文件设置密码?简单几步给文件加上安全锁

在压缩7Z文件的时候,如果文件比较大,很多小伙伴都会把文件压缩成7Z分卷文件,那想要保护7Z分卷文件,要如何设置密码呢?不清楚的小伙伴,一起来看看吧! 我们可以使用7-Zip解压缩文件,在…

安全的备忘录工具有哪些 安全好用的备忘录

在这个数字化的时代,我们的生活中充斥着各种各样的信息,从工作计划到个人琐事,从账号密码到重要日期,这些信息都需要我们牢记。然而,人的记忆毕竟有限,于是,备忘录工具成为了我们日常生活中不可…

easyExcel和poi的版本对应

easypoi3.0.5对应的poi版本_easypoi和poi版本对应-CSDN博客 https://github.com/alibaba/easyexcel/blob/v3.2.0/pom.xml 解决 java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错-CSDN博客 参考这个文档解决的- 引入最佳版本是3.15版本 java.lang.NoClas…

将Excel或CSV文件导入MySQL

数据库信息 版本:mysql-5.7.22 字符集如下 一、将 Excel 文件导入 MySQL,此时 MySQL 中不存在该表。 在数据库中,右键-导入向导

windows下mysql开启慢sql监控

上代码 #开启慢sql监控 SET GLOBAL slow_query_log ON; #设置慢sql日志存储路径 示例 SET GLOBAL slow_query_log_file D:\\javaTools\\mysql-8.0.32-winx64\\mysql-8.0.32-winx64\\slowSql\\slowSql.log; #超时时间 SET GLOBAL long_query_time 10; #查看是否开启慢查询 …

RabbitMQ的学习和模拟实现|GTest测试框架的介绍和简单使用

GTest 项目仓库:https://github.com/ffengc/HareMQ GTest GTest是什么我们需要学习的GTest功能宏断言事件机制 全局测试套件独立测试套件 GTest是什么 GTest是一个跨平台的 C单元测试框架,由google公司发布。gtest是为了在不同平台上为编写C单元测…

数学建模学习(112):FAHP模糊层次分析法

文章目录 一、FAHP方法由来二、模糊层次分析法原理2.1 AHP缺陷2.2 模糊集理论2.3 模糊层次分析法(FAHP)三、模糊层次分析法步骤3.1 问题定义与层次结构建立3.2 构造模糊判断矩阵3.2.1 计算模糊判断矩阵的列和向量3.2.2 计算模糊综合向量3.2.3 计算模糊权重向量3.3 解模糊数3.…

【Python】NumPy简要教程

文章目录 一、简介二、 ndarray 对象三、矩阵拼接四、数值运算4.1 数值选取4.2 单个数组的运算4.21 NumPy定义的常量4.22 单数组运算 4.3 数组之间的运算4.31 常见运算🟢4.32 广播机制:Broadcasting 五、数值类型、类型转换六、文件I/O 一、简介 NumPy …

56 网络层

本节重点 理解网络层的作用,深入理解IP协议的基本原理 对整个TCP/IP协议有系统的理解 对TCP/IP协议体系下的其他重要协议和技术有一定的了解 目录 前置认识ip协议基本概念协议头格式网段划分特殊的ip地址ip地址的数量限制私有ip和公有ip路由路由表生成算法 在复杂…

2024全网最全面及最新且最为详细的网络安全技巧 七之 XSS漏洞典例分析EXP以及 如何防御和修复(2)———— 作者:LJS

目录 8.5 Exploiting XSS with 20 characters limitation(蓝色为翻译)​编辑 Unicode compatibility 20 length limitation problem Taking advantage Next steps 8.6 Intigriti XSS 系列挑战 Writeups 8.6.1 xss challenge 1220 题目概述 思路分析 POC a.有交互 b.无交互 …

Ubuntu22.04安装与卸载nginx

换源 如果是国内的就不用换 中科大的源,由于我这里是Ubuntu,所以我就直接选Ubuntu22.04就行 点击下载,或者你直接复制这个sources.list的内容到linux中的/etc/apt/sources.list也可以,把原来的sources.list备份一下,…

python+pyqt开发海康相机数据采集系统

pythonpyqt开发海康相机数据采集系统 pythonpyqt开发海康相机数据采集系统 1 开发软件功能: 支持搜索相机:Gige相机设备和USB相机设备支持两种触发模式:软件触发和编码器触发支持数据采集过程中图像实时保存支持参数调节和实时预览&#xff…