开源精选 LangChainAgentLLM框架工具链

LangChain深度解析:AI Agent生态的基石框架

如果说AI Agent生态是一棵大树,LangChain就是树根——它定义了Agent开发的标准范式,几乎所有上层Agent框架(CrewAI、AutoGen、Dify)都在其思想基础上构建。

项目速览

维度详情
GitHublangchain-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变动频繁)

批判性评价

常见的批评

  1. 过度抽象 — “一层又一层的包装,不如直接调用API”
  2. API不稳定 — 版本更新频繁,破坏性变更多
  3. 文档滞后 — 新功能上线快但文档跟不上
  4. 调试困难 — 当错误发生在封装深处,定位问题费时
  5. 学习曲线 — 概念多(Chain/Agent/Graph/Tool…),新人上手慢

但仍然不可替代

尽管存在这些批评,LangChain定义了LLM应用的通用词汇表。即使你不需要用它(可以选择Dify、CrewAI等替代品),理解LangChain的概念体系依然是进入Agent开发领域的必修课。


LangChain之于AI Agent,如同React之于前端开发——它不一定是最好的方案,但它定义了生态的标准语言。每一个做Agent的开发者,至少需要了解LangChain的设计思想,因为这些思想已经成为了整个领域的”通用语”。

GitHub: https://github.com/langchain-ai/langchain