凭借AI帮手剖析LlamaIndex的工作流可视化
接续前次的评论,咱们前次首要剖析了LlamaIndex工作流的中心流程,当时还剩下一行代码需求重视,那就是关于工作流的可视化。今日咱们的方针是深化了解这一可视化部分的首要流程,而且对其大体的完结办法进行扼要的了解和评论。
为了帮忙咱们更好地把握这一内容,咱们先回忆一下前次评论的代码内容,具体如下:
from llama_index.utils.workflow import draw_all_possible_flows
if __name__ == "__main__":
import asyncio
asyncio.run(main())
draw_all_possible_flows(MyWorkflow, filename="multi_step_workflow.html")
实践上,后边运用了一个network封装的办法。为了更好地了解这一点,咱们可以凭借AI帮手来帮忙咱们深化了解相关的细节和原理。
可视化
底层逻辑
咱们直接向AI帮手问询这段代码的全体逻辑。从现在的反应来看,AI帮手的答复现已恰当全面,经过简略的阅读后,便可以对代码的根本思路有一个明晰的了解。
我来总结一下这个进程,根本可以归纳为以下几个重要过程:
- 首要,咱们需求创立一个全体的画布,作为整个流程的根底结构。
- 接下来,体系将辨认一切标示了特定注解的办法,并提取出与这些注解相关的装备信息,以保证后续操作可以依据正确的上下文进行。
- 在这一步中,咱们将运用之前获取的注解办法,逐个增加反映这些办法的节点,构建出一个完好的节点图。
- 随后,咱们将为现已增加的一切节点之间树立衔接,构成一个体系的结构,经过边的衔接联系进一步清晰各节点之间的关联性。
- 终究,将一切制作的内容和结构输出到用户指定的HTML文件中,以便于用户检查和运用。
Network是啥
pyvis 是一个功用强大的 Python 库,专门用于创立动态和交互式的网络可视化图形。该库中的中心组件是 Network 类,经过这一类,用户不只可以构建杂乱的网络结构,增加各种节点和边,还可以灵敏地设置网络的布局和款式,以满意不同的可视化需求。
根本用法
假如你对相关内容还不是很熟悉,彻底不必忧虑,你可以直接恳求咱们的AI帮手为您生成一个入门示例,这样你就可以经过实践操作来了解和把握。这样的办法不只简单明了,而且十分有用。
我把它生成的代码直接拿出来。
from pyvis.network import Network
# 创立一个 Network 目标
net = Network(directed=True, height="750px", width="100%")
# 增加节点
net.add_node("Hello", label="Hello", color="#E27AFF", shape="ellipse")
net.add_node("World", label="World", color="#90EE90", shape="ellipse")
# 增加边
net.add_edge("Hello", "World")
# 显现网络图
net.show("hello_world.html", notebook=False)
作用十分超卓,如下图所示:
已然Python现已可以完结这一功用,那么咱们可以估测Java也必定具有相关的生态体系。因而,无妨测验运用Java版原本探究是否存在更为高雅或高效的处理计划。
Java图可视化
咱们对现有的计划并不十分了解,因而无妨直接向AI帮手咨询,寻求其帮忙来生成一些或许的处理计划。
经过实践测验后,我发现问题的本源在于,Maven的依靠库中根本就没有这个依靠。因而,无法顺畅完结编译和运转。归纳来看,AI帮手在处理Python代码时体现得恰当友爱,生成的代码一般可以在第一次测验时顺畅运转,简直不需求做太多修正或调试。而关于像Java这样具有严厉语法标准和杂乱依靠办理的言语来说,AI帮手在生成代码时或许会遇到一些应战,需求开发者在运用进程中额定投入必定的精力去调整和调试。
尽管如此,AI帮手关于初学者来说依然是一个十分不错的东西,尤其是关于快速入门编程的学习者。假如你是编程新手而且想要快速上手,主张可以先从Python这样的动态言语开端
这儿我上网查找后,改正一下:
<dependency>
<groupId>net.sf.jung</groupId>
<artifactId>jung-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>net.sf.jung</groupId>
<artifactId>jung-graph-impl</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>net.sf.jung</groupId>
<artifactId>jung-visualization</artifactId>
<version>2.1.1</version>
</dependency>
终究的代码如下:
// 创立一个有向图
Graph<String, String> graph = new DirectedSparseGraph<>();
// 增加节点
graph.addVertex("Hello");
graph.addVertex("World");
// 增加边
graph.addEdge("Hello to World", "Hello", "World");
// 设置布局
Layout<String, String> layout = new CircleLayout<>(graph);
// 创立可视化组件
BasicVisualizationServer<String, String> viz = new BasicVisualizationServer<>(layout);
viz.setPreferredSize(new Dimension(750, 750));
// 设置节点标签
viz.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
// 设置节点色彩
Paint vertexPaint = new Color(226, 126, 255);
viz.getRenderContext().setVertexFillPaintTransformer(v -> vertexPaint);
// 显现窗口
JFrame frame = new JFrame("Hello, World! Network");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(viz);
frame.pack();
frame.setVisible(true);
这儿其实没有太多需求评论的内容,直接运转代码应该就能成功。关于AI帮手说到的MVN库房问题,我略微看了一下,发现问题的本源在于尽管我的 Maven 依靠中的 groupId
是 net.sf.jung
,但是在代码引进的时分,实践上运用的是 edu.uci.ics.jung.graph.Graph
这个途径,这的确有点令人困惑。我也查了一下,这个结构的确是十分老旧了,文档资源简直现已不存在。
接下来,咱们直接看下代码的作用吧。可以类比为一张静态图片,这儿鼠标是无法与节点进行交互的,首要展现的是图形结构的静态布局。
graphstream
在与一些老友沟通并听取了他们的主张后,我发现了一个十分有用的东西结构——GraphStream。GraphStream 是一个专为动态图形建模和剖析规划的 Java 库,它供给了丰厚的功用,可以帮忙咱们轻松生成、导入、导出图形,进行图形的丈量、布局优化,而且可以进行可视化展现。
经过深化了解后,我决议让 AI 帮手持续帮忙咱们生成相关代码。如图所示:
首要,咱们需求增加一些必要的依靠。为了保证代码可以顺畅运转,我在原有依靠的根底上,增加了一些额定的依靠项,由于在初度运转时会遇到一些报错,尤其是短少某些库或版本不兼容的问题。经过一些调试和调整后,以下是处理完一切报错后的完好依靠装备:
<dependency>
<groupId>org.graphstream</groupId>
<artifactId>gs-core</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.graphstream</groupId>
<artifactId>gs-algo</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.graphstream</groupId>
<artifactId>gs-ui</artifactId>
<version>1.3</version>
</dependency>
我把代码仿制出来,给咱们一个参阅:
System.setProperty("org.graphstream.ui", "swing");
Graph graph = new SingleGraph("Tutorial 1");
graph.addNode("A");
graph.addNode("B");
graph.addNode("C");
graph.addEdge("AB", "A", "B");
graph.addEdge("BC", "B", "C");
graph.addEdge("CA", "C", "A");
graph.display();
终究,经过一系列的调试和优化,作用达到了预期。终究出现的成果如图所示,所完结的功用与之前在 Python 中完结的作用简直没有差异。
总结
在本文的终究,咱们总结了LlamaIndex工作流的可视化部分的完结和细节,要点剖析了怎么运用Python中的pyvis
库和Java中的图形库,分别在两种言语中构建和展现网络图。经过代码示例,咱们具体评论了怎么构建节点、增加边并经过布局生成交互式图形,一起也说到了在Java中运用Jung
库和GraphStream
库时或许遇到的应战与处理计划。
在实践使用中,尽管AI帮手可以帮忙咱们加快开发和处理一些问题,但仍然需求开发者依据实践需求,结合言语的特性做出恰当调整。
我是尽力的小雨,一名 Java 服务端码农,潜心研究着 AI 技能的奥妙。我酷爱技能沟通与共享,对开源社区充满热情。一起也是一位腾讯云创造之星、阿里云专家博主、华为如此享专家、掘金优异作者。
💡 我将不惜共享我在技能道路上的个人探究与经历,期望能为你的学习与生长带来一些启示与帮忙。
🌟 欢迎重视尽力的小雨!🌟