LangGraph中预构件,creat_react_agent的实现流程

LangGraph Prebuilt Agent 流程图

本文档展示了LangGraph的prebuilt模块中Agent的实现流程,重点是create_react_agent函数构建的代理系统流程和结构。

ReAct Agent构建流程

字典模式
Pydantic模式
调用
调用
创建
定义
定义
开发者调用
create_react_agent
确定状态模式
创建AgentState
创建AgentStatePydantic
检查是否需要
结构化响应
使用带结构化响应的状态类型
使用标准状态类型
初始化StateGraph
配置模型节点
配置工具节点
配置条件边
编译图
返回CompiledGraph
_get_prompt_runnable
_should_bind_tools
ToolNode
should_continue
route_tool_responses

Agent执行流程

有工具调用
无工具调用
最终答案
继续对话
对话结束
如有错误
注入提示
开始执行
用户消息
代理模型节点
call_model
should_continue
检查工具调用
工具节点
ToolNode._func
最终响应
执行工具调用
ToolNode._run_one
route_tool_responses
决定下一步
结束
需要结构化响应?
generate_structured_response
handle_tool_errors
_get_prompt_runnable

工具节点执行流程

无效工具
有效工具
成功
失败且处理错误
接收输入
_parse_input
解析输入类型和工具调用
_validate_tool_call
验证工具名称
返回错误ToolMessage
inject_tool_args
注入状态和存储参数
执行工具
BaseTool.invoke
msg_content_output
格式化输出
_handle_tool_error
处理工具错误
创建ToolMessage
_combine_tool_outputs
合并输出
返回结果

ValidationNode验证流程

找到schema
未找到schema
验证成功
验证失败
接收输入
_get_message
提取消息和工具调用
处理每个工具调用
查找对应schema
验证工具参数
返回schema错误
创建成功ToolMessage
format_error
格式化错误消息
创建错误ToolMessage
返回结果

中断处理流程

接受
忽略
回复
编辑
创建中断请求
配置HumanInterruptConfig
创建ActionRequest
构建HumanInterrupt
发送中断请求到用户
等待用户响应
HumanResponse:accept
HumanResponse:ignore
HumanResponse:response
HumanResponse:edit
恢复执行

组件间关系图

创建
定义状态
配置工具
可选添加
添加节点
可配置中断
AgentState
+messages: List[BaseMessage]
+is_last_step: IsLastStep
+remaining_steps: RemainingSteps
ToolNode
+tools: Dict[str, BaseTool]
+name: str
+handle_tool_errors: Any
+_func(input, config, store)
+_run_one(call, input_type, config)
+inject_tool_args(tool_call, input, store)
ValidationNode
+schemas_by_name: Dict[str, Type[BaseModel]]
+format_error: Callable
+_func(input, config)
+_validate_schema(call)
HumanInterrupt
+action_request: ActionRequest
+config: HumanInterruptConfig
+description: str
StateGraph
+add_node(key, node)
+add_edge(start, end)
+add_conditional_edges(key, condition)
+compile()
create_react_agent
+model: LanguageModelLike
+tools: List[BaseTool]
+prompt: Optional[Prompt]
+return: CompiledGraph
+configure_graph()

关键方法和功能说明

代理创建相关

方法/类文件功能描述
create_react_agent()chat_agent_executor.py创建ReAct风格代理的主函数
AgentStatechat_agent_executor.py定义代理状态的字典类型
AgentStatePydanticchat_agent_executor.py定义代理状态的Pydantic模型
_get_prompt_runnable()chat_agent_executor.py处理不同格式的提示输入
_should_bind_tools()chat_agent_executor.py检查是否需要绑定工具到模型

模型节点相关

方法/类文件功能描述
call_model()chat_agent_executor.py调用语言模型生成响应
acall_model()chat_agent_executor.py异步调用语言模型
generate_structured_response()chat_agent_executor.py生成结构化响应

工具节点相关

方法/类文件功能描述
ToolNodetool_node.py执行工具调用的节点
_func()tool_node.py处理工具调用的主函数
_run_one()tool_node.py执行单个工具调用
_parse_input()tool_node.py解析输入状态和工具调用
inject_tool_args()tool_node.py注入状态和存储到工具参数
_handle_tool_error()tool_node.py处理工具执行错误

验证节点相关

方法/类文件功能描述
ValidationNodetool_validator.py验证工具调用参数的节点
_func()tool_validator.py验证节点的主函数
_default_format_error()tool_validator.py默认错误格式化函数

条件和路由相关

方法/类文件功能描述
should_continue()chat_agent_executor.py决定是执行工具还是结束
route_tool_responses()chat_agent_executor.py路由工具响应到下一步
tools_condition()tool_node.py检查是否需要执行工具

