课程0基础Agent开发课 / LangChain / LangChain导读-AI应用开发的瑞士军刀
— 15 min read

LangChain导读-AI应用开发的瑞士军刀

> **本章阅读时间**:约1小时(共10篇)

LangChain 导读:AI 应用开发的瑞士军刀

本章阅读时间:约1小时(共10篇)

1.1 LangChain 是什么

官方定义(来自 LangChain 官方文档):

LangChain is an open source framework with a prebuilt agent architecture and integrations for any model or tool—so you can build agents that adapt as fast as the ecosystem evolves.

LangChain 是一个开源框架,内置了预构建的 Agent 架构,并提供了对任意模型和工具的集成能力——让你构建的 Agent 能够跟上生态的快速演进。

官方文档进一步说明,LangChain 的核心价值在于三点:

  • 标准化模型接口:统一不同提供商(OpenAI、Anthropic、DeepSeek、Google 等)的调用方式,无缝切换模型,不被任何一家厂商锁定(vendor lock-in)
  • 快速构建 Agent 和自主应用:用不到 10 行代码即可创建功能完整的 Agent
  • 灵活的上下文工程:在保持易用性的同时,支持深度定制

如果这个定义读起来还是有点抽象,可以把 LangChain 理解成 AI 应用开发的"乐高积木"——它提供了一套标准化的零件(模型接口、Prompt 模板、对话记忆、文档处理、检索器……),让你能快速把这些零件拼装成一个完整的 AI 应用,而不用每次都从零造轮子。

1.1.1 它能做什么?

LangChain 在实际项目中最常见的用途:

应用场景 LangChain 解决什么
企业知识库问答 文档加载 → 向量化 → 检索 → 生成答案,一套完整的 RAG 流水线
多轮对话助手 自动管理对话历史,处理上下文窗口超限问题
AI Agent 工具定义、工具调用循环、结果解析,有现成的实现
多模型切换 换模型只改一行代码,不用重写所有调用逻辑
LLM 应用调试 通过 LangSmith 追踪每次调用的输入输出和耗时

1.1.2 为什么要学 LangChain?

你可能会问:直接调用 DeepSeek 或 OpenAI 的 API 不就够了吗?

对于简单应用,确实够了。但当你的应用需要:

  • 从几百个 PDF 文件里检索相关内容来回答问题
  • 维护和用户的多轮对话历史(而且对话可能很长)
  • 让 AI 能调用多个工具,并根据结果继续推理
  • 随时把 DeepSeek 换成 Claude 而不改动大量代码

这时候,你会发现自己在重复写大量"基础设施代码"——不是业务逻辑,只是让各个部分连接起来的胶水代码。LangChain 就是把这些胶水代码标准化了,让你专注于业务逻辑本身。

LangChain 是目前 GitHub Star 数最多的 LLM 应用开发框架之一,在国内外的 AI 应用开发项目中被广泛使用。学会 LangChain,也意味着能读懂大量开源 AI 项目的代码。

1.2 直接调用 API 的局限

使用 DeepSeek SDK 或 OpenAI SDK 直接调用 LLM API 非常简单:几行代码就能发送一个请求、得到响应。但当应用变得复杂,问题就开始出现:

多模型切换的痛苦:项目需要根据任务选择不同的模型——对话用 Claude,代码用 DeepSeek,嵌入用 text-embedding-3-small。如果直接调用各厂商 SDK,每次切换模型都需要修改不同的接口调用方式、不同的参数格式、不同的错误处理逻辑。十几行代码要重写,测试要重跑。

对话历史管理的重复代码:多轮对话需要维护 messages 数组,手动追加每条消息。对话长了需要截断,需要考虑 Token 限制。这些逻辑在每个对话场景中重复出现,而且因为是手写的,各处实现可能有细微差异,埋下 bug。

