【随笔1102】LangGraph 时间旅行
一、LangGraph是什么
顾名思义,就是一种适用于AI大模型运行的图结构。
你可以在图里声明节点(官方说是超级节点 Super Step)
节点也分为多种类型,比如Agent Node,调用大模型,按照提示词执行;还有Tool Node,负责调用我们已经定义好的tools的;当然还有路由节点,这种节点可以按照条件,动态调整要跳到哪些节点
节点之间是靠Edge(边)来连接,你不显式声明这些边,节点也不知道下一步该往哪里走。对应上述提到的路由节点,需要用条件边来连接
我们还可以并行走N个节点,利用Sender就行,最后走到同一个节点进行信息汇总
和LangChain不同的是,LangChain就是一条路走到黑,还不能回退。但在LangGraph是ok的,你可以让他再从Agent Node 2回到原先的Agent Node 1;但别忘了让他最后能正常结束整个图流程,别陷入死循环了。
另外如果你希望能回溯节点A,换句话说你希望能重新从节点A再出发,也是可以的。这就来到了接下来我们要聊的时间旅行。
二、 时间旅行
你想要回溯或重放,那必须有个重要前提:你必须得保存节点的执行记录
你需要给graph配置一个存储器,具体是什么样的存储器,看你的具体情况。如果你只是想保存到内存里,用ImMemorySaver就行,但你要想持久化保存,就根据你实际使用的数据库来挑选对应的Saver
假设我们选择的是数据库Saver,那么他会往你的数据库里创建几张表,你能看到表名都会有个checkpointer类似的写法。
checkpointer就是检查点的意思。每次在图结构里跑完一个节点就会生成检查点记录,里面会包含threadid、checkpointerid、父节点信息、下一个节点、元数据、state等
threadid 就是某个会话或者说是一次图运行的流程;checkpointerid就是对应节点
当我们手动给graph传入threadid和checkpointerid,就会从那个节点之后开始执行
另外在记录各个state的时候,也会记录他们各自的版本,检测到state变更的相应的节点才会触发执行
先记到这里,后续有内容补充的我再更新。
有问题的话欢迎指出。