中断相关

方法/类文件功能描述
HumanInterruptinterrupt.py定义人类干预的中断
HumanInterruptConfiginterrupt.py配置中断选项
ActionRequestinterrupt.py表示对人类操作的请求
HumanResponseinterrupt.py人类对中断的响应

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法学习C++

1,跳跃游戏II 题目连接:45. 跳跃游戏 II - 力扣(LeetCode) 【题目描述】 在给定的一个nums数组中,nums[i]表示从当前i位置最多可以向后跳跃nums[i]个位置。问跳跃到最后 数组最后一个元素的最少跳跃次数?…

自学Matlab-Simscape(初级)- 2.3 Simscape Multibody 模块之Belts and Cables(皮带与线缆)

Matlab-Simscape自学系列文章目录 1.了解Simscape Multibody Link模块 2.掌握Simscape Multibody 模块 3.掌握Simscape Electrical模块 4.掌握Simscape Driveline 模块 5.了解Simscape Fluids模块 6.了解Simscape Battery模块 7.掌握Simscape Mechanical Interfaces 模块 8.掌…

一款轻量级的PHP地址发布页面源码

源码介绍 一款轻量级的PHP链接发布页面源码,适合快速搭建个性化的链接导航网站,支持动态链接管理和多种风格模板切换 1:后台登录地址为/admin/login.php,提供便捷的配置入口。 2:默认用户名是admin,密码为…

IMX6ULL2025年最新部署方案2在Ubuntu24.04上编译通过Qt5.12.9且部署到IMX6ULL正点原子开发板上

IMX6ULL2025年最新部署方案2:在Ubuntu24.04上编译通过Qt5.12.9且部署到IMX6ULL正点原子开发板上 前言 ​ 本篇方案部署是笔者这几天除了打蓝桥杯以外,笔者在研究的东西,现在写道这里的时候,笔者已经成功的在Ubuntu24.04上,使用默…

鸿蒙应用开发—鸿蒙app一键安装脚本

背景 当鸿蒙App开发完后需要提测,如何将App文件发给QA安装测试,是一件麻烦事,因为鸿蒙App并不能像Android Apk那样可以直接安装到设备中,能想到的方式有: 直接叫测试拿手机过来安装让测试安装DevEco Studio 拉代码编…

【第45节】windows程序的其他反调试手段上篇

目录 引言 一、通过窗口类名和窗口名判断 二、检测调试器进程 三、父进程是否是Explorer 四、RDTSC/GetTickCount时间敏感程序段 五、StartupInfo结构的使用 六、使用BeingDebugged字段 七、 PEB.NtGlobalFlag,Heap.HeapFlags,Heap.ForceFlags 八、DebugPort:CheckRem…

.Net 9 webapi使用Docker部署到Linux

参考文章连接: https://www.cnblogs.com/kong-ming/p/16278109.html .Net 6.0 WebApi 使用Docker部署到Linux系统CentOS 7 - 长白山 - 博客园 项目需要跨平台部署,所以就研究了一下菜鸟如何入门Net跨平台部署,演示使用的是Net 9 webAPi Li…

npm和npx的作用和区别

npx 和 npm 是 Node.js 生态系统中两个常用的工具,它们有不同的作用和使用场景。 1. npm(Node Package Manager) 作用: npm 是 Node.js 的包管理工具,主要用于: 安装、卸载、更新项目依赖(包&a…

个人论坛的测试报告

目录 一、项目的介绍 二、项目功能 三、测试项目 1.编写测试用例​编辑 2.执行部分测试用例 3.自动化测试 1)添加相关Maven依赖(pom.xml) 2)编写论坛系统的界面测试用例 3)编写自动化代码测试部分测试用例 4.性能测试 一、项目的介…

《 C++ 点滴漫谈: 三十三 》当函数成为参数:解密 C++ 回调函数的全部姿势

一、前言 在现代软件开发中,“解耦” 与 “可扩展性” 已成为衡量一个系统架构优劣的重要标准。而在众多实现解耦机制的技术手段中,“回调函数” 无疑是一种高效且广泛使用的模式。你是否曾经在编写排序算法时,希望允许用户自定义排序规则&a…

大联盟(特别版)双端互动平台完整套件分享:含多模块源码+本地部署环境

这是一套结构清晰、功能完整的互动平台组件,适合有开发经验的技术人员进行模块参考、结构研究或本地部署实验使用。 该平台覆盖前端展示、后端服务、移动端资源以及完整数据库,采用模块化架构,整体部署流程简单清晰,适合自研团队参…

spark-SOL简介

Spark-SQL简介 一.Spark-SQL是什么 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 二.Hive and SparkSQL SparkSQL 的前身是 Shark,Shark是给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供的快速上手的工具 …