LangChain框架_学习笔记

📑 目录

  1. [LangChain 是什么](#LangChain 是什么)
  2. 六大核心组件
  3. [LangChain 1.x 重大演进](#LangChain 1.x 重大演进)
  4. LangGraph:有状态图执行引擎
  5. 核心代码实战
  6. 生态工具链
  7. 学习路线与资源
  8. 总结

1. LangChain 是什么

LangChain 是一个用于构建由大语言模型(LLM)驱动的应用程序的 Python/JS 框架。它提供了一套模块化、可组合的抽象,让开发者能够轻松将 LLM 与外部数据源、工具链、记忆系统等连接起来,构建从简单聊天机器人到复杂多 Agent 协作系统的各类 AI 应用。

一句话理解 : LangChain 不是"成品 Agent",而是造 Agent 的工具箱------你要亲手搭,但能搭出任何东西。

1.1 为什么需要 LangChain?

痛点 LangChain 解决方案
LLM 知识有截止日期,无法获取实时信息 Tools + Agents 让 LLM 调用搜索引擎、API、数据库
单次对话无记忆,上下文容易丢失 Memory 模块管理短期/长期记忆
提示词管理混乱,复用困难 Prompts 模板化,支持变量注入与版本管理
复杂任务需要多步编排 Chains / LangGraph 将多个步骤串联成工作流
企业私域数据无法直接喂给 LLM Indexes + RAG 实现检索增强生成
生产环境缺乏可观测性 LangSmith 全链路追踪与评估

1.2 典型应用场景

image🛠image_search:1#7

LangChain 的典型应用场景包括:

  • 聊天机器人 --- 带记忆的多轮对话系统
  • 文档问答(RAG) --- 基于私域知识库的问答
  • 智能 Agent --- 能自主调用工具完成复杂任务
  • 内容生成 --- 摘要、翻译、写作辅助
  • 数据分析 --- 查询结构化数据、生成报表
  • API 编排 --- 将多个 API 调用编排成自动化工作流

2. 六大核心组件

LangChain 的架构围绕六大核心模块展开,理解它们是掌握框架的关键。

2.1 Models(模型)

Models 是 LangChain 的"大脑",负责所有推理和生成任务。LangChain 不绑定特定模型,支持通过统一接口调用多种 LLM:

类型 说明 示例
Chat Models 对话型模型,接收消息列表返回消息 GPT-4、Claude、DeepSeek、Qwen
LLMs 文本补全型模型,接收字符串返回字符串 GPT-3.5、text-davinci-003
Embeddings 文本向量化模型,用于语义检索 text-embedding-ada-003、BGE

LangChain 1.x 模型调用方式(推荐):

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_deepseek import ChatDeepSeek

# 方式1:直接使用提供商包
gpt = ChatOpenAI(model="gpt-4", temperature=0)
deepseek = ChatDeepSeek(model="deepseek-chat")

# 方式2:模型标识符字符串(自动推断)
from langchain.agents import create_agent
agent = create_agent("openai:gpt-4", tools=tools)

2.2 Prompts(提示词)

Prompts 模块用于管理提示词模板,支持变量注入、少样本示例(Few-shot)和输出解析。

python 复制代码
from langchain.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位专业的{role}。"),
    ("human", "请帮我{task}"),
])

# 变量注入
messages = prompt.format_messages(role="Python工程师", task="写一个快速排序")

2.3 Chains(链)

Chain 是 LangChain 最基础的编排单元,将多个组件按顺序串联,前一个步骤的输出自动传入下一个步骤。

