Skip to content

27. LangGraph 的 State、Node、Edge 各自职责是什么? ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min

本题阅读地图 ​

  1. 💡 简要回答
  2. 📝 详细解析
  3. 🎯 面试总结

👔面试官:LangGraph 的 State、Node、Edge 各自职责是什么?

🙋‍♂️我:State 存数据,Node 处理数据,Edge 控制流程。

👔面试官:对,但还有更细的分工:State 是 TypedDict,明确定义结构;Node 是纯函数,输入 State 返回更新;Edge 分普通边和条件边,条件边用函数判断走向。你能展开吗?

🙋‍♂️我:条件边根据 State 判断下一步走哪?

👔面试官:对,而且 State 的更新是增量更新,不是替换。多个节点可以并行更新不同字段。这是 LangGraph 灵活性的关键。

💡 简要回答 ​

组件职责说明
State数据结构TypedDict 定义,存所有运行时数据
Node处理逻辑纯函数,接收 State,返回 State 更新
Edge流程控制普通边(固定流转)、条件边(动态判断)

State 更新机制:

  • 增量更新(不是替换)
  • 多个节点可并行更新不同字段
  • 自动合并到主 State

📝 详细解析 ​

State 定义 ​

python
from typing import TypedDict, Annotated
from operator import add

class State(TypedDict):
    messages: Annotated[list, add]  # 用 add 合并,不是替换
    documents: list
    next_step: str

注解(Annotated):

  • 指定字段如何更新(add、replace、自定义函数)

Node 实现 ​

python
def retrieval_node(state: State) -> dict:
    docs = retriever.get_relevant_documents(state["messages"][-1].content)
    return {"documents": docs}  # 只返回要更新的字段

def generation_node(state: State) -> dict:
    response = llm.invoke(state["messages"])
    return {"messages": [response]}

特点:

  • 纯函数,无副作用
  • 返回 dict,只包含要更新的字段
  • 系统自动合并到 State

Edge 类型 ​

普通边:

python
workflow.add_edge("node_a", "node_b")  # A 完了一定走 B

条件边:

python
def route(state: State) -> str:
    if len(state["documents"]) > 0:
        return "generate"
    else:
        return "rewrite_query"

workflow.add_conditional_edges("retrieve", route, {
    "generate": "generate_node",
    "rewrite_query": "rewrite_node"
})

🎯 面试总结 ​

State 定义数据结构,Node 实现处理逻辑,Edge 控制流转。State 增量更新,条件边支持动态分支。


章节首页 · ← Q26 · Q28 →

最后更新2026-05-01
难度P1
频率medium
阅读5 min
主题framework
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题