框架介绍
LangChain 是一个构建 LLM 应用的框架,目标是把 LLM 与外部工具、数据源和复杂工作流连接起来。
LangChain 1.0 版本把"Agent 的稳定化、结构化输出、可观测性与生产化"作为核心改进目标 。
用 LangChain 能做什么?
- 构建 RAG 问答系统:结合外部知识库检索
- 构建 Agent:调用外部 API(搜索、数据库、文件系统)执行多步任务
- 组织流水线:prompt → 模型 → 后处理的可复用链(Chains)
- 多轮对话:带记忆(Memory)与长会话管理
- 生产监控:配合 LangSmith/LangGraph 实现可观测性
核心价值:10行代码完成原本需要1000行的 AI 应用,并且具有状态持久化、人工干预、并发控制等企业级能力。
提示
统一智能体抽象 + 标准化内容表示 + 可插拔治理中间件
LangChain 生态概览
| 层级 | 核心内容 |
|---|---|
| 模型层 | init_chat_model() 统一接口,适配 20+ 厂商 |
| 工具层 | @tool 装饰器、100+ 内置工具、Toolkit |
| 记忆层 | 短期记忆(消息历史)、长期记忆(向量数据库) |
| Agent 层 | create_agent() 核心 API,基于 LangGraph |
| 工作流层 | Chain(串联)、LangGraph(条件分支、循环) |
| 监控层 | LangSmith 可视化追踪、LangChain Evaluate |
关键组件:
- LangGraph:底层 Agent 调度框架,解决复杂控制流问题
- LangServe:将 chain/agent 部署为 REST API
底层运行架构
┌─────────────────────────────────────────┐
│ LangChain 应用层 │
│ (create_agent, 工具和中间件) │
└──────────────────┬──────────────────────┘
▼
┌─────────────────────────────────────────┐
│ LangGraph 编排层 │
│ (StateGraph, Nodes, Edges, Checkpoints)│
└──────────────────┬──────────────────────┘
▼
┌─────────────────────────────────────────┐
│ LCEL 运行时层 │
│ (Runnable接口, | 运算符, 流式/批处理) │
└──────────────────┬──────────────────────┘
▼
┌─────────────────────────────────────────┐
│ 大语言模型 API │
│ (OpenAI / DeepSeek / Ollama 等) │
└─────────────────────────────────────────┘
- LCEL:无状态的函数式编排,构建"流水线"
- LangGraph:有状态的图结构编排,构建"流程图"(支持循环、条件分支、持久化)
Runnable 执行引擎
Runnable 是 LangChain 1.0 的统一接口标准,所有组件都被抽象为 Runnable:
- LLM、Prompt、Parser、Retriever、Tool、Agent、自定义函数
统一调用方式:.invoke()、.batch()、.stream()、.astream_events()
快速入门示例
# 安装:pip install langchain langchain-openai
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 1. 定义模型
model = ChatOpenAI(model="gpt-4o-mini")
# 2. 定义 Prompt
prompt = ChatPromptTemplate.from_template("Tell me a joke about {topic}")
# 3. 定义输出解析器
parser = StrOutputParser()
# 4. 组装链(使用 | 运算符)
chain = prompt | model | parser
# 5. 调用
result = chain.invoke({"topic": "ice cream"})
print(result)
定义自定义工具
from langchain_core.tools import tool
@tool
def multiply(a: int, b: int) -> int:
"""Multiplies a and b."""
return a * b
# 调用方式
print(multiply.invoke({"a": 2, "b": 3})) # 输出: 6
print(multiply.batch([{"a": 2, "b": 3}, {"a": 4, "b": 5}])) # 输出: [6, 20]
创建 Agent
from langchain.agents import create_agent
# 定义工具
@tool
def get_weather(city: str) -> str:
"""Get weather for a city."""
return f"It's sunny in {city}!"
# 创建 Agent(10行代码)
agent = create_agent(
model=model,
tools=[get_weather],
system_prompt="You are a helpful assistant"
)
# 调用
result = agent.invoke({
"messages": [{"role": "user", "content": "What's the weather in Beijing?"}]
})
技术对比
| 技术 | 角色 |
|---|---|
| LangChain | 组件生态(LLM + prompt + tool + parser) |
| LangGraph | 底层编排框架(Agent / 多步工作流 / 状态机) |
| LCEL / Runnable | 底层执行引擎(统一接口 + |