掘金 人工智能 19小时前
LangChain vs LangGraph:从困惑到清晰的认知之路(扫盲篇)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入剖析了LangChain和LangGraph在AI应用开发中的作用与关系。LangChain被比喻为“乐高积木”,提供了模型抽象、工具定义、提示模板和数据处理等基础组件,适用于构建简单的LLM调用、RAG和原型验证。而LangGraph则被视为“乐高建筑设计图+施工管理”,是建立在LangChain之上的复杂应用构建框架,擅长状态管理、流程控制、持久化和人机交互,是构建多步骤、有状态、可中断的AI系统的关键。文章强调了理解两者区别的重要性,并建议先学习LangChain基础,再根据需求选择LangGraph,以避免开发效率低下和代码质量问题,从而设计出更高效实用的AI系统。

✨ **LangChain:AI开发的基础组件库** LangChain提供了一系列用于构建AI应用的标准化组件,包括统一的模型接口(支持OpenAI、Anthropic等多种LLM)、便捷的工具定义方式、灵活的提示模板管理以及强大的数据处理能力(如文档加载、向量存储和检索)。它相当于AI开发的“乐高积木”,用户可以方便地组合这些组件来完成简单的任务,如基础的LLM调用、简单的RAG系统或单步骤的工具调用,适合快速原型验证。

📈 **LangGraph:复杂AI应用的构建框架** LangGraph是基于LangChain之上构建的更高级的架构框架,专注于解决复杂AI应用的开发需求。它提供了强大的状态管理能力,能够跟踪整个对话或工作流的进度;具备精细的流程控制,支持复杂的执行路径和条件分支;并且支持持久化,允许保存和恢复执行状态,实现长时间运行的任务。此外,LangGraph还内置了中断机制,能够实现人机交互和人工干预,以及可视化执行流程图,是构建多步骤、有状态、可中断、需要人工协作的AI系统的理想选择。

🤝 **两者关系与应用场景** LangChain和LangGraph并非相互替代,而是互补关系。LangGraph构建复杂应用时会大量依赖LangChain提供的基础组件,但它提供了更高级的组织和管理方式。简单场景下,仅需LangChain即可满足需求,例如基础的LLM调用、简单的RAG或单步工具使用。而当需要构建多步骤、有状态管理、支持长时间运行或需要人工干预的复杂AI系统(如智能助手、自主业务流程)时,LangGraph的优势便得以体现。

💡 **学习路线建议** 建议的学习路径是先掌握LangChain的基础知识,理解其核心组件和功能,这有助于打下坚实的AI开发基础。在具备一定基础后,当需要构建更复杂的AI应用,例如需要处理多轮对话、管理复杂状态或实现高级Agent功能时,再去学习和应用LangGraph。这种循序渐进的学习方式能够确保开发者能够根据项目需求选择最合适的工具,避免不必要的复杂性,从而提高开发效率和代码质量。

前言

在学习 AI 的过程中,我发现一个很普遍的现象:很多开发者(包括我自己)对 LangChain 和 LangGraph 的关系都是一知半解的。

有些人可能知道 LangChain 可以调用 OpenAI API,LangGraph 可以构建 agent,但具体它们是什么关系、为什么需要两个框架、什么时候用哪个,基本上是靠感觉在用。我之前也是这样,能跑通代码就行了,反正功能实现了嘛。

但慢慢我发现,这种"差不多就行"的态度其实是有问题的:

    开发效率低下:不清楚工具边界,经常用错工具做事情,绕了很多弯路代码质量堪忧:不理解底层逻辑,写出来的代码维护性很差问题排查困难:出了 bug 不知道从哪里入手,只能瞎试技能天花板:永远停留在"能用"的层次,无法设计出真正高效实用的 AI 系统

更重要的是,当你想要构建更复杂的 AI 应用时——比如需要长期记忆的智能助手、可以自主决策的业务流程、或者需要人机协作的复杂系统——如果不理解这些工具的本质区别,基本上就是在盲人摸象。

所以我觉得有必要花时间理清楚这两者的关系,这不仅是为了写出更好的代码,更是为了能够设计出真正解决实际问题的 AI 系统。

LangChain:基础设施和组件库

LangChain 更像是一个工具箱,提供各种基础组件:

from langchain_openai import ChatOpenAIfrom langchain.tools import tool# LangChain 提供统一的接口来使用不同的 LLM,更常见的做法是直接实例化具体的模型类llm = ChatOpenAI(model="gpt-4", temperature=0)# LangChain 提供工具定义的标准方式@tooldef write_email(to: str, subject: str, content: str) -> str:    """Write and send an email."""    return f"Email sent to {to}"

LangChain 的强项

LangGraph:复杂应用的构建框架

LangGraph 是建立在 LangChain 之上的架构框架,专门用来构建复杂的 AI 应用:

from typing import TypedDictfrom langgraph.graph import StateGraph, START, ENDfrom langgraph.checkpoint.memory import InMemorySaver# LangGraph 提供状态管理和流程控制class State(TypedDict):    messages: list    user_info: dictworkflow = StateGraph(State)# workflow.add_node("process", process_node) # "process_node" 在此未定义,仅为示例app = workflow.compile(checkpointer=InMemorySaver())

LangGraph 的强项

形象的比喻

LangChain = 乐高积木

LangGraph = 乐高建筑设计图 + 施工管理

实际应用中的区别

用 LangChain 构建简单应用

# 简单的 LLM 调用链# 这里使用了 LangChain 表达式语言(LCEL),通过管道符 | 可以方便地将组件连接起来。prompt = "翻译这段文字:{text}"# chain = llm | output_parser # "output_parser" 在此未定义,仅为示例# result = chain.invoke({"text": "Hello world"})

等价于以下步骤:

prompt_text = "翻译这段文字:Hello world"# 第一步:调用 LLMllm_response = llm.invoke(prompt_text)# llm_response 类型通常是 AIMessage,包含很多元数据# 第二步:使用输出解析器处理 LLM 的原始输出final_result = output_parser.invoke(llm_response)# final_result 现在是纯字符串,比如:"你好,世界"

用 LangGraph 构建复杂应用

# 有状态的、可中断的、多步骤的工作流app = workflow.compile(checkpointer=InMemorySaver())config = {"configurable": {"thread_id": "123"}}# 可以暂停、恢复、查看中间状态# result = app.invoke(input_data, config) # "input_data" 在此未定义,仅为示例state = app.get_state(config)  # 查看当前状态# ... 稍后继续执行

什么时候用哪个?

只需要 LangChain 的情况

需要 LangGraph 的情况

我的学习路线

    先学 LangChain 基础:理解 LLM、工具、提示模板等概念再学 LangGraph:当你需要构建复杂应用时它们是互补的:LangGraph 依赖 LangChain 的组件,但提供了更高级的组织方式从简单到复杂:不要一开始就用 LangGraph,除非真的需要其复杂性

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain LangGraph AI应用开发 LLM Agent
相关文章