当前位置: 首页 > 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_

相关文章:

  • 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 小说写作套件
  • 中山网站排名/网站开发月薪多少钱
  • mysql网站后台管理系统下载/店铺推广方法
  • 如何成为室内设计师/新手如何学seo
  • 手机网站建设技术/产品推广方案怎么写
  • 网站建设和钱/廊坊seo外包
  • 网站建设模板制作/湖南有实力seo优化