当前位置: 首页 > article >正文

【用 Trace读源码】PlanAgent 执行流程

前提条件

在 Trae 中打开 OpenManus 工程,使用 build 模式,模型选择 claude-sonnet-3.7

提示词

分析 agent/planning.py 中 main 方法及相关类的执行流程,以流程图的方式展示

PlanningAgent 执行流程图

以下流程图展示了 PlanningAgent 类的执行流程,包括 main 方法和相关方法的调用关系。

update_plan_status 方法流程
_get_current_step_index 方法流程
create_initial_plan 方法流程
有 planning 工具调用
无 planning 工具调用
是否有活动计划?
更新计划状态开始
结束
是否有步骤跟踪信息?
记录警告
工具调用是否完成?
记录警告
获取步骤索引
标记步骤为已完成
记录步骤已完成
是否有活动计划?
获取当前步骤开始
返回 None
获取计划内容
解析计划内容
查找 Steps: 行
是否找到 Steps 行?
查找第一个未完成步骤
是否找到未完成步骤?
标记步骤为进行中
返回步骤索引
记录计划创建信息
创建初始计划开始
创建用户消息
添加消息到内存
调用 LLM 创建计划
创建助手消息
添加助手消息到内存
检查工具调用
执行 planning 工具
记录执行结果
添加工具消息到内存
设置计划已创建标志
记录警告
添加错误消息到内存
main()
创建 PlanningAgent 实例
初始化 agent
设置 active_plan_id
验证 planning tool
agent.run(request)
create_initial_plan(request)
调用父类 run() 方法
步骤循环
(当前步骤 < max_steps)
think() 方法
_get_current_step_index()
获取当前步骤索引
调用父类 think() 方法
是否有工具调用?
关联工具调用与当前步骤
act() 方法
调用父类 act() 方法
执行工具调用
更新工具执行状态
update_plan_status()
更新计划步骤状态
是否完成?
返回结果

执行流程说明

  1. 初始化阶段

    • main() 方法创建 PlanningAgent 实例
    • 初始化 agent,设置 active_plan_id 和验证 planning tool
    • 调用 run(request) 方法开始执行
  2. 计划创建阶段

    • create_initial_plan(request) 方法创建初始计划
    • 调用 LLM 分析请求并创建计划步骤
    • 使用 planning 工具执行计划创建
  3. 执行循环阶段

    • 循环执行直到达到最大步骤数或任务完成
    • 每次循环调用 think() 方法决定下一步行动
    • 获取当前步骤索引并标记为进行中
    • 调用父类 think() 方法获取 LLM 响应
    • 如果有工具调用,关联工具调用与当前步骤
  4. 执行工具阶段

    • 调用 act() 方法执行工具调用
    • 更新工具执行状态
    • 调用 update_plan_status() 更新计划步骤状态
  5. 完成阶段

    • 检查是否完成所有步骤或达到最大步骤数
    • 返回执行结果

流程图展示了 PlanningAgent 如何通过创建计划、执行步骤和更新状态来完成任务的整个生命周期。

提示词

分析 agent/planning.py 中 main 方法及相关类的执行流程,以流程图的方式展示整个执行流程,不需要类和方法的信息,只需要完整的处理流程

PlanningAgent 执行流程图

以下流程图展示了 agent/planning.py 中 main 方法及相关类的执行流程:

开始
初始化 PlanningAgent
是否有初始请求?
创建初始计划
执行 run 方法
循环执行 step 方法
执行 think 方法
获取当前计划状态
获取当前步骤索引
调用 LLM 决定下一步行动
是否需要执行工具?
思考完成 - 无需行动
执行 act 方法
执行工具调用
更新工具执行状态
是否为计划相关工具?
更新计划步骤状态
返回执行结果
是否达到最大步骤或终止?
结束

