[智能体-118]:LangChain 核心组件、功能与 API 详解
基于 LangChain 最新架构(langchain-core + 生态拆分),按基础核心组件、对话记忆、检索 RAG、工具 & Agent、流程编排、辅助生态六大类划分,逐一说明组件作用、常用类、核心 API 与代码示例,兼顾原理与落地用法。
前置说明
- 包结构:LangChain 已模块化拆分,核心能力在
langchain_core,模型 / 集成在langchain-*系列包;- 统一范式:绝大多数组件实现 Runnable 协议,支持
invoke()/stream()/batch()、管道符|组合;- 环境依赖:
pip install langchain langchain-openai langchain-community langchain-chroma
一、基础核心组件(框架底座)
1. Models 模型层
负责对接各类大模型、嵌入模型,分为 LLM、ChatModel、Embeddings 三大类,是所有应用的基础。
1.1 LLM 纯文本模型
- 功能:输入纯文本、输出纯文本,适配传统文本生成模型。
- 常用类:
langchain_openai.OpenAI、各类开源模型封装类 - 核心 API
invoke(input: str) -> str:同步调用,返回完整文本stream(input: str):流式逐段输出batch(inputs: List[str]) -> List[str]:批量调用
示例
python
运行
from langchain_openai import OpenAI
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0)
# 同步调用
res = llm.invoke("简单介绍 LangChain")
print(res)
# 流式调用
for chunk in llm.stream("简单介绍 LangChain"):
print(chunk, end="")
1.2 ChatModel 对话模型(主流)
- 功能:结构化消息交互(
system/user/assistant),适配聊天类大模型,支持多轮对话格式。 - 常用类:
langchain_openai.ChatOpenAI - 核心数据结构:消息对象
SystemMessage:系统人设 / 指令HumanMessage:用户消息AIMessage:模型回复
- 核心 API:同 Runnable 标准方法,入参为消息列表
示例
python
运行
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
chat = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
messages = [
SystemMessage(content="你是技术讲解助手"),
HumanMessage(content="什么是 ChatModel")
]
res = chat.invoke(messages)
print(res.content)
1.3 Embeddings 嵌入模型
- 功能:将文本转为向量,用于相似度计算、检索、RAG 场景。
- 常用类:
OpenAIEmbeddings、DashScopeEmbeddings等 - 核心 API
embed_query(text: str) -> List[float]:单条文本向量化embed_documents(texts: List[str]) -> List[List[float]]:批量文档向量化
示例
python
运行
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
vec = embeddings.embed_query("AI Agent 介绍")
print(len(vec)) # 输出向量维度
2. Prompt 提示词模板
统一管理提示词,支持变量渲染、消息模板、少样本示例,解耦提示词与业务代码。
2.1 StringPromptTemplate 文本模板
- 功能:纯文本模板,支持占位符
{var}动态填充内容。 - 核心 API
format(**kwargs) -> str:传入变量,渲染为完整提示词
2.2 ChatPromptTemplate 对话消息模板(最常用)
- 功能:适配 ChatModel,批量构建结构化消息列表。
- 核心 API
from_messages():快速构造模板format_messages(** kwargs):渲染并返回消息列表
完整示例
python
运行
from langchain_core.prompts import ChatPromptTemplate
# 定义模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是专业客服,根据 {context} 回答用户问题"),
("human", "用户问题:{question}")
])
# 渲染变量
input_data = {"context": "LangChain 是大模型开发框架", "question": "LangChain 是什么?"}
prompt_msg = prompt.format_messages(**input_data)
print(prompt_msg)
2.3 FewShotPromptTemplate 少样本模板
- 功能:内置问答示例,引导模型输出格式 / 逻辑,提升稳定性。
3. Output Parsers 输出解析器
- 功能:解析模型返回的文本,转为结构化数据(JSON、列表、对象),解决模型输出格式不统一问题。
- 常用组件 & API
3.1 StrOutputParser 字符串解析器
最基础解析器,直接提取文本内容,管道组合标配。
python
运行
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
# 链式组合:模板 | 模型 | 解析器
chain = prompt | ChatOpenAI() | parser
res = chain.invoke(input_data)
3.2 JsonOutputParser JSON 解析器
强制模型输出 JSON,自动解析为字典。
3.3 PydanticOutputParser 实体解析器
结合 Pydantic 模型,强类型校验输出结构,企业级结构化输出首选。
二、Memory 记忆组件(多轮对话核心)
大模型无状态,Memory 组件自动管理对话历史,拼接上下文到提示词中,实现 “记忆” 效果。所有 Memory 统一接口:load_memory_variables() / save_context()
1. ConversationBufferMemory 完整缓存记忆
- 功能:全量保存所有对话轮次,不做压缩。
- 适用:短对话、轮次少场景
- 核心 API
save_context(inputs, outputs):保存一轮问答load_memory_variables({}):读取历史对话
示例
python
运行
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
# 保存对话
memory.save_context({"input": "你好"}, {"output": "你好,有什么可以帮你?"})
# 读取历史
print(memory.load_memory_variables({})["history"])
2. ConversationSummaryMemory 摘要记忆
- 功能:定期调用 LLM 把长对话压缩为摘要,大幅减少 Token 占用。
- 适用:长时多轮对话、上下文窗口较小的模型。
3. ConversationBufferWindowMemory 滑动窗口记忆
- 功能:只保留最近 N 轮对话,丢弃早期内容,防止上下文溢出。
- 构造参数:
k保留轮数。
4. VectorStoreRetrieverMemory 向量库长期记忆
- 功能:对话内容向量化存入向量库,按语义检索历史,突破窗口限制,实现跨会话长期记忆。
- 适用:个人专属助手、历史会话回溯。
三、Chain 链组件(流程编排基础)
Chain 是 LangChain 最基础的流程组合单元,将 提示词、模型、解析器、工具串联为完整业务流程。新版优先使用 Runnable 管道 | 替代传统 Chain 类,写法更简洁。
1. LLMChain 基础问答链
- 功能:组合
Prompt + LLM/ChatModel,最基础执行链路。 - 传统写法
python
运行
from langchain.chains import LLMChain
chain = LLMChain(llm=ChatOpenAI(), prompt=prompt)
res = chain.run(question="LangChain 用途")
- 现代管道写法(推荐)
python
运行
chain = prompt | ChatOpenAI() | StrOutputParser()
res = chain.invoke({"question": "LangChain 用途"})
2. RetrievalQA 检索问答链(RAG 核心)
- 功能:结合「检索器 + LLM」,实现私有文档问答,RAG 场景标配。
- 核心参数
retriever:检索器(从向量库召回文档)chain_type:文档拼接策略(stuff/map_reduce/refine)
RAG 最简示例
python
运行
from langchain.chains import RetrievalQA
from langchain_chroma import Chroma
# 假设已有向量库与检索器
vector_db = Chroma(embedding_function=embeddings)
retriever = vector_db.as_retriever(search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(),
chain_type="stuff",
retriever=retriever,
return_source_documents=True # 返回引用文档
)
res = qa_chain.invoke({"query": "文档中提到了什么?"})
3. ConversationChain 对话链
- 功能:内置 Memory,快速实现带记忆的多轮对话机器人。
4. 其他常用 Chain
SequentialChain:串行执行多个子链,多步骤流水线任务RouterChain:路由链,根据输入分发到不同子链,实现分支逻辑
四、Document Loaders & Text Splitters(RAG 数据预处理)
属于 RAG 前置链路,负责加载文档 + 文本切分。
1. Document Loaders 文档加载器
- 功能:读取各类文件 / 数据源,统一转为
Document对象(page_content正文 +metadata元数据)。 - 常用加载器:
TextLoader:纯文本文件PyPDFLoader:PDF 文档WebBaseLoader:网页内容CSVLoader:表格文件
示例
python
运行
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("test.pdf")
docs = loader.load() # 加载全部页面
2. Text Splitters 文本分割器
- 功能:将长文档切分为小块,适配模型上下文长度,提升检索精度。
- 常用组件
RecursiveCharacterTextSplitter:递归字符分割(通用首选)- 参数:
chunk_size块大小、chunk_overlap块重叠长度
- 参数:
CharacterTextSplitter:简单字符分割
示例
python
运行
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_docs = splitter.split_documents(docs)
五、Vector Stores 向量数据库
- 功能:存储文本向量 + 原始文档,提供相似度检索,RAG 核心存储层。
- 主流封装 & API
Chroma:轻量本地向量库,无需额外部署,测试 / 小型应用首选FAISS:Facebook 高效向量检索库,速度快Milvus/Elasticsearch:分布式企业级向量库
核心通用 API
from_documents(docs, embeddings):从文档构建向量库as_retriever():转为检索器,对接 RetrievalQAsimilarity_search(query, k):相似度检索,返回 Top-k 文档
python
运行
from langchain_chroma import Chroma
# 构建向量库
vectordb = Chroma.from_documents(documents=split_docs, embedding=embeddings)
# 相似度查询
search_docs = vectordb.similarity_search("关键词", k=2)
六、Tools & Agent 工具与智能体(AI Agent 核心)
实现 模型决策 + 外部工具执行,让大模型从 “问答” 走向 “做事”。
1. Tools 工具组件
- 功能:封装外部能力(搜索、计算器、API、数据库、硬件接口等),统一格式供 Agent 调用。
- 内置常用工具
TavilySearchResults:联网搜索Calculator:数学计算PythonREPL:代码执行器
- 自定义工具:使用
@tool装饰器快速封装自定义函数。
自定义工具示例
python
运行
from langchain.tools import tool
@tool("加法计算器")
def add_tool(a: int, b: int) -> int:
"""计算两个数字相加,入参为两个整数"""
return a + b
2. Agent 智能体
- 功能:基于 LLM 做决策,自动选择、调用工具,循环执行直到任务完成。
- 主流 Agent 类型
create_openai_tools_agent:适配 OpenAI Function Calling,工业界最稳定create_react_agent:ReAct 架构 Agent,开源模型通用
- 核心 API
AgentExecutor:Agent 执行器,调度整个工具调用闭环.invoke():接收用户问题,自动完成决策 + 工具调用
Agent 完整示例
python
运行
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(model="gpt-3.5-turbo")
tools = [add_tool] # 加载工具
# 构造提示词
prompt = ChatPromptTemplate.from_messages([
("system", "你可以使用工具完成计算任务"),
("user", "{input}"),
("placeholder", "{agent_scratchpad}")
])
# 创建 Agent + 执行器
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 执行任务
res = agent_executor.invoke({"input": "计算 12 + 34"})
print(res["output"])
七、高级编排组件
1. LangGraph
- 定位:基于图结构的复杂工作流编排,弥补传统 Chain 无法实现循环、分支、状态持久化的短板。
- 核心能力:状态管理、条件分支、循环执行、多智能体协作,用于复杂长流程 Agent。
- 核心概念:
State状态、Node节点、Edge连线、条件路由。
2. Callbacks 回调组件
- 功能:监听全链路执行事件(模型调用、工具调用、链路起止),用于日志、监控、耗时统计、告警。
- 适用场景:生产环境可观测、自定义埋点。
八、生态配套组件(运维 / 部署 / 调试)
- LangSmith
- 功能:全链路调试、追踪、评估 LLM 应用,查看每一步 Prompt、模型输出、工具调用日志。
- LangServe
- 功能:将 Chain/Agent 快速发布为 REST API,支持流式、批量调用,对外提供服务。
- LangFlow
- 功能:可视化拖拽界面,零代码 / 低代码搭建流程,适合快速原型、业务人员使用。
九、组件整体协作全景(串联前文知识)
以「带记忆 + RAG + 工具 Agent」完整链路总结:
- DocumentLoader + TextSplitter:加载并切分文档
- Embeddings + VectorStore:文档向量化入库,构建检索库
- Prompt + ChatModel + Parser:基础问答链路
- Memory:接管多轮对话上下文
- RetrievalQA Chain:实现私有文档问答
- Tools + Agent:扩展外部工具能力,实现自主任务执行
- LangGraph:编排复杂分支 / 循环流程
- LangSmith + LangServe:线上调试与服务部署
十、快速选型参考
表格
| 业务场景 | 推荐核心组件组合 |
|---|---|
| 简单单轮问答 | Prompt + ChatModel + StrOutputParser |
| 多轮聊天机器人 | ConversationChain + ConversationBufferMemory |
| 私有知识库问答 (RAG) | Loader + Splitter + Embedding + VectorStore + RetrievalQA |
| 工具调用 / 自动化任务 | Tools + AgentExecutor |
| 复杂流程 / 多分支 Agent | LangGraph + Agent + State |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)