openmanus 代码分析 #2 - agent classes

news/2025/3/17 10:27:05/文章来源:https://www.cnblogs.com/julian-zhang/p/18776318

根据你提供的 agent 目录下各个类的信息,下面是对应的 PlantUML 代码,用于绘制类图展示这些类之间的关系:

@startuml
' 定义抽象基类
abstract class BaseAgent {+ name: str+ description: Optional[str]+ system_prompt: Optional[str]+ next_step_prompt: Optional[str]+ llm: LLM+ memory: Memory+ state: AgentState+ max_steps: int+ current_step: int+ duplicate_threshold: int+ initialize_agent(): BaseAgent+ state_context(new_state: AgentState): ContextManager+ update_memory(role: ROLE_TYPE, content: str, **kwargs): None+ run(request: Optional[str] = None): str+ abstract step(): str+ handle_stuck_state(): None+ is_stuck(): bool+ messages: List[Message]+ messages.setter(value: List[Message]): None
}' 定义其他代理类
class ToolCallAgent {+ name: str+ description: str+ system_prompt: str+ next_step_prompt: str+ available_tools: ToolCollection+ tool_choices: TOOL_CHOICE_TYPE+ special_tool_names: List[str]+ tool_calls: List[ToolCall]+ max_steps: int+ max_observe: Optional[Union[int, bool]]+ think(): bool+ act(): str+ execute_tool(command: ToolCall): str+ _handle_special_tool(name: str, result: Any, **kwargs): None+ _should_finish_execution(**kwargs): bool+ _is_special_tool(name: str): bool
}class PlanningAgent {+ name: str+ description: str+ system_prompt: str+ next_step_prompt: str+ available_tools: ToolCollection+ tool_choices: TOOL_CHOICE_TYPE+ special_tool_names: List[str]+ tool_calls: List[ToolCall]+ active_plan_id: Optional[str]+ step_execution_tracker: Dict[str, Dict]+ current_step_index: Optional[int]+ max_steps: int+ initialize_plan_and_verify_tools(): PlanningAgent+ think(): bool+ act(): str+ get_plan(): str+ run(request: Optional[str] = None): str+ update_plan_status(tool_call_id: str): None+ _get_current_step_index(): Optional[int]+ create_initial_plan(request: str): None
}class Manus {+ name: str+ description: str+ system_prompt: str+ next_step_prompt: str+ max_observe: int+ max_steps: int+ available_tools: ToolCollection+ _handle_special_tool(name: str, result: Any, **kwargs): None
}' 定义继承关系
ToolCallAgent --|> BaseAgent
PlanningAgent --|> ToolCallAgent
Manus --|> ToolCallAgent@enduml

代码解释:

  1. 抽象基类 BaseAgent

    • 包含了代理的核心属性和方法,如名称、描述、提示信息、状态管理、内存管理和执行控制等。
    • step 方法被定义为抽象方法,需要子类实现。
  2. ToolCallAgent

    • 继承自 BaseAgent,增强了工具/函数调用的功能。
    • 包含了工具调用的相关属性和方法,如 thinkactexecute_tool 等。
  3. PlanningAgent

    • 继承自 ToolCallAgent,用于执行规划任务。
    • 包含了规划流程的相关属性和方法,如 initialize_plan_and_verify_toolsget_plancreate_initial_plan 等。
  4. Manus

    • 继承自 ToolCallAgent,可能是一个通用的代理类,具有特定的工具和功能。
  5. 继承关系

    • 使用 --|> 表示继承关系,展示了各个类之间的层次结构。

你可以将上述 PlantUML 代码复制到 PlantUML 编辑器(如 PlantText、Visual Studio Code 的 PlantUML 扩展等)中,即可生成相应的类图。

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

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

相关文章

实践四:数据模型与数据库

实践四:数据模型与数据库 内容概述:本节课我们将引入数据模型(model),通过创建数据模型和数据表,我们就可以将信息存储在数据库中,并将数据库中的信息呈现在页面上。 1. 在完成实践一、实践二、实践三的基础上开始本项目,进入激活虚拟环境。pipenv shel提示:接下来我们…

clickhouse 开启认证 SQL 方式

