什么是 LangChain
LangChain 是一个用于构建大语言模型应用的开源框架。它通过统一的组件和接口,把模型、提示词、数据检索、外部工具及任务流程连接起来,让开发者不必从零实现每一层集成代码。

简单说,LangChain 像一套面向 AI 应用的乐高积木:大模型负责理解和生成,数据源补充事实,工具执行动作,链和代理负责安排这些组件如何协作。
LangChain 解决的不是“怎样训练一个更聪明的模型”,而是“怎样把现有模型组织成一个能读取资料、调用工具、执行多步任务的应用”。客服机器人、企业知识库、文档问答、研究助手和自动化 Agent 都是它的典型使用场景。
一句话总结:LangChain 是把大模型从一次问答扩展为完整应用的编排框架。
为什么只调用一次大模型还不够
只调用一次大模型,通常只能完成基于当前输入的文本生成;真实应用还需要实时数据、私有上下文、稳定流程、工具权限和错误处理。

大语言模型虽然能写作、翻译和回答问题,但它天然存在几个边界:
- 训练数据有时间范围,不能保证知道今天发生了什么。
- 模型默认访问不了本地文件、企业数据库和内部知识库。
- 模型生成的是内容,不会自动发送邮件、运行查询或修改业务系统。
- 多步任务仅靠一段提示词控制,容易漏步骤、顺序漂移或输出不稳定。
- 生产系统还需要重试、日志、追踪、权限检查和人工确认。
例如,“先搜索最新资料,再提炼要点,最后写成邮件”不是一次生成,而是一套有输入、执行步骤、中间结果和最终输出的工作流。LangChain 的作用,就是协调模型与其他组件,让这类流程可以被设计、观察和复用。

LangChain 的核心组件有哪些
LangChain 的核心可以概括为链、代理、记忆和工具。链负责固定流程,代理负责动态决策,记忆负责保存状态,工具负责连接外部能力。
| 组件 | 核心作用 | 谁决定下一步 | 适合场景 |
|---|---|---|---|
| 链(Chain) | 按预设关系组合多个处理步骤 | 开发者预先定义 | 摘要、分类、RAG、结构化提取 |
| 代理(Agent) | 根据目标和中间结果动态选择工具 | 模型在约束内判断 | 研究助手、多工具任务、开放式自动化 |
| 记忆(Memory) | 保存会话状态、摘要或长期信息 | 应用的状态与存储策略 | 多轮对话、个性化助手、长期任务 |
| 工具(Tools) | 查询外部数据或执行真实动作 | 链直接调用或代理选择 | 搜索、计算、数据库、邮件、文件操作 |
这四类组件不是互斥关系。一个代理内部会调用工具,也可能运行在有状态的工作流中;一条 RAG 链则通常同时包含检索器、提示词和模型。
什么是链(Chain)
链是把多个处理步骤按确定关系组合起来,让数据依次经过每个环节并产生结果。它适合步骤已知、顺序明确、需要稳定复现的任务。

假设系统要读取一篇长文章,提炼三个要点,再用幽默语气改写。流程可以拆成:
- 切分文章,避免单次输入过长。
- 调用模型,为各段或全文生成摘要。
- 调用模型,按指定语气改写摘要。
- 校验输出格式,不符合要求时重试或转入其他分支。
链中的环节不一定都是模型调用。它可以是提示模板、Python 函数、检索器、输出解析器、搜索请求或数据库查询。在现代 LangChain 中,这类组合通常通过 Runnable 接口和 LangChain Expression Language(LCEL)表达。
链的优势是可预测、易测试、成本更容易估算;限制是流程预先确定,面对开放式问题时不够灵活。
什么是代理(Agent)
代理是能够根据目标、中间结果和可用工具,动态决定下一步动作的执行系统。它适合无法提前写死完整步骤的任务。

