LangGraph

LangGraph 是 LangChain 生态中的智能体工作流框架。它和 AutoGen、CAMEL 这类“对话式协作框架”不太一样,核心思想不是让多个智能体自由聊天,而是把智能体的执行过程建模成一个明确的 图结构

在 LangGraph 中,一个任务不是简单地从前往后执行,也不是让智能体随意对话,而是被拆成多个节点。每个节点负责一个具体步骤,节点之间通过边连接。程序会根据当前状态决定下一步走向哪个节点。

简单来说,LangGraph 的核心是:

用状态记录任务过程,用节点执行具体操作,用边控制流程跳转。

这种方式特别适合那些流程清楚、分支明确、需要循环修正的智能体应用,比如问答助手、代码生成与测试、论文写作与审稿、金融风控审批等。


LangGraph 的结构梳理

LangGraph 最重要的思想是把智能体流程看成一个 状态机

传统链式调用一般是:

输入 → 第一步 → 第二步 → 第三步 → 输出

这种方式适合简单任务,但不适合需要循环、回退、反思的复杂任务。例如,代码生成后如果测试失败,就需要回到修改代码的步骤;搜索结果不好,就需要重新生成搜索词再搜索。这种流程用普通链式结构写起来比较别扭,而 LangGraph 很适合表达这类逻辑。

LangGraph 中有三个关键概念:StateNodeEdge

State 是全局状态。整个图运行过程中,所有节点都围绕同一个状态对象读写数据。它可以保存用户问题、历史消息、搜索关键词、搜索结果、最终答案、当前步骤等信息。

from typing import TypedDict, Annotated
from langgraph.graph.message import add_messages

class SearchState(TypedDict):
    messages: Annotated[list, add_messages]
    user_query: str
    search_query: str
    search_results: str
    final_answer: str
    step: str

这段代码的意义是:先把整个工作流需要追踪的数据定义清楚。后续每个节点都从这个状态中读取信息,并返回自己更新过的字段。

Node 是图中的执行单元。每个节点本质上就是一个 Python 函数,输入是当前状态,输出是对状态的更新。

例如,一个“理解问题”的节点可以读取用户输入,生成更适合搜索的关键词:

def understand_query_node(state: SearchState) -> dict:
    user_message = state["messages"][-1].content

    # 调用 LLM 分析用户意图,并生成搜索关键词
    search_query = user_message

    return {
        "search_query": search_query,
        "step": "understood"
    }

节点不需要关心整个任务怎么完成,它只负责当前这一步。这样可以把复杂工作流拆成多个小模块,代码更容易维护。

Edge 是节点之间的连接关系。普通边表示固定跳转,例如:

理解问题 → 搜索信息 → 生成回答

而 LangGraph 更强大的地方在于 条件边。条件边可以根据当前状态动态决定下一步去哪。例如,如果搜索结果为空,就重新搜索;如果答案质量不够,就进入反思节点;如果答案已经合格,就结束流程。

def should_continue(state: SearchState) -> str:
    if not state["search_results"]:
        return "search_again"
    return "answer"

这就是 LangGraph 和普通链式调用最大的区别:它不是只能一路向前,而是可以根据状态进行分支、循环和回退。


三步问答助手

文档中的实战案例是一个“三步问答助手”,流程非常清晰:

理解用户问题 → 搜索相关信息 → 生成最终回答

这个案例虽然简单,但能很好地展示 LangGraph 的基本用法。

第一步是“理解”。用户输入的问题通常比较口语化,不一定适合直接拿去搜索。因此第一个节点会调用 LLM 分析用户意图,并生成更适合搜索引擎的关键词。

例如用户问:

明天北京适合去哪玩?

理解节点需要把它转换成类似:

北京 明天 天气 旅游 推荐 景点

这样搜索结果会更准确。

第二步是“搜索”。这个节点会调用外部搜索工具,例如 Tavily API,把搜索结果写入状态中。这里体现了智能体的工具使用能力:LLM 负责理解和生成,搜索工具负责获取外部实时信息。

第三步是“回答”。回答节点会读取前面保存的用户问题、搜索结果和上下文,然后生成最终回复。它不是凭空回答,而是基于搜索结果组织答案。

整个流程可以表示为:

START
  ↓
understand_query_node
  ↓
tavily_search_node
  ↓
generate_answer_node
  ↓
END

在代码中,这个流程通过 StateGraph 构建:

from langgraph.graph import StateGraph, END

workflow = StateGraph(SearchState)

workflow.add_node("understand", understand_query_node)
workflow.add_node("search", tavily_search_node)
workflow.add_node("answer", generate_answer_node)

workflow.set_entry_point("understand")

workflow.add_edge("understand", "search")
workflow.add_edge("search", "answer")
workflow.add_edge("answer", END)

app = workflow.compile()

这段代码的含义很直观:先定义图,再添加节点,然后规定节点之间怎么连接,最后编译成可运行应用。

运行时,用户输入会进入图中,状态会在不同节点之间传递。每经过一个节点,状态都会被更新一次。最终答案也会被写入状态并返回。

这个案例的重点不是问答本身,而是展示 LangGraph 如何把一个智能体任务拆成可控的步骤。每一步做什么、下一步去哪,都是显式定义的。

  • 输出案例:
🤔 您想了解什么: 吉林大学前卫南区怎么样?软件学院在哪个校区