ClickHouse 访问控制 RBAC 用户账户:包含身份信息、权限、允许的主机、角色和设置。 角色:权限容器,可分配给用户或其他角色。 行策略:定义表中行的可见性。 设置配置文件:集中管理用户/角色的配置参数。 配额:限制资源使用(如查询次数、内存)。 权限层级 权限按层级划…

No.66 Vue---Vue引入路由配置、路由传递参数、嵌套路由配置

一、Vue引入路由配置在Vue中,我们可以通过 vue-router 路由管理页面之间的关系 Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举.1.1 在vue中引入路由 第一步:安装路由npm install -save vue-router第二步:配置独立的路由…

开源!Django-Vue3-Admin的Python后台管理系统

DjangoAdmin 是一个基于 Django + Vue3 的前后端分离的后台管理系统,采用了最新的前后端技术栈,内置了丰富的功能模块,可以帮助开发者快速搭建企业级中后台产品。Django-Vue3-Admin 项目简介 Django-Vue3-Admin 是一个基于 Django + Vue3 的前后端分离的后台管理系统,采用了…

陕西人文:1964年陕西14座古县因何纷纷“改县名”?

2016年11月西安市户县撤县设区,改名鄠邑区。其中有一节简介:”1964年“鄠县”改名“户县”,实际上在同一时期改名的还有:盩厔,邠县,醴泉,栒邑,汧阳,郿县,郃阳,雒南,商雒、洵阳,沔县,鄜县,葭县,这13个古县。 【户县老县城】鄠县(hu xian)就是现在之西安市鄠邑区…

在鸿蒙NEXT中实现完全自定义导航栏

在日常app开发中,导航栏扮演着重要的角色。鸿蒙提供了系统导航栏Navigation,它支持很多属性的修改,但是应用需求更加灵活多变,比如有的导航栏有背景图片,有的导航栏要求渐变色,有的导航栏需要随时隐藏和显示等等。 遇到这些需求系统的Navigation就无法实现,这时候我们就需…

鸿蒙开发中console.log和hilog的区别

在日常开发中打印日志是调试程序非常常用的操作,在鸿蒙的官方文档中介绍了hilog这种方式,有些前端转过来的友友发现console.log也可以进行日志打印。有一段时候幽蓝君也非常喜欢使用console.log,因为它看起来好像更加简单方便。 那么今天幽蓝君就来和大家说一说console.log和…

HarmonyOS NEXT开发实战教程--招聘app

这一周忙到起飞,只能在周末发个文章。今天的内容比较简单,是一个招聘app,适合新手友友参考,大佬们可以直接忽略。 看一下效果图:这是一个比较常见的应用,大家做这类应用建议大家先分析一下应用和页面的结构,避免写完发现错了又改。 这个应用首先有4个tabbaritem,是很常…

解决vscode XHR failed

问题:主要流程: 获取自己的COMMIT_ID(就是一串数字,每个人的不一样) 下载vscode-server-linux-x64.tar.gz文件 解压vscode-server-linux-x64.tar.gz,移动解压后的所有文件到~/.vscode-server/bin/COMMIT_ID目录获取COMMIT_ID cd ~/.vscode-server/bin && ls # 那串数字…

下载神器!支持视频号、抖音等多平台资源下载!

res-downloader —— 一款基于 Go + Wails + Vue 实现的,支持下载视频、音频、图片、m3u8、直播流等常见网络资源的软件工具。大家好,我是 Java陈序员。 今天,给大家介绍一款支持视频号、抖音等多平台资源下载的开源软件,开箱即用!关注微信公众号:【Java陈序员】,获取开…

零经验选手,Compose 一天开发一款小游戏!

什么,Compose 也能做游戏?!不会 Unity 没关系!游戏开发零经验选手手把手带你飞,一天写出一个4399小游戏!是兄弟就一起来!猛男翻卡牌 猛男启动 继上一个 Compose 练习项目 SimpleTodo 之后,又尝试用 Compose 来做了一个翻牌记忆游戏【猛男翻卡牌】。这次是零经验写游戏项…

ftp替代品,如何提升数据交换的安全性与高效性?

文件传输协议(FTP)是一个跨平台的、简单且易于实现的协议,用于在网络上的服务器和客户端之间传输文件,也是企业会经常选择的一种传输方式。 业务场景一: 基于信息相关安全要求,医院会采用防火墙、网闸等将网络隔离为内网和外网,但网络隔离后,医院仍存在将报告资料等文…