当前位置: 首页 > news >正文

16.3分别总结langchain 和langgraph 之间的区别

LangChain 与 LangGraph 在记忆管理上的核心差异,可以概括为:LangChain 是提供记忆工具的“工具箱”,而 LangGraph 则是赋予了 Agent 管理状态能力的“骨架与引擎”

两者并非替代关系,而是在构建复杂 AI 应用中互补协作。下面这个表格可以帮你更清晰地理解它们的区别:

🧐 LangChain vs. LangGraph:核心概念对比表

维度LangChainLangGraph
核心定位模块化工具箱(提供各类标准组件)工作流编排引擎(定义复杂执行逻辑)
核心抽象链(Chain)、管道(Pipeline)图(Graph)
执行模型严格线性,难以实现循环和回溯支持循环、分支、条件路由和状态回溯
状态/记忆管理方式通过Memory组件在外部管理,独立于调用逻辑内置State图对象,作为图的一部分在各节点间共享和流转
状态/记忆实现层级基础为会话缓冲,支持缓冲窗口、摘要、实体等多种预置类型核心为图状态的 Checkpoint,并可实现短期、长期、分层混合记忆系统
适用场景线性问答、RAG、工具链调用复杂 Agent、多轮对话、人工审批、状态需恢复或审计的场景

为了让理解更透彻,我们通过具体的代码案例,来看看它们在实践中是如何工作的。


🧠 LangChain 案例:使用ConversationBufferMemory实现基础记忆

这个例子直接展示了如何让基于 LangChain 构建的对话链拥有短期记忆。

# LangChain Memory 示例importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain.chainsimportConversationChain# 使用最简单的内存缓冲区来保存对话历史fromlangchain.memoryimportConversationBufferMemory load_dotenv()# 1. 初始化模型(以阿里云百炼的 Qwen 为例)llm=ChatOpenAI(model="qwen-plus",temperature=0.7,api_key=os.getenv("DASHSCOPE_API_KEY"),base_url=os.getenv("DASHSCOPE_BASE_URL","https://dashscope.aliyuncs.com/compatible-mode/v1"),model_kwargs={"extra_body":{"enable_thinking":False}})# 2. 创建 Memory 和 Chainmemory=ConversationBufferMemory()conversation=ConversationChain(llm=llm,memory=memory,verbose=True# 设为 True 可以看到内部处理流程)# 3. 多轮对话测试print("LangChain Memory 示例:")response_1=conversation.predict(input="我叫小明,我喜欢编程。")print(f"助手:{response_1}\n")response_2=conversation.predict(input="你还记得我叫什么名字吗?")print(f"助手:{response_2}\n")

代码分析

  • ConversationBufferMemory是一个外部组件,负责记录对话历史。
  • ConversationChain将 LLM、Prompt、Memory 串联成一个线性链条。每次调用时,它会自动从 Memory 中加载历史,并拼接到 Prompt 中。
  • 局限性:这是一种“被动”的记忆。记忆和“思考”(调用模型)是两个分离的步骤,很难处理记忆需要根据模型输出进行复杂更新的场景。

🤖 LangGraph 案例:基于状态图的智能 Agent

这个案例构建了一个能进行多轮对话,并可以根据用户指令“重置记忆”的 Agent。这是 LangGraph 管理的“动态状态”的一个典型应用。