工具调用的模板化代码:Function Calling 的 JSON Schema 定义、工具调用结果的回填、多轮工具调用的循环——每个 Agent 项目都要重写这套逻辑,而这套逻辑本身没有什么业务价值,只是基础设施。

Prompt 管理散乱:随着应用规模增长,Prompt 模板散落在代码各处,版本管理困难,复用性差。一个 Prompt 修改了,很难知道影响了哪些功能。

可观测性缺失:直接调用 API 时,没有标准化的方式追踪每次 LLM 调用的输入输出、延迟、Token 消耗。排查问题需要手动加日志,而且日志格式可能每个地方都不一样。

输出解析:LLM 的文本输出需要转换成结构化数据。自己写解析逻辑既繁琐又脆弱——模型输出格式稍微变化就会解析失败。

LangChain 的价值,正是把这些重复性的工程问题提供标准化解决方案。

1.3 LangChain 的核心设计:Runnable 接口与 LCEL

LangChain 的核心设计理念是可组合性:每个组件(ChatModel、Retriever、OutputParser……)都实现了统一的 Runnable 接口,支持三种调用方式:

  • invoke:单次调用,返回完整结果
  • stream:流式调用,逐 token 返回
  • batch:批量调用,并行处理多个输入

LCEL(LangChain Expression Language)是这种可组合性的具体语法——用 | 管道符把组件串联起来:

python
chain = prompt | llm | output_parser
result = chain.invoke({"question": "什么是向量数据库?"})

官方文档对 LCEL 的描述:

Runnable objects encompass chat models, retrievers, chains, etc. The | operator connects them so that the output of one becomes the input of the next.

这与 Unix 管道的思路一致——每个命令只做一件事,输出传给下一个命令。chain.invoke() 执行整条链,chain.stream() 则逐步返回结果,适合需要打字机效果的场景。

1.4 LangChain 的生态组成

LangChain 分层生态系统
LangChain 生态系统——四层架构 + LangSmith 可观测性平台贯穿全链路

LangChain 不是单一的库,而是一个分层生态系统。官方文档将其划分为三个层级:

层级 组件 定位 适用场景
高层 Deep Agents 功能完整的生产级实现,自带对话压缩、虚拟文件系统、子 Agent 等现代特性 生产环境,开箱即用
中层 LangChain 预构建的 Agent 框架 快速构建 Agent 和自主应用
底层 LangGraph 低层 Agent 编排运行时,支持确定性与 Agent 混合工作流 需要精确流程控制、高度自定义

除此之外,还有配套工具:

  • langchain-core:核心抽象和接口定义(Runnable 接口、BaseMessage 等)
  • langchain-openailangchain-anthropiclangchain-deepseek 等:各模型厂商的官方适配包
  • LangSmith:LLM 应用的可观测性平台,用于追踪请求、调试 Agent 行为、评估输出质量

注意:旧版本中常见的 langchain-community 包(第三方集成的集合)在新版生态中已逐步被各厂商的独立适配包取代,新项目建议直接使用对应厂商的官方包(如 langchain-deepseek)。

LangChain 与 LangGraph 的关系:官方文档明确说明——

LangChain agents are built on top of LangGraph in order to provide durable execution, streaming, human-in-the-loop, persistence, and more.

LangGraph 是 LangChain Agent 的底层运行时,不是竞争关系,而是分层依赖关系。第 13 章单独讲解 LangGraph。

1.5 关于第 14 章缺少 03、04 篇的说明

细心的读者会发现,本章文件编号从 01、02 跳到了 05——缺少 03 和 04 篇。这不是遗漏,而是有意安排。

原本规划在第 14 章的工具调用相关内容(Tools 的定义与使用、OutputParser 与结构化输出)已经整合到第 9 章"工具使用与 Function Calling"中。这样做的原因是:Tools 和 OutputParser 本质上是 Function Calling 的应用层封装,放在 Function Calling 章节里讲解更符合认知顺序。

如果想了解 LangChain 的 Tools 和 OutputParser,请查阅第 9 章相关内容。

