LangGraph 核心模型就是:节点 (Node) + 边 (Edge)
- 节点 Node:就是一段要执行的代码 / 函数(可以调用 AI、可以调用接口、可以调用外部程序)
- 边 Edge:规定:跑完 A 节点之后,下一步跑哪个节点
- 普通边:A 跑完固定去 B
- 条件边:A 跑完,看数据状态,选不同下一站(if‑else 分支)
你只画好 "流程图",它不会自己跑;你调用 graph.invoke(数据),它才开始顺着边跑节点。
cpp
# ---------------------- 搭建LangGraph流程图(棋盘) ----------------------
builder = StateGraph(MyState)
# 把上面写好的函数注册成图里面的节点(棋盘上的格子)
builder.add_node("ai_think_node", ai_think)
builder.add_node("tool_node", mock_tool)
builder.add_node("answer_node", ai_make_answer)
# 设置流程起点:一开始先跑 ai_think_node
builder.set_entry_point("ai_think_node")
# 条件分支:AI思考完,判断走哪条路
def route_after_think(state: MyState):
if state["ai_thought"] == "需要调用工具":
return "go_tool" # 去调用工具
else:
return "go_end" # 直接结束
builder.add_conditional_edges(
source="ai_think_node",
path=route_after_think,
path_map={
"go_tool": "tool_node",
"go_end": END
}
)
# 工具跑完之后,走到ai整理答案,整理完结束
builder.add_edge("tool_node", "answer_node")
builder.add_edge("answer_node", END)
# 把整个棋盘编译好,得到可运行的对象
graph = builder.compile()
如果没有 LangGraph,你自己手写代码要这么写:
cpp
# 没有LangGraph,自己写
result = ai_think(...)
if result["ai_thought"] == "需要调用工具":
result = mock_tool(result)
result = ai_make_answer(result)
# 如果以后要加循环、加分支、中途暂停,你就要自己写大量if、while,自己传递变量state
LangGraph 就是帮你把:节点注册、跳转逻辑、状态数据传递、分支判断全部封装好了。你只需要定义节点函数,然后告诉它 "A 之后,如果 XX 条件就去 B,否则去 C"。