spring-ai-alibaba 学习(二十六)——graph总结
什么是graph
许多人在刚接触graph的时候会有点懵,什么是图?什么是编排?到底在描述一个什么东西?
设想一个场景,需要实现一个特别复杂的智能问答系统,涉及到问题分类、问题扩展、联网查询、私有知识库查询、工具调用、人工介入等非常复杂的流程,甚至通过画流程图才能有一个清晰的表达
为了提高代码的可读性,最终决定将流程图中每一个节点的功能封装在一起,并且以有向边来连接节点,指明功能的执行顺序,最后将在各个节点间流转的数据封装为全局状态OverAllState
graph就是这样的一个预设好的流程图的框架,用户只需将自己的业务逻辑定义在节点中,设置好边的方向,剩下的都交给graph即可,比如节点和边的合法性检查,每个节点执行完后保存状态,支持在某个节点前后中断来进行人工介入等
适用场景
流程非常复杂,有许多循环、判断等非线性的流程
发生异常后,需要从前一节点结果继续执行,而不是从头开始
需要人工介入,比如对工具的调用需要批准
想要开发类似dify的,通过页面拖拽来创建智能体的功能
支持哪些扩展功能
并行节点:支持多条边从同一个节点出发,指向不同节点
子图:支持将一个图,作为一个节点,嵌入另一个图中
条件边:支持在边上添加条件判断
进度保存:支持在每个节点执行完后保存进度
中断-恢复:支持在某个节点前或后中断,执行其他操作如人工介入,然后恢复图的执行
导出流程图:支持导出图形格式的流程图,方便查看,更加直观
如何使用
业务逻辑实现:自定义节点功能逻辑,有需要的话自定义条件边
定义图:添加节点和边,组成流程图
编译图:检查图的合法性,以及对图的预处理,如合并并行节点为一个超级节点,将子图接入父图中等
运行图:传入初始的OverAllState,按照图的定义逐步运行
其他
辅助组件:listener,可以在start、end、error、节点前和节点后等事件触发时添加自定义操作
代码包:主要逻辑都在spring-ai-alibaba-graph-core中,另外还有样例spring-ai-alibaba-graph-example和 DSL 导入相关的spring-ai-alibaba-graph-studio
样例资源:除了上面提到的,在spring-ai-alibaba-example项目下,也有spring-ai-alibaba-graph-example模块
想了解具体的细节,可以参考之前的spring-ai-alibaba 学习系列的十七~二十五篇