流程说明

  1. 初始化阶段

    • 创建 PlanningAgent 实例
    • 设置默认计划 ID 和可用工具
  2. 计划创建阶段

    • 如果有初始请求,创建初始计划
    • 使用 LLM 分析请求并生成计划步骤
    • 通过 PlanningTool 存储计划
  3. 执行循环

    • 循环执行 step 方法,包含 think 和 act 两个阶段
    • think 阶段获取当前计划状态,决定下一步行动
    • act 阶段执行工具调用并更新计划状态
  4. 状态追踪

    • 使用 step_execution_tracker 跟踪每个工具调用的执行状态
    • 当工具执行完成后,更新对应计划步骤的状态
  5. 终止条件

    • 达到最大步骤数 (max_steps)
    • 执行了终止工具 (Terminate)
    • 没有更多未完成的步骤

相关文章:

【用 Trace读源码】PlanAgent 执行流程

前提条件 在 Trae 中打开 OpenManus 工程&#xff0c;使用 build 模式&#xff0c;模型选择 claude-sonnet-3.7 提示词 分析 agent/planning.py 中 main 方法及相关类的执行流程&#xff0c;以流程图的方式展示PlanningAgent 执行流程图 以下流程图展示了 PlanningAgent 类…...

第一讲 | 解锁C++编程能力:基础语法解析

C入门基础 一、C的第一个程序二、命名空间三、C输入&输出四、缺省参数/默认参数五、函数重载六、引用1.引用的特性2.引用的使用引用做返回值场景 3.const引用只有指针和引用涉及权限放大、缩小的问题&#xff0c;普通变量没有 4.指针和引用的关系 七、inline八、nullptr 一…...

LeetCode 热题 100_划分字母区间(80_763_中等_C++)(贪心算法(求并集))

LeetCode 热题 100_划分字母区间&#xff08;80_763&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;贪心算法(求交集)&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;贪心算法(求…...

C++ --- 多态

1 多态的概念 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多 态(动态多态)&#xff0c;这⾥我们重点讲运⾏时多态&#xff0c;编译时多态(静态多态)和运⾏时多态(动态多态)。编译时 多态(静态多态)主要就是我…...

HAL库中使用空闲中断+DMA接收数据,接收失败的问题

问题&#xff1a; 串口屏与单片机通过串口&#xff08;USART1&#xff09;进行通信&#xff0c;调试时发现问题&#xff0c;现象如下&#xff1a; 手动页面的几个文本&#xff0c;输入的数字不会显示出来&#xff0c;比如初始值为0&#xff0c;输入200&#xff0c;200会一闪而…...

【STM32实物】基于STM32的扫地机器人/小车控制系统设计

基于STM32的扫地机器人/小车控制系统设计 演示视频: 基于STM32的扫地机器人小车控制系统设计 简介:扫地机器人系统采用分层结构设计,主要包括底层硬件控制层、中间数据处理层和上层用户交互层。底层硬件控制层负责对各个硬件模块进行控制和数据采集,中间数据处理层负责对采…...

【Scrapy】Scrapy教程8——处理子链接

通过前面几篇文章,已经了解了如何去爬取网页内容并存储到数据库,但是目前只是存储了一个页面的内容,现在想要获取每篇文章链接内的文章内容,我们来看看怎么获取。 生成新请求 首先我们肯定要先拿到链接,所以第一步都获取文章标题和链接肯定少不了,然后再爬取获取到到子…...

使用pycel将Excel移植到Python

1.适用需求 有些工作可能长期适用excel来进行公式计算&#xff0c;当需要把工作流程转换为可视化界面时&#xff0c;开发人员不懂专业逻辑&#xff0c;手动摸索公式很大可能出错&#xff0c;而且费时费力 2.可用工具及缺点 pandas 方便进行数据处理&#xff0c;支持各种格…...

学习应用层

应用层概述 客户/服务器方式&#xff08;C/S&#xff09;和对等方式&#xff08;P2P&#xff09; 动态主机配置协议DHCP 客户/服务器方式 DHCP报文会被封装成为UDP用户数据报&#xff0c;DHCP服务器端口号是UDP67&#xff0c;用户是UDP68。 广播发送&#xff0c;是因为并不知道…...