============================================================
🧠 理解阶段: 我理解您的需求:理解:用户想了解吉林大学前卫南校区的环境、条件及整体评价,同时想明确软件学院所在的校区。
搜索词:吉林大学 前卫南区 怎么样 软件学院 校区
🔍 正在搜索: 吉林大学 前卫南区 怎么样 软件学院 校区
🔍 搜索阶段: ✅ 搜索完成!找到了相关信息,正在为您整理答案...

💡 最终回答:
好的,我们来详细解答一下关于吉林大学前卫南校区(中心校区)的情况以及软件学院的归属问题。

**核心结论:**
吉林大学软件学院**位于前卫南校区(中心校区)**。这里不仅是吉大的主校区,也是校园环境、硬件设施和整体氛围都非常出色的一个校区。

下面为您详细介绍:

### 一、前卫南校区总体怎么样?

前卫南校区是吉林大学多个校区中最新、最核心的校区,通常被视为吉大的“主校区”。

**1. 地理位置与环境:**
*   **位置优越**:校区位于长春市西南部的高新技术开发区,地址是**前进大街2699号**,这里不像一些老城区那样拥挤,但交通和生活都非常便利。
*   **现代建筑林立**:作为原吉林大学的新校园,这里的主要风格是现代化。校园内分布着行政楼、多栋实验楼(如无机合成-超分子实验楼、理化综合楼)、数学楼、东荣大厦、新图书馆、逸夫教学楼、逸夫图书馆、体育馆等标志性建筑。
*   **校部机关所在地**:这里是整个吉林大学的行政管理核心,重要性不言而喻。

**2. 学习与生活条件:**
*   **学习氛围浓厚**:作为主校区,学术资源丰富,新图书馆的设施和藏书量都非常好。据评价,即使是节假日,图书馆也经常坐满了学生,学习氛围很浓厚。
*   **食堂与餐饮**:校区内至少有4个主要食堂,口味偏向东北菜,选择多样,能满足不同学生的需求。
*   **体育设施**:拥有现代化的体育馆等设施,可以满足学生日常锻炼和体育课程的需要。

**3. 整体评价:**
综合来看,前卫南校区是一个非常优秀的大学校园。它既有现代化大学完备、先进的教学和生活设施,又因为是主校区,汇集了最多的学术资源、学生活动和校园文化,是体验“吉大”氛围最直接的校区。

### 二、软件学院在哪个校区?

*   **明确归属**:软件学院是吉林大学**信息科学学部**的重要组成部分。根据各校区院系分布,信息科学学部下属的大部分学院,包括计算机科学与技术学院和软件学院,都**集中在前卫南校区(中心校区)**。
*   **位置便利**:这表明,作为软件学院的学生,你将完全享受前卫南校区的所有便利和资源。教学楼、实验室和图书馆都位于校区中心区域,设施现代化,为计算机和软件类的学习提供了良好的硬件支持。

**总结来说,吉林大学软件学院就在大家公认环境最好、设施最现代化的前卫南校区(中心校区)。选择这里,你将拥有优越的地理位置、现代化的校园环境和浓厚的学习氛围。**


LangGraph 的优势与局限性分析

LangGraph 最大的优势是 流程可控

在 AutoGen 或 CAMEL 中,任务推进主要依赖智能体之间的对话。这样比较自然,但也容易出现不确定性:智能体可能跑题、重复、忘记结束,或者没有按预期流程行动。

LangGraph 则不同。它要求开发者提前把流程图设计出来,因此每一步都更明确。哪个节点负责理解问题,哪个节点负责搜索,哪个节点负责回答,什么时候结束,什么时候回退,都可以在代码中写清楚。

它尤其适合需要循环的任务。比如代码生成场景可以设计成:

生成代码 → 运行测试 → 判断是否通过
              ↓
          如果失败
              ↓
          修复代码 → 再次测试

论文写作也可以设计成:

生成初稿 → 审阅问题 → 修改稿件 → 再审阅

这种“生成—检查—修正”的循环,是 LangGraph 非常擅长的模式。

LangGraph 的另一个优势是模块化。每个节点都是一个独立函数,可以单独测试、替换和复用。如果某一步效果不好,只需要修改对应节点,而不用重写整个系统。

它也适合对可靠性要求高的应用。例如金融风控、审批流、企业客服等场景,通常不能让智能体自由发挥,而是需要严格按照流程执行。LangGraph 的状态机设计更容易做到可追踪、可审计和可维护。

不过,LangGraph 的缺点也很明显:前期代码更多,设计成本更高。开发者需要先定义状态、节点、边和条件跳转,而不是简单写几个角色提示词就开始运行。对于非常简单的 Demo 来说,它可能显得有些“重”。

另外,LangGraph 的行为更像一个受控流程系统,开放性和“涌现感”没有 AutoGen、CAMEL 那么强。如果任务需要自由讨论、头脑风暴或多角色自然协作,LangGraph 不一定是最直接的选择。

调试时也要注意,问题可能出现在多个位置:节点内部逻辑可能错,状态字段可能没更新,条件边判断可能跳错方向。因此使用 LangGraph 时,必须先把状态设计清楚,否则后面会很难排查问题。

总结来说,LangGraph 的关键词是:

状态机、图结构、节点、边、条件跳转、循环、可控工作流

它不是最适合“聊天”的框架,而是最适合“把智能体流程做成可靠工作流”的框架。

一句话概括:

LangGraph 适合构建流程明确、状态可追踪、需要分支判断和循环修正的智能体应用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