LangChain and LangGraph
What is LangChain
What is LangGraph
LangChain 与 LangGraph:引领大型语言模型应用的双雄
在人工智能应用的浪潮中,大型语言模型(LLM)无疑是当前最耀眼的明星。然而,要将其强大的能力转化为实际、可靠且功能丰富的应用程序,开发者需要一套强而有力的框架。LangChain 和 LangGraph 正是为此而生的两大核心工具,它们极大地简化了 LLM 应用的开发流程,并为构建复杂的智能代理(Agent)提供了无限可能。
LangChain:串联智慧的应用框架
核心概念:
LangChain 是一个开源的应用程序开发框架,其核心理念在于“链(Chain)”的概念。它旨在将大型语言模型与外部资源(如数据库、API、文件等)以及其他计算逻辑无缝地“链接”起来。通过模块化的组件,开发者可以轻松地构建、组合和扩展 LLM 应用,从而实现超越简单文本生成的功能。
LangChain 的主要构成部分包括:
模型(Models): 整合了各类大型语言模型和嵌入模型的标准接口,开发者可以轻松切换和使用不同的模型。
提示(Prompts): 提供强大的提示模板管理功能,让开发者能够动态地生成和优化给予模型的指令。
索引(Indexes): 用于结构化和检索外部数据,是实现如“检索增强生成(Retrieval-Augmented Generation, RAG)”等应用的关键,让模型能够基于特定知识库回答问题。
链(Chains): 这是 LangChain 的核心,用于将多个组件(包括其他链)按顺序组合起来,形成一个完整的应用逻辑。
代理(Agents): 赋予 LLM 推理和行动的能力。代理程序可以使用一系列工具(Tools),并根据用户输入自主决定调用哪个工具来完成任务。
记忆(Memory): 让应用程序能够记住先前的对话内容,从而进行有上下文的、连贯的交流。
应用样例:
LangChain 的应用极为广泛,几乎涵盖了所有需要利用 LLM 进行自然语言处理的场景:
智能问答机器人: 结合企业内部文件或特定领域的知识库,打造能够精准回答专业问题的问答系统。例如,一个能够读取公司所有技术文档,并回答工程师技术问题的聊天机器人。
文件分析与摘要: 快速读取长篇报告、法律文件或学术论文,并生成简洁的摘要或提取关键信息。
数据分析与洞察: 通过自然语言查询,与结构化(如 SQL 数据库)或非结构化数据进行互动,生成分析报告和可视化图表。
自动化代码生成与解释: 根据需求描述自动生成代码片段,或对现有代码进行解释和除错。
个性化内容推荐: 根据用户的历史行为和偏好,生成个性化的新闻摘要、产品推荐或旅行计划。
LangGraph:驾驭复杂性的图形化流程引擎
核心概念:
随着应用需求的日益复杂,单纯的线性“链”式结构有时会显得力不从心。特别是在需要处理循环、条件分支和多个智能代理协同工作的场景下,LangGraph 应运而生。
LangGraph 是 LangChain 生态系中的一个扩展,它将 LLM 应用的流程从线性的“链”提升到了更灵活、更强大的“图(Graph)”的层次。在 LangGraph 中,应用的执行流程被定义为一个有向图,其中:
节点(Nodes): 代表工作流程中的一个步骤,可以是一个 LLM 的调用、一个工具的执行或一段自定义的 Python 代码。
边(Edges): 连接不同的节点,定义了信息在图中的流动方向。特别是“条件边(Conditional Edges)”,可以根据节点的输出结果,动态地决定下一步要跳转到哪个节点。
状态(State): 这是 LangGraph 的一个核心概念,它是一个在整个图形执行过程中持续存在的对象,用于存储和传递信息。每个节点都可以读取和更新这个共享的状态,从而实现了比线性链更复杂的记忆和上下文管理。
与 LangChain 的主要区别:
特性 | LangChain | LangGraph |
---|---|---|
核心结构 | 线性、顺序执行的“链” | 灵活、可循环的“图” |
适用场景 | 简单到中等复杂度的顺序性任务 | 需要条件逻辑、循环和状态管理的复杂任务 |
流程控制 | 预先定义好的固定流程 | 动态、可根据执行结果改变的流程 |
复杂性 | 学习曲线相对平缓,易于上手 | 提供了更高的自由度和控制力,学习曲线稍陡 |
错误处理 | 需要在链的逻辑中自行定义重试机制 | 可以将错误处理设计为图中的一个独立节点 |
代表应用 | 问答系统、文件摘要、简单的工具调用 | 多代理协作、可自主修正的智能代理、人机协作流程 |
应用样例:
LangGraph 特别擅长于构建需要更强控制力和灵活性的高级应用:
多代理协同工作(Multi-agent Collaboration): 构建一个研究团队,其中一个代理负责上网搜索资料,另一个代理负责分析和整合资料,最后一个代理负责撰写报告。LangGraph 可以清晰地定义它们之间的协作流程、信息传递和审核机制。
具有自我修正能力的代理: 当一个代理执行的工具出错或结果不理想时,可以通过条件边将流程导向一个“反思与修正”的节点,让代理重新评估策略并尝试新的方法,形成一个不断试错和优化的循环。
人机协作(Human-in-the-loop): 在关键决策点,可以设计一个节点来暂停流程,并请求人类用户的输入或批准。例如,在一个自动下单的代理中,最终下单前需要由人类确认订单细节。
互动式故事生成: 根据用户的选择,故事的情节可以走向完全不同的分支,甚至可以回到之前的某个情节点,产生高度互动和非线性的叙事体验。
关键对比:何时用 LangChain,何时用 LangGraph?
特性 | LangChain (Chains) | LangGraph |
---|---|---|
结构 | **线性 (Linear)**:一步接一步,像流水线。 | **图形化 (Graphical)**:支持分支、合并和循环,像流程图。 |
控制流 | 预定义:流程在开始前就已固定。 | 动态:流程可以根据节点的输出实时改变。 |
核心场景 | 工具链/RAG:快速构建顺序性任务,如文档问答、API 调用。 | **智能代理 (Agents)**:构建需要决策、重试、多代理协作的复杂系统。 |
状态管理 | 简单:通常只在链的内部传递,难以实现全局、持久的状态。 | 核心特性:拥有一个明确的、贯穿始终的 State 对象,方便管理复杂上下文。 |
举例 | “读取 PDF -> 总结内容 -> 发送邮件” | “搜索信息 -> LLM 判断信息是否足够 -> 如果不足,重新搜索 -> 如果足够,撰写报告” |
目前的发展与未来趋势
LangChain 和 LangGraph 正处于高速发展和迭代的阶段,整个生态系也日益成熟和完善。
LangChain 的发展:
架构模块化: LangChain 逐渐将其核心功能拆分为
langchain-core
和langchain-community
等多个包。langchain-core
提供了稳定和核心的抽象接口,而langchain-community
则包含了大量的第三方集成,这样的架构使得核心框架更加稳定,同时也方便社区贡献和维护。LangChain 表达式语言(LCEL): 这是 LangChain 近期最重要的更新之一。LCEL 提供了一种声明式的方式来组合链,使得代码更为简洁、直观,并且原生支持批量处理、并行执行、流式输出等高级功能。
LangSmith 的成熟: LangSmith 是一个用于监控、调试和评估 LLM 应用的平台。它提供了对应用执行过程的“X光”般的洞察力,让开发者可以清晰地看到每一步的输入、输出、延迟和令牌消耗,极大地提升了开发和维护效率。
LangServe 的推出: 为了方便将开发好的链或代理部署为生产级的 API,LangChain 推出了 LangServe,让开发者可以一键将应用发布为 REST API。
LangGraph 的崛起与未来:
LangGraph 被视为构建下一代复杂智能代理的关键框架。其发展重点在于:
成为代理架构的首选: 官方明确表示,LangGraph 将是未来构建代理架构(Agentic Architectures)的重点发展方向。
增强可控性和可靠性: LangGraph 的图形化结构和状态管理机制,为设计能够处理复杂任务且行为可预测的代理提供了坚实的基础。
人机协作的无缝整合: 其内置的状态持久化和流程控制能力,使得在代理的执行过程中无缝地加入人类的审核和指导成为可能。
可视化与开发工具: 配合 LangGraph Studio 等可视化开发工具的推出,开发者可以更直观地设计、调试和迭代复杂的代理流程。
LangChain RAG 代码示例
在实践中,使用 LangChain 来构建一个基于公司内部文档的问答机器人。整个流程非常清晰:
1 | # 伪代码和步骤解释 (面试时口述) |
“通过这套流程,我能快速搭建一个功能强大的 RAG 系统,整个逻辑是线性和确定的。”
LangGraph 代理代码示例
构建一个更智能的研究代理,它能上网搜索,如果结果不满意,还能决定再次搜索。
1 | # 伪代码和步骤解释 (面试时口述) |
LangChain and LangGraph
http://chen-yulin.github.io/2025/08/13/[OBS]AI-LangChain and LangGraph/