# LangGraph 状态管理示例importosfromtypingimportTypedDict,Literalfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessage,AIMessagefromlanggraph.graphimportStateGraph,END load_dotenv()# 1. 初始化模型llm=ChatOpenAI(model="qwen-plus",temperature=0.7,api_key=os.getenv("DASHSCOPE_API_KEY"),base_url=os.getenv("DASHSCOPE_BASE_URL","https://dashscope.aliyuncs.com/compatible-mode/v1"),model_kwargs={"extra_body":{"enable_thinking":False}})# 2. 定义状态图的状态结构 (TypedDict)classAgentState(TypedDict):messages:list# 对话历史should_reset:bool# 重置标志# 3. 定义图节点 (Graph Nodes)defagent_node(state:AgentState):"""Agent 节点:调用模型,处理当前状态"""messages=state["messages"]response=llm.invoke(messages)return{"messages":state["messages"]+[response],"should_reset":False}defcheck_reset_node(state:AgentState):"""分析是否需要重置状态"""last_message=state["messages"][-1].content# 如果用户说了“重置会话”,则将 should_reset 标志设为 Trueif"重置会话"inlast_message:print("🔔 检测到重置指令,准备清空记忆...")# 清空历史消息,保留最新一条是 AI 的响应return{"messages":[],"should_reset":True}return{"should_reset":False}defreset_node(state:AgentState):"""执行状态重置,并给出提示"""return{"messages":[AIMessage(content="好的,我已经重置了我们的对话记忆。")],"should_reset":False}# 4. 定义条件路由defshould_continue(state:AgentState)->Literal["continue","reset","end"]:ifstate.get("should_reset"):return"reset"# 若没有重置指令,判断是否是结束ifstate["messages"]and"退出"instate["messages"][-1].content:return"end"return"continue"# 5. 构建状态图 (StateGraph)builder=StateGraph(AgentState)builder.add_node("agent",agent_node)builder.add_node("check_reset",check_reset_node)builder.add_node("reset",reset_node)builder.set_entry_point("agent")builder.add_edge("agent","check_reset")builder.add_conditional_edges("check_reset",should_continue,{"continue":"agent","reset":"reset","end":END})builder.add_edge("reset","agent")# 重置后回到 agent 节点继续对话graph=builder.compile()# 6. 运行测试print("LangGraph 状态管理示例:")initial_state={"messages":[HumanMessage(content="我叫小明,我喜欢编程。")]}final_state=graph.invoke(initial_state)print(f"助手:{final_state['messages'][-1].content}\n")# 告诉 AI 要重置会话second_state=graph.invoke({"messages":final_state["messages"]+[HumanMessage(content="重置会话")]})print(f"助手:{second_state['messages'][-1].content}\n")# 重置后再次对话third_state=graph.invoke({"messages":second_state["messages"]+[HumanMessage(content="你还记得我叫什么吗?")]})print(f"助手:{third_state['messages'][-1].content}")

代码分析

  • AgentState是图的核心messagesshould_reset这两个字段共同构成了 Agent 的“记忆”。
  • agent_nodecheck_reset_node都能读取这个共享状态。check_reset_node根据模型输出,动态修改should_reset标志,触发了reset_node重置messages的操作。
  • 这里的“记忆”(messages)不再是独立组件,而成为了 Agent“思考”(agent_node)和“行动”(路由到不同节点)的内在燃料

🤝 LangChain 与 LangGraph:协同工作的两种模式

在实际开发中,你不需要二选一,因为 LangGraph 本身就是 LangChain 生态的一部分。它们通常以以下方式协同:

  • LangGraph 是“骨架”,LangChain 是“血肉”LangGraph定义整个 Agent 的工作流(骨架),而每个图节点内部的具体任务,如“调用 LLM”、“加载文档”等,则由LangChain提供的工具和模块来完成。
  • 分层的记忆体系:你可以使用LangChainConversationSummaryMemory对长对话生成摘要,解决 LLM 上下文窗口限制;然后,将这个摘要作为“压缩后的历史”,存入LangGraph的状态State中,供后续节点使用。

✨ 实践建议与面试准备

  • 今日实践

    1. 修改LangChain案例中的 Memory 类型为ConversationBufferWindowMemoryConversationSummaryMemory,感受不同记忆策略的行为差异。
    2. LangGraph案例中,为AgentState添加一个user_preference字段,并在对话中根据用户输入更新这个偏好,让 Agent 表现得更加个性化。
    3. 尝试将LangChainConversationSummaryMemory集成到LangGraphagent_node中,实现一个分层记忆的 Agent。
  • 面试准备

    • 问:LangChain 和 LangGraph 能替代对方吗?
      • :不能。两者是互补而非替代关系。LangChain提供构建块,LangGraph负责将这些块编排成复杂流程。LangGraphLangChain生态向高复杂度场景的自然演进。
    • 问:什么时候该用 LangGraph 而不是 LangChain?
      • :当你的 Agent 需要支持循环和回溯,或需要长对话记忆与中断后恢复,或需要人工介入审批,又或是涉及多 Agent 协作时。
    • 问:LangGraph 如何实现持久记忆?
      • :通过它的Checkpointer接口。它能在每一步执行后将整个图的状态State保存下来。当用户再次发起请求时(如重启后的对话),我们可以加载之前的checkpoint,让 Agent 无缝“回忆”起之前的所有信息。

如果对某个细节想要更深入的了解,随时可以告诉我~

http://www.jsqmd.com/news/986099/

相关文章:

  • Applite:三步告别命令行,用免费图形界面轻松管理Mac软件
  • 中医无需神化,也无需黑化——AI时代的理性态度
  • 机器人DSP如何精准选型:三大痛点下的国产芯片实力排名
  • 2026上海GEO服务商测评:五家机构技术路径与选择指南 - 热点速览
  • 靠谱的昆明汽车维修机构 - 英特菲斯
  • Keyboard Chatter Blocker:拯救机械键盘的终极防抖方案
  • 南京家电维修平台推荐:本地用户反馈较多的几家服务商(2026最新发布) - 欧米到家
  • 加油卡闲置怎么处理?安全回收的完整指南 - 团团收购物卡回收
  • 天津回收黄金门店实力榜单,靠谱变现首选禹竞名奢汇 - 名奢变现站
  • AI 驱动的组件测试生成:从 DOM 快照到智能断言的工程实践
  • 巴斯夫地坪施工与材料代理一站式服务:为什么选择只做一家的施工商?——港珠澳大桥人工岛地坪施工商 - 热点速览
  • Steam成就管理终极指南:3分钟掌握免费成就解锁与重置技巧
  • 孔板流量计产品深度解读:从基础原理到进阶应用 - 仪表人叶工
  • i.MX 6SoloX电源与I/O设计实战:从LDO、GPIO到DDR的电气特性深度解析
  • 六月,全国开票编码全面升级后,以下六种发票将被拒收
  • 2026年自动化码垛包装设备选购指南:立柱码垛机、码垛机械手、纸箱码垛、非标码垛设备厂家选择指南,产能、工艺、品控三维度客观解析 - 海棠依旧大
  • 2026最新GEO排名优化监控测评:主流GEO平台功能解析与效果验证 - 新闻快传
  • 中服云数字孪生平台:让工业物理世界与虚拟空间实时对话
  • 2026年,西安未央附近专业代理记账品牌大揭秘,诚信之选究竟是谁?
  • 一键生成专属外网链接,这才是最适合小白的内网穿透神器
  • 2026 浙江工厂厂区景观设计施工优质企业排行榜 杭州美村美户凭实力成为首选 - 玖叁鹿
  • Hermes 网关四层权限控制方案:让 AI Agent 安全地查数据库
  • 29、【python】信息管理系统
  • 废气处理塔制作选材对比|pp板材与PPH板材搭建洗涤塔优劣全面分析 - 苏一塑业13914572689
  • 2026 遵化厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 第一性原理:时间本质和空间本质
  • 2026成都手表回收“分级评分”排行榜:劳力士、欧米茄、浪琴S/A/B级实测 - 薛定谔的梨花猫
  • 企业宣传片拍摄制作服务商选择全解析:为什么需要宣传片,以及如何选对专业服务商
  • 2026年合肥理工学校怎么样?有什么专业? - cc江江
  • 代币模型设计:决定区块链项目长期成败的核心逻辑