python 复制代码
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 简单的 LLMChain
prompt = PromptTemplate(
    input_variables=["product"],
    template="为{product}写一句广告语:"
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run("智能手表")

常见 Chain 类型

  • LLMChain --- 单步 LLM 调用
  • SequentialChain --- 顺序执行多个 Chain
  • RouterChain --- 根据输入动态路由到不同子 Chain

2.4 Memory(记忆)

Memory 解决 LLM 无状态的问题,让应用能够记住对话历史或用户偏好。

记忆类型 特点 适用场景
ConversationBufferMemory 保存完整对话历史 短对话
ConversationBufferWindowMemory 只保留最近 K 轮 长对话防溢出
ConversationSummaryMemory 用 LLM 自动摘要历史 超长对话
VectorStoreRetrieverMemory 基于向量检索相关记忆 大规模知识记忆
python 复制代码
from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory()
memory.save_context({"input": "你好"}, {"output": "你好!有什么可以帮你的?"})
print(memory.load_memory_variables({}))  # 获取历史记录

2.5 Indexes(索引)

Indexes 模块是 RAG(检索增强生成)的核心,负责将文档切分、嵌入、存储到向量数据库,并支持语义检索。

image🛠image_search:1#5

RAG 标准流程

python 复制代码
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

# 1. 加载文档
loader = PyPDFLoader("paper.pdf")
docs = loader.load()

# 2. 切分文档
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.split_documents(docs)

# 3. 嵌入并存储到向量库
vectorstore = Chroma.from_documents(splits, OpenAIEmbeddings())

# 4. 检索 + 生成
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
relevant_docs = retriever.get_relevant_documents("这篇论文的核心贡献是什么?")

2.6 Agents(智能体)

Agent 是 LangChain 最强大的组件,它将 LLM 与 Tools 结合,让模型能够自主推理、选择工具、迭代执行,直到完成任务。

Agent 核心循环(ReAct 模式):

  1. 接收用户输入
  2. LLM 推理 → 决定调用哪个 Tool
  3. Tool 执行并返回结果
  4. LLM 再次推理 → 循环直到满足停止条件
  5. 返回最终答案
python 复制代码
from langchain.agents import create_agent, AgentExecutor
from langchain.tools import Tool

# 定义工具
tools = [
    Tool(name="Calculator", func=calculator, 
         description="执行数学计算"),
    Tool(name="Search", func=search,
         description="搜索互联网获取实时信息"),
]

# 创建 Agent(LangChain 1.x 统一入口)
agent = create_agent("openai:gpt-4", tools=tools)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 执行
result = agent_executor.invoke({
    "messages": [{"role": "user", "content": "今天北京天气如何?25的平方是多少?"}]
})

3. LangChain 1.x 重大演进

LangChain 从 0.x 到 1.x 经历了重大架构升级,核心变化包括:

3.1 统一 Agent 创建接口

版本 创建方式 特点
0.3 initialize_agent, create_react_agent, create_openai_functions_agent... 多种方式,容易混淆
1.x create_agent 统一入口,基于 LangGraph 构建

3.2 新增核心能力

LangChain 1.x 引入了多项生产级特性:

  • 🔄 动态模型选择 --- 根据对话复杂度在运行时切换模型(如简单问题用 GPT-4o-mini,复杂问题用 GPT-4)
  • 🔧 Middleware(中间件) --- 在 Agent 执行流程中插入自定义逻辑(日志、限流、模型路由)
  • 📐 结构化输出 --- 强制 Agent 返回 JSON / Pydantic 模型,便于下游处理
  • 🧠 自定义状态(Custom State) --- 扩展 Agent 的短期记忆,存储业务上下文
  • 🛡️ Guardrails(护栏) --- 输出安全校验与内容过滤
  • 👤 Human-in-the-loop --- 人工介入审核关键决策点

3.3 完整技术栈

复制代码
---------------重点核心部分---------------
# 1 LangChain核心组件之 Agents智能体
# 2 LangChain核心组件之 Models模型
# 3 LangChain核心组件之 Messages消息
# 4 LangChain核心组件之 Tools工具
# 5 LangChain核心组件之 Short-term memory短期记忆
# 6 LangChain核心组件之 Streaming流式传输
# 7 LangChain核心组件之 Structured output 结构化输出
---------------高级应用部分---------------
# 8 LangChain高级之 Middleware 中间件
# 9 LangChain高级之 Guardrails 护栏
# 10 LangChain高级之 Runtime 运行时
# 11 LangChain高级之 Context engineering 上下文工程
# 12 LangChain高级之 Model Context Protocol (MCP) 模型上下文协议
# 13 LangChain高级之 Human-in-the-loop 人机交互
# 14 LangChain高级之 Multi-agent 多智能体
# 15 LangChain高级之 Retrieval 检索
# 16 LangChain高级之 Long-term memory 长期记忆

4. LangGraph:有状态图执行引擎

传统 Chain 本质上是有向无环图(DAG) ,无法处理循环、条件分支和持久化状态。LangGraph 是 LangChain 生态在 2024-2026 年的重大演进,已成为复杂工作流编排的核心引擎。

4.1 LangGraph vs 传统 Chain

特性 传统 Chain LangGraph
循环支持 ❌ 无 ✅ 节点间可循环跳转
条件分支 ❌ 有限 ✅ 动态条件路由
状态持久化 ❌ 无内置 ✅ Checkpoint 检查点机制
人工介入 ❌ 不支持 ✅ Human-in-the-loop
流式输出 ❌ 整链输出 ✅ 节点级流式

4.2 LangGraph 核心概念

  • State(状态) --- 整个图共享的状态对象,节点间通过状态传递数据
  • Node(节点) --- 执行单元,可以是 LLM 调用、工具调用、函数处理
  • Edge(边) --- 节点间的连接,支持普通边和条件边
  • Checkpoint(检查点) --- 状态快照,支持中断恢复和历史回放

4.3 代码示例

python 复制代码
from langgraph.graph import StateGraph, END
from typing import TypedDict, List

# 定义状态
class AgentState(TypedDict):
    messages: List[str]
    next_action: str

# 定义节点
def call_llm(state: AgentState) -> AgentState:
    state["messages"].append("LLM 思考中...")
    state["next_action"] = "use_tool"
    return state

def use_tool(state: AgentState) -> AgentState:
    state["messages"].append("调用工具完成")
    state["next_action"] = "end"
    return state

# 构建图
graph = StateGraph(AgentState)
graph.add_node("llm", call_llm)
graph.add_node("tool", use_tool)
graph.add_edge("llm", "tool")

# 条件边:根据状态决定下一步
graph.add_conditional_edges(
    "tool",
    lambda s: END if s["next_action"] == "end" else "llm"
)
graph.set_entry_point("llm")

# 编译并执行
app = graph.compile()
result = app.invoke({"messages": [], "next_action": ""})

4.4 多 Agent 工作流

LangGraph 特别适合构建多 Agent 协作系统,例如:

  • Researcher Agent --- 负责信息检索
  • Chart Generator Agent --- 负责数据可视化
  • Router --- 根据任务类型动态分配 Agent

5. 核心代码实战

5.1 实战一:带工具调用的 ReAct Agent

python 复制代码
from langchain.agents import create_agent, AgentExecutor
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
import os

# 设置 API Key
os.environ["OPENAI_API_KEY"] = "your-api-key"

# 定义工具
def calculator(expression: str) -> str:
    try:
        return str(eval(expression, {"__builtins__": {}}, {}))
    except Exception as e:
        return f"计算错误:{e}"

def get_current_time(_: str) -> str:
    from datetime import datetime
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

tools = [
    Tool(name="Calculator", func=calculator, 
         description="执行数学计算,输入为数学表达式如 '360 * 24'"),
    Tool(name="CurrentTime", func=get_current_time,
         description="获取当前日期时间"),
]

# 创建 Agent
model = ChatOpenAI(model="gpt-4", temperature=0)
agent = create_agent(model, tools=tools, 
                     system_prompt="你是一个 helpful 的助手,尽可能使用工具来回答用户问题。")

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 执行
result = agent_executor.invoke({
    "messages": [{"role": "user", "content": "今天的日期是?360乘以24等于多少?"}]
})
print(result["output"])

5.2 实战二:动态模型选择(成本优化)

python 复制代码
from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langchain.agents.middleware import wrap_model_call, ModelRequest, ModelResponse

# 定义两个模型
basic_model = ChatOpenAI(model="gpt-4o-mini")      # 便宜、快速
advanced_model = ChatOpenAI(model="gpt-4")          # 强大、昂贵

@wrap_model_call
def dynamic_model_selection(request: ModelRequest, handler) -> ModelResponse:
    message_count = len(request.state["messages"])
    # 对话超过10轮,切换到强模型
    model = advanced_model if message_count > 10 else basic_model
    return handler(request.override(model=model))

agent = create_agent(
    model=basic_model,
    tools=tools,
    middleware=[dynamic_model_selection]
)

5.3 实战三:RAG 文档问答系统

python 复制代码
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 1. 加载 & 切分文档
loader = PyPDFLoader("company_handbook.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = splitter.split_documents(docs)

# 2. 构建向量库
vectorstore = Chroma.from_documents(splits, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})

# 3. 构建 RAG Chain
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4"),
    chain_type="stuff",
    retriever=retriever,
    return_source_documents=True
)

