LangChain和LangGraph

一、一句话先建立直觉
  • LangChain:搭 LLM 应用的「零件箱」——模型、Prompt、工具、消息、RAG 组件等,帮你快速拼出应用。
  • LangGraph:搭复杂 Agent 的「流程图引擎」——用图(节点 + 边 + 共享状态)编排多步、分支、循环、重试、人机协作。

关系可以记成:

LangChain 负责「调用什么能力」;LangGraph 负责「按什么流程、带什么状态去调用」。


二、LangChain 核心概念
1. Model(模型)

对各种 LLM / Chat Model 做统一封装。你不用关心供应商细节,统一用 invoke / stream 调。

通俗理解:插座标准化了,换 GPT、Claude、豆包都能插。

2. Prompt / Message(提示与消息)

对话不再是一坨纯文本,而是结构化消息:

角色含义
system人设与规则
user用户输入
assistant模型回复
tool工具返回结果

多轮对话本质就是维护一份 message 列表,不断追加上下文。

3. Tool(工具)

让模型不只「会说」,还能「会做」:查库、搜网、算数、调 API。

每个工具通常有:名字、描述、入参 schema、执行函数。模型根据描述决定何时调用——这就是常见的 ReAct / Tool Calling 模式。

4. Chain / Runnable(链式组合)

早期核心是 Chain:Prompt → LLM → Parser 串起来。

现在更统一的是 Runnable / LCEL| 管道):

prompt | model | output_parser

适合固定流水线:总结 → 翻译 → 格式化这类一路往下走的任务。

5. Agent(智能体)

Agent = 模型 + 工具 +「自己决定下一步」的循环:

想 → 调工具 → 看结果 → 再想 → …… → 给出最终答案

LangChain 提供高层 Agent 抽象,上手快;流程一复杂(重试、分支、多人协作),就容易不够用——这时上 LangGraph。

6. 结构化输出 & Memory
  • 结构化输出:强制模型吐 JSON / Pydantic,方便程序消费。
  • Memory:短期(当前对话)+ 长期(跨会话记忆)。复杂场景里,记忆往往也挂在 Graph 的 State / Checkpointer 上。

三、为什么要从 Chain 走到 Graph?

Chain 像一条单行道:A → B → C,假设一路绿灯。

真实业务里常见:

  • 质量不行 → 打回重做(循环
  • 根据结果走不同分支(条件路由
  • 多段并行处理再汇总(并发
  • 中途让人审批再继续(人机协同
  • 挂了要能从断点恢复(持久化

这些 Chain 很难优雅表达,Graph 才是正解。


四、LangGraph三大核心:State / Node / Edge

LangGraph框架的核心能力是以图的形式实现多Agent的编排,采用“分而治之”的思想,由四个核心概念构成:

  • state:整个应用中共享的一种数据结构,给全局Agent提供统一的状态管理,是LangGraph框架的灵魂。
  • Node:一个处理数据的节点。LangGraph中一般为一个函数,state作为输入,更新后的state作为输出。
  • Edge:表示Node之间的关联关系。在LangGraph中一般是一个函数,根据当前Node输出的state来决定下一个执行的Node
1. State:全局共享的「白板」

所有节点读写同一份状态,节点之间不直接打电话,只改白板

常见用 TypedDict / Pydantic 定义,例如:

class AgentState(TypedDict):

code
1messages: Annotated\[list, operator.add\] *# 追加,不覆盖*
2current_step: str *# 默认:新值覆盖旧值*
3retry_count: int

关键点是 Reducer(归约器)

  • 普通字段:后写覆盖先写
  • 列表字段(如 messages):常用 operator.add 追加,避免并行节点互相踩掉结果

通俗说:State 是数据总线;Reducer 规定「多人同时改同一字段时怎么合并」。

2. Node:干活的工人

节点就是函数:读 State → 做事 → 返回要更新的字段

def call_llm(state):

code
1reply = llm.invoke(state\["messages"\])

return {"messages": \[reply\]} # 只返回变更部分

原则:

  • 一节点一事(调模型 / 调工具 / 审校……)
  • 不直接调别的节点,协作全靠 State
  • 可返回 Command(goto=..., update=...),把「改状态」和「下一步去哪」绑在一起
3. Edge:下一步怎么走
类型含义例子
固定边A 完了一定去 B翻译完 → 审校
条件边看 State 再决定质量 pass → 结束;fail → 重译
Send动态扇出并行文档切 10 片,10 个 summarize 一起跑

再加上 START / END,一张可运行的图就齐了。

三者关系一句话:

State 管存什么,Node 管做什么,Edge 管接下来去哪。


五、记忆机制
1. 短时记忆(CheckPoint)

用于支持多轮对话,LangGraph提供了多种短时记忆的存储方案,包括内存、Redis等。

短时记忆如果过多(尤其历史记忆内容不连贯的情况下),会导致模型的上下文理解出现偏差,产生幻觉。LangGraph提供了短期记忆的管理方法,主要包括两种:

  • Summarization:用大模型的方式,对短期记忆进行总结,然后把总结的结果作为新的短期记忆。
  • Trimming:把短期记忆中最旧的记忆删除,对短期记忆进行截断处理。
2.长期记忆(Store)

比较典型的长期记忆存储策略主要包括:

  • Semantic memory(语义记忆):原始对话中提取到的一般性的知识、概念、事实和语言信息等,不依赖于个人的具体经历或特定时间和地点。
  • Episodic memory(情节记忆):主要设计个人亲身经历的特定时间和情景,这些经历通常与时间、地点和相关的情感有关。
  • Procedural memory(程序性记忆):一种长期的潜意识记忆,用于执行特定类型的动作。例如人的本能或某种技能。

评论 (0)

登录后参与评论。

还没有评论,来做第一个。

登录后可以选中正文添加批注(仅自己可见)。

LangChain和LangGraph