免费网站建设推销/一手项目对接app平台

免费网站建设推销,一手项目对接app平台,设置wordpress文章图片不显示,公司网站制作费做无形资产1. 前言 这篇文章将从如何搭建一个带网络搜索功能的聊天机器人工作流,带你初步了解 LangGraph。 2. 前提条件 已搭建 Python 开发环境,使用 3.11 以上版本。 已熟悉 Python 基础语法。可参考:【LLM】Python 基础语法_llm python入门-CSDN博…

1. 前言

这篇文章将从如何搭建一个带网络搜索功能的聊天机器人工作流,带你初步了解 LangGraph。

 2. 前提条件

  • 已搭建 Python 开发环境,使用 3.11 以上版本。

  • 已熟悉 Python 基础语法。可参考:【LLM】Python 基础语法_llm python入门-CSDN博客文章浏览阅读1k次,点赞18次,收藏28次。Python 作为最佳的机器学习和深度学习语言,如果你想入门大模型(如 GPT、BERT 等)与自然语言处理(NLP),那么 Python 一定是最佳选择,这篇文章将带你入门Python语法。_llm python入门 https://blog.csdn.net/u013176571/article/details/144773581?spm=1001.2014.3001.5501

3. 什么是LangGraph

LangGraph 是由 LnagChain 创造者 LangChain Inc 开发的一款基于图结构的开源框架,其专注于构建有状态、多角色的应用程序,特别是与大型语言模型(LLMs)一起使用时,用于创建智能体和多智能体工作流。

3.1 为什么选择LangGraph

LangGraph 作为底层基础设施,支持 LLM 应用中的工作流(Workflow)和智能代理(Agentic System),提供持久化、流式处理和调试部署能力,助力构建更强大、更可控的 LLM 应用。其有以下三大核心优势:

1. 持久化(Persistence)  

  • 记忆能力(Memory):支持存储应用状态,实现对话记忆和跨用户交互的状态管理。

  • 人机协作(Human-in-the-loop):状态检查点化,支持执行中断与恢复,便于人工决策、验证和修正。  

2. 流式处理(Streaming)  

  • 支持工作流/代理状态的流式传输,使用户或开发者能在执行过程中获取实时反馈。  

  • 允许流式传输事件(如工具调用反馈)和 LLM 生成的 tokens,以提升交互体验。  

3. 调试与部署(Debugging and Deployment)

  • 通过 LangGraph Platform 提供简便的测试、调试和部署能力。  

  • 通过 LangGraph Studio 提供可视化工作流,支持交互式调试。

  • 提供多种部署选项,方便应用上线。  

3.2 和LangChain的关系

LangGraph 是 LangChain 生态中的一个子项目,专门用于构建图(Graph)结构的 LLM 工作流。它可以被认为是 LangChain 的补充,用于管理复杂的流程控制。它可以独立于LangChain使用。

3.3 LangGraph核心概念

LangGraph 框架中,会将智能体工作流(agent workflows)建模为图(Graphs),构建和运行图(Graphs)有三个核心概念:

1. State(状态):

  • 通常为 TypedDict(字典)或 Pydantic BaseModel(对象), 用于存储图运行时的状态信息。它在图的执行过程中被传递给各个节点和条件函数,用于存储和传递数据。你可以将 State 理解为各节点和条件函数间的上下文。

2. Nodes(节点):

  • 是一个 Python 函数,用来执行特定的操作或逻辑(比如数据处理、调用外部服务等)。节点接收当前的 State 作为入参,在执行一系列业务逻辑后,并返回更新后的 State。

3. Edges(边):

  • 也是一个 Python 函数,用于定义节点之间的连接关系,控制图的执行流程。边可以是无条件的,也可以是条件的。

简而言之,节点用于执行工作,边指示下一步做什么。

4. 聊天机器人实现

4.1 安装LangGraph

这个例子中需要使用 LangChain 构建与大模型对话的 ChatModel,所以我们需要安装 LangChain 相关包。我使用的是 0.3.0 版本。

# 安装 LangChain 和 LangChain OpenAI
pip install langchain==0.3.0 
pip install -U langchain-openai# 安装最新版 LangGraph
pip install -U langgraph# 安装tavily,tavily是一个网络检索工具 
pip install -U tavily-python

4.2 准备工作

4.2.1 选择模型

选择一个支持函数调(Function Calling)用的模型,并创建一个 ChatModel,我使用的是月之暗面的 moonshot-v1-8k 模型。

from langchain_openai import ChatOpenAI# 构建一个chatModel
llm = ChatOpenAI(model="moonshot-v1-8k",openai_api_base="https://api.moonshot.cn/v1",openai_api_key="your_api_key",temperature=0.7,streaming=True,
)

4.2.2 申请tavily秘钥

tavily 是一个网络检索工具,我们需要在tavily官网申请一个秘钥来使用它(tavily 每月免费提供1000条搜索返回)。地址:Tavily AI。

定义 Tavily Search 工具

tavily_tool = TavilySearchResults(# 返回的最大搜索条数max_results=2,tavily_api_key="your_tavily_api_key",
)

4.3 代码实现

4.3.1 流程图

工作流主要包含两个节点和两个条件边:

  • chatbot:聊天节点,负责与 LLM 交互。

  • tools:工具节点,负责调用 Tavily 搜索工具。

  • edge1:条件边(使用虚线表示),LLM会根据用户输入的内容自动判断是否调用tools节点,如果不需要调用会直接返回。

  • edge2:普通边,tools节点完成搜索任务后,返回chatbot节点继续对话。

4.3.2 完整代码

以下是整个带网络搜索功能的聊天机器人的完整代码

from typing import Annotatedfrom langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
from typing_extensions import TypedDict# 定义一个状态类型,用于保存工作流中的上下文信息,为 TypedDict 类型
class State(TypedDict):# messages 用于记录与AI对话的记录,为 list 类型# add_messages 用于定义这个值的更新方式,即 将对话消息追加到列表中,而不是覆盖messages: Annotated[list, add_messages]# 定义一个工作流,使用 State 类型作为输入和输出
working_flow = StateGraph(State)# 定义 TavilySearchResults 工具
tavily_tool = TavilySearchResults(max_results=2,tavily_api_key="",
)
# 定义 ChatOpenAI 模型,并绑定工具
llm = ChatOpenAI(model="moonshot-v1-8k",openai_api_base="https://api.moonshot.cn/v1",openai_api_key="",temperature=0.7,streaming=True,
)
# 绑定工具
tools = [tavily_tool]
llm_with_tools = llm.bind_tools(tools)# 聊天节点逻辑
def chatbot(state: State):# 调用大模型,LLM 会自动决定是否调用Tavily工具# 返回值是更新后的聊天记录return {"messages": [llm_with_tools.invoke(state["messages"])]}# 添加节点
working_flow.add_node("chatbot", chatbot)
tool_node = ToolNode(tools=tools)
working_flow.add_node("tools", tool_node)# 添加条件边和普通边
working_flow.add_conditional_edges("chatbot", tools_condition, )
working_flow.add_edge("tools", "chatbot")# 设置起点
working_flow.set_entry_point("chatbot")# 创建MemorySaver,用于存储工作流的对话历史
memory = MemorySaver()
# 编译工作流
graph = working_flow.compile(checkpointer=memory)

4.3.3 运行测试

以下代码用于使用工作流并进行问答:

# 配置参数,包括唯一的线程ID,用于记录对话历史
config = {"configurable": {"thread_id": "1"}}
def stream_graph_updates(user_input: str):# 流式处理图的事件for event in graph.stream({"messages": [{"role": "user", "content": user_input}]},config,):for value in event.values():# 打印助手的回复print("Assistant:", value["messages"][-1].content)while True:try:# 获取用户输入user_input = input("User: ")# 检查退出条件if user_input.lower() in ["quit", "exit", "q"]:print("再见!")break# 调用函数处理用户输入stream_graph_updates(user_input)except KeyboardInterrupt:# 处理用户中断输入的情况print("\n输入被中断,再见!")breakexcept Exception as e:# 捕获其他异常并打印错误信息print(f"发生错误: {e}")break

首先我们先问几个简单的问题,比如“你好”、“你是谁”,这些问题不足以让大模型调用Tavily工具。

然后我们尝试问大模型依据自身无法回答的问题,比如:”南京今天天气如何?“,我们发现大模型自动调用了Tavily工具,接着我们继续问“明天呢”,看看工作流是否具备聊天记忆。

到此为止,一个简单的聊天机器人就完成了。当然 LangGraph 还有很多高级功能,比如人机交互(Humman-in-the-loop)、时间旅行(Time-travel)等,我在之后的文章中会介绍。

5. 参考文档

  • LangGraph Home

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型,是一个分类问题。 下面先解释一下分类和回归的区别: 简单来说,分类问题从回归的单输出变成了多输出,输出的个数等于类别的个数。 实际上,对于分…

MySQL-存储过程

介绍 基本语法 创建 调用 查看 删除 变量 系统变量 查看 设置 用户定义变量 赋值 使用 局部变量 声明 赋值 流程控制 参数 条件结构 IF case 循环结构 while repeat loop 游标 条件处理程序 介绍 举个简单的例子,我们先select某数据&…

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程

Linux 部署 MineCraft 服务器 详细教程(丐版,无需云服务器) 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花,实现内网穿透,邀…

批量取消 PDF 文档中的所有超链接

在 PDF 文档中我们可以插入各种各样的文本也可以给文本设置字体,颜色等多种样式,同时还可以给文字或者图片添加上超链接,当我们点击超链接之后,就会跳转到对应的网页。有时候这会对我们的阅读或者使用形成一定的干扰,今…

Linux学习笔记(应用篇三)

基于I.MX6ULL-MINI开发板 LED学习GPIO应用编程输入设备 开发板中所有的设备(对象)都会在/sys/devices 体现出来,是 sysfs 文件系统中最重要的目录结构 /sys下的子目录说明/sys/devices这是系统中所有设备存放的目录,也就是系统中…

递归、搜索与回溯第四讲:floodfill算法

递归、搜索与回溯第四讲:floodfill算法 1.Floodfill算法介绍2.图像渲染3.岛屿数量4.岛屿的最大面积5.被围绕的区域6.太平洋大西洋水流问题7.扫雷游戏8.衣橱整理 1.Floodfill算法介绍 2.图像渲染 3.岛屿数量 4.岛屿的最大面积 5.被围绕的区域 6.太平洋大西洋水流问题…

【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)

为了求解损失函数 对 的导数,并利用最小二乘法向量形式求解 的值‌ 这是‌线性回归‌的平方误差损失函数,目标是最小化预测值 与真实值 之间的差距。 ‌损失函数‌: 考虑多个样本的情况,损失函数为所有样本的平方误差之和&a…

气象可视化卫星云图的方式:方法与架构详解

气象卫星云图是气象预报和气候研究的重要数据来源。通过可视化技术,我们可以将卫星云图数据转化为直观的图像或动画,帮助用户更好地理解气象变化。本文将详细介绍卫星云图可视化的方法、架构和代码实现。 一、卫星云图可视化方法 1. 数据获取与预处理 卫星云图数据通常来源…

实现极限网关(INFINI Gateway)配置动态加载

还在停机更新 Gateway 配置,OUT 了。 今天和大家分享一个 Gateway 的功能:动态加载配置(也称热更新或热加载)。 这个功能可以在 Gateway 不停机的情况下更新配置并使之生效。 配置样例如下: path.data: data path.…

Day15 -实例 端口扫描工具 WAF识别工具的使用

一、端口扫描工具 1、zenmap 我这里user是汉字名,没有解析成功。等后续换一个英文账户试一试。 魔改kali的nmap nmap -p8000-9000 8.140.159.19 2、masscan cmd启动,拖入exe文件。然后先写ip,会报错给提示 寻路犬系统 我们去找一下他的…

如何解决高并发场景下的性能瓶颈?实践分享

解决高并发性能瓶颈的核心方法包括优化系统架构、合理使用缓存技术、数据库优化及扩展策略、负载均衡设计。 其中,优化系统架构是根本解决性能问题的关键所在。良好的系统架构能够有效支撑业务高效稳定运行,避免性能瓶颈带来的损失。企业可通过微服务架构…

性能测试、负载测试、压力测试的全面解析

在软件测试领域,性能测试、负载测试和压力测试是评估系统稳定性和可靠性的关键手段。​它们各自关注不同的测试目标和应用场景,理解这些差异对于制定有效的测试策略至关重要。 本文对性能测试、负载测试和压力测试进行深入分析,探讨其定义、…

学习本地部署DeepSeek的过程(基于LM Studio)

除了使用Ollama部署DeepSeek,还可以使用LM Studio部署DeepSeek,后者是一款允许用户在本地计算机上运行大型语言模型(LLMs)的桌面应用程序,旨在简化本地模型的使用,无需云端连接或复杂配置即可体验 AI 功能。…

等差数列公式推导

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

【MySQL】用户账户、角色、口令、PAM

目录 查看用户账户设置 连接 1.本地连接 2.远程连接 账户 角色 操作用户账户和角色 配置口令和账户有效期限 手工使口令过期 配置口令有效期限 PAM身份验证插件 客户端连接:使用 PAM 账户登录 在连接到MySQL服务器并执行查询时,会验证你的身…

5种生成模型(VAE、GAN、AR、Flow 和 Diffusion)的对比梳理 + 易懂讲解 + 代码实现

目录 1 变分自编码器(VAE)​ 1.1 概念 1.2 训练损失 1.3 VAE 的实现 2 生成对抗网络(GAN)​ 2.1 概念 2.2 训练损失 a. 判别器的损失函数 b. 生成器的损失函数 c. 对抗训练的动态过程 2.3 GAN 的实现 3 自回归模型&am…

印刷电路板 (PCB) 的影响何时重要?在模拟环境中导航

我和我的同事们经常被问到关于 PCB 效应的相同问题,例如: 仿真何时需要 PCB 效果? 为什么时域仿真需要 PCB 效应? 当 PCB 效应必须包含在仿真中时,频率是否重要? 设计人员应该在多大程度上关注 VRM 模型中包…

2024跨境电商挑战:AI反检测技术在避免封号中的作用

2024跨境电商挑战:AI反检测技术在避免封号中的作用 跨境电商的浪潮席卷全球,为商家打开了通往世界各地的大门。然而,随着平台监管的加强,合规性问题成为商家不得不面对的挑战。在电商平台的严格监控下,任何违规行为都…

网络运维学习笔记(DeepSeek优化版) 024 HCIP-Datacom OSPF域内路由计算

文章目录 OSPF域内路由计算:单区域的路由计算一、OSPF单区域路由计算原理二、1类LSA详解2.1 1类LSA的作用与结构2.2 1类LSA的四种链路类型 三、OSPF路由表生成验证3.1 查看LSDB3.2 查看OSPF路由表3.3 查看全局路由表 四、2类LSA详解4.1 2类LSA的作用与生成条件4.2 2…

多智能体融合(Multi-Agent Fusion)

多智能体融合(Multi-Agent Fusion)是指在多智能体系统(MAS, Multi-Agent System)中,多个智能体(Agent)通过协作、竞争或共享信息,实现全局最优的智能决策和任务执行。该方法广泛应用…