LangGraph系列-1:用LangGraph构建简单聊天机器人

在快速发展的人工智能和大型语言模型(llm)世界中,开发人员不断寻求创建更灵活、更强大、更直观的人工智能代理的方法。 虽然LangChain已经改变了这个领域的游戏规则,允许创建复杂的链和代理,但对代理运行时的更复杂控制的需求也在不断增长。
LangGraph是建立在LangChain之上的重要模块,它将彻底改变我们设计和实施人工智能工作流的方式。在这篇博客中,我们提供了一个关于构建聊天机器人和彻底改变人工智能代理工作流程的详细的LangGraph教程。

理解LangGraph

LangGraph是LangChain生态系统的扩展,引入了一种创建AI代理运行时的新方法。LangGraph的核心是允许开发人员将复杂的工作流表示为循环图形,从而提供更直观和灵活的方式来设计代理行为。

LangGraph背后的主要动机是解决传统有向无环图(dag)在表示人工智能工作流方面的局限性。虽然dag在线性过程中非常出色,但当涉及到执行高级AI代理通常需要的迭代、基于决策的流程时,它们就不够了。

LangGraph通过创建循环工作流解决了这个问题,人工智能可以重新访问之前的步骤,做出决策,并根据中间结果调整其行为。这在代理可能需要改进其方法或在继续之前收集额外信息的场景中特别有用。
在这里插入图片描述

LangGraph关键组件

为了有效地使用LangGraph,了解它的基本组成部分是至关重要的:

节点(Node)

LangGraph中的节点表示AI代理可以使用的单个功能或工具。这些可以是任何东西,从API调用到语言模型执行的复杂推理任务。每个节点都是工作流中处理输入和产生输出的离散步骤。

边缘(Edge)

边连接图中的节点,定义信息流和控制。LangGraph支持两种类型的边:

  • 简单边:这些是节点之间的直接连接,表明节点的输出应该作为输入传递给下一个节点。
  • 条件边:这些是更复杂的连接,允许基于节点输出的动态路由。这是LangGraph真正的亮点所在,它支持自适应工作流。

状态(State)

状态是可以在整个图的节点之间传递的信息。如果你想在工作流程中跟踪特定的信息,那么可以使用state。

在LangGraph中有两种类型的图形:

  • 基本图: 基本图将只传递第一个节点的输出到下一个节点,因为它不能包含状态。
  • 有状态图: 这个图可以包含状态,它将在节点之间传递,你可以在任何节点访问这个状态。

环境准备

使用LangGraph构建聊天机器人涉及几个基本步骤,包括安装所需的包、配置API密钥和理解将增强聊天机器人功能的基本概念。本指南将引导用户完成这些步骤。

步骤1:安装依赖

首先,用户需要安装开发LangGraph聊天机器人所需的必要Python包。安装过程可以使用pip命令执行。

%%capture --no-stderr
%pip install -U langgraph langsmith%pip install -U langchain_anthropic
  • Langgraph是用于构建聊天机器人的主要库。
  • langsmith是一个可选的库,它提供了对系统操作的洞察,可以帮助调试和跟踪。
  • langchain_anthropic专门用于集成Anthropic的语言模型以生成响应。

步骤2:设置API key

安装完包后,下一步是设置必要的API密钥。这一点至关重要,因为聊天机器人将需要访问外部服务,如语言模型或网络搜索工具。

import getpass
import osdef _set_env(var: str):if not os.environ.get(var):os.environ[var] = getpass.getpass(f"{var}: ")_set_env("ANTHROPIC_API_KEY")

getpass模块提供安全的方式来获取用户输入的密码或敏感信息,输入时不会在终端显示用户输入的内容,以保护信息安全。

调用 _set_env 函数,并传入参数 "ANTHROPIC_API_KEY",这意味着代码将检查环境变量中是否已经设置了 ANTHROPIC_API_KEY,如果没有设置,则会提示用户输入该 API 密钥,并将其设置为环境变量。这个 API 密钥通常用于访问 Anthropic 公司提供的相关服务。

用户应该通过相应地修改_set_env函数中的变量名,对其他所需的API密钥(如LangSmith)重复此过程。

# Encouraged to set up LangSmith API Key as well
_set_env("LANGSMITH_API_KEY")
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "LangGraph Tutorial"
  • 将LANGCHAIN_TRACING_V2设置为“true”可以启用跟踪功能,这有助于监视聊天机器人的操作。
  • 设置LANGCHAIN_PROJECT为当前项目命名,协助组织多个项目。

简单聊天机器人示例