# 4. 提问
result = qa_chain({"query": "公司的年假政策是什么?"})
print(f"答案: {result['result']}")
print(f"来源: {[doc.metadata for doc in result['source_documents']]}")

6. 生态工具链

LangChain 生态不仅包含核心框架,还有一系列配套工具:

6.1 LangSmith --- 可观测性平台

LangSmith 是 LangChain 官方提供的 LLM 应用观测平台,核心功能:

  • ** Trace 追踪** --- 可视化每个 Chain/Agent 的执行步骤、Token 消耗、延迟
  • 测试与评估 --- 批量运行测试集,自动评估输出质量
  • Prompt 版本管理 --- 提示词 A/B 测试与回滚
  • 监控告警 --- 生产环境性能监控

6.2 LangServe --- 部署服务

LangServe 让你可以将 LangChain 应用一键部署为 REST API:

python 复制代码
from fastapi import FastAPI
from langserve import add_routes

app = FastAPI()
add_routes(app, chain, path="/chat")
# 自动生成 /chat/invoke /chat/stream 等端点

6.3 生态对比

工具 作用 是否付费
LangChain 核心开发框架 开源免费
LangGraph 有状态图执行引擎 开源免费
LangSmith 可观测性与评估 有免费额度
LangServe 部署为 API 服务 开源免费

