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

LangChain vs LangGraph:为什么你的Chain用得挺好,却可能错过了真正的Agent能力

写在前面我开始做RAG应用时LangChain的SequentialChain和RetrievalQA已经足够解决大部分问题。后来社区开始讨论LangGraph我当时的反应是“又一个过度设计的框架”直到我尝试构建一个需要多轮反思、工具调用、状态持久化的Agent时才发现Chain的线性执行模型根本兜不住。本文不会劝你弃用LangChain而是帮你理清什么时候Chain足够什么时候必须上Graph以及两者如何协同。一、LangChain线性的“管道”适合大多数任务LangChain最核心的抽象是Chain——一个将多个组件LLM、Prompt、检索器、工具串行连接起来的管道。# 一个典型的RAG Chain from langchain.chains import RetrievalQA qa_chain RetrievalQA.from_chain_type( llmllm, retrievervector_store.as_retriever() ) result qa_chain.invoke({query: 什么是RAG})这个链的执行是确定性的、单向的输入 → 检索 → LLM → 输出。没有任何分支、循环或状态记忆。Chain的局限无法实现“如果答案不够好再检索一次”的逻辑无法在多轮对话中维护复杂状态虽然ConversationBufferMemory可以但它是外部存储不是执行流的一部分无法并行执行多个分支无法在执行过程中暂停、等待人工输入、然后恢复但对于80%的RAG和简单问答场景Chain已经足够。这也是为什么很多开发者觉得“LangGraph没用”。二、LangGraph有状态的图为复杂Agent而生LangGraph把任务建模为图Graph节点Node执行操作边Edge定义流向并引入状态State在节点间传递。最关键的是它支持循环和条件分支。from langgraph.graph import StateGraph, END class AgentState(TypedDict): messages: list iteration: int graph StateGraph(AgentState) # 添加节点 graph.add_node(think, think_node) graph.add_node(act, act_node) graph.add_node(reflect, reflect_node) # 添加条件边 graph.add_conditional_edges( think, should_continue, {True: act, False: END} ) graph.add_edge(act, reflect) graph.add_edge(reflect, think) # 循环这种图结构天然支持循环Agent反复“思考-行动-观察”直到任务完成分支根据不同条件走不同路径并行多个节点同时执行状态持久化图执行过程中的状态可以序列化、暂停、恢复三、核心区别一张表看懂一个形象的类比Chain 工厂流水线传送带一直往前走不可回头Graph 地铁线路图可以在不同线路间换乘、环线、重复坐下图直观对比了两者的执行模式四、为什么你觉得“LangChain就够了”因为你遇到的任务大多是单轮或线性多轮的✅ 单轮知识问答RAG✅ 固定流程的数据处理加载→拆分→嵌入→存储✅ 带记忆的简单聊天ConversationChain这些场景下Chain的简单性反而是优势。LangGraph不会带来任何收益只会增加复杂度。但是当你需要以下能力时Chain就会力不从心自我反思Agent先回答然后自我评估是否满意不满意就重新检索或重新生成。多工具协同先调用搜索工具根据搜索结果决定下一步是调用计算器还是数据库查询。人机协作Agent遇到不确定的问题时暂停并询问用户收到回复后继续执行。多Agent辩论多个Agent各执一词最后综合答案。长时间运行的任务需要持久化执行状态随时中断和恢复。下面这个例子展示了一个需要循环的Agent场景用LangChain实现这种循环你只能手动写while循环并自己管理状态。而LangGraph把这些模式固化为框架能力。五、实战对比用两者实现同一个“反思式RAG”需求用户提问后Agent检索知识库生成答案然后自我评估答案是否基于检索内容。如果发现“幻觉”则重新检索并生成。使用LangChain需要hackdef reflective_rag(question, max_iter3): for i in range(max_iter): docs retriever.get_relevant_documents(question) answer llm.predict(fContext: {docs}\nQ: {question}) critique llm.predict(fIs this answer based on the context? Answer yes/no. Answer: {answer}) if yes in critique.lower(): return answer # 否则继续循环但需要修改question或检索策略 question fBased on the documents: {docs}\nRe-answer: {question} return 无法给出可靠答案问题手动管理循环、状态、退出条件代码杂乱。使用LangGraph原生支持from langgraph.graph import StateGraph, END from langgraph.checkpoint import MemorySaver class ReflectiveState(TypedDict): question: str docs: list answer: str critique: str iteration: int def retrieve(state): state[docs] retriever.get_relevant_documents(state[question]) return state def generate(state): state[answer] llm.predict(fContext: {state[docs]}\nQ: {state[question]}) return state def evaluate(state): critique llm.predict(fIs answer based on context? Answer: {state[answer]}) state[critique] critique state[iteration] 1 return state def should_continue(state): if yes in state[critique].lower() or state[iteration] 3: return END return generate # 重新生成 builder StateGraph(ReflectiveState) builder.add_node(retrieve, retrieve) builder.add_node(generate, generate) builder.add_node(evaluate, evaluate) builder.set_entry_point(retrieve) builder.add_edge(retrieve, generate) builder.add_edge(generate, evaluate) builder.add_conditional_edges(evaluate, should_continue) graph builder.compile(checkpointerMemorySaver())优势清晰、可扩展、自带状态持久化、可随时中断恢复。六、总结不是替代而是互补LangChain是工具箱LLM、PromptTemplate、Retriever、Tool、Chain适合快速构建线性流程。LangGraph是工作流编排器基于图适合需要循环、分支、状态持久化的复杂Agent。选型建议一个形象的总结LangChain是自行车——简单、轻便、80%的场景够用。LangGraph是汽车——复杂、强大、需要时才能体现价值。你不会每天开着汽车去买菜但长途旅行时自行车到不了。如果你现在只用LangChain就能满足需求请继续用。当你遇到“这个Agent为什么总是重复同样错误”、“怎么让人工介入”、“如何实现反思”时再来学习LangGraph——它会让你豁然开朗。

