开源精选 LangChainAgentLLM框架工具链
云
云铭
进化之路 · 扫码阅读
微信 · 浏览器扫码
在手机上获得更好的阅读体验
LangChain深度解析:AI Agent生态的基石框架
如果说AI Agent生态是一棵大树,LangChain就是树根——它定义了Agent开发的标准范式,几乎所有上层Agent框架(CrewAI、AutoGen、Dify)都在其思想基础上构建。
项目速览
| 维度 | 详情 |
|---|---|
| GitHub | langchain-ai/langchain |
| Stars | ~138K |
| 语言 | Python + TypeScript |
| 许可证 | MIT |
| 生态项目 | LangGraph, LangSmith, LangServe, LangChain Hub |
为什么LangChain如此重要
它解决了什么问题
在没有LangChain的时候,每个LLM应用都要从零处理:
连接模型 → 管理Prompt → 解析输出 → 管理对话历史 → 集成工具 → ...
LangChain把这些抽象成标准化的组件,让开发者像搭积木一样构建AI应用。
生态全景
LangChain生态(2026)
┌─────────────────────────────────────────┐
│ LangChain Core │
│ 链(Chain)、提示(Prompt)、模型(Model) │
│ 记忆(Memory)、工具(Tool)、检索(Retrieval)│
├─────────────────────────────────────────┤
│ LangGraph │ LangSmith │ LangServe │
│ 有状态Agent│ 开发运维平台 │ 部署服务 │
│ 工作流编排 │ 跟踪/评估 │ API化 │
├─────────────────────────────────────────┤
│ LangChain Hub │
│ Prompt和Agent模板市场 │
└─────────────────────────────────────────┘
核心概念
1. Chain(链)
LangChain最基本的构建块——将多个LLM调用和工具调用串联成一个管道:
from langchain.chains import SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
# 定义第一个链:生成博客大纲
outline_prompt = PromptTemplate(
input_variables=["topic"],
template="为'{topic}'生成一个5部分的大纲"
)
outline_chain = LLMChain(llm=llm, prompt=outline_prompt)
# 定义第二个链:基于大纲写文章
write_prompt = PromptTemplate(
input_variables=["outline"],
template="基于以下大纲写一篇1500字的文章:\n{outline}"
)
write_chain = LLMChain(llm=llm, prompt=write_prompt)
# 串联
pipeline = SimpleSequentialChain(
chains=[outline_chain, write_chain]
)
# 一步执行
article = pipeline.run("AI Agent的未来发展")
2. Agent(代理)
LangChain的Agent = LLM + 工具 + 决策循环:
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain.tools import tool
# 定义工具
@tool
def search_database(query: str) -> str:
"""查询产品数据库,输入SQL查询语句"""
return execute_sql(query)
@tool
def send_email(to: str, subject: str, body: str) -> str:
"""发送邮件"""
return email_service.send(to, subject, body)
# 创建Agent
agent = create_openai_functions_agent(
llm=ChatOpenAI(model="gpt-4"),
tools=[search_database, send_email],
prompt=agent_prompt # LangChain Hub 提供标准模板
)
# 执行
executor = AgentExecutor(
agent=agent,
tools=[search_database, send_email],
max_iterations=10,
verbose=True
)
result = executor.invoke({
"input": "查一下上季度销售额最高的客户是谁,然后给他发一封感谢邮件"
})
3. Memory(记忆)
from langchain.memory import ConversationSummaryMemory, VectorStoreRetrieverMemory
# 摘要记忆:自动压缩长对话
summary_memory = ConversationSummaryMemory(
llm=ChatOpenAI(model="gpt-4-mini"), # 用便宜模型做压缩
max_token_limit=500, # 摘要不超过500tokens
return_messages=True
)
# 向量记忆:语义检索相关的历史对话
vector_memory = VectorStoreRetrieverMemory(
retriever=chroma_db.as_retriever(k=5),
memory_key="relevant_history"
)
4. Tool(工具定义)
LangChain提供了标准化的工具接口:
from langchain.tools import StructuredTool
from pydantic import BaseModel, Field
# 带结构化输入的工具
class WeatherInput(BaseModel):
city: str = Field(description="城市名称,如'北京'")
date: str = Field(description="日期,格式YYYY-MM-DD")
def get_weather(city: str, date: str) -> str:
"""查询指定城市和日期的天气"""
return weather_api.query(city, date)
weather_tool = StructuredTool.from_function(
func=get_weather,
name="GetWeather",
description="查询指定城市和日期的天气情况",
args_schema=WeatherInput
)
LangGraph:有状态的Agent
从Chain到Graph
LangGraph是LangChain生态中最重要的演进——将线性Chain升级为有状态的图结构Agent:
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
# 定义状态
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next_step: str
search_results: list
final_answer: str
# 创建图
graph = StateGraph(AgentState)
# 添加节点
graph.add_node("think", think_node) # 思考下一步
graph.add_node("search", search_node) # 搜索
graph.add_node("analyze", analyze_node) # 分析
graph.add_node("respond", respond_node) # 回复
# 添加条件边(动态路由)
graph.add_conditional_edges(
"think",
router, # 根据思考结果决定下一步
{
"search": "search",
"respond": "respond",
"analyze": "analyze"
}
)
# 添加边
graph.add_edge("search", "analyze")
graph.add_edge("analyze", "think")
graph.add_edge("respond", END)
# 编译
app = graph.compile()
LangGraph vs 传统Agent
传统Agent:线性循环
think → act → observe → think → act → observe → ...
LangGraph:有状态的图
可在任意节点间跳转
支持并行分支
条件路由
支持检查点(随时暂停/恢复)
人机协同(human-in-the-loop)
LangSmith:Agent开发运维平台
解决Agent的”黑盒”问题
LangSmith提供的可观测性:
每步推理 → 记录
每次工具调用 → 记录(含输入输出)
每次模型调用 → 记录(含token和延迟)
每个错误 → 捕获并回溯
实验管理
from langsmith import Client, traceable
@traceable(run_type="chain", name="customer_support_agent")
def run_agent(query: str) -> str:
# Agent执行过程被自动追踪
result = agent.invoke({"input": query})
return result["output"]
# 批量评估
from langsmith.evaluation import evaluate
results = evaluate(
run_agent,
data="customer_queries_dataset", # 测试数据集
evaluators=[
"accuracy", # 准确性评估
"helpfulness", # 有用性评估
"safety", # 安全性评估
]
)
2026年LangChain的关键变化
Agent Protocol(MCP的竞争者?)
LangChain在2026年推动Agent Protocol标准化:
- 统一的Agent接口规范
- 标准化的工具描述格式
- 跨框架的Agent互操作性
从框架到平台
LangChain不再只是Python/JS库,而是:
LangChain Platform = 框架 + 运行时 + 监控 + 评估 + 部署
这与Dify、Flowise的竞争更加直接。
何时选择LangChain
✅ 选LangChain的情况:
├── 需要深度定制Agent行为
├── 团队有较强的工程能力
├── 希望使用最广泛的工具生态
├── 需要与其他框架(如CrewAI)集成
└── 需要实现复杂的、有状态的工作流
❌ 不选LangChain的情况:
├── 快速验证想法(试试Dify或Flowise)
├── 简单的Chatbot(直接用OpenAI SDK)
├── 团队没有Python/TS能力(选可视化工具)
└── 对稳定性要求极高(LangChain API变动频繁)
批判性评价
常见的批评
- 过度抽象 — “一层又一层的包装,不如直接调用API”
- API不稳定 — 版本更新频繁,破坏性变更多
- 文档滞后 — 新功能上线快但文档跟不上
- 调试困难 — 当错误发生在封装深处,定位问题费时
- 学习曲线 — 概念多(Chain/Agent/Graph/Tool…),新人上手慢
但仍然不可替代
尽管存在这些批评,LangChain定义了LLM应用的通用词汇表。即使你不需要用它(可以选择Dify、CrewAI等替代品),理解LangChain的概念体系依然是进入Agent开发领域的必修课。
LangChain之于AI Agent,如同React之于前端开发——它不一定是最好的方案,但它定义了生态的标准语言。每一个做Agent的开发者,至少需要了解LangChain的设计思想,因为这些思想已经成为了整个领域的”通用语”。