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

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.xdnf.cn/news/9987.html

相关文章:

  • 超低延迟与高稳定性的行业领先直播解决方案
  • RocketMQ 三大消息类型深度解析:普通消息、延迟消息、事务消息
  • C++ —— B/类与对象(中)
  • Python字典键的使用与应用:从基础到高级实践
  • OCC笔记:BRepMesh_IncrementalMesh的使用
  • python打卡day40@浙大疏锦行
  • 汽车高速通信的EMC挑战
  • Langchain4j Function Calling (5)
  • 关于ffplay在macos上运行奔溃的问题
  • 嵌入式开发学习日志(linux系统编程--进程(4)——线程锁)Day30
  • Google car key:安全、便捷的汽车解锁新选择
  • day40打卡
  • Netty 实战篇:为 Netty RPC 框架引入调用链追踪,实现链路透明化
  • 特伦斯 S75 电钢琴:奏响音乐新时代的华章
  • mongodb集群之分片集群
  • Ubuntu 22.04 系统下 Docker 安装与配置全指南
  • Android JNI开发
  • 大语言模型的技术原理与应用前景:从Transformer到ChatGPT
  • 技术原理简析:卫星遥感如何感知水体环境?
  • 基于Matlab实现卫星轨道模拟仿真
  • 云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)
  • vue2 + webpack 老项目升级 node v22 + vite + vue2 实战全记录
  • 【OpenSearch】高性能 OpenSearch 数据导入
  • OpenTelemetry × Elastic Observability 系列(一):整体架构介绍
  • rm删除到回收站
  • 【设计模式】策略模式
  • 【软件】在 macOS 上安装 MySQL
  • Python学习(5) ----- Python的JSON处理
  • 分布式存储技术全景解析:从架构演进到场景实践
  • 私有云大数据部署:从开发到生产(Docker、K8s、HDFS/Flink on K8s)