Doris官网上没有的一些Fe参数了,都在源码中

一、FE配置源码 apache-doris-src\fe\fe-common\src\main\java\org\apache\doris\common\Config.java 二、BE配置源码 apache-doris-src\be\src\common\config.cpp 三、FE源码 package org.apache.doris.common;public class Config extends ConfigBase {ConfField(descri…...

蓝桥杯算法精讲:二分查找实战与变种解析

适合人群&#xff1a;蓝桥杯备考生 | 算法竞赛入门者 | 二分查找进阶学习者 目录 一、二分查找核心要点 1. 算法思想 2. 适用条件 3. 算法模板 二、蓝桥杯真题实战 例题1&#xff1a;分巧克力&#xff08;蓝桥杯2017省赛&#xff09; 例题2&#xff1a;砍竹子&#xff0…...

C++脚本化方案调研

1 什么是脚本化 脚本化&#xff08;Scripting&#xff09;是指将脚本语言嵌入到主程序&#xff08;C等编译型语言&#xff09;中&#xff0c;通过以下方式扩展程序能力&#xff1a; 动态逻辑控制&#xff1a;通过脚本实现运行时逻辑调整&#xff0c;无需重新编译主程序&#x…...

蓝桥杯(N皇后问题)------回溯法

题目描述 在 NN 的方格棋盘放置了 N 个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意 2 个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成 45 角的斜线上。你的任务是&#xff0c;对于给定的 N&#xff0c;求出有多少种合法的放置方法…...

再探C语言(1)

温馨提示&#xff1a; 学C语言就像玩《掘地求升》——你以为懂了语法就能通关&#xff1f; 不&#xff01;编译器会用铁锤教你做人&#xff01;(╯‵□′)╯︵┻━┻ &#x1f431;Part 1&#xff1a;sizeofの跨平台迷惑行为 Q1. 不同环境下sizeof(int)的结果 运行环境结果&a…...

高项第十三章——项目资源管理

什么是资源管理&#xff1f;项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程。 本过程关注两类资源&#xff1a;实物资源包括设备、材料、设施和基础设施 团队资源或人员指的是团队的人力资源 13_1 项目资源管理基础 项目团队是执行项目工作&#xff0c…...

C/C++转换为字符串宏和字符串拼接宏的综合使用

本文内容参考: C/C++ 宏拼接和宏展开为字符串 - DoubleLi - 博客园 特此致谢! 1. 转换为字符串宏与字符串拼接宏 (1)转换为字符串宏 转换为字符串的宏为: #define STR(x) #x //转字符串 (2)字符串拼接宏 字符串拼接的宏为: #define CONCAT(x,y) x##y //拼接 2…...

Linux:xxx is not in the sudoers file. This incident will be reported.

报错 xxx is not in the sudoers file. This incident will be reported.解决方式 切换到root用户下操作 # 1、修改/etc/sudoers文件为可修改&#xff0c;默认是只读的 ls -lh /etc/sudoers -r--r----- 1 root root 4.3K Dec 1 01:45 /etc/sudoerschmod uw /etc/sudoersls…...

掌握新编程语言的秘诀:利用 AI 快速上手 Python、Go、Java 和 Rust

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

个人常用的chrome好用插件

chrome可以说是兼容性和实用性较高的浏览器 没有复杂的ui 沉重的广告 加上各种各样的浏览器插件 现在罗列一下个人常用的几款好用的插件 1. Adblock Plus 一款免费的广告拦截器&#xff0c;可以拦截大部分网站上的广告推荐&#xff0c;还你一个干净舒服的页面 以下为b站演示…...

Redis 内存优化

Redis 内存优化 Redis性能优化可以从多个方面进行&#xff0c;主要包括以下几个方面&#xff1a; 1. 内存优化 Redis 是基于内存的数据库&#xff0c;优化内存使用可以提高性能并降低成本。 (1) 使用合适的数据结构 不同的数据结构占用的内存不同&#xff0c;选择合适的数据…...

数据库设计-笔记2

1.介绍一下MySQL 历史与发展 MySQL 最初由瑞典的 MySQL AB 公司开发&#xff0c;于 1995 年正式发布。2008 年&#xff0c;MySQL AB 公司被 Sun Microsystems 收购&#xff0c;之后 Sun 又被甲骨文&#xff08;Oracle&#xff09;公司收购&#xff0c;MySQL 成为 Oracle 旗下…...

【大模型】什么是循环神经网络(RNNs)

在人工智能&#xff08;AI&#xff09;的世界里&#xff0c;**循环神经网络&#xff08;Recurrent Neural Networks, RNNs&#xff09;**是一种非常强大的工具&#xff0c;特别适合处理序列数据。无论是语言、时间序列还是音乐&#xff0c;RNNs都能帮助我们理解和预测这些数据的…...

hexo+butterfly搭建博客网站总结篇

hexobutterfly搭建博客网站总结篇 文章目录 hexobutterfly搭建博客网站总结篇0.往期栏目1.发现的不错的butterfly博主2.待实现的功能 && 结语笔者待实现的功能结语 0.往期栏目 个人博客网站搭建_为了前进而后退&#xff0c;为了走直路而走弯路的博客-CSDN博客 【Node…...

损失函数理解(二)——交叉熵损失

损失函数的目的是为了定量描述不同模型&#xff08;例如神经网络模型和人脑模型&#xff09;的差异。 交叉熵&#xff0c;顾名思义&#xff0c;与熵有关&#xff0c;先把模型换成熵这么一个数值&#xff0c;然后用这个数值比较不同模型之间的差异。 为什么要做这一步转换&…...

基于随机森林回归预测葡萄酒质量

基于随机森林回归预测葡萄酒质量 1.作者介绍2.随机森林算法与数据集介绍2.1定义2.2核心思想2.3主要步骤2.4数据集介绍 3.算法实现3.1数据加载与探索3.2数据可视化3.3数据预处理&#xff08;标准化、划分训练/测试集&#xff09;3.4模型训练与优化&#xff08;随机森林回归 超参…...

【Qt】QWidget属性2

&#x1f3e0;个人主页&#xff1a;Yui_ &#x1f351;操作环境&#xff1a;Qt Creator &#x1f680;所属专栏&#xff1a;Qt 文章目录 1. windowOpacity属性2. cursor属性2.1 自定义光标 3. font属性4.tooltip属性5. focusPolicy属性6. 总结 由于QWidget的常见属性实在太多&a…...

OpenGL ES ->乒乓缓冲,计算只用两个帧缓冲对象(Frame Buffer Object)+叠加多个滤镜作用后的Bitmap

乒乓缓冲核心思想 不使用乒乓缓冲&#xff0c;如果要每个滤镜作用下的绘制内容&#xff0c;也就是这个滤镜作用下的帧缓冲&#xff0c;需要创建一个Frame Buffer Object加上对应的Frame Buffer Object Texture使用乒乓缓冲&#xff0c;只用两个Frame Buffer Object加上对应的F…...

数据库练习2

目录 1.向heros表中新增一列信息&#xff0c;添加一些约束&#xff0c;并尝试查询一些信息 2.课堂代码练习 3.题目如下 一、单表查询 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4…...

macOS Sequoia 15.3 一直弹出“xx正在访问你的屏幕”

&#x1f645; 问题描述 macOS 系统升级后&#xff08;15.2或者15.3均出现过此问题&#xff09;&#xff0c;不管是截图还是开腾讯会议&#xff0c;只要跟捕捉屏幕有关&#xff0c;都一直弹出这个选项&#xff0c;而且所有软件我都允许访问屏幕了&#xff0c;这个不是询问是否…...

OpenCV图像拼接(1)自动校准之校准旋转相机的函数calibrateRotatingCamera()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::calibrateRotatingCamera 是OpenCV中用于校准旋转相机的函数。它特别适用于那种相机相对于一个固定的场景进行纯旋转运动的情况&…...