相关文章:

LangChain vs LangGraph:为什么你的Chain用得挺好,却可能错过了真正的Agent能力

写在前面我开始做RAG应用时,LangChain的SequentialChain和RetrievalQA已经足够解决大部分问题。后来社区开始讨论LangGraph,我当时的反应是:“又一个过度设计的框架?”直到我尝试构建一个需要多轮反思、工具调用、状态持久化的Age…...

基于CNN增强的Qwen3-ForcedAligner-0.6B:语音特征提取优化实践

基于CNN增强的Qwen3-ForcedAligner-0.6B:语音特征提取优化实践 1. 引言 语音识别技术在日常生活中的应用越来越广泛,从智能助手到会议转录,都离不开精准的音频文本对齐。但在实际应用中,我们常常遇到这样的问题:背景…...

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项模拟训练5:文末附答案)

2026年全国青少年信息素养大赛算法应用主题赛(C赛项模拟训练5:文末附答案) 5道单选5道多选4道编程 一、单选题 在记录丝绸交易的金额时,需要保留两位小数。下列输出语句能够正确输出变量 money(浮点数)并保…...

Qwen3.5-35B-AWQ-4bit部署手册:7860端口映射失败时的本地调试与端口检测

Qwen3.5-35B-AWQ-4bit部署手册:7860端口映射失败时的本地调试与端口检测 1. 环境准备与问题定位 当您遇到7860端口映射失败时,首先需要确认基础环境是否正常。以下是检查步骤: 1.1 检查服务状态 # 查看后端服务状态 supervisorctl status…...

TrollInstallerX终极教程:iOS 14-16.6.1设备3分钟安装TrollStore完整指南

TrollInstallerX终极教程:iOS 14-16.6.1设备3分钟安装TrollStore完整指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款专为iOS 14.…...

YOLOv10效果实测分享:高空航拍、低光照监控场景表现

YOLOv10效果实测分享:高空航拍、低光照监控场景表现 目标检测技术正从实验室走向真实世界的复杂战场。无论是百米高空无人机传回的模糊画面,还是深夜监控摄像头捕捉到的微弱人影,这些极端场景都在考验着模型的“视力”极限。传统模型往往在这…...

Optimizing Quadrotor Navigation in Cluttered 3D Environments with Safe Flight Corridors and Real-Tim