例如,用户提出:“把这封英文邮件翻译成中文,把其中的手机号码改成 123456,再保存为文本文件。”代理可以获得翻译、正则替换和文件写入三个工具,然后循环执行:
- 理解目标并选择第一个工具。
- 调用工具执行具体动作。
- 读取工具返回结果,检查是否满足当前目标。
- 根据结果继续调用工具、修正参数或结束任务。
这个“决策、行动、观察”的循环让代理可以适应中间变化。它不意味着模型拥有无限权限:真正执行搜索、写文件或发邮件的是外部工具,应用仍应限制工具范围,并对删除、付款、发送等高风险动作要求人工确认。
当前 LangChain 的代理能力建立在 LangGraph 的持久化执行与状态管理能力之上,更适合表达循环、分支、暂停、恢复和人工审批等生产工作流。
什么是记忆(Memory)
LangChain 中的记忆是对会话状态和历史信息的管理机制。它让应用能在后续调用中取回相关上下文,而不是要求模型凭空“记住”过去。

需要先澄清一个常见误解:模型 API 通常是无状态的。每次请求是否包含历史消息,由应用决定;所谓“记忆”,本质上是存储、筛选并重新注入上下文。
常见记忆方式包括:
| 记忆方式 | 做法 | 优点 | 限制 |
|---|---|---|---|
| 最近对话 | 带上最近若干轮消息 | 实现简单,保留原话 | 对话越长,Token 成本越高 |
| 对话摘要 | 把历史压缩成摘要 | 节省上下文窗口 | 摘要可能遗漏细节 |
| 结构化状态 | 保存用户偏好、任务进度等字段 | 可控、易校验 | 需要开发者设计状态结构 |
| 长期记忆 | 将重要信息存入数据库,需要时检索 | 可跨会话复用 | 需要处理相关性、隐私和过期数据 |
在较新的 LangChain/LangGraph 架构里,短期记忆通常表现为线程级状态和 checkpointer,长期记忆则由外部存储与检索机制管理。记忆不是越多越好,关键是只取回当前任务真正需要的信息。
工具如何扩展 LangChain 的能力
工具是代理或工作流可以调用的外部函数。它把搜索、计算、天气查询、数据库访问和文件操作等能力暴露给模型应用。

一个工具通常需要明确描述:
- 工具名称和用途。
- 输入参数及其类型。
- 返回结果的结构。
- 失败条件和能力边界。
- 所需权限及是否需要人工确认。
清楚的工具描述会直接影响代理能否选对工具、填对参数。工具数量也不是越多越好;能力重叠、命名含糊的工具会增加错误选择的概率。
LangChain 的真正价值是什么
LangChain 的主要价值是标准化和可组合,而不是简单地“少写几行代码”。它为模型、提示词、检索器、工具和执行流程提供共同的组合方式。

这种抽象带来四个直接收益:
- 组件可组合:模型、检索器、解析器和自定义函数可以连接成工作流。
- 组件可替换:符合相同接口的模型或向量存储更容易替换,但实际迁移仍需测试提示词、工具调用和输出差异。
- 流程可观察:可以追踪每一步输入、输出、延迟、Token 消耗和错误。
- 生态可复用:开发者可以使用现成集成连接模型供应商、数据库和外部服务。
“换模型只改一行代码”更适合作为理想目标,而不是生产承诺。不同模型在上下文窗口、结构化输出、工具调用、参数命名和提示词遵循上存在差异,替换后必须重新评估质量与成本。
如何用 LangChain 构建法律条文问答机器人
法律条文问答机器人可以通过 RAG 链连接法规文档与大模型,让回答尽量基于检索到的原文,而不是只依赖模型训练记忆。

