当前位置: 首页 > news >正文

LangChain-LangGraph框架 应用实例

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.dtcms.com/a/223574.html

相关文章:

  • Catch That Cow POJ - 3278
  • java代码性能优化
  • 什么是Docker容器?
  • 初探Linux内核:解锁Linux操作系统的基本核心的奥秘(二)
  • JavaSE:面向对象进阶之接口(Interface)
  • 基于频分复用导频的MMSE信道估计方法设计与仿真
  • kuboard自带ETCD存储满了处理方案
  • 编程技能:格式化打印01,vsprintf 函数族简介
  • (22)大文件流式处理
  • MySql--定义表存储引擎、字符集和排序规则
  • 黑森林实验室 FLUX.1Kontext:革新图像修改的 AI 力量
  • 深度学习初探:当机器开始思考(superior哥AI系列第1期)
  • SolidWorks 文件打开时电脑卡顿问题分析与解决
  • 小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案
  • KVM 安装 Ubuntu 22
  • 【合集】Linux——31个普通信号
  • Java基础 Day25
  • 解决Acrobat印前检查功能提示无法为用户配置文件问题
  • 调试技巧总结
  • plotbunni开源程序是具有 AI 辅助的 FOSS 小说写作套件
  • @Docker Compose部署Alertmanager
  • 判断质数的基础方法
  • 动手学深度学习pytorch学习笔记 —— 第五章
  • 【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】
  • [IMX] 10.串行外围设备接口 - SPI
  • 抢占先机!品牌如何利用软文营销领跑内容营销赛道?
  • Wayland模式X11模式LinuxFB​​模式,Linux图形显示系统三大模式深度解析
  • 如何做好一份技术文档:构建知识传递的精准航海图
  • 【原理扫描】不安全的crossdomain.xml文件和CORS(跨站资源共享)原始验证失败验证与彻底方案
  • CATIA高效工作指南——测量分析篇(一)