LangGraph简介

LangGraph 概述及用法

LangGraph 是 LangChain 的一个扩展,旨在通过将步骤建模为图中的边缘和节点,构建具有大型语言模型(LLMs)的强大和有状态的多角色应用程序。LangGraph 提供了用于创建常见类型代理的高级接口,以及用于组合自定义流程的低级 API。

LangGraph 的核心概念

LangGraph 将应用程序的工作流程表示为一个图结构,其中:

  • 节点(Nodes):代表不同的操作或步骤,例如调用一个 LLM、访问一个数据库、处理用户输入等。
  • 边(Edges):代表步骤之间的关系或流程,例如数据流、决策路径等。

这种图形结构允许创建复杂的、有状态的多角色应用程序,每个角色可以独立执行操作,互相通信,并根据前一步骤的结果动态调整。

LangGraph 的主要特点
  1. 高级接口:LangGraph 提供了用于创建常见代理的高级接口,使开发者可以快速构建代理应用。
  2. 低级 API:允许开发者自定义和组合自己的工作流程,以满足特定需求。
  3. 状态管理:支持构建有状态的应用程序,能够在多步骤和多角色之间传递和管理状态。
  4. 动态调整:基于前一步骤的结果,可以动态调整工作流程,适应不同的情况和需求。
用法示例

以下是一个基本的 LangGraph 用法示例,展示了如何创建一个简单的图结构,并使用 LLM 进行文本生成:

  1. 安装依赖
pip install langchain langgraph
  1. 导入模块并定义图结构
from langgraph import Graph, Node, Edge
from langchain.llms import OpenAI# 初始化一个 OpenAI 模型
llm = OpenAI(api_key="your-api-key")# 创建图结构
graph = Graph()# 定义节点
node_start = Node("Start")
node_generate_text = Node("GenerateText", llm)
node_end = Node("End")# 添加节点到图中
graph.add_node(node_start)
graph.add_node(node_generate_text)
graph.add_node(node_end)# 定义边并连接节点
edge_1 = Edge(node_start, node_generate_text, "Start to Generate Text")
edge_2 = Edge(node_generate_text, node_end, "Generate Text to End")# 添加边到图中
graph.add_edge(edge_1)
graph.add_edge(edge_2)# 执行图
graph.execute({"input_text": "Hello, world!"})

在这个示例中,我们创建了一个包含三个节点的简单图结构:起始节点、生成文本节点和结束节点。每个节点通过边进行连接,并定义了每个步骤的操作。

高级用法

LangGraph 还提供了更高级的功能,例如状态管理、动态调整工作流程、集成其他组件等。以下是一个更复杂的示例,展示了如何使用状态管理和动态调整:

from langgraph import Graph, Node, Edge, State# 初始化图和状态
graph = Graph()
state = State()# 定义节点和操作
node_start = Node("Start")
node_generate_text = Node("GenerateText", llm)
node_decision = Node("Decision")
node_end_positive = Node("EndPositive")
node_end_negative = Node("EndNegative")# 添加节点到图中
graph.add_node(node_start)
graph.add_node(node_generate_text)
graph.add_node(node_decision)
graph.add_node(node_end_positive)
graph.add_node(node_end_negative)# 定义边和条件
edge_1 = Edge(node_start, node_generate_text, "Start to Generate Text")
edge_2 = Edge(node_generate_text, node_decision, "Generate Text to Decision")
edge_positive = Edge(node_decision, node_end_positive, "Decision to End Positive", condition=lambda state: state["sentiment"] == "positive")
edge_negative = Edge(node_decision, node_end_negative, "Decision to End Negative", condition=lambda state: state["sentiment"] == "negative")# 添加边到图中
graph.add_edge(edge_1)
graph.add_edge(edge_2)
graph.add_edge(edge_positive)
graph.add_edge(edge_negative)# 定义决策节点的操作
def decision_action(state):generated_text = state["generated_text"]# 简单的情感分析逻辑(这里只是一个示例,可以使用更复杂的分析方法)if "good" in generated_text:state["sentiment"] = "positive"else:state["sentiment"] = "negative"node_decision.set_action(decision_action)# 执行图
graph.execute({"input_text": "The weather is good today!"})

在这个高级示例中,我们通过状态管理和条件边实现了一个简单的情感分析流程,生成文本后,根据文本内容的情感决定下一步的操作。

通过 LangGraph,开发者可以灵活构建复杂的多角色应用程序,并利用 LLM 的强大功能实现智能化和自动化。

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

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

相关文章

Vue项目运行页面禁止缩放【移动端和PC端都禁止缩放】解决方案

Vue项目运行页面禁止缩放【移动端和PC端都禁止缩放】解决方案,有的人手很J,总喜欢放大缩小,从而会导致页面错乱,以下是解决方案,简单有效 效果图PC:滚轮缩放和其他缩放都会禁止 移动端效果图:各种手机平板…

SSL发送邮件时如何配置客户端确保安全性?

怎么使用SSL安全协议通过AokSend发送加密的电子邮件? SSL是一种常用的加密通信协议,用于确保数据在客户端和服务器之间的安全传输。AokSend将讨论如何通过配置客户端确保SSL发送邮件的安全性,并介绍如何使用SSL安全协议通过AokSend发送加密的…

zibll-V7.7最新版2024完美破解授权可用(含授权教程)

最近这个正版安装包流出来了,试了一下用以前的绕过授权方法,一样可以授权。 源码下载:https://download.csdn.net/download/m0_66047725/89379057 更多资源下载:关注我。

使用Java进行数据分析和处理:应用在实际业务场景中的技术