在本节中,重点是使用LangGraph框架构建一个基本的聊天机器人。目的是创建简单而有效的聊天机器人,它可以响应用户消息,从而演示基本概念,例如状态管理和LangGraph架构中的节点功能。

上节配置好环境后,首先定义StateGraph的结构。状态将是聊天机器人消息的表示,它将使用TypedDict定义:

from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messagesclass State(TypedDict):messages: Annotated[list, add_messages]graph_builder = StateGraph(State)

在此配置中,State被创建为TypedDict,其包含单个键messages。add_messages函数用于确保将新消息添加到已有list中,而不是覆盖它。这是聊天机器人的关键方面,允许它在多个交互中维护上下文。

  • 增加节点

定义了StateGraph之后,下一步是添加节点,这些节点将处理用户输入并生成响应。聊天机器人节点定义如下:

from langchain_anthropic import ChatAnthropicllm = ChatAnthropic(model="claude-3-haiku-20240307")def chatbot(state: State):return {"messages": [llm.invoke(state["messages"])]}graph_builder.add_node("chatbot", chatbot)

在此代码片段中,chatbot 函数将当前状态作为输入,并调用大型语言模型(LLM),以根据状态中呈现的消息生成响应。然后将生成的响应作为更新后的消息列表返回。

  • 增加边

为了控制statgraph的执行流,必须定义入口点和出口点:

graph_builder.add_edge(START, "chatbot") 
graph_builder.add_edge("chatbot", END)

START边表示图形开始处理的位置,END边表示图形可以结束其操作的位置。

  • 编译图

在定义节点和边之后,必须编译图形来创建CompiledGraph,它准备被调用:

graph = graph_builder.compile()

现在可以执行这个编译好的图来处理用户输入。

  • 图可视化

现在可以执行这个编译好的图来处理用户输入。

from IPython.display import Image, displaytry:display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:pass

在这里插入图片描述

这种可视化有助于理解聊天机器人中的关系和操作流程。

  • 运行ChatbotExpand

要启动与聊天机器人的对话,可以实现一个简单的交互式循环:

while True:user_input = input("User: ")if user_input.lower() in ["quit", "exit", "q"]:print("Goodbye!")breakfor event in graph.stream({"messages": ("user", user_input)}):for value in event.values():print("Assistant:", value["messages"][-1].content)

在这段代码中,聊天机器人不断提示用户输入,通过graph处理它,并输出生成的响应。可以通过输入“quit”、“exit”或“q”来终止对话。

最后总结

本文解释如何使用LangGraph构建了基本的聊天机器人,演示了状态管理和节点功能的关键概念。聊天机器人能够进行对话并根据用户输入生成响应,作为将来可以添加更复杂功能的基础。

为了让你理解示例,我们首先介绍安装所需的软件包、配置API密钥,以及理解增强聊天机器人功能所必需的基本概念。通过理解这些方面,你可以创建有效的聊天机器人来维护会话流并处理用户输入。

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

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

相关文章

二叉树的最大深度(遍历思想+分解思想)

Problem: 104. 二叉树的最大深度 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(实则二叉树的先序遍历) 1.欲望求出最大的深度,先可以记录一个变量res,同时记录每次当前节点所在的层数depth 2.在递的过程中,每次递一层&#xff0…

QT+mysql+python 效果:

# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…

WSL 安装cuDNN

WSL 安装cuDNN 参考文档:https://docs.nvidia.com/deeplearning/cudnn/installation/latest/linux.html#verifying-the-install-on-linux 1. 下载相应包 根据下方下载地址进入下载界面,并选择与自己电脑相对应的平台执行图中的命令 下载地址&#xff1…

58.界面参数传递给Command C#例子 WPF例子

界面参数的传递,界面参数是如何从前台传送到后台的。 param 参数是从界面传递到命令的。这个过程通常涉及以下几个步骤: 数据绑定:界面元素(如按钮)的 Command 属性绑定到视图模型中的 RelayCommand 实例。同时&#x…

阿里云域名备案

一、下载阿里云App 手机应用商店搜索"阿里云",点击安装。 二、登录阿里云账号 三、打开"ICP备案" 点击"运维"页面的"ICP备案"。 四、点击"新增网站/App" 若无备案信息,则先新增备案信息。 五、开始备案

sunrays-framework配置重构

文章目录 1.common-log4j2-starter1.目录结构2.Log4j2Properties.java 新增两个属性3.Log4j2AutoConfiguration.java 条件注入LogAspect4.ApplicationEnvironmentPreparedListener.java 从Log4j2Properties.java中定义的配置读取信息 2.common-minio-starter1.MinioProperties.…

