失业一年了,天天想着怎么翻身。去年用LangChain Agent写东西,经常状态丢了、循环卡死,debug像抓瞎。后来接触LangGraph,第一次感觉AI流程终于能像画流程图一样,自己掌握节奏。这节课不追求复杂代码,而是把“LangGraph到底是什么、为什么比以前强”讲清楚。我用大量图示 + 超详细注释的简单代码,帮助大家真正看懂它的基本原理。

本课目标

  • 明白LangGraph是什么、它解决什么痛点
  • 通过图示看懂它和LangChain Agent的本质区别
  • 理解State、Node、Edge这三个核心概念
  • 通过带详细注释的简单代码,第一次感受到“流程可控”的爽感

环境准备
先安装包(我们用DeepSeek模型):

pip install -U langgraph langchain langchain-deepseek langchain-core

设置API Key:

import os
os.environ["DEEPSEEK_API_KEY"] = "你的DeepSeek API Key"

核心代码实战
先来看一张最直观的图,帮助你理解LangGraph的基本原理:

在这里插入图片描述

图1:LangGraph核心原理(State + Node + Edge)
左边是一个“状态”(State)数据库,右边是流程图。每个Node(节点)可以读写State,Edge(边)决定下一步去哪里,Conditional Edge(条件边)让流程根据情况分支或循环。这就是LangGraph最核心的思路:一切都是可见、可控的。

LangChain Agent vs LangGraph 对比

先看两张对比图,帮你一眼看出区别:
在这里插入图片描述
图2:LangChain vs LangGraph 管道对比
左边LangChain是线性链(Input → Chain → Output),右边LangGraph可以有多个分支和循环,更灵活。

在这里插入图片描述
图3:LangChain是直线,LangGraph是可分支的图
LangChain像一条直路,LangGraph像有岔路口的地图,你可以自己决定走哪条、什么时候回头。

代码段1:用LangChain写一个经典ReAct Agent(带详细注释)

from langchain_deepseek import ChatDeepSeek
from langchain.agents import create_react_agent, AgentExecutor
from langchain_core.tools import tool
from langchain import hub

# 定义一个简单工具:乘法
@tool
def multiply(a: int, b: int) -> int:
    """把两个数字相乘"""
    return a * b

llm = ChatDeepSeek(model="deepseek-chat", temperature=0)
tools = [multiply]

# 使用官方ReAct prompt模板(思考 → 行动 → 观察)
prompt = hub.pull("hwchase17/react")

# 创建Agent(把llm、tools、prompt组合在一起)
agent = create_react_agent(llm, tools, prompt)

# 创建执行器(负责运行整个循环)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 运行
result = agent_executor.invoke({"input": "5乘以8是多少?"})
print("最终回答:", result["output"])

运行结果说明
正常输出“40”。但整个过程是LLM自己在决定循环多少次、什么时候调用工具,你很难干预。一旦出问题(幻觉或死循环),就像黑盒一样难调试。

代码段2:用LangGraph实现同样功能(带超详细注释 + 流程图辅助)

先看这张图,理解我们下面要画的流程:

在这里插入图片描述

图4:LangGraph典型流程图(带条件边)
从START开始,经过Node1,用Conditional Edge决定下一步,工具执行完可以循环回来。

from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_core.messages import AnyMessage, HumanMessage
from langchain_deepseek import ChatDeepSeek
from langchain_core.tools import tool
from langgraph.prebuilt import ToolNode

# 1. 定义工具(和上面一样)
@tool
def multiply(a: int, b: int) -> int:
    """把两个数字相乘"""
    return a * b

# 2. 准备LLM,并绑定工具
llm = ChatDeepSeek(model="deepseek-chat", temperature=0)
llm_with_tools = llm.bind_tools([multiply])

# 3. 定义State(整个图共享的状态,像一块黑板)
class State(TypedDict):
    # messages列表会自动追加新消息(add_messages的作用)
    messages: Annotated[list[AnyMessage], add_messages]

# 4. 定义Agent节点:让LLM思考并决定是否调用工具
def call_model(state: State):
    # 把当前所有消息喂给LLM
    response = llm_with_tools.invoke(state["messages"])
    # 返回新消息,追加到状态
    return {"messages": [response]}

# 5. 定义条件路由函数:判断下一步去哪
def should_continue(state: State) -> str:
    last_message = state["messages"][-1]
    # 如果LLM想要调用工具,就去"tools"节点
    if last_message.tool_calls:
        return "tools"
    # 否则直接结束
    return END

# 6. 创建工具执行节点(内置,自动执行工具并把结果写回messages)
tools_node = ToolNode([multiply])

# 7. 画图!
workflow = StateGraph(State)

workflow.add_node("agent", call_model)   # 添加思考节点
workflow.add_node("tools", tools_node)   # 添加工具节点

workflow.add_edge(START, "agent")        # 从起点到agent

# 条件边:从agent出来,根据should_continue决定去哪
workflow.add_conditional_edges(
    "agent", 
    should_continue, 
    {"tools": "tools", END: END}
)

workflow.add_edge("tools", "agent")      # 工具执行完回到agent(支持循环)

graph = workflow.compile()

# 运行测试
result = graph.invoke({
    "messages": [HumanMessage(content="5乘以8是多少?")]
})

print("最终回答:", result["messages"][-1].content)

运行结果说明
一样输出“40”。但现在流程完全由你控制:你可以随时打印state[“messages”]看每一步发生了什么,想中断、加分支、加记忆都非常容易。

小练习(正好2道)

  • 练习1(基础)
    看上面图1和图4,用自己的话描述:State、Node、Edge分别是什么?它们之间怎么配合工作?(50-100字)

  • 练习2(进阶)
    如果我想在代码段2中增加一个“最多循环2次工具就强制结束”的逻辑,你觉得应该在哪里修改?(简单描述思路,看图思考即可)

本课小结
LangGraph把AI工作流变成一张可画、可控的图。核心是State(共享状态)、Node(执行动作的节点)、Edge(连接规则,普通边或条件边)。相比LangChain Agent的黑盒循环,它让你真正掌握流程,调试容易、扩展性强。2026年做复杂AI系统,LangGraph几乎是标配。

下节预告
第2课:LangGraph 的基础构建块:State、Node、Edge
我们继续用图示 + 更详细注释,手把手写State、加Edge、写条件分支,跑通带工具判断的小图。

如果觉得这篇有用,欢迎点赞和关注,一起玩转 LangGraph!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