在当今数据驱动的时代,数据分析和处理已经成为各行各业中不可或缺的一部分。Java作为一种广泛应用于企业级开发的编程语言,也在数据领域展现出了强大的能力。本文将探讨如何使用Java进行数据分析和处理,以及在实际业务场景中应用的技术。 ##…

力扣200. 岛屿数量(BFS)

Problem: 200. 岛屿数量 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.定义方向数组:定义一个方向数组 DIRECTIONS,表示上、下、左、右四个方向的移动。 2.获取网格的行数和列数同时初始化一个计数器 numIslands 用于记录岛屿的数量。 …

什么是 Redis 缓存?它解决了什么问题?怎么使用它?

前言 写在前面,让我们从 3 个问题开始今天的文章:什么是 Redis 缓存?它解决了什么问题?怎么使用它? 在笔者近 3 年的 Java 一线开发经历中,尤其是一些移动端、用户量大的互联网项目,经常会使用…

数学建模 —— 数学规划模型(5)

目录 一、数学规划 1.1 数学规划问题一般形式 二、常见规划模型 2.1 线性规划(Linear Programming) 2.1.1 定义 2.1.2 一般形式 2.1.3 标准形式 2.1.4 求解 2.2 整数规划(Integer Programming) 2.2.1 单目标规划 2.…

Mybatis学习之Spring boot整合Mybatis示例

文章目录 1.Mybatis是什么?2.整合SSM2.1 创建数据库表2.2 pom.xml2.3 启动入口2.4 web层2.5 service层2.6 dao层2.7 properties.yml 3.测试4.异常Invalid value type for attribute factoryBeanObjectType: java.lang.String5.总结 Spring SpringMVC Mybatis是现在…

nacos配置发布流程详解

1、安装必备环境: 首先,需要安装Java和Maven。Nacos是基于Java开发的,因此Java环境是必不可少的。同时,如果选择从源码部署Nacos,那么需要Maven来构建项目。 2、安装MySQL: Nacos支持使用MySQL作为外置数…

RT_thread nano移植Finsh

参考连接: https://blog.csdn.net/baseball214/article/details/131341722 移植的前提是,你已经有一个可以使用的nano功能. 1.将rtthread-nano-master\rt-thread\components文件复制到工程. 2.添加Finsh中的.c以及相关.h头文件路径 3.注释掉finsh_config.h文件中以下两个宏…

C语言中的数据类型转换:隐式类型转换与显示类型转换

一. 简介 本文简单学习一下,C语言中的数据类型转换。重点学习一下隐式类型转换。 二. C语言中的数据类型转换:隐式类型转换与显示类型转换 类型转换(TypeCasting):在C语言中是将一种数据类型值转换为另一种数据类型…

transfomer中attention为什么要除以根号d_k

简介 得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下: A t t e n t i o n ( Q , K , V ) S o f t m a x ( Q K T d k ) V Attention(Q,K,V)Softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)Softmax(dk​ ​QKT​)V 好处 除以维…

leetcode102. 二叉树的层序遍历

一、题目描述: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 二、输入输出实例: 示例 1: 输入:root [3,9,20,null,null,15,7] 输出&am…

基于 Redis 实现分布式锁的全过程

前言 这一篇文章拖了有点久,虽然在项目中使用分布式锁的频率比较高,但整理成文章发布出来还是花了一点时间。在一些移动端、用户量大的互联网项目中,经常会使用到 Redis 分布式锁作为控制访问高并发的工具。 一、关于分布式锁 总结&#x…

【HDFS】处理状态为RECEIVING_BLOCK的增量块汇报

带着以下问题: RECEIVING_BLOCK状态的IBR,block的长度汇报上来有用么?BlockManager#processIncrementalBlockReport里,处理IBR,里面有一个case分支,专门处理RECEIVING_BLOCK状态的块。 case RECEIVING_BLOCK:// receving计数器++receiving++;// 第三个参数副本状态是RBWp…

20.Redis之缓存

1.什么是缓存? Redis 最主要的用途,三个方面:1.存储数据(内存数据库)2.缓存 【redis 最常用的场景】3.消息队列【很少见】 缓存 (cache) 是计算机中的⼀个经典的概念. 在很多场景中都会涉及到. 核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅, ⽅…

基础—SQL—DQL(数据查询语言)聚合函数

一、引言 一般情况下,我们在进行分组查询的时候,一般配合着聚合函数来进行操作,所以先了解和学习聚合函数再学习和操作分组查询。 二、DQL—聚合函数 1、介绍 聚合函数指的是讲一列数据作为一个整体,进行纵向的计算。 2、常见…

域内用户枚举和密码喷洒

一. 域内用户枚举原理和流量 1. 原理 在AS-REQ阶段客户端向AS发送用户名,cname字典存放用户名,AS对用户名进行验证,用户存在和不存在返回的数据包不一样。 不同之处主要是在返回数据包中的状态码不同,根据不同的状态码来区分账…

20分钟Angular框架快速入门

Angular框架快速入门可以按照以下步骤进行: 一、准备工作 安装Node.js:Angular依赖于Node.js进行开发,因此首先需要安装Node.js。确保安装的是最新稳定版本。 二、安装Angular CLI 打开命令行工具:在Windows上可以使用CMD或Pow…

数学建模 —— 人工神经网络(6)

目录 一、人工神经网络 1.1 人工神经网络结构 1.2 神经元/感知器 1.3 激活函数 1.3.1 sign函数 1.3.2 sigmoid函数(Logistic函数) 1.3.3 tanh双曲正切函数 1.3.4 ReLU函数 1.4 分类 二、BP人工神经网络 2.1 概述 2.2 处理过程 2.3 例题 2.…