LangChain-LangGraph框架 应用实例

article/2025/7/5 14:51:10

LangGraph是LangChain的高级库,为大型语言模型(LLM)带来循环计算能力。

LangGraph建立在LCEL之上,允许高效地协调应用程序组件,同时保持简洁和可读的代码。它包括内置持久性、对循环的支持,并优先考虑可控性。 如果LCEL对于更大或更复杂的链变得笨重,它们可能会受益于LangGraph的实现。

状态(State) 状态是一个共享的数据结构,通常是一个TypedDict或者Pydantic的BaseModel类型。

节点(Nodes) 节点是一个Python函数,接受一个State作为输入,经过内部计算后,返回更新后的State。

边(Edges) 边也是一个Python函数,基于当前State,决定下一步执行哪个/哪一些节点。

案例1

以下是 是机器人对话,使用LangGraph框架构建State、Nodes、Edges,创建一个流程图

先安装包:langgraph

步骤如下:

1.定义一个状态类型:MyState

messages 代表状态中保存数据的key list代表数据类型        
add_messages函数用于更新列表数据
class MyState(TypedDict):messages:Annotated[list,add_messages]

2.创建一个流程图

graph = StateGraph(MyState)

3.准备一个node节点,大模型节点

llm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='sk-*****',base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

4.创建一个机器人节点函数,以当前state作为输入,并返回一个包含更新后的messages

然后使用add_node方法,将机器人节点加入到流程图中,该方法的

第一个参数是唯一节点的名称

第二个参数是当前节点被使用时将调用的函数或对象

def chatbot(state:MyState):return {'messages':[llm.invoke(state['messages'])]}graph.add_node('chatbot',chatbot)

5.设置边,构建一张图

graph.add_edge(START,'chatbot') #表示流程从 START--->chatbot
graph.add_edge('chatbot',END) #表示流程从 chatbot--->ENDgraph = graph.compile()

6.最后,为了让机器人可以一直和用户对话,循环调用这个流程图,需要创建方法loop_graph_invoke

def loop_graph_invoke(user_input:str):for chunk in graph.stream({'messages':[('user',user_input)]}):for value in chunk.values():print('AI机器人:',value['messages'][-1].content)while True:try:user_input = input('用户:')if(user_input.lower() in ['q','exit','quit']):print('对话结束,欢迎下次使用!')breakelse:loop_graph_invoke(user_input)except Exception as e:print(e)

完整代码:


from typing import Annotated
from langchain_openai import ChatOpenAI
from langgraph.constants import START, END
from langgraph.graph import add_messages, StateGraph
from typing_extensions import TypedDictclass MyState(TypedDict):#messages 代表状态中保存数据的key list代表数据类型,add_messages函数用于更新列表数据messages:Annotated[list,add_messages]graph = StateGraph(MyState)llm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='sk-*****',base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)def chatbot(state:MyState):return {'messages':[llm.invoke(state['messages'])]}graph.add_node('chatbot',chatbot)#设置边
graph.add_edge(START,'chatbot') #表示流程从 START--->chatbot
graph.add_edge('chatbot',END) #表示流程从 chatbot--->END#构建一张图
graph = graph.compile()#把graph变成一张图def loop_graph_invoke(user_input:str):"""循环调用这个流程图,让AI可以一直和用户对话"""for chunk in graph.stream({'messages':[('user',user_input)]}):for value in chunk.values():print('AI机器人:',value['messages'][-1].content)while True:try:user_input = input('用户:')if(user_input.lower() in ['q','exit','quit']):print('对话结束,欢迎下次使用!')breakelse:loop_graph_invoke(user_input)except Exception as e:print(e)

运行结果:

案例2

基于上面的机器人案例,以下是结合工具Tavily,实现实时搜索,流程图如下

首先需要添加工具,然后和大模型进行绑定

os.environ['TAVILY_API_KEY'] = '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'
search_

http://www.hkcw.cn/article/BcOtYyBBMC.shtml

相关文章

远心镜头 参数与选型

一、简介 远心镜头是一种性能十分优异的镜头,它通常具有超高的中心边缘一致性,极低的畸变,接近衍射极限的光学分辨率 远心镜头的主要作用是消除透视(透视就是近大远小,常规镜头因为有视场角,拍摄时离镜头比…

睿抗机器人开发者大赛CAIP-编程技能赛-历年真题 解题报告汇总 | 珂学家

前言 汇总 睿抗机器人开发者大赛CAIP-编程技能赛-历年真题 解题报告汇总 2024年 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组 (国赛) 解题报告 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)解题报告 2024 睿抗机器人开发者大赛CAI…

POSIX信号量

目录 初始化信号量 销毁信号量 等待信号量 发布信号量 基于环形队列的生产消费模型 代码实现 POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。本质就是一个计数器,是对特定资源的预定机制&#xff…

P23:实现天气预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、知识介绍 1. 数据加载与预处理 知识点: pd.read_csv():Pandas读取CSV文件的核心方法pd.to_datetime():将字符串转换…

BERT模型原理与Fine-tuning实战指南

BERT模型原理与Fine-tuning实战指南 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 BERT模型原理与Fine-tuning实战指南摘要引言1. BERT核心原理解析1.1 Transformer架构基础1.2 预训练任务设计1.3 模型变体对比 2…

谷歌地图15周年焕新:界面全面升级 功能重磅加码

