[AI]ai应用框架LangChain

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 应用。

相关推荐
极智视界1 小时前
分类数据集 - 动物分类数据集下载
人工智能·yolo·数据集·图像分类·动物分类·算法训练
她说人狗殊途1 小时前
概率密度函数 & 累积分布函数
人工智能·机器学习
Flying pigs~~1 小时前
大模型Prompt-Tuning技术详解:从入门到进阶
人工智能·大模型·微调·prompt
FrontAI1 小时前
深入浅出 LangGraph —— 第8章:人机交互:中断与审批流程
人工智能·langchain·人机交互·ai agent·langgraph
Wanderer X1 小时前
【VLM】diffusion
人工智能
mahtengdbb11 小时前
三阶段压缩瓶颈改进YOLOv26特征提取效率与通道自适应能力提升
人工智能·yolo·目标跟踪
嵌入式小企鹅1 小时前
CPU需求变化、RISC-V安全方案、DeepSeek V4适配、太空算力动态
人工智能·驱动开发·华为·开源·算力·risc-v
HyperAI超神经1 小时前
利用堆叠集成学习,英国研究团队实现251颗盾牌座δ型星星震学指数高精度预测
人工智能·机器学习·集成学习
AI刀刀1 小时前
手机deepseek怎么导出pdf
人工智能·ai·pdf·豆包·deepseek·ds随心转