跳到主要内容

LangChain:是什么、解决什么问题、什么时候该用

很多人第一次接触 LangChain,会把它理解成“做 Agent 的库”。这个说法不算错,但还不够准。更准确的说法是:LangChain 是一个面向 LLM 应用和 Agent 应用的上层开发框架,它负责把模型、提示词、工具、检索、结构化输出、运行链路组织起来。

0. 面试速答(30 秒版 TL;DR)

  • LangChain 不是模型,也不是向量数据库,而是 LLM 应用框架。
  • 它最核心的价值是:把“调用模型”升级成“编排模型周边能力”,例如工具调用、RAG、结构化输出、Agent 循环。
  • 如果你只做一次简单补全,直接用模型 SDK 往往更轻。
  • 如果你要把模型和工具、检索、状态、观测串起来,LangChain 的抽象会明显省事。
  • 现在官方定位里,LangChain 更偏高层应用框架,LangGraph 更偏底层编排层;前者追求开发效率,后者追求可控性。

1. 先建立正确心智模型

不要把 LangChain 理解成“帮你多调几次模型”。

它真正解决的问题是:

  • 模型供应商接口不统一
  • 提示词、工具、检索、输出解析容易散落在业务代码里
  • 应用一复杂,就会出现大量“上下文拼装代码”
  • 想换模型、换工具、加 tracing 时,改动面会很大

所以 LangChain 的价值本质上是:

  • 统一模型调用接口
  • 把上下文工程抽成可组合模块
  • 让 LLM 应用从脚本演进成可维护工程

2. LangChain 里最常见的几类构件

2.1 Model

这是最底层的一层,负责真正调用模型。

你可以把它理解成:

  • 对 OpenAI、Anthropic、Google 等模型接口做了统一封装

这样做的好处是:

  • 业务代码不必强绑定某一个供应商
  • 切模型、切参数、切响应格式更容易

2.2 Prompt

Prompt 在 LangChain 里不是一段普通字符串,而更像:

  • 模板
  • 变量插槽
  • 消息列表
  • 可组合的上下文片段

这层的价值是把提示词从“散落字面量”提升为“可管理资产”。

2.3 Tool

Tool 是 Agent 能真正“做事”的能力入口,例如:

  • 查询天气
  • 搜索知识库
  • 读数据库
  • 调内部 API

面试里可以直接说:

  • 没有 Tool,模型主要只能“说”;有 Tool,模型才开始具备“做”的能力。

2.4 Retriever

Retriever 负责“取相关资料”,常见于 RAG。

注意:

  • Retriever 不是数据库
  • Retriever 也不是 Embedding 模型

它更像一层检索接口,负责把“用户问题”转成“最相关的上下文片段”。

2.5 Agent

Agent 代表“模型可以在循环里决定下一步动作”的运行模式。

它和普通 Chain 的区别是:

  • Chain 往往是你提前写死步骤
  • Agent 会根据当前上下文自己决定:
    • 回答
    • 调工具
    • 继续推理
    • 结束

3. 一条典型的 LangChain 执行链路

这张图对应一个关键理解:

  • LangChain 管的不是单次推理,而是“围绕模型的一整套应用流程”。

4. 一个最小示例:为什么它适合“比 SDK 复杂一点”的场景

下面是一个简化后的 TypeScript 示例:

import * as z from "zod";
import { createAgent, tool } from "langchain";

const searchDocs = tool(
async ({ query }) => {
return `文档搜索结果: ${query}`;
},
{
name: "search_docs",
description: "搜索内部文档",
schema: z.object({
query: z.string(),
}),
},
);

const agent = createAgent({
model: "openai:gpt-4.1",
tools: [searchDocs],
});

const result = await agent.invoke({
messages: [{ role: "user", content: "帮我查一下前端性能优化最佳实践" }],
});

这段代码真正省掉的是:

  • 自己维护工具描述格式
  • 自己处理模型工具调用协议
  • 自己写循环,让模型反复决定“要不要继续查”

5. LangChain 最适合哪些场景?

比较典型的有:

  • 聊天助手接工具
  • 文档问答接 RAG
  • 结构化抽取
  • 代码助手
  • 工单、知识库、搜索、数据库的统一编排

如果是下面这些情况,收益通常更高:

  • 你已经不是“一个 prompt 调一次模型”了
  • 你需要多种外部能力接入
  • 你想要可替换模型和统一 tracing
  • 你希望应用层代码别直接写满 provider 细节

6. 什么情况下不一定要上 LangChain?

这是面试里很容易加分的一点。

并不是所有 LLM 应用都要上框架。

如果你的场景只是:

  • 一个系统提示词
  • 一个用户输入
  • 一次模型调用
  • 一次结果返回

那直接用模型官方 SDK 往往更简单,原因是:

  • 依赖更少
  • 抽象更薄
  • 出问题时更好排查

所以更准确的工程判断是:

  • LangChain 适合“应用编排复杂度已经出现”的场景,不适合为了用框架而用框架。

7. LangChain 和 LangGraph 是什么关系?

这题很常见。

可以直接这样答:

  • LangChain 更像上层开发框架
  • LangGraph 更像底层 Agent 编排运行时

两者不是互斥关系,而更像上下层关系:

  • 想快速起 Agent,用 LangChain
  • 想精细控制状态、分支、恢复、人工介入,用 LangGraph

一句话概括:

  • LangChain 负责“好用”,LangGraph 负责“可控”。

8. 面试高频追问

8.1 LangChain 和直接调 OpenAI SDK 的区别是什么?

标准答法:

直接调 SDK 更接近底层模型接口,适合简单、透明的调用;LangChain 提供的是应用层抽象,把模型、工具、检索、输出解析、Agent 流程组织起来,适合复杂一点的 LLM 应用。

8.2 LangChain 里的 Chain 和 Agent 有什么区别?

标准答法:

Chain 偏确定性流程,步骤大多由开发者提前定义;Agent 偏非确定性决策流程,模型会在运行时决定下一步是回答、调用工具还是继续规划。

8.3 LangChain 为什么容易“看起来很方便,后面又觉得重”?

标准答法:

因为它解决的是中大型 LLM 应用的编排问题。如果项目本身很简单,就会觉得抽象层数多、学习成本高;但当工具、RAG、状态和可观测性都上来之后,这些抽象反而能降低复杂度。

9. 常见误区

  • 误区一:把 LangChain 当成模型能力增强器。 实际上它增强的是应用编排能力,不是模型本身智力。
  • 误区二:以为接了 LangChain 就自动变成 Agent。 实际上 Agent 只是其中一种组织方式。
  • 误区三:把所有逻辑都塞进 Prompt。 真正可维护的做法应该是区分提示词、工具、检索、状态和业务规则。
  • 误区四:没有 tracing 就直接堆工具。 LLM 应用一旦复杂,观测缺失会让问题非常难排查。

10. 速记要点

  • LangChain 是 LLM 应用框架
  • 核心价值是 统一模型周边编排
  • 适合 工具 + 检索 + Agent + 结构化输出
  • 简单场景可直接用 SDK
  • 和 LangGraph 的关系是 上层易用抽象 vs 底层可控编排