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

  过去的一年里,我相信大部分人都已经看到了大语言模型(后文简称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万mermaidxychart-betatitle "Sales Revenue"x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]y-axis "Revenue (in $)" 4000 --> 11000bar [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.mzph.cn/diannao/51721.shtml

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

相关文章

SpringBoot整合PowerJob 实现远程任务

PowerJob介绍 PowerJob 是全新一代分布式任务调度和计算框架,提供了可视化界面,可通过单机、远程等形式调用任务并提供了运行监控和日志查看的功能模块,是当前比较流行的分布式定时任务框架之一; PowerJob 官网文档地址 环境搭建…

DC系列靶场---DC 3靶场的渗透测试(一)

信息收集 Nmap扫描 nmap -sS -sV -T4 -p- -O 172.30.1.142//-sS TCP的SYN扫描 //-sV 服务版本检测 //-T4 野蛮的扫描(常用) //-O 识别操作系统 使用Nmap扫描只看到一个80端口,Apache的2.4.18版本。 http探测 使用Wappalyzer插件可以到…

OSMDroidOfflineDemo源码调试记录

文章目录 源码下载环境配置尝试不同离线加载遇到的问题 尝试安卓端加载离线地图,下载了使用osmdroid的离线版项目源码,更改JDK环境、gradle环境,一顿操作下来,踉踉跄跄的把程序跑起来了,但是离线的地图一直加载不出来。…

机器人笛卡尔空间阻抗控制

机器人笛卡尔空间阻抗控制是一种重要的机器人控制策略,它关注于机器人末端执行器在笛卡尔空间(即任务空间)内的动态特性,以实现与环境的柔顺交互。以下是对机器人笛卡尔空间阻抗控制的详细解释: 一、基本概念 笛卡尔空间:指机器人末端执行器(如手爪、工具等)所处的三维…

QT基础教程(QEvent事件和事件过滤器)

文章目录 前言一、具体介绍二、具体案例1.鼠标事件2.键盘事件3.窗口事件 三、事件过滤器事件过滤器的工作原理 总结 前言 本篇文章将带大家来学习QT中的QEvent事件,QEvent 是 Qt 框架中的一个核心类,用于处理各种事件。在 Qt 的事件处理系统中&#xff…

C++学习日记 | LAB 10 运算符重载与友元函数

资料来源&#xff1a;南科大 于仕琪 C/C Program Design LINK&#xff1a;CPP/week10 at main ShiqiYu/CPP GitHub 一、本节内容 本节首先以一个例子具体演示和回顾操作符重载、友元函数以及重载<<操作符。习题部分则为各种运算符重载以及输入输出重载 1.1 Operator o…

nginx 版本升级

Nginx 的版本最开始使用的是 Nginx-1.18.0 &#xff0c; 由于服务升级&#xff0c;需要将 Nginx 的版本升级到 Nginx-1.19.7 &#xff0c;要求 Nginx 不能中断提供服务。 为了应对上述的需求&#xff0c;提供两种解决方案&#xff1a; 方案1&#xff1a; make upgrade 完成升…

包装类和泛型

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; 包装类&#x1f319; Java中每个基本数据类型都对应了一个包装类&#xff0c; 除了int的包装类是Integer&#xff0c;char…

STM32项目分享:智能风扇系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.com/video/BV1xw4m1Y7sA…

详解 @RequestHeader 注解在 Spring Boot 中的使用

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

springboot鲜花商城平台-计算机毕业设计源码56085

基于微信小程序的鲜花商城平台设计与实现 摘 要 鲜花商城小程序的研究旨在设计和开发一个方便、快捷的移动应用平台&#xff0c;为用户提供鲜花购买、资讯浏览和社交互动等功能。该研究包括以下几个方面的内容&#xff1a;首先&#xff0c;通过调研和分析鲜花市场和用户需求&a…

【你也能从零基础学会网站开发】 SQL结构化查询语言应用基础--DDL篇--SQL Server数据库开发之ALTER TABLE修改表语句使用详解

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 ALTER TABLE 语…

Docker NameSpace隔离

1、dd命令&#xff1a;dd 可从标准输入或文件中读取数据&#xff0c;根据指定的格式来转换数据&#xff0c;再输出到文件、设 备或标准输出 功能&#xff1a;用于读取、转换并输出数据 语法&#xff1a;dd OPTION 参数 1、 if文件名&#xff1a;输入文件名&#xff0c;默认为…

【C++】C++的类型的转换

目录 C语言中的类型转换 C中的类型转换 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast C语言中的类型转换 C语言中又两种类型转换&#xff1a;&#xff08;强制&#xff09;显示类型转换和隐式类型转换。 &#xff08;强制&#xff09;显示类型…

Linux系统服务——【web,http协议,apache服务和nginx服务】(sixteen day)

一、web基础以及http协议 1、web基本概念和常识 前端开发一般用uniapp. 1、Web:为用户提供的一种在互联网上浏览信息的服务&#xff0c;Web 服务是动态的、可交互的、跨平台的和图形化的。 2、Web 服务为用户提供各种互联网服务&#xff0c;这些服务包括信息浏览服务&#xf…

深入源码:解析SpotBugs (3) Detector

文章目录 OpcodeStackDetector常用套路调用栈visit code类检测方法检测代码行检测 前面的博客也提到过&#xff0c;Spotbugs 里面 Detector2 与 Detector&#xff0c;FindBugs2 与 FindBugs&#xff0c;GUI2与GUI&#xff0c;可以视为 Spotbugs 与 FindBugs 新老技术的碰撞&…

STM32单片机C语言:继电器控制220v灯泡亮灭

本文旨在详细阐述如何利用STM32单片机结合继电器模块&#xff0c;实现对220V灯泡亮灭的远程控制。我们将深入探讨继电器的工作原理&#xff0c;构建相应的硬件电路&#xff0c;并提供具体的程序实现步骤&#xff0c;在智能家居与自动化控制领域的应用的比较多。 一、继电器原理…

接口测试支持IDEA插件一键同步API、新增思维导图快速评审测试用例,MeterSphere开源持续测试工具v3.1.0版本发布

2024年7月29日&#xff0c;MeterSphere开源持续测试工具正式发布v3.1.0版本。 在这一版本中&#xff0c;接口测试方面&#xff0c;支持通过IDEA插件一键同步API至MeterSphere&#xff1b;测试管理方面&#xff0c;“测试用例”模块新增通过思维导图模式快捷评审测试用例。在“…

扫码登录方案

以哔哩哔哩扫码登录为例 二维码解码后内容为&#xff1a;https://passport.bilibili.com/h5-app/passport/login/scan?navhide1&qrcode_keye60869ce7f5235c7123175a7effc6f90&frommain-fe-header 扫码登陆&#xff0c;利用已登录设备授权未登录设备登录的方式 扫码…

使用JavaFx Fxml笔记

使用JavaFx Fxml实现账号密码登录 HelloApplication.java&#xff1a;package com.example.dr295cmonth7;import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.Scene; i…