7. 学习路线与资源

7.1 推荐学习路线

复制代码
Week 1: 基础入门
├── Day 1-2: 安装环境,理解 Models + Prompts
├── Day 3-4: 掌握 Chains 基础编排
├── Day 5-6: Memory 记忆系统实战
└── Day 7: 小项目:带记忆的聊天机器人

Week 2: 进阶应用
├── Day 8-9: Indexes + RAG 文档问答
├── Day 10-11: Tools 开发与 Agent 基础
├── Day 12-13: ReAct Agent 实战
└── Day 14: 小项目:私域知识库问答系统

Week 3: 高级特性
├── Day 15-16: LangGraph 图编排
├── Day 17-18: 多 Agent 协作系统
├── Day 19-20: Middleware + 动态模型
└── Day 21: 小项目:多 Agent 研报生成系统

Week 4: 生产部署
├── Day 22-23: LangSmith 观测与评估
├── Day 24-25: LangServe 部署
├── Day 26-27: Guardrails + 安全
└── Day 28: 完整项目上线

7.2 官方资源

7.3 与其他框架对比

维度 LangChain AutoGPT CrewAI
定位 Agent 构建脚手架 开箱即用的执行者 多角色协作编排
学习曲线 陡峭(2-4周) 平缓(半天) 中等(1周)
生态成熟度 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
生产稳定性 低(易死循环)
适用场景 企业级 RAG、复杂工作流 自动化研究 多角色内容生产

💡 选型建议 : 构建生产级系统 → LangChain + LangGraph ;快速原型验证 → CrewAI ;个人探索 → AutoGPT


8. 总结

8.1 核心要点回顾

组件 核心作用 记忆口诀
Models 推理大脑 "谁在想"
Prompts 指令模板 "怎么说"
Chains 流程编排 "怎么串"
Memory 记忆管理 "记得住"
Indexes 知识检索 "查得到"
Agents 自主决策 "自己干"
Tools 外部能力 "能干啥"

8.2 2026 发展趋势

  1. 框架融合加速 --- LangChain 吸收角色编排概念,框架边界逐渐模糊
  2. Agent 可观测性成为标配 --- 无 Trace/Log 的 Agent 无法进入生产环境
  3. 边缘 Agent 爆发 --- 手机端 LLM 推理成熟,轻量 Agent 在移动端落地
  4. Multi-Agent 工程化 --- 从 Hackathon 玩具走向拥有状态恢复、死锁检测的工业级方案
  5. Agent 即服务(AaaS) --- 托管式 Agent 平台兴起

8.3 最后

LangChain 的学习曲线确实较陡,概念众多,但一旦掌握其**"组件化 + 可组合"**的设计哲学,你就能像搭积木一样构建出任意复杂的 LLM 应用。建议从简单的 Chain 开始,逐步深入到 Agent 和 LangGraph,配合 LangSmith 进行观测调优,最终走向生产部署。

🎯 核心心法: Chain 解决"怎么做",Agent 解决"做什么",LangGraph 解决"怎么循环做"。

参考来源

  • LangChain 官方文档
  • LangGraph 官方博客
  • CSDN《LangChain 实战指南:2026年大模型应用开发框架核心价值与落地实践》
  • CSDN《2026 AI Agent 框架深度对比:LangChain vs AutoGPT vs CrewAI》
  • ApFramework《知识提取:LangChain 核心概念与内容精要》
相关推荐
吃饱了得干活1 小时前
向量数据库 Milvus:从零搭建 RAG 向量数据库实战
数据库·langchain·agent
春水碧于天,画船听雨眠1 小时前
LangChain学习笔记(二)
笔记·学习·langchain
MartinYeung51 小时前
[论文学习]AdvWeb:针对VLM驱动的Web Agent的可控黑盒攻击
学习
colman wang2 小时前
vibe coding学习手册
学习
210Brian2 小时前
STM32学习笔记(四)OLED显示屏与Keil调试
笔记·stm32·学习
盖世汤猿2 小时前
AUTOSAR BSW 全栈开发学习计划(35岁危机)
学习
达柳斯·绍达华·宁2 小时前
重读CV系列——&&3、Faster-RCNN学习
学习
weixin_431600442 小时前
做 Agent 会用到的 Node API(4):取消与 AbortController
前端·学习·ai·agent·ai编程
笑一下蒜了.3 小时前
DNS 原理与 BIND 权威服务器实操笔记
运维·服务器·笔记