
关于Langgraph中的节点和边的深入理解 原创
“ Langgraph的核心功能点在Nodes节点和Edges边,Nodes负责执行任务,Edges负责任务流程。”
在使用Langgraph开发框架的过程中发现一个问题,其官方文档给的案例都是比较简单的案例,虽然能让我们弄明白其运作机制,但无法真正解决业务问题;因为实际的业务场景要远比官方案例复杂的多。
所以,在学习框架的使用过程中感觉好像没什么难度;但等到真正结合实际业务时才发现好像束手束脚,有点无从下手。
之所以产生这种问题的原因就在于,我们没有真正理解其设计哲学和其运作机制。下面,我们就来深入理解一下Langgraph中的节点和边。
Langgraph的节点和边
在Langgraph的官网介绍中,Langgraph的三个核心组件分别是State,Nodes-节点和Edges-边。而State只是一个用来存储数据的数据结构,其功能类似于缓存;而Nodes节点和Edges边才是Langgraph业务处理的核心组件。
节点
节点是Langgraph执行业务功能的核心组件,所有的业务逻辑都是由节点来完成的;而节点中可以是一个模型调用,也可以是工具调用,其就是一个功能点,来完成特定的任务;之后,再把执行结果交给下个节点继续执行。
而节点之间的数据流转,就是通过边来实现的,边会告诉节点下一个节点应该是哪一个。
在节点中有两个特殊节点,START节点和END节点,START节点是一个特殊节点,其是智能体的入口,接受用户的请求,并传入到图中;而END节点也是一个特殊节点,其作用是终止智能体,当调用节点完成任务之后进入此节点就代表任务结束。
节点缓存
LangGraph 支持根据节点输入对任务/节点进行缓存。要使用缓存:
- 在编译图(或指定入口点)时指定缓存。
- 为节点指定缓存策略。每种缓存策略支持:
-
key_func
用于根据节点输入生成缓存键,默认为输入与 pickle 的hash
。 -
ttl
缓存的存活时间(秒)。如果未指定,缓存将永不 expires。
边
边在Langgraph中类似于路由,当用户请求通过START节点进入智能体之后;START之后执行的下一个节点就是通过边指定的。
不过要注意的是条件边,如果你想可选地路由到 1 个或多个边(或可选地终止),你可以使用 add_conditional_edges 方法。此方法接受一个节点名称和一个在该节点执行后调用的“路由函数”。
graph.add_conditional_edges("node_a", routing_function)
入口点
入口点是图启动时运行的第一个节点。你可以使用从虚拟 START
节点到要执行的第一个节点的 add_edge
方法来指定图的入口点。
from langgraph.graph import START
graph.add_edge(START, "node_a")
条件入口点¶
条件入口点允许你根据自定义逻辑从不同的节点开始。你可以使用从虚拟 START
节点到此的 add_conditional_edges
。
fromlanggraph.graphimportSTARTgraph.add_conditional_edges(START,routing_function)
你可以选择提供一个字典,将 routing_function
的输出映射到下一个节点的名称。
graph.add_conditional_edges(START, routing_function, {True: "node_b", False: "node_c"})
本文转载自AI探索时代 作者:DFires