如何解决跨浏览器兼容性问题

跨浏览器兼容性问题是指同一网页在不同浏览器中呈现效果不一致,通常由于浏览器渲染引擎、CSS支持、JavaScript执行等差异导致。解决这类问题可以从以下几个方面入手: 一、使用标准化的HTML和CSS 确保你的网页符合W3C标准。浏览器会尽量遵循这些标准,所以通过标准化的代码可…

算法12(力扣739)-每日温度

1、问题 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 2、示例 &#…

54.数字翻译成字符串的可能性|Marscode AI刷题

1.题目 问题描述 小M获得了一个任务,需要将数字翻译成字符串。翻译规则是:0对应"a",1对应"b",依此类推直到25对应"z"。一个数字可能有多种翻译方法。小M需要一个程序来计算一个数字有多少种不同的…

立创开发板入门ESP32C3第八课 修改AI大模型接口为deepseek3接口

#原代码用的AI模型是minimax的API接口,现在试着改成最热门的deepseek3接口。# 首先按理解所得,在main文件夹下,有minimax.c和minimax.h, 它们是这个API接口的头文件和实现文件,然后在main.c中被调用。所以我们一步步更改。 申请…

数据分析系列--③RapidMiner算子说明及数据预处理

一、算子说明 1.新建过程 2.算子状态灯 状态灯说明: (1)状态指示灯: 红色:指示灯说明有参数未被设置或输入端口未被连接等问题; 黄色:指示灯说明还未执行算子,不管配置是否基本齐全; 绿色:指示灯说明一切正常,已成功执行算子。 (2)三角…

Airflow:精通Airflow任务依赖

任务依赖关系是任何工作流管理系统的核心概念,Apache Airflow也不例外。它们确定在工作流中执行任务的顺序和条件,确保以正确的顺序完成任务,并确保在相关任务开始之前成功完成先决任务。在本文中我们将探讨Apache Airflow中的任务依赖关系&a…

关于WPF中ComboBox文本查询功能

一种方法是使用事件&#xff08;包括MVVM的绑定&#xff09; <ComboBox TextBoxBase.TextChanged"ComboBox_TextChanged" /> 然而运行时就会发现&#xff0c;这个事件在疯狂的触发&#xff0c;很频繁 在实际应用中&#xff0c;如果关联查询数据库&#xff0…

python——Django 框架

Django 框架 1、简介 Django 是用python语言写的开源web开发框架&#xff0c;并遵循MVC设计。 Django的**主要目的是简便、快速的开发数据库驱动的网站。**它强调代码复用&#xff0c;多个组件可以很方便的以"插件"形式服务于整个框架&#xff0c;Django有许多功能…

(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台

1 项目简介&#xff08;开源地址在文章结尾&#xff09; 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频&#xff0c;甄别分类、实况分析鸟类保护动物&#xff0c;与全世界各地的用户&…

DeepSeek R1学习

0.回顾&#xff1a; https://blog.csdn.net/Together_CZ/article/details/144431432?ops_request_misc%257B%2522request%255Fid%2522%253A%25226574a586f0850d0329fbb720e5b8d5a9%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id…

25美赛ABCDEF题详细建模过程+可视化图表+参考论文+写作模版+数据预处理

详情见该链接&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 25美国大学生数学建模如何准备&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;-CSDN博客文章浏览阅读791次&#xff0c;点赞13次&#xff0c;收藏7次。通过了解比赛基本…

【Qt】多线程

多线程 QThread 类简介使用线程线程同步互斥锁 QThread 类简介 一个 QThread 类的对象管理一个线程。在设计多线程程序的时候&#xff0c;需要从 QThread 继承定义线程类&#xff0c;并重新定义 QThread 的虚函数 run()&#xff0c;在函数 run() 里处理线程的事件循环。 应用…

微服务(一)

文章目录 项目地址一、微服务1.1 分析User的Domian Verb和Nouns 二、运行docker和k8s2.1 Docker1. 编写dockerfile2. 创建docker image3. 运行docker使用指定端口4. 查看当前运行的镜像5. 停止当前所有运行的docker6. 删除不用的docker images7. 将本地的image上传到hub里 2.2 …

软件架构的演变:从大型机和整体式应用到分布式计算

注&#xff1a;本文为 “软件架构演变” 相关文章合辑。 英文引文机翻&#xff0c;未校。 Evolution of Software Architecture: From Mainframes and Monoliths to Distributed Computing Liv Wong Technical Writer August 06, 2024 Software architecture—the blueprint…