随着大语言模型(Large Language Model,LLM)的发展,开发者已不再满足于简单对话场景,而是希望将模型真正落地到业务系统中。开发初期,直接调用模型API即可实现问答、摘要或简单助手等基础功能。随着需求复杂化,系统开发复杂度迅速上升,开发者需要自行处理检索、上下文拼接、流程编排、工具调用、状态管理等任务,系统代码也变得越来越难以维护。为降低重复开发成本,LangChain、LlamaIndex、Semantic Kernel等框架应运而生,它们将常见能力抽象为可复用组件,提升复杂应用的可维护性与可控性。

在众多开发框架中,LangChain起步较早且应用广泛。它将常见场景抽象为可复用组件,例如可便捷实现知识库问答(Retrieval-Augmented Generation,RAG),也支持构建具备自主决策能力的智能体(Agent),使模型能够根据任务动态选择下一步操作并调用外部工具完成实际工作。由此,模型不再局限于文本生成,而是能够参与具体任务的执行过程。

当然,LangChain并非唯一选择,不同框架在数据处理和工程集成等方面各具优势。但从入门角度看,LangChain对RAG与Agent等核心范式覆盖较为全面。掌握其基本用法后,再迁移到其他框架时,整体思路大多相通,无需从头搭建体系。基于此,本文将以LangChain为例,介绍该类开发框架的基本使用方法。

⚠⚠⚠注意,本文定位于入门导读,不涉及完整的实战开发,而是围绕Chain、Agent、Memory、RAG等核心概念,系统梳理其应用场景与协作机制。建立基础认知后,再结合实战教程进行实践,将能够更高效地应用LangChain。

LangChain的GitHub仓库地址为:langchain-github。如需深入学习LangChain,可参考LangChain官方文档langchain-docs,以及技术文章GitHub 12w Star 神器!一文详解大模型集成框架 LangChain。

目录
1 概述
1.1 LangChain介绍
1.2 环境准备
2 基础使用
2.1 基础模型
2.1.1 Chat Model
2.1.2 Embedding Model
2.2 Message消息机制
2.3 Prompt Template提示词模板
2.4 Output Parser输出解析器
2.5 Runnable的调用方式
2.6 Bind方法
3 核心组件
3.1 Chains与LCEL
3.2 Memory记忆机制
3.3 Tools工具
3.4 Agent智能体
3.4.1 Agent的基本机制
3.4.2 Agent的运行模式与示例
4 检索
4.1 Retrieval与RAG
4.2 Retrieval流程
5 LangChain 1.x总结
6 参考
1 概述
1.1 LangChain介绍
基础介绍

LangChain于2022年10月作为面向LLM应用开发的开源项目发布,最初主要适配GPT-3,并在同年11月30日ChatGPT发布后迅速跟进,持续扩展以支持更多模型。其核心优势在于模块化设计,将复杂的LLM开发拆解为可复用组件,使开发者能够灵活组合。基于这一设计,LangChain不仅能够实现广为人知的RAG,还支持智能体、流程编排、工具调用以及多模型协作等功能,展现出良好的可扩展性。

为了支撑这些能力,LangChain对模型接口进行了抽象统一,主要面向三类核心模型:

LLMs:通常指基于大规模参数和海量文本训练的Transformer模型,以单轮文本生成为核心,输入输出通常为纯字符串,更适合文本生成、翻译、摘要等一次性处理任务。
Chat Models:面向多轮对话场景,输入输出采用结构化消息,能够更好地表达角色、上下文和对话状态,是当前主流的LLM应用形态。
Embedding Models:用于将文本、图片等非结构化数据转换为向量表示,支持语义检索、相似度计算和向量数据库存储,是RAG系统中的关键组件。
LangChain通过统一模型接口屏蔽不同模型之间的API差异,简化复杂逻辑编排,并以链式结构和组件化设计让流程清晰可控。在这一基础之上,它逐步发展成为一套完整的生态体系,支持组件灵活组合,并提供Agent、RAG以及调试、观测和评估工具。相比之下,直接调用LLM API虽然上手更快,但接口不统一,复杂逻辑需要手动实现,工具链和RAG也要自行搭建,扩展和排查成本更高。

本文基于langchain 1.x版本介绍langchain基础功能,更多关于LangChain的系统性介绍可参阅:Langchain 1.0.2全栈开发教程。

生态结构

LangChain并不是一个单一库,而是一套面向LLM应用开发的框架体系,整个生态大致可以分为架构层、组件层和部署层。

架构层主要解决如何用统一方式构建应用。它包含三个基础包:langchain(提供Chains、Agents、检索等能力)、langchain-core(提供底层抽象)、langchain-community(集成第三方模型接口和工具扩展)。为整合上述能力,LangChain抽象出六类核心组件:

Model I/O:处理模型输入与输出,包括提示词组织、模型调用和结果解析;
Chains:将多个步骤串联起来,形成完整的任务流程;
Memory:保存历史对话与上下文,支持多轮交互;
Agents:让LLM根据任务目标选择并调用合适的工具;
Retrieval:从外部数据中检索信息,是RAG的基础;
Callbacks:记录和监控运行过程,用于日志、调试和流式输出等。
这些组件能支撑大多数基础场景,比如简单问答、结构化输出、多轮对话和知识库问答。但当流程变复杂,线性的Chains往往不够灵活,一旦涉及分支判断、循环执行、并行处理或人工介入,就需要引入组件层的能力,典型代表是LangGraph和LangSmith。LangGraph将Chains扩展为图结构,支持分支、循环、并行、状态持久化、断点恢复及人工介入,适合复杂流程和多智能体场景。LangSmith则侧重调试与评估,提供链路追踪、提示词管理、实验对比和运行监控等功能,帮助定位问题并优化效果。

应用构建完成后,还需要对外提供服务,这部分由部署层负责。LangServe可以将Chains或Agent封装为API,并接入现有系统。它基于FastAPI实现,部署成本较低,适合将LangChain应用快速服务化。
实际开发和学习可按LangChain起步、LangGraph应对复杂流程、LangSmith做调试优化的顺序推进。

顺序 学习内容 对应能力
1 模型调用 实现基础问答能力
2 Prompt Template 规范并复用模型输入模板
3 Output Parser 获取结构化输出结果
4 Runnable/LCEL 统一组合模型、提示模板、解析器等组件
5 Chains 构建多步骤串联处理流程
6 Memory 支持多轮对话与上下文记忆保持
7 Tools 接入搜索、数据库、API等外部工具能力
8 Agents 根据任务目标自主选择并调用工具执行
9 Retrieval/RAG 构建基于外部知识库的检索增强问答应用
10 LangGraph 编排包含分支、循环、并行及多智能体协作的复杂流程
11 LangSmith 对应用进行追踪、调试、评估与性能监控
12 LangServe 将应用封装为API服务并部署运行
https://www.kdnuggets.com/getting-the-most-from-the-langchain-ecosystem

1.2 环境准备
本文基于Python开发环境,采用LangChain 1.x版本进行实现。相较于早期0.x系列版本,LangChain 1.x在API设计上发生了较大变化。LangChain核心库可通过以下命令进行安装:

pip install langchain
在整体设计理念上,LangChain 1.x更加注重数据流与工作流的构建能力。其关注重点已不再局限于单次模型调用,而是聚焦于用户输入如何经过一系列可控的处理步骤,最终生成稳定且可靠的输出结果。也就是说,该版本更强调完整执行流程的组织与编排,而非单一的模型对话能力。

LangChain本身并不提供具体模型,而是作为统一的调用框架用于对接外部模型服务。为了支持不同的模型提供方,LangChain采用模块化设计,使开发者可根据实际需求灵活集成相关组件。

https://github.com/chatchat-space/Langchain-Chatchat

在具体使用中,如果需要对接常用的OpenAI或兼容OpenAI协议的模型服务,可以安装如下扩展包:

pip install langchain-openai
如果使用Ollama作为本地LLM或嵌入LLM服务,则可安装对应集成:

pip install langchain-ollama
此外,在应用开发过程中,若涉及文本拆分、向量存储等功能,还需要安装相关组件:

pip install langchain-text-splitters langchain-chroma
2 基础使用
2.1 基础模型
前文提到LangChain支持三类模型,本节主要介绍Chat Models和Embedding Models的使用,不再单独介绍LLMs。因为Chat Models已基本覆盖LLMs的使用场景,并更符合当前实际应用方式。

https://pub.towardsai.net/langchain-series-2-models-explained-llms-chat-models-and-embeddings-with-practical-501e1715e5bb

2.1.1 Chat Model
在LangChain中,与LLM的交互被统一抽象为一套接口,即Model I/O。它可以理解为应用程序与LLM之间的中间层,使开发者无需关心底层模型实现,只需通过一致的方式完成调用。

基于这一抽象,LangChain可以对接多种模型来源,包括OpenAI、各类第三方模型接口以及本地服务,如兼容OpenAI协议的Ollama等。尽管模型来源不同,但调用方式是统一的。以OpenAI为例,典型调用方式如下:

from langchain_openai import ChatOpenAI

chat_model = ChatOpenAI(
model_name=model_name, # 模型名称
base_url=base_url, # API服务地址
api_key=api_key # API密钥
)
其中model_name表示模型名称,base_url表示模型服务地址,api_key表示接口密钥。

同样地,本地模型服务也可以通过相同方式接入。例如使用Ollama时,可以先拉取并启动模型:

ollama pull qwen3.5:0.8b
ollama serve
Ollama的完整使用教程可参阅:推理部署框架llama.cpp与Ollama使用指北。Ollama默认监听地址为 http://localhost:11434 ,并原生兼容OpenAI协议的接口,只需调整参数即可在LangChain中调用:

from langchain_openai import ChatOpenAI

chat_model = ChatOpenAI(
model_name=“qwen3.5:0.8b”,
base_url=“http://localhost:11434/v1”,
api_key=“any_value” # 本地服务通常不校验
)

response = chat_model.invoke(“请介绍一下你自己”)
print(response.content)
后续示例将统一使用该chat_model,并省略初始化过程。关于LangChain与Ollama的配合使用,可参考:LangChain 1.0光速入门!基于本地Ollama部署LLM。

从本质上看,上述调用过程正是Model I/O的具体体现,而一次完整的LLM交互可以拆分为三个步骤:首先对输入进行格式化,其次调用模型生成结果,最后对输出进行解析。这三个阶段分别对应Prompt Template、Model和Output Parser,从而形成统一且可扩展的调用流程。

2.1.2 Embedding Model
Embedding Model是Model I/O体系中的另一类核心模型,用来把文本、图片等非结构化数据表示为向量。在这个向量空间里,语义相近的内容会更接近,因此可以用来做相似度检索。在RAG任务中,它会分别将用户问题与知识库文本进行编码,通过相似度找到最相关的内容,提供给LLM作为上下文。

在LangChain中,可以通过Embedding模型完成文本向量化,不同来源的Embedding服务也可以通过统一接口使用。例如,使用本地部署的Ollama嵌入模型生成向量:

from langchain_ollama import OllamaEmbeddings

embeddings = OllamaEmbeddings(
model=“qwen3-embedding:0.6b”,
base_url=“http://127.0.0.1:11434”
)

vector = embeddings.embed_query(“hello world”)

print(“嵌入向量长度:”, len(vector))
print(“前10个值:”, vector[:10])
代码得到的vector即为输入文本的向量表示,可用于后续的相似度计算或检索任务。

2.2 Message消息机制
在LangChain中,消息(Message)是Chat Model交互的基本载体,用于统一描述模型输入与输出的结构。一条消息通常由两部分组成:角色(Role)和内容(Content)。角色用于标识消息的来源或作用,内容则包含具体的文本信息。此外,消息还可以携带上下文信息和元数据,以支持更复杂的对话场景。

LangChain提供了多种常见的消息类型,以适配不同的交互需求:

消息类型 说明
SystemMessage 用于设定模型的行为规则、角色身份及上下文约束
HumanMessage 表示用户输入
AIMessage 表示模型输出
ToolMessage/FunctionMessage 表示工具执行结果,常用于Agent或函数调用场景
在典型的对话流程中,SystemMessage用于预设规则,HumanMessage提供输入问题,AIMessage负责生成回答。这种分工使对话结构更加清晰,也便于扩展到多轮对话和Agent等复杂应用场景。

示例代码:

from langchain_core.messages import SystemMessage, HumanMessage

question = “电风扇的工作原理是什么?”

风格1:标准说明

messages1 = [
SystemMessage(content=“请使用标准说明文风格作答,要求表达清晰、客观严谨”),
HumanMessage(content=question)
]

风格2:文言文风格

messages2 = [
SystemMessage(content=“请以文言文风格作答,语言简洁典雅”),
HumanMessage(content=question)
]

resp1 = chat_model.invoke(messages1)
resp2 = chat_model.invoke(messages2)

print(“=== 标准说明 ===”)
print(resp1.content)

print(“\n=== 文言文风格 ===”)
print(resp2.content)
https://mlpills.substack.com/p/issue-131-build-an-agent-in-langchain

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