LangChain 是 AI 应用开发领域最具影响力的开源框架之一,由 Harrison Chase 于 2022 年 10 月创立,现已成为构建大模型应用的事实标准基础设施。
一、背景:为什么需要 LangChain?
2022 年底,ChatGPT 爆火后,开发者很快发现:直接调用 OpenAI API 只能做简单问答,要构建真正有用的应用(如客服机器人、数据分析助手),需要解决一系列工程难题:
| 痛点 | 说明 |
|---|---|
| 模型切换成本 | 今天用 GPT-4,明天要换 Claude 或本地模型,代码要重写 |
| 提示词管理 | Prompt 散落在代码各处,难以版本控制、A/B 测试 |
| 上下文记忆 | 模型无状态,多轮对话需要自己维护历史记录 |
| 工具调用 | 让模型查数据库、调 API、执行代码,需要复杂的格式化与解析 |
| 数据接入 | 企业私有文档如何喂给模型?需要分块、嵌入、检索流水线 |
| 输出结构化 | 模型输出是自由文本,如何可靠地解析为 JSON、SQL? |
LangChain 的定位 :提供一套标准化抽象层,让开发者像搭积木一样组装大模型应用,而不必关心底层模型差异。
二、基本框架与原理
LangChain 的核心架构围绕 6 大抽象组件 设计:
┌─────────────────────────────────────────┐
│ LangChain 架构 │
├─────────────────────────────────────────┤
│ Model I/O │ 统一模型接口(OpenAI/Claude/本地) │
├─────────────────────────────────────────┤
│ Prompts │ 模板管理、少样本示例、消息格式化 │
├─────────────────────────────────────────┤
│ Chains │ 组件流水线:A → B → C 的顺序/并行组合 │
├─────────────────────────────────────────┤
│ Agents │ 动态决策:模型自主决定调用哪些工具 │
├─────────────────────────────────────────┤
│ Memory │ 短期/长期记忆管理(缓冲区、向量检索) │
├─────────────────────────────────────────┤
│ Retrieval │ RAG 流水线:加载 → 分块 → 嵌入 → 检索 │
├─────────────────────────────────────────┤
│ Callbacks │ 日志、监控、流式输出、中间步骤追踪 │
└─────────────────────────────────────────┘
核心原理详解
1. Model I/O(统一模型接口)
LangChain 不直接调用 openai.ChatCompletion,而是提供 BaseChatModel 抽象:
python
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_ollama import ChatOllama
# 三者接口完全一致,可无缝替换
llm = ChatOpenAI(model="gpt-4o")
llm = ChatAnthropic(model="claude-3-5-sonnet")
llm = ChatOllama(model="llama3.1") # 本地模型
原理 :所有模型封装为统一的 invoke() / stream() / batch() 接口,上层组件无需关心底层是谁。
2. Chains(流水线编排)
Chain 是 LangChain 最核心的概念------将多个组件按顺序或并行组合:
用户输入 → PromptTemplate → LLM → OutputParser → 结构化输出
原理 :每个组件都是 Runnable 对象,支持管道操作符 | 串联,形成有向无环图(DAG)。
3. Agents(动态工具调用)
传统 Chain 是固定流程 ,Agent 是动态流程------模型根据用户输入自主决定下一步:
用户问:"今天北京天气怎么样?"
Agent 思考:
1. 需要实时天气数据 → 调用 weather_api 工具
2. 获得结果 → 调用 LLM 生成自然语言回答
3. 输出给用户
原理 :ReAct(Reason + Act)循环,模型输出包含 Thought(思考)和 Action(工具调用),框架解析后执行工具,再将结果喂回模型。
4. Retrieval(RAG 流水线)
将私有文档接入大模型的标准路径:
PDF/Word/网页 → 文本提取 → 分块(Chunk) → 向量化(Embedding) → 存入向量库
↓
用户提问 → 向量化 → 相似度检索(Top-K) → 注入Prompt上下文 → LLM生成回答
5. Memory(记忆管理)
解决模型无状态问题:
| 类型 | 原理 | 适用 |
|---|---|---|
| Buffer Memory | 保留最近 N 轮对话 | 简单聊天 |
| Summary Memory | LLM 自动摘要历史 | 长对话 |
| Vector Memory | 向量检索相关历史 | 知识型对话 |
| Entity Memory | 提取并跟踪对话中的实体(人名/公司) | 客户关系 |
三、举例说明(用法)
示例 1:基础 Chain(结构化数据提取)
python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from pydantic import BaseModel, Field
# 1. 定义输出结构
class Person(BaseModel):
name: str = Field(description="人物姓名")
age: int = Field(description="年龄")
occupation: str = Field(description="职业")
# 2. 构建 Prompt
prompt = ChatPromptTemplate.from_messages([
("system", "从用户描述中提取人物信息,以JSON格式返回。"),
("human", "{description}")
])
# 3. 组装 Chain:Prompt | LLM | Parser
llm = ChatOpenAI(model="gpt-4o", temperature=0)
parser = JsonOutputParser(pydantic_object=Person)
chain = prompt | llm | parser
# 4. 执行
result = chain.invoke({
"description": "张三今年32岁,在北京一家AI公司担任算法工程师。"
})
print(result)
# {'name': '张三', 'age': 32, 'occupation': '算法工程师'}
示例 2:Agent + 工具(实时计算 + 搜索)
python
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool
# 1. 定义工具
@tool
def multiply(a: float, b: float) -> float:
"""计算两个数的乘积"""
return a * b
@tool
def search_company(query: str) -> str:
"""模拟企业信息查询"""
return f"{query} 是一家成立于2020年的AI芯片公司,员工500人。"
tools = [multiply, search_company]
# 2. 创建 Agent
llm = ChatOpenAI(model="gpt-4o")
agent = create_tool_calling_agent(llm, tools, prompt_template)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 3. 执行
result = agent_executor.invoke({
"input": "帮我查一下寒武纪公司的信息,然后计算 15.5 乘以 23 的结果。"
})
执行过程(ReAct 循环):
Thought: 用户有两个请求:查公司信息、做乘法。我需要先调用 search_company,再调用 multiply。
Action: search_company("寒武纪")
Observation: 寒武纪是一家成立于2020年的AI芯片公司...
Thought: 已获得公司信息,现在需要计算 15.5 * 23。
Action: multiply(15.5, 23)
Observation: 356.5
Thought: 已获得所有信息,可以生成最终回答。
Final Answer: 寒武纪是一家成立于2020年的AI芯片公司,员工500人。15.5乘以23的结果是356.5。
示例 3:RAG 知识库问答
python
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
# 1. 加载文档
loader = PyPDFLoader("company_handbook.pdf")
docs = loader.load()
# 2. 分块
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 3. 嵌入并存储
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
# 4. 构建 RAG Chain
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o"),
retriever=retriever,
return_source_documents=True # 返回引用的原文片段
)
# 5. 提问
result = qa_chain.invoke({"query": "公司年假有多少天?"})
print(result["result"]) # 模型生成的回答
print(result["source_documents"]) # 引用的PDF原文出处
四、使用场景说明
| 场景 | LangChain 解决方式 | 典型应用 |
|---|---|---|
| 企业知识库问答(RAG) | Retrieval + Memory + LLM | 内部文档助手、客服机器人、法律/医疗咨询 |
| AI Agent 工作流 | Agent + Tools + Memory | 自动写代码+测试+提交PR、数据分析+可视化+报告生成 |
| 结构化数据提取 | OutputParser + Chain | 从非结构化文本提取JSON/数据库记录、发票识别、简历解析 |
| 多模型路由 | Router Chain | 简单问题走本地小模型,复杂问题走 GPT-4,降低成本 |
| 对话记忆管理 | Memory 组件 | 长期客户关系维护、心理咨询对话、游戏 NPC 记忆 |
| 提示词工程管理 | PromptTemplate + Hub | 团队共享 Prompt 模板、A/B 测试不同提示词效果、版本控制 |
| 工具集成 | Tool + Agent | 查天气、调数据库、发邮件、操作 Excel、控制浏览器 |
五、LangChain 生态演进
| 阶段 | 时间 | 里程碑 |
|---|---|---|
| LangChain 0.1 | 2022.10 | 框架诞生,Chain 为核心 |
| LangChain 0.2 | 2024 | 引入 LCEL(LangChain Expression Language),Runnable 接口统一 |
| LangGraph | 2024+ | 官方推出的图状态机扩展,支持循环、条件分支、持久化,替代复杂 Chain |
| LangServe | 2024 | 将 Chain 部署为 REST API 服务 |
| LangSmith | 持续 | 可观测性平台,追踪、评估、调试 LLM 应用 |
2026 年现状 :LangChain 已从"一个 Python 包"发展为完整的 LLM 应用开发生态 ,但核心定位始终是**"抽象层"------它不训练模型,不替代模型,而是让开发者更高效地调用和编排模型能力**。
一句话总结
LangChain 是大模型应用的"操作系统":它不提供算力(模型),也不提供应用(产品),而是提供一套标准化接口和编排工具,让开发者像搭积木一样把模型、数据、工具、记忆组装成可运行的 AI 应用。