Agent教程15:认识LangChain,Agent框架的王(上)

Agent的意思是代理。

AI Agent框架的诞生,本质上是LLM从"聪明聊天机器人"进化到"可靠自主代理"的过程。

在其发展过程中,有一个框架是无论如何也绕不开的,那就是 LangChain。

一、LangChain的发展历史

1.1 出道即巅峰

2022年10月,有人在Github开源了一个只有800行代码的python包,名叫 langchain。

其核心理念,就是把LLM应用拆成可组合的"Chain"(链)------ Prompt + LLM + Memory + Retriever + Tools。

这些在当前看来习以为常的概念,在当时是开拓性的标准化抽象。

一夜爆火,GitHub stars从几百冲到上万。

当时,它可谓是LLM界的React,目标也相似,快速搭建AI应用。

1.2 发展与问题暴露

2023年,LangChain主要添加了添加Agents(ReAct)、RAG、向量数据库集成 等能力。并且推出了LCEL链式写法(如 prompt | llm | parser)。

但同时,一个可能摧毁其根基的问题被暴露出来:

越来越多的人发现,LangChain的设计理念并不符合Agent发展的趋势。

因为真实的Agent开发过程中,人们发现,AI-Agent必须需要以下特性:

  1. 循环(思考→行动→观察→再思考)
  2. 动态分支
  3. 长期状态
  4. 用户随时干预

但LCEL是DAG(有向无环图),天生不支持循环和复杂控制流。

很多开发者开始反馈自己的痛点:LangChain只适合做小型项目,在大型企业级项目中有点捉襟见肘了。

1.3 LangGraph 诞生

"2023年夏天,我们收到大量负面反馈......原LangChain无法满足生产级Agent的需求。我们需要一种能处理循环、持久化、人机协作的底层框架。"

LangChain的作者Harrison Chase亲口如此说。

随机,LangGraph正式发布。

核心创新:把Agent执行过程建模成有向图(支持环)。

其概念和设计理念如下:

  • Node:一个函数(LLM调用、工具、判断)。
  • Edge:跳转规则(普通边 + 条件边)。
  • State:共享状态(情绪、记忆、亲密度等),支持Reducer自动合并。
  • Checkpoint:自动持久化(内存/SQLite/Postgres),支持崩溃恢复 + 时间旅行调试。
  • Interrupt:原生Human-in-the-loop(用户中途纠正、审批、回滚)。

LangGraph解决了LangChain"线性链"无法处理的本质矛盾------Agent天生是循环 + 状态机,而非线性流水线。

1.4 成熟与生态分层

随着 LangGraph 被需多大公司用于生产,这也标志着它的逐渐稳定与成熟。

LangChain逐步把新Agent API底层切换到LangGraph。

2025年10月,LangGraph 1.0 + LangChain 1.0 同时发布(无breaking changes,稳定性承诺)。

其分层架构如下:

  • LangChain:高层、快速原型(create_agent() 一键出代理)。

  • LangGraph:底层、生产引擎(自定义图、多代理、持久化)。

2026现状:LangChain生态已成为事实标准。

  • 每月下载9000万+,GitHub 10万+ stars。
  • 其他框架(CrewAI、AutoGen/Microsoft Agent Framework)仍有市场,但生产级复杂Agent基本都用LangGraph。

二、目前的LangChain能使用LangGraph的全部能力吗?

结论: 99% 的情况下可以!甚至可以说是"开箱即用全部主流生产能力"。

官方曾总结如下:

"LangChain 运行在 LangGraph 的持久化运行时之上------这为代理提供了内置的持久化、回溯、检查点机制,以及人机在环(Human-in-the-loop)支持。"
"create_agent 是基于 LangGraph 构建的,你会自动获得完整的 LangGraph 运行时能力。"

所以,在目前除非有极为极端和特殊的情况,否则你并不需要去摒弃LangChain去单独使用LangGraph。

但结合使用是必须的。

三、极速上手

让我们结合官方的demo,再配合我们的高性价比deepseek模型,跑一个最简单的demo 出来。

首先,安装必要依赖:

bash 复制代码
pip install langchain langchain_openai

这里分别安装了 langchain本体,以及对openai标准的大模型支持。(前面讲过,deepseek是符合openai标准的)

撰写如下代码:

python 复制代码
import os
from langchain.agents import create_agent
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

# 加载环境变量
load_dotenv()

def get_weather(city: str) -> str:
    """获取给定城市的天气情况"""
    return f"{city}未来10天很热,温度大概45°C"

llm = ChatOpenAI(
    model="deepseek-chat",
    api_key=os.getenv("DEEP_SEEK_API_KEY"),
    base_url=os.getenv("DEEP_SEEK_API_URL"),
    temperature=0.7
)

agent = create_agent(
    model=llm,
    tools=[get_weather],
    system_prompt="你是一个经验丰富的天气预测员",
)

# Run the agent
response = agent.invoke(
    {"messages": [{"role": "user", "content": "杭州的天气怎么样?"}]}
)

print(response["messages"][-1].content)

以上代码也已经上传到本专栏专属开源demo:github.com/zhangshichu...,可以直接去执行:

bash 复制代码
python .\lesson_14\01_langchain_start.py

可以查看效果: (注:以上天气纯属为了表达function calling效果的杜撰,请勿当真)

可以看到,这个demo我们只用了非常少的代码,就实现了 reAct 思维范式,完成了 Function Calling,并通过和LLM的对话,输出了最后的结果。

比手写代码不知道方便到哪里去了。

但是要熟练使用,仍然有很多细节和概念需要上手了解。

以上图为例,我们先介绍几个最核心的点:

3.1 默认是 reAct Agent范式

python 复制代码
from langchain.agents import create_agent

你引入 create_agent 方法后并没有指定AI的思维范式,但实际体验中他会一边思考一边调用工具,事实上,它默认采用了 reAct 范式,并且不可修改。

如果你有其他的范式需求,如 plan-and-execute 这样的范式,那可能得通过指定 plan_prompt 属性来调整Agent的默认行为。

3.2 不用写Tools Schema

结合第五课《春哥的Agent通关秘籍05:工具调用 Function Calling【知识与思路篇】》的内容,可以知道,在原生的OpenAI 框架下,注册Tools是需要传入一个 tools schema的,至少需要表达以下几个含义:

  • 我有哪些工具,它们叫什么
  • 它们的作用分别是什么
  • 它们接受哪些入参,分别是什么含义

但是,在上面demo 里,我们完全没有写这个JSON Schema。

其实真实情况是,LangChain 通过解析上面这个函数,利用python的反射能力,解析出了以上我们需要的Schema。

因此,在使用 LangChain 定义Tool时,函数的说明注释不要省略,这是为反射提供说明的必要内容。

除此之外,LangChain 也提供了 @tool 注解,可以更定制化的优化Tool 来满足复杂情况。

四、查看底层的 LangGraph 图形

前面说过,LangChain 最新版本的底层时 LangGraph。

而LangGraph的基本概念是一个有向图。

因此,官方和民间提供了各种各样的工具,可以让你查看图和节点。

其中最轻量简单的莫过于 grandalf,但功能也相对较弱。

bash 复制代码
pip install grandalf

然后执行以下代码:

python 复制代码
agent.get_graph().print_ascii()

你就能看到:

没错,这正是底层LangGraph的有向图的节点及连线。

如果想要看到更多细节,可能就得借助社区一些更加强大和重的工具了。

五、小结

本章,我们初步了解的 LangChain 的历史地位,发展历程,以及它和 LangGraph 之间的关系,并且结合一个 demo 初步窥见了它的便捷写法。

接下来,我们还需要更加深入地了解它的用法。

敬请期待!

相关推荐
代码搬运媛6 小时前
Jest 测试框架详解与实现指南
前端
counterxing6 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
wangqiaowq7 小时前
windows下nginx的安装
linux·服务器·前端
之歆7 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜7 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite
Maimai108087 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
candyTong7 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
GetcharZp8 小时前
GitHub 2.4 万 Star!D2 正在重新定义程序员画图方式
后端
kyriewen9 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
humcomm9 小时前
元框架的工作原理详解
前端·前端框架