1. 四旋翼无人机在复杂3D环境中的导航挑战 想象一下你在茂密的森林里玩捉迷藏,既要快速奔跑又要避开所有树木——这就是四旋翼无人机在杂乱3D环境中导航的真实写照。与地面机器人不同,无人机需要同时处理三个维度的避障问题,任何细微的碰撞都…...

小白也能玩转语音识别:Qwen3-ASR-1.7B开箱即用,实测效果惊艳

小白也能玩转语音识别:Qwen3-ASR-1.7B开箱即用,实测效果惊艳 1. 语音识别新选择:Qwen3-ASR-1.7B 你是否遇到过这样的场景:会议录音需要整理成文字、视频需要添加字幕、或者想记录下灵光一现的想法?传统方法要么费时费…...

别再死记硬背四元数公式了!用Hamilton约定搞定IMU姿态更新(ROS/Eigen/Ceres都这么用)

四元数实战指南:用Hamilton约定统一ROS/Eigen/Ceres的姿态计算 第一次在ROS中实现IMU预积分时,我花了整整三天调试一个诡异的姿态漂移问题——明明理论推导完美,代码检查无误,但每次积分结果都与预期偏差越来越大。直到深夜比对Ei…...

软件可维护性的修改扩展与理解难度

软件可维护性的修改扩展与理解难度 在软件开发的生命周期中,可维护性是衡量软件质量的重要指标之一。随着业务需求的不断变化和技术的迭代更新,软件需要频繁修改和扩展,而代码的可维护性直接影响开发团队的工作效率。理解难度则是可维护性的…...

从零到一:基于Arduino与ROS的全向轮机器人底盘硬件选型指南

1. 全向轮机器人底盘设计入门 第一次接触全向轮机器人时,我被它灵活的运动方式惊艳到了。相比传统的差速轮机器人,全向轮可以实现任意方向的平移和旋转,就像冰面上的溜冰者一样自由。这种特性让全向轮机器人特别适合在狭小空间作业&#xff0…...

Kandinsky-5.0-I2V-Lite-5s开发入门:Anaconda虚拟环境配置与管理

Kandinsky-5.0-I2V-Lite-5s开发入门:Anaconda虚拟环境配置与管理 1. 为什么需要虚拟环境 在开始Kandinsky-5.0-I2V-Lite-5s这类AI项目开发前,有个问题经常困扰新手:为什么我的代码在别人电脑上能跑,在自己电脑上就报错&#xff…...

如何快速解密微信聊天记录:WechatDecrypt工具完全指南

如何快速解密微信聊天记录:WechatDecrypt工具完全指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 微信聊天记录承载着我们珍贵的回忆和重要的工作沟通,但当更换设备或需要数据…...

告别VSCode!在RT-Thread Studio里用PlatformIO搞定ESP32开发环境(保姆级避坑指南)

从VSCode到RT-Thread Studio:ESP32开发环境无缝迁移实战手册 当开发者首次接触RT-Thread Studio时,往往会面临一个两难选择:是继续使用熟悉的VSCodePlatformIO组合,还是拥抱这个专为RT-Thread优化的集成开发环境?作为一…...

终极艾尔登法环帧率解锁与游戏增强完整指南:如何彻底释放高刷新率显示器潜力

终极艾尔登法环帧率解锁与游戏增强完整指南:如何彻底释放高刷新率显示器潜力 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.…...

2023年文件复制工具横评:FastCopy领跑,Windows自带功能逆袭?

1. 文件复制,一个被我们严重低估的效率瓶颈 每天对着电脑,复制粘贴这个动作,我们可能要做几十上百次。从U盘拷个电影,把项目文件备份到移动硬盘,或者整理手机里上千张照片到电脑……这些看似简单的操作,背后…...

GLM-OCR效果展示:复杂场景下的多语言文档识别精度对比

GLM-OCR效果展示:复杂场景下的多语言文档识别精度对比 不知道你有没有这样的经历:拍了一张会议白板的照片,想提取上面的文字,结果识别出来一堆乱码;或者扫描了一份中英文混排的报告,结果英文单词被拆得七零…...

GitHub 热榜项目 - 日榜(2026-04-13)

