基于 LangChain 最新架构(langchain-core + 生态拆分),按基础核心组件、对话记忆、检索 RAG、工具 & Agent、流程编排、辅助生态六大类划分,逐一说明组件作用、常用类、核心 API 与代码示例,兼顾原理与落地用法。

前置说明

  1. 包结构:LangChain 已模块化拆分,核心能力在 langchain_core,模型 / 集成在 langchain-* 系列包;
  2. 统一范式:绝大多数组件实现 Runnable 协议,支持 invoke()/stream()/batch()、管道符 | 组合;
  3. 环境依赖: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 场景。
  • 常用类OpenAIEmbeddingsDashScopeEmbeddings
  • 核心 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 文本分割器

  • 功能:将长文档切分为小块,适配模型上下文长度,提升检索精度。
  • 常用组件
    1. RecursiveCharacterTextSplitter:递归字符分割(通用首选)
      • 参数:chunk_size 块大小、chunk_overlap 块重叠长度
    2. 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
    1. Chroma:轻量本地向量库,无需额外部署,测试 / 小型应用首选
    2. FAISS:Facebook 高效向量检索库,速度快
    3. Milvus/Elasticsearch:分布式企业级向量库

核心通用 API

  • from_documents(docs, embeddings):从文档构建向量库
  • as_retriever():转为检索器,对接 RetrievalQA
  • similarity_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 类型
    1. create_openai_tools_agent:适配 OpenAI Function Calling,工业界最稳定
    2. 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 回调组件

  • 功能:监听全链路执行事件(模型调用、工具调用、链路起止),用于日志、监控、耗时统计、告警
  • 适用场景:生产环境可观测、自定义埋点。

八、生态配套组件(运维 / 部署 / 调试)

  1. LangSmith
    • 功能:全链路调试、追踪、评估 LLM 应用,查看每一步 Prompt、模型输出、工具调用日志。
  2. LangServe
    • 功能:将 Chain/Agent 快速发布为 REST API,支持流式、批量调用,对外提供服务。
  3. LangFlow
    • 功能:可视化拖拽界面,零代码 / 低代码搭建流程,适合快速原型、业务人员使用。

九、组件整体协作全景(串联前文知识)

以「带记忆 + RAG + 工具 Agent」完整链路总结:

  1. DocumentLoader + TextSplitter:加载并切分文档
  2. Embeddings + VectorStore:文档向量化入库,构建检索库
  3. Prompt + ChatModel + Parser:基础问答链路
  4. Memory:接管多轮对话上下文
  5. RetrievalQA Chain:实现私有文档问答
  6. Tools + Agent:扩展外部工具能力,实现自主任务执行
  7. LangGraph:编排复杂分支 / 循环流程
  8. LangSmith + LangServe:线上调试与服务部署

十、快速选型参考

表格

业务场景 推荐核心组件组合
简单单轮问答 Prompt + ChatModel + StrOutputParser
多轮聊天机器人 ConversationChain + ConversationBufferMemory
私有知识库问答 (RAG) Loader + Splitter + Embedding + VectorStore + RetrievalQA
工具调用 / 自动化任务 Tools + AgentExecutor
复杂流程 / 多分支 Agent LangGraph + Agent + State
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