基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

START 和 END 这两个内置的虚拟节点的作用分别是什么?

知识点图片

在 LangGraph 中,STARTEND 是两个非常核心的内置虚拟节点(Constants)。它们的主要作用是定义图(Graph)执行的边界,即告诉程序工作流从哪里开始,到哪里结束。

以下是它们各自的具体作用和使用方式:

1. START 节点(起点)

START 节点代表了整个图执行的入口

  • 作用:当你调用 graph.invoke(input)graph.stream(input) 传入初始数据时,这些数据(即初始的 State)会首先到达 START 节点。START 负责将这些初始状态传递给图中的第一个实际工作节点。
  • 用法:你通常需要添加一条从 START 指向某个具体节点的边(Edge),以此来指定图的起始动作。
  • 注意:一个图必须要有且仅有一条明确的起始路径(可以是从 START 到单个节点,也可以是通过条件路由到不同节点),否则图不知道该从哪个节点开始运行。

代码示例:

python
from langgraph.graph import START

# 告诉图:一开始就执行 "agent_node" 这个节点
workflow.add_edge(START, "agent_node")

2. END 节点(终点)

END 节点代表了整个图执行的出口

  • 作用:当图的执行流到达 END 节点时,表示当前的工作流已经完成。程序会停止在图中的循环或流转,并将当前最终的 State(状态)作为结果返回给用户。
  • 用法:你可以通过普通的边(Normal Edge)或条件边(Conditional Edge)将某个工作节点指向 END
  • 为什么重要:LangGraph 主要用于构建具有循环(Cycles)能力的 Agent(比如思考->行动->观察->再思考)。如果没有 END 节点,Agent 可能会陷入无限循环。将路径指向 END 是打破循环、结束任务的关键。

代码示例:

python
from langgraph.graph import END

# 1. 直接结束:执行完 "final_node" 后,整个图结束
workflow.add_edge("final_node", END)

# 2. 条件结束:根据条件决定是继续循环还是结束
def should_continue(state):
    if state["status"] == "finished":
        return END  # 任务完成,走向终点
    else:
        return "tool_node" # 继续执行工具节点

workflow.add_conditional_edges("agent_node", should_continue)

总结对比

特性 START 节点 END 节点
角色 图的入口 / 数据初始化位置 图的出口 / 返回最终结果的位置
边的方向 只能出,不能进(作为起始点) 只能进,不能出(作为终止点)
状态传递 接收用户输入的初始 State 输出计算完成的最终 State
主要意义 告诉引擎“从哪里开始运行” 告诉引擎“何时停止循环并退出”

补充说明:
在早期版本的 LangGraph 中,开发者通常使用 workflow.set_entry_point("node_name")workflow.set_finish_point("node_name")。但在后来的版本中,官方引入了 STARTEND 常量配合 add_edge 使用,这种方式使得图的逻辑表达(尤其是在可视化和复杂路由时)更加直观和一致。

00:00
00:00