Part 二、LangChain&LangGraph快速入门
课程说明:
- 体验课内容节选自《2025大模型Agent智能体开发实战》(秋季班) 完整版付费课程
体验课时间有限,若想深度学习大模型技术,欢迎大家报名由我主讲的《2025大模型Agent智能体开发实战》(秋季班)
《2025大模型Agent智能体开发实战》(秋季班) 为【100+小时】体系大课,总共20大模块精讲精析,零基础直达大模型企业级应用!
部分项目成果演示
from IPython.display import Video
- MateGen项目演示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/MG%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91.mp4", width=800, height=400)
- 智能客服项目演示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/%E6%99%BA%E8%83%BD%E5%AE%A2%E6%9C%8D%E6%A1%88%E4%BE%8B%E8%A7%86%E9%A2%91.mp4", width=800, height=400)
- Dify&Coze项目演示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/Coze%E5%8A%A8%E6%80%81%E8%A7%86%E9%A2%91%E7%94%9F%E6%88%90%E5%AE%9E%E4%BE%8B.mp4", width=800, height=400)
- LangChain&LangGraph搭建Multi-Agnet
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/%E5%8F%AF%E8%A7%86%E5%8C%96%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90Multi-Agent%E6%95%88%E6%9E%9C%E6%BC%94%E7%A4%BA%E6%95%88%E6%9E%9C.mp4", width=800, height=400)
- 高效微调全自动数据集创建
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/easy_daset_yanshi.mp4", width=800, height=400)
GraphRAG+多模态文档检索
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/7%E6%9C%8817%E6%97%A5%281%29%20%E8%BF%9B%E5%BA%A6%E6%9D%A1.mp4", width=800, height=400)
详细信息扫码添加助教,回复“大模型”,即可领取课程大纲&查看课程详情👇
《大模型Agent开发实战课》(秋季班)体验课
大模型零基础入门开发实战
Part 二、LangChain&LangGraph快速入门
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/2025-09-22%2013-58-30.mp4", width=800, height=400)
1. LangChain技术生态简介
LangChain可以称之为自2022年底大模型技术爆火以来的第一个真正意义上的大模型开发框架。大模型本质上无法直接解决实际的问题,仅仅是一个能够分析、推理和生成文本的黑盒。直到现在,所有的开发者们仍然在不断探索如何把大模型的强大能力与实际应用场景结合起来,而当时LangChain的出现,直接让大模型开发变得简单起来,它将大模型开发过程中常用的功能、工具、流程等等全部封装成一个个的组件,使开发者可以像搭乐高积木一样,快速的组合出适用于不同场景需求的大模型应用。
LangChain的首个版本于2022年10月开源,直到现在仍然再以一个飞快的速度不断进行迭代升级。从一个开源 Python/TS 框架逐渐发展,形成包括“链”和“代理”等核心组件,现在已走向企业级阶段,发展成了LangChain AI,其拥有目前Agent技术领域最大的开源生态,衍生出了多个开源项目框架,各自都在大模型的技术领域承担着不同的开发任务角色。
从一个形象的角度来说,LangChain的功能定位其实并不是我们现在所谓的Agent开发框架,而是一个大模型功能增强器,借助LangChain,哪怕在GPT-3模型时代,也能让模型完成对话、拥有记忆、甚至是完成结构化输出等功能。
在经历了短暂的阵痛后,LangChain果断进行了大刀阔斧的改革。LangChain调整的思路非常简单:
-
LangChain本身仍然坚守作为“模型能力增强器”的功能定位,并且逐渐稳定更新节奏和频率,虽说实际使用LangChain进行开发的代码量仍然没变,但模块划分更加清晰、功能更加丰富和稳定,逐步达到企业级应用水准。目前最新版LangChain的核心功能如下:
模块类别 示例功能 模型接口封装 OpenAI、Claude、Cohere、Qwen 等模型统一调用方式 输出结构化 自动从模型中解析 JSON、Schema、函数签名、文档等 Memory 管理 Buffer、Summary、Entity、Conversation Memory 等 Tool 接入 Web 搜索、SQL 数据库、Python 执行器、API 代理等 Agent 架构 ReAct、Self-Ask、OpenAI Function Agent 等调度机制 RAG 集成 多种 Retriever、Vector Store、文档拆分策略 Server/API 发布 快速将链部署为 Web 服务或 A2A Agent Debug & Callback Token 使用统计、LangSmith 可视化追踪等 ✅ 所以说:LangChain 是 LLM 功能开发的「积木工厂」,不是简单框架,而是模型增强器 + 应用组装工具箱。
-
与2023年下半年开源LangGraph,LangGraph作为基于LangChain的更高层次封装,能够更加便捷的搭建图结构的大模型工作流,也就是现在所谓的Multi-Agent系统,而LangGraph也是目前LangChian家族最核心的Multi-Agent开发框架。同时可以搭配LangGraph-Studio进行实时效果监测,实际效果如下所示:
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/%E5%8F%AF%E8%A7%86%E5%8C%96%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90Multi-Agent%E6%95%88%E6%9E%9C%E6%BC%94%E7%A4%BA%E6%95%88%E6%9E%9C.mp4", width=800, height=400)
项目官网:https://github.com/langchain-ai/langgraph
需要注意的是,LangGraph底层功能仍然是基于LangChain来实现,简单理解LangGraph本质上其实就是LangChain的流程调度与智能体编排系统
-
开源大模型工作流(Agent)可视化监控与测试平台LangSmith,借助LangSmith,开发者能够更加简单便捷监控基于LangChain生态的Agent运行流程、测试Agent功能和不同提示词等,从而使得LangChain进一步面向企业级应用开发框架;
LangSmith官网:https://www.langchain.com/langsmith
-
同时,考虑到LangChain本身较为复杂这一情况,开源了LangChain的“可视化实现版”——LangFlow,这是一款形式对标Dify、可以通过可视化方式、借助拖拉拽来完成LangChain相同功能的开发工具。
同时,这也是目前LangChain工具家族中,仅次于LangChain(109k stars)第二受欢迎的开发框架,在GitHub上已斩获接近72k stars。
LangFlow官网:https://www.langflow.org/
同时,相比Dify,LangFlow功能更加完善,并且没有任何商业化的计划,可长期稳定使用。
目前LangChain工具生态如图所示:
可以说,经过了近3年的发展,目前LangChain工具生态已经非常全面,能适用于各类不同场景的开发需求,无论是小规模实验、还是大规模商业化部署,无论是使用代码开发、还是偏向使用低代码开发工具,LangChain工具家族都能满足开发者的需求。
也正因如此,LangChain可以说是历经大模型Agent技术发展巨变但仍“屹立不倒”的开发工具,哪怕今年以来OpenAI、谷歌等AI巨头纷纷下场发布全新一代Agent开发框架,但LangChian工具本身仍在很多场景下不可替代。而相比之下,类似AotuGen、CrewAI等工具的适用面,在大模型技术飞速发展的当下,正在逐渐减少。截止目前,LangChain仍然是目前大模型开发岗位应用最广的框架没有之一:
- LangGraph的本质:LangChain的高级编排工具
不过需要注意的是,LangGraph是基于LangChain进行的构建,无论图结构多复杂,单独每个任务执行链路仍然是现行的,其背后仍然是靠着LangChain的Chain来实现的。因此我们可以这么来描述LangChain和LangGraph之间的关系,LangGraph是LangChain工作流的高级编排工具,其中“高级”之处就是LangGraph能按照图结构来编排工作流。
2.LangChain接入大模型流程
!pip install --upgrade langchain-core langgraph langchain
import langchain, langchain_core
print("langchain:", langchain.__version__)
print("langchain-core:", langchain_core.__version__)
而langgraph则是0.6.7:
- LangGraph接入DeepSeek模型流程
接下来以DeepSeek为例,介绍LangGraph接入大模型流程。
! pip install python-dotenv openai
这里我们使用DeepSeek官方的API_KEK进行调用。如果初次使用,需要现在DeepSeek官网上进行注册并创建一个新的API_Key,其官方地址为:https://platform.deepseek.com/usage

注册好DeepSeek的API_KEY后,首先在项目同级目录下创建一个env文件,用于存储DeepSeek的API_KEY,如下所示:
接下来通过python-dotenv库读取env文件中的API_KEY,使其加载到当前的运行环境中,代码如下:
import os
from dotenv import load_dotenv
load_dotenv(override=True)
DeepSeek_API_KEY = os.getenv("DEEPSEEK_API_KEY")
# print(DeepSeek_API_KEY) # 可以通过打印查看
from openai import OpenAI
# 初始化DeepSeek的API客户端
client = OpenAI(api_key=DeepSeek_API_KEY, base_url="https://api.deepseek.com")
# 调用DeepSeek的API,生成回答
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "你是乐于助人的助手,请根据用户的问题给出回答"},
{"role": "user", "content": "你好,请你介绍一下你自己。"},
],
)
# 打印模型最终的响应结果
print(response.choices[0].message.content)
接下来我们要考虑的是,对于这样一个DeepSeek官方的API,如何接入到LangGraph中呢?其实非常简单,我们只需要使用LangChain中的一个DeepSeek组件即可向像述代码一样,直接使用相同的DeepSeek API KEY与大模型进行交互。因此,我们首先需要安装LangChain的DeepSeek组件,安装命令如下:
! pip install langchain-deepseek
安装好LangChain集成DeepSeek模型的依赖包后,需要通过一个init_chat_model函数来初始化大模型,代码如下:
from langchain.chat_models import init_chat_model
model = init_chat_model(model="deepseek-chat", model_provider="deepseek")
其中model用来指定要使用的模型名称,而model_provider用来指定模型提供者,当写入deepseek时,会自动加载langchain-deepseek的依赖包,并使用在model中指定的模型名称用来进行交互。
question = "你好,请你介绍一下你自己。"
result = model.invoke(question)
print(result.content)
result
model = init_chat_model(model="deepseek-reasoner", model_provider="deepseek")
result = model.invoke(question)
print(result.content)
result.additional_kwargs
result.additional_kwargs['reasoning_content']
3. 借助LangGraph创建智能体
在LangGraph所有的顶层API中,最常见的预构建智能体API就是create_react_agent,借助该API,开发者仅需将大模型、工具和提示词模板(可选)以参数形式带入,即可快速创建一个拥有完整功能、并且能够串联并联调用多个外部工具的智能体。
- 创建自定义工具
import requests,json
import os
from dotenv import load_dotenv
load_dotenv(override=True)
def get_weather(loc):
"""
查询即时天气函数
:param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\
注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';
:return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\
返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
"""
# Step 1.构建请求
url = "https://api.openweathermap.org/data/2.5/weather"
# Step 2.设置查询参数
params = {
"q": loc,
"appid": os.getenv("OPENWEATHER_API_KEY"), # 输入API key
"units": "metric", # 使用摄氏度而不是华氏度
"lang":"zh_cn" # 输出语言为简体中文
}
# Step 3.发送GET请求
response = requests.get(url, params=params)
# Step 4.解析响应
data = response.json()
return json.dumps(data)
get_weather("Beijing")
在LangGraph中,我们可以直接使用上述外部工具带入到LangGraph中创建智能体,不过更为稳妥的形式,是通过一个结构化工具函数来说明外部函数的参数输入(包括参数类型),以确保在实际调用过程中大模型能够准确识别外部函数的参数类型及其实际含义:
from langchain_core.tools import tool
from pydantic import BaseModel, Field
class WeatherQuery(BaseModel):
loc: str = Field(description="The location name of the city")
@tool(args_schema = WeatherQuery)
def get_weather(loc):
"""
查询即时天气函数
:param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\
注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';
:return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\
返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
"""
# Step 1.构建请求
url = "https://api.openweathermap.org/data/2.5/weather"
# Step 2.设置查询参数
params = {
"q": loc,
"appid": os.getenv("OPENWEATHER_API_KEY"), # 输入API key
"units": "metric", # 使用摄氏度而不是华氏度
"lang":"zh_cn" # 输出语言为简体中文
}
# Step 3.发送GET请求
response = requests.get(url, params=params)
# Step 4.解析响应
data = response.json()
return json.dumps(data)
print(f'''
name: {get_weather.name}
description: {get_weather.description}
arguments: {get_weather.args}
''')
其中Pydantic 提供的 BaseModel 负责定义外部函数的参数结构,相当于是告诉模型外部函数参数名是 loc、类型是字符串(str)、描述为“城市名称”,有了这个结构,模型能更好地理解如何调用该函数。
- 创建LangGraph智能体
# 封装外部函数列表
tools = [get_weather]
from langchain.chat_models import init_chat_model
model = init_chat_model(model="deepseek-chat", model_provider="deepseek")
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(model=model, tools=tools)
response = agent.invoke({"messages": [{"role": "user", "content": "你好,请介绍下你自己。"}]})
response
response["messages"]
response["messages"][-1].content
然后测试外部工具调用
response = agent.invoke({"messages": [{"role": "user", "content": "请问北京今天天气如何?"}]})
print(response["messages"][-1].content)
response['messages']
而这背后其实就是一次完整的Function calling调用流程:
len(response['messages'])
response['messages'][0]
response['messages'][1]
response['messages'][2]
response['messages'][3]
4. LangGraph React Agent外部工具响应形式
借助LangGraph React Agent,无需任何额外设置,即可完成多工具串联和并联调用。
response = agent.invoke({"messages": [{"role": "user", "content": "请问北京和杭州今天哪里更热?"}]})
response
print(response["messages"][-1].content)