1.6 LangChain 核心概念地图

LangChain

模型接口

记忆系统

检索与RAG

可观测性

Agent

ChatModel统一接口

Prompt Template

OutputParser

LCEL管道组合

短期记忆

长期记忆

消息截断Trim

摘要压缩Summarize

语义记忆

情节记忆

DocumentLoader

TextSplitter

Embeddings

VectorStore

Retriever

Callback回调

LangSmith追踪

Tools工具定义

ReAct推理循环

LangGraph编排

1.7 本章文章的学习路径

本章的结构遵循 LangChain 核心概念的层次:从基础的模型调用和链式组合,到记忆管理、文档处理,最后到可观测性和高级模式。

核心基础(第 01-02 篇)

01 讲 LangChain 的核心概念和 LCEL 链式调用——这是整章的基础,LCEL 的管道语法贯穿后续所有示例。核心概念:Runnable 接口、| 操作符、invoke/stream/batch 三种调用方式、RunnableParallel 并行执行。02 讲 Memory 对话历史管理,涵盖短期记忆的三种管理策略(消息截断、删除、摘要压缩)以及跨会话的长期记忆实现。

这两篇是 LangChain 使用的核心基础,建议按顺序阅读。

文档处理管道(第 05、07-08 篇)

05 讲 Retriever 检索器——官方定义为"an interface that returns documents given an unstructured query",是 RAG 系统在 LangChain 中的抽象层,包括向量检索、BM25 关键词检索、混合检索的实现。07 讲 DocumentLoader 文档加载,覆盖 PDF、Web、数据库、Office 等各种来源。08 讲 TextSplitter 文本分割策略,官方推荐的默认分块大小为 1000 字符、重叠 200 字符,不同的分割方式对 RAG 效果影响显著。

这三篇是 LangChain 文档处理流水线的核心,也是 RAG 系统的实现基础。

可观测性与运维(第 06、11 篇)

06 讲 Callback 回调与链路追踪,是 LangChain 可观测性的底层机制——理解 Callback 才能理解 LangSmith 是如何收集数据的。11 讲 LangSmith,官方定位为"LLM 应用的全链路可观测性平台",用于追踪请求、调试 Agent 行为、评估输出质量。这两篇建议在开始实际项目前就读,养成可观测性习惯比出了问题再补容易得多。

实战与高级(第 09-10、12 篇)

09 是 LangChain Agent 完整实战,从工具定义到最终部署,是前几篇内容的综合应用。Agent 的运行遵循官方描述的 ReAct(Reasoning + Acting)模式:推理 → 调用工具 → 观察结果 → 继续推理或输出。10 讲 LCEL 高级模式:分支、降级、自定义 Runnable——处理复杂业务逻辑的高级组合方式。12 讲 Text-to-SQL,让 LLM 直接生成并执行 SQL 查询,是企业数据查询场景的典型应用。

01
LCEL基础

02
Memory

05,07-08
Retriever/文档处理

06,11
Callback/LangSmith

09-10,12
实战与高级

1.8 LangChain vs 直接调用 API 的选择建议

官方文档对此的建议是:

Start with LangChain for building agents and autonomous applications requiring quick implementation. Choose LangGraph when needing advanced customization combining deterministic and agentic patterns.

结合实际项目经验,以下是一个实用的决策框架:

适合使用 LangChain 的场景

  • 需要快速构建 Agent 或自主应用,不想从零实现 ReAct 循环
  • 项目需要集成多个不同厂商的 LLM,希望统一接口、避免厂商锁定
  • 需要构建 RAG 系统,LangChain 的文档处理管道能显著减少工作量
  • 需要 LangSmith 的可观测性能力(追踪、调试、评估)

适合直接调用 API 的场景

  • 应用逻辑简单:单轮或少轮对话,没有复杂的工具调用
  • 对性能极度敏感:LangChain 的抽象层有额外开销,通常是毫秒级,但高并发场景下可能显著
  • 需要完全控制:不希望框架的抽象层遮蔽底层行为

适合使用 LangGraph 的场景

  • 需要精确控制 Agent 的执行流程(确定性步骤与 Agent 步骤混合)
  • 需要持久化状态、支持中断恢复(human-in-the-loop)
  • 构建多 Agent 协作系统

一个务实的建议:从直接调用 API 开始,在感受到重复性痛点时引入 LangChain 的对应组件。很多时候,只需要 LangChain 的某一两个组件(比如只用 Prompt Template 管理 Prompt),不需要引入整个框架。

1.9 LangChain 的版本说明

LangChain 的 API 在 v0.1 到 v0.3 之间经历了较大的变化。本章所有代码基于 2026 年的稳定版本:

code
langchain>=0.3.0
langchain-openai>=0.2.0
langchain-core>=0.3.0
langgraph>=0.2.0

如果遇到废弃警告(DeprecationWarning),通常是使用了 v0.1/v0.2 时代的旧接口。主要变化:

旧接口(v0.1/v0.2) 新接口(v0.3+) 说明
LLM ChatModel 旧的 LLM 类已废弃,统一用 ChatModel
LLMChain LCEL(| 操作符) 链式调用的新写法
ConversationChain add_messages + LangGraph checkpointer 对话历史管理迁移到 LangGraph
ConversationBufferMemory 短期记忆策略(Trim/Summarize) Memory 模块重构
AgentExecutor create_agent() + LangGraph Agent 执行器迁移到 LangGraph

1.10 与其他章节的关联

与 Python 基础(第 2 章)的关系

LCEL 的管道操作符依赖 Python 运算符重载的理解;LangChain 工具定义大量使用 pydantic;LangChain 的异步调用需要 asyncio 基础。Python 基础章节的第 3、4、5、6 篇是学习 LangChain 的前置内容。

与工具使用与 Function Calling(第 9 章)的关系

LangChain 的 Tools 和 OutputParser 已整合到第 9 章。读完第 9 章的工具调用内容,再学本章的 LCEL 和 Memory,能更清楚地看到 LangChain 的完整能力版图。

与 LangGraph(第 13 章)的关系

LangGraph 是 LangChain Agent 的底层运行时,官方文档明确说明两者是分层依赖关系,不是替代关系。本章是理解 LangGraph 的概念基础——LangGraph 的节点里通常使用 LangChain 的 ChatModel、Retriever、Tools 等组件。

与 RAG(第 11 章)的关系

LangChain 的文档处理管道(DocumentLoader → TextSplitter → Embeddings → VectorStore → Retriever)是 RAG 系统的标准实现路径。第 11 章会在 LangChain 基础上进一步讲解 RAG 系统的优化和生产化。

与 Prompt 工程(第 8 章)的关系

LangChain 的 PromptTemplate 是 Prompt 工程模板管理的框架实现。读完 Prompt 工程章节,再看 LangChain 的 Prompt 模块,会对其设计动机有更深的理解。

1.11 学完本章能做什么

  • LCEL 链式调用:能用 | 管道符把 Prompt、Model、Parser、Retriever 等组件串联成处理流水线,熟练使用 invoke/stream/batch 三种调用方式
  • 对话历史管理:理解短期记忆(消息截断、摘要压缩)与长期记忆(跨会话语义记忆、情节记忆)的区别,能为应用选择合适的策略
  • 文档处理管道:能构建从文档加载到向量化检索的完整 RAG 流水线
  • 可观测性:能接入 LangSmith 追踪 LLM 调用的完整链路,快速定位生产问题
  • 高级模式:能在 LCEL 里实现条件分支、降级处理、自定义 Runnable 等复杂逻辑

理解了 LangChain 的组件体系,使用 LangGraph 时会顺畅很多——LangGraph 的节点本质上就是装在图里的 LangChain 组件。

本页目录