GitHub 热榜项目 - 日榜(2026-04-13) 生成于:2026-04-13 统计摘要 共发现热门项目: 14 个 榜单类型:日榜 Token赞助:siliconflow 本期热点趋势总结 本期 GitHub 热榜呈现出 AI Agent(智能体)工程化与…...

5分钟搞定网盘直链下载:八大平台一键解析全攻略

5分钟搞定网盘直链下载:八大平台一键解析全攻略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...

PotPlayer字幕翻译插件终极指南:如何免费实现实时双语字幕

PotPlayer字幕翻译插件终极指南:如何免费实现实时双语字幕 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu PotPlayer_Subti…...

告别字库烦恼:用ESP8266驱动4.2寸墨水屏,轻松显示古诗和自定义汉字

告别字库烦恼:用ESP8266驱动4.2寸墨水屏,轻松显示古诗和自定义汉字 墨水屏的低功耗特性使其成为电子墨水屏、电子标签等场景的理想选择,但许多开发者在尝试用ESP8266这类资源有限的微控制器驱动墨水屏显示中文时,常常会遇到字库存…...

【实战】GPT-6 今天发布了,我花了一早上测完这5个变化——附Go迁移方案和踩坑记录

摘要 4月14号GPT-6正式上线,代号"Spud"。这篇不吹参数,从工程角度聊聊Symphony架构、双系统推理、200万Token窗口到底好不好用,中间那个"Lost in the Middle"的坑怎么绕,以及我用Go写的多模型路由方案和真实…...

[Python]获取文件属性

[Python]获取文件属性很多时候,我们需要获取一个文件的属性,比如创建日期,访问日期,修改日期,大小 ,只读还是隐藏等属性。用python是相当的方便。下面是我通过查资料得到的方法:文件属性的获取&…...

Python3 Selenium 自动化测试从入门到实战开发流程

📝 本章学习目标:帮助零基础 / 初级测试工程师快速掌握 Python3Selenium 自动化测试,从环境搭建到项目实战全覆盖,可直接用于接口 / UI 自动化工作落地。 一、引言:为什么 Selenium 自动化测试如此重要 在软件迭代加速…...

VisionPro坐标空间树实战:从概念到精准测量的空间转换指南

1. VisionPro坐标空间树的核心概念 第一次接触VisionPro的坐标空间树时,我也被那些专业术语搞得晕头转向。但经过几个项目的实战后,我发现这套系统其实设计得非常巧妙。简单来说,坐标空间树就像是一个多层级的地址系统,它能告诉你…...

海康VisionMaster从安装到跑通,我踩过的那些坑(附详细排查清单)

海康VisionMaster实战避坑指南:从安装崩溃到流程调通的全记录 作为一名刚接触机器视觉的工程师,第一次打开海康VisionMaster时,我以为这不过是又一个"下一步"就能搞定的软件。直到连续三天深夜对着报错弹窗抓狂,才明白…...

抖音下载器终极指南:三步实现批量下载与音频提取

抖音下载器终极指南:三步实现批量下载与音频提取 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...

RTX 3060就能跑!Chandra OCR从安装到批量处理,完整教程来了

RTX 3060就能跑!Chandra OCR从安装到批量处理,完整教程来了 1. 为什么选择Chandra OCR 在日常工作中,我们经常遇到需要将纸质文档、扫描件或PDF转换为可编辑电子格式的需求。传统OCR工具往往存在以下痛点: 只能识别文字&#x…...

2026年外墙保温防火一站式服务,哪家专业?带你一探究竟!

在建筑行业蓬勃发展的当下,外墙保温防火工程愈发重要。优质的外墙保温防火服务,不仅能提升建筑的节能性和安全性,还能延长建筑使用寿命。然而,市场上相关服务提供商众多,质量良莠不齐,让客户在选择时犯了难…...

长芯微LPA206完全P2P替代PGA206,是数字可编程增益仪表放大器

描述LPA206是数字可编程增益仪表放大器,非常适合数据采集系统。LPA206的快速稳定时间允许多路复用输入信道,从而提高系统效率。FET输入消除了模拟多路复用器串联电阻引起的IB误差。增益由两条CMOS/TTL兼容地址线选择。即使在电源关闭的情况下&#xff0c…...