谷歌卫星高清地图 下载链接:https://pan.quark.cn/s/c6069864c9f3 Google Earth Pro-7.3.6.9796-x64 Google Earth WinMac安装版 GoogleEarthProPortable googleearthpromac-intel-7.3.6.10155 GoogleEarthProWin-7.3.6.10155 GoogleEarthProWin-x64-7.3.6.10…

ONNX模型的动态和静态量化

引言  通常我们将模型转换为onnx格式之后,模型的体积可能比较大,这样在某些场景下就无法适用。最近想在移动端部署语音识别、合成模型,但是目前的效果较好的模型动辄几个G,于是便想着将模型压缩一下。本文探索了两种压缩方法&…

怎样在视频号卖货入口是哪里?需要注意哪些?

今天给大家分享下我们团队降低违规的一些心法和落地技巧以及视频号卖货的入口希望对大家有所帮助。 一、视频号卖货入口在哪里? 1、点击【视频号】右上角人像,进入【创作中心】下方点击【带货中心】,进入视频号带货中心。 初次进入带货中心…

Ubuntu下实现nginx反向代理

1. 多个ngx实例安装 脚本已经在deepseek的指导下完成啦! deepseek写的脚本支持ubuntu/centos两种系统。 ins_prefix"/usr/local/" makefile_gen() {ngx$1 ngx_log_dir"/var/log/"$ngx"/"ngx_temp_path"/var/temp/"${ngx}…

2025最新Nginx安装配置保姆级教程(Windows)

下载 进入官网nginx: download 选择最新的主线版本下载 启动 解压文件夹到你想要的路径下 打开文件夹双击nginx.exe 点允许访问 然后打开浏览器输入localhost回车,如果出现如下页面则安装成功! winr打开控制台进入nginx安装目录,输入ngi…

FreeRTOS通俗理解指南:基础概念 + 架构+ 内核组件+练手实验

RTOS 基础概念 想象一下,你是一个忙碌的厨师,在厨房里同时要完成煎牛排和煮意大利面两项任务。 1.传统单线程模式(没有RTOS) 如果你只能按顺序一项一项地做,就会是这样的过程: 先煎一会儿牛排然后去看看…

端午最全攻略!景点、天气、交通三件套

端午假期去哪玩?各地文旅放大招如何既能体验传统文化又能玩得轻松不踩坑?这份攻略请收好!端午假期去哪玩?端午假期各地文旅放大招端午主题活动丰富多彩部分景区还推出节日优惠政策北京北京推出1700余场活动,与广大市民游客共享初夏好时节。1700余场活动具体戳详情>>…

【DAY34】GPU训练及类的call方法

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点: CPU性能的查看:看架构代际、核心数、线程数GPU性能的查看:看显存、看级别、看架构代际GPU训练的方法:数据和模型移动到GPU device上类的call方法:为什么定义前…

干泵,干式螺杆真空泵

干式真空泵: 无油干式机械真空泵(又简称干式机械泵)是指泵能从大气压力下开始抽气,又能将被抽气体直接排到大气中去,泵腔内无油或其他工作介质,而且泵的极限压力与油封式真空泵同等量级或者接近的机械真空泵…

day 26 函数专题

一、函数的基本写法 def function_name(parameter1, parameter2, ...):"""Docstring: 描述函数的功能、参数和返回值 (可选但强烈推荐)"""# 函数体: 实现功能的代码# ...return value # 可选,用于返回结果def 关键字:用于…

目标检测学习

RCNN 默认找出2000个可能存在目标的候选区域 region proposal将候选区域调整为适合AlexNet网络的输入图像的大小,通过CNN对候选区域提取特征向量,2000个建议区域经过Alexnet生成20004096的特征矩阵将20004096的特征向量经过20个类别的svm分类器进行分类&…

谷歌Gemma模型实现智能看病、翻译手语、与海豚沟通

目录 引言:AI的新篇章——从通用走向专属的智慧革命 一、 MedGemma:智能医疗的守护者与革新者 1.1 MedGemma的双重火力 1.2 高效部署与开发者生态 1.3 未来展望 二、SignGemma:跨越无声世界的沟通桥梁 2.1 SignGemma的核心能力 2.2 从…

TDengine 运维——巡检工具(定期检查)

背景 TDengine 在运行一段时间后需要针对运行环境和 TDengine 本身的运行状态进行定期巡检,本文档旨在说明如何使用巡检工具对 TDengine 的运行环境进行自动化检查。 安装工具使用方法 工具支持通过 help 参数查看支持的语法 Usage: taosinspect [OPTIONS]Check…

火语言UI组件--地图

【组件功能】:调用高德地图api,可通过定义经纬度定位显示具体位置。 样式预览 设置 基础设置 属性名称属性释义输入值类型开发者Key(key)高德地图 JSAPI 开发者Key字符串类型安全密钥(securityJsCode)高德地图 JSAPI 安全密钥字符串类型缩放级别(zoom)设置地图缩…

安防通信枢纽新贵:HT-CKNU 网络报警服务器深度解析

在安防体系不断升级的当下,报警服务器作为连接前端设备与接警中心的关键枢纽,其性能优劣直接关乎安全防护的成效。HT-CKNU 网络报警服务器凭借卓越的技术架构、广泛的兼容性和便捷的操作体验,正逐渐成为安防行业的中流砥柱,为各领…