惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
W
WeLiveSecurity
P
Proofpoint News Feed
月光博客
月光博客
NISL@THU
NISL@THU
L
LINUX DO - 最新话题
Webroot Blog
Webroot Blog
T
Threatpost
Y
Y Combinator Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Threat Research - Cisco Blogs
Vercel News
Vercel News
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
S
Schneier on Security
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
MyScale Blog
MyScale Blog
N
News and Events Feed by Topic
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
The Hacker News
The Hacker News
Schneier on Security
Schneier on Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
Recent Announcements
Recent Announcements
S
Security @ Cisco Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Securelist
T
The Exploit Database - CXSecurity.com
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
雷峰网
雷峰网
量子位
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
I
Intezer
T
The Blog of Author Tim Ferriss
G
GRAHAM CLULEY
D
DataBreaches.Net
V
Vulnerabilities – Threatpost
P
Privacy & Cybersecurity Law Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
罗磊的独立博客

XINDOO

关于内卷,几个值得深想的洞察 当创作被 Skill 化:我用 AI 写了一部 320 章的长篇网文 AI第一剑,先斩程序员 AI 也会偷懒?这个 PUA 工具专治“摸鱼式编程” Gstack 深度解析:YC CEO 开源的 AI 工程团队 GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers 深度探讨:从 OpenClaw 爆火,看 AI Agent 的真相与程序员的未来 我复刻了NotebookLM的信息图功能 我用AI写了部小说,这里是整个过程 [翻译]我在谷歌14年学到的21堂课 2万字吊打40万字:为什么我的“牛马Agent”比“数字分身”更聪明? 最近AI领域爆火的 Agent Skills 是什么? 从计算机科学的视角来看拖延症 一周改6个库后我悟了:AI时代,程序员正在退化成“甲方” 使用n8n做一个自动同步更新的Github项目问答机器人 Agent设计模式——第 20 章:优先级排序 Agent设计模式——第 1 章:提示词链 Agent设计模式——附录 D - 使用 AgentSpace 构建 Agent Agent设计模式——第 19 章:评估和监控 Agent设计模式——第 10 章:模型上下文协议 (MCP) Agent设计模式——第 21 章:探索和发现 Agent设计模式——智能体设计模式 Agent设计模式——第 11 章:目标设定和监控 Agent设计模式——第 9 章:学习和适应 Agent设计模式——第 16 章:资源感知优化 Agent设计模式——附录 G - 编码 Agent Agent设计模式——第 13 章:人机协同 Agent设计模式——第 17 章:推理技术 Agent设计模式——附录 F - 深入剖析:Agent 推理引擎的内部运作机制 Agent设计模式——章节目录 Agent设计模式—— Agent设计模式——第 7 章:多 Agent 协作 Agent设计模式——附录 E - 命令行界面中的 AI Agent Agent设计模式——附录 C - Agentic 框架快速概览 Agent设计模式——第 3 章:并行化 Agent设计模式——**常见问题解答:Agentic 设计模式** Agent设计模式——第 14 章:知识检索(RAG) Agent设计模式——第 18 章:Guardrails/安全模式 Agent设计模式——第 15 章:Agent 间通信(A2A) Agent设计模式——第 8 章:内存管理 Agent设计模式——第 12 章:异常处理和恢复 Agent设计模式——第 4 章:反思 Agent设计模式——附录 B - AI Agentic 交互:从图形界面到现实世界环境 Agent设计模式——第 5 章:工具使用(函数调用) Agent设计模式——结论 Agent设计模式——第 6 章:规划 Agent设计模式——第 2 章:路由 从经验主义到贝叶斯理论:如何排查线上问题 我用AI为自己造了一把安全的开发者“瑞士军刀”” 从LLM和MCP的协同过程看如何做优化 打通Dify与AI工具生态:将Workflow转为MCP工具的实践 一文了解知识库背后的技术RAG AI应用的五个级别:从入门到专家的进阶之路 一文入门AI圈最近爆火的MCP协议 HTTP/3:性能改进(第 2 部分) deepseek-r1祛魅:从过度热捧到理性认知⁠ 为什么AI智能体需要工作流 如何用GPT-4o解读视频 json命令行处理神器jq介绍 OpenAI的结构化浅析 从大模型的原理到提示词优化 从经济学原理看团队分工合作 [翻译]关于人工智能的30个思考 从马斯洛需求层次理论谈职场激励 知识与智慧 两个开源项目打造自己的大模型聚合平台 我让gpt4o给我推荐了一千多次书 得到了这些数据 用Langchain创建一个可以总结网页内容的Agent 推荐一个好用的命令行工具ShellGPT 关于ffmpeg height not divisible by 2的错误 使用Certbot解决https证书自动更新的问题 Spring Cache简明教程 软件开发中的抓大放小vs极致细节思维 OpenAI Assistants-API简明教程 OpenAI的多函数调用(Multiple Function Calling)简介 如何使用ffmpeg制作透明背景的视频 spring-kafka中ContainerProperties.AckMode详解 如何在地图上寻找最密集点的位置? IO密集型服务提升性能的三种方法 职场中的基本归因错误和自利归因 使用javax.validation.constraints校验参数合法性 Java Optional:让你的代码更优雅 ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力 如何使用ChatGPT提升自己的“码”力? 使用ffmpeg拼接两张图片 ThreadPoolExecutor——高效处理并发任务的必备良器 从CPU的视角看 多线程代码为什么那么难写! 使用ffmpeg缩小视频体积的几种方式 Linux parallel 命令使用手册 为什么说过早优化是万恶之源? Linux xargs命令介绍 深入理解Spring的事件通知机制 Java高并发之CyclicBarrier简介 聊一聊过度设计! 详解Redisson分布式限流的实现原理 Java中使用HashMap时指定初始化容量性能一定会更好吗? 如何用ffmpeg截取视频片段&截取时间不准确的坑 XINDOO的2022年年终总结 使用ffmpeg将视频转成HLS(m3u8)格式 谷歌Guava LoadingCache介绍
如何使用大语言模型绘制专业图表
xindoo · 2024-07-22 · via XINDOO

  过去的一年里,我相信大部分人都已经看到了大语言模型(后文简称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里再改改,也是能极大节省时间成本的。

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