一个典型流程包含六步:
- 收集法规文档,并保留法规名称、条款编号、发布日期等元数据。
- 将长文档切成适合检索的小段。
- 使用嵌入模型把文本转换为向量。
- 将向量与原文、出处一起存入向量数据库。
- 用户提问时,检索最相关的若干段落。
- 把问题与参考段落交给模型,要求基于材料回答并注明出处。
如果资料不足时还要搜索可信网站,可以增加判断分支和搜索工具。流程固定且规则明确时优先使用链;只有当工具选择和步骤无法预先确定时,才值得引入代理。
法律场景尤其需要强调限制:检索命中不代表法律解释正确,法规可能已修订或废止,最终答案应展示来源与生效日期,并由专业人员复核,不能直接替代法律意见。
链和代理应该怎么选
能用确定性链完成的任务,通常不必先上代理。代理更灵活,但也会增加延迟、成本、不可预测性和安全风险。
| 决策维度 | 选择链 | 选择代理 |
|---|---|---|
| 步骤是否已知 | 步骤和顺序明确 | 下一步取决于中间结果 |
| 工具选择 | 开发者预先指定 | 模型动态选择 |
| 可预测性 | 较高 | 较低 |
| 调试难度 | 较低 | 较高,需要完整轨迹 |
| 调用成本 | 通常可预估 | 可能因循环次数波动 |
| 典型任务 | 摘要、分类、抽取、固定 RAG | 多源研究、故障调查、开放式执行 |
实用原则是:先用最小的确定性工作流解决问题,再把真正需要动态决策的局部交给代理。
LangChain 有哪些局限和风险
LangChain 能降低集成成本,但不能自动保证答案正确、流程可靠或工具安全。框架越灵活,越需要清楚的边界与可观察性。

常见限制包括:
- 抽象层较多:问题可能来自模型、提示词、检索、解析器、工具或状态管理,定位链路更长。
- 版本变化较快:API 和推荐架构会演进,项目需要锁定版本并关注迁移指南。
- 代理结果不稳定:模型可能选错工具、重复调用或提前结束。
- 成本和延迟增加:多轮模型调用、检索与工具循环都会增加响应时间和费用。
- 安全风险仍然存在:提示注入、敏感数据泄露和工具越权不会因为使用框架而消失。
- 抽象不是免费迁移:更换模型、数据库或供应商后仍需回归测试。
生产环境至少应加入超时、重试上限、结构化校验、最小权限、敏感操作确认、调用追踪和质量评估。
常见问题
LangChain 是编程语言吗?
不是。LangChain 是应用开发框架,主要提供 Python 和 JavaScript/TypeScript 生态。它调用外部大模型,但本身不是大模型,也不负责训练基础模型。
LangChain、LangGraph 和 LangSmith 有什么区别?
LangChain 提供模型、工具、检索器等组件及高层 Agent 接口;LangGraph 用图和状态组织可持久化的长流程;LangSmith 用于追踪、评估和监控大模型应用。三者可以配合使用,但职责不同。
LangChain 和 RAG 是一回事吗?
不是。RAG 是“先检索资料,再基于资料生成答案”的架构模式;LangChain 是可以实现 RAG 的框架之一。开发者也可以不用 LangChain,直接调用模型、嵌入服务和向量数据库实现 RAG。
LangChain 的记忆会训练模型吗?
不会。记忆通常是把历史消息、摘要、结构化状态或检索结果保存到应用存储,并在后续请求时重新提供给模型。它不会自动修改基础模型参数。
使用 LangChain 必须搭建向量数据库吗?
不必须。只有知识库检索、语义搜索或长期记忆等场景可能需要向量数据库。简单的摘要、分类、结构化提取和固定工具调用可以不使用它。
小项目一定要用 LangChain 吗?
不一定。只有一次模型调用、少量提示词和简单业务逻辑时,直接使用模型 SDK 往往更清楚。需要组合检索、工具、状态、多步骤流程和可观察性时,LangChain 的价值才更明显。
总结
LangChain 是连接大模型、数据、工具和应用流程的开源框架。它用链编排确定性步骤,用代理处理动态决策,用记忆管理上下文与状态,再通过工具把模型接入真实系统。

理解 LangChain 的关键,不是记住多少组件名称,而是掌握一套大模型应用设计方法:固定任务用链,开放任务用代理,上下文交给状态与存储,真实动作交给受控工具。
LangChain 让大模型走出聊天框,但可靠的生产系统仍然需要数据质量、权限边界、执行监控和人工复核。框架负责连接组件,工程设计决定应用是否真正可用。

