所有实例 Agent 都是继承 ToolCallAgent,所以只列出额外的参数字段,继承的见 ToolCallAgent
1. Manus(通用Agent)
概述
Manus 是一个多功能通用Agent,使用多种工具解决各种任务,提供了包括 Python 执行、网络浏览、文件操作和信息检索等功能。
参数
属性名 | 默认值 |
---|---|
name | Manus |
description | A versatile agent that can solve various tasks using multiple tools |
system_prompt | SYSTEM_PROMPT,prompt/manus.py |
next_step_prompt | NEXT_STEP_PROMPT,prompt/manus.py |
max_observe | 2000 |
max_steps | 20 |
available_tools | PythonExecute(), WebSearch(), BrowserUseTool(), FileSaver(), Terminate() |
复写 function
_handle_special_tool()
async def _handle_special_tool(self, name: str, result: Any, **kwargs):if not self._is_special_tool(name):returnelse:await self.available_tools.get_tool(BrowserUseTool().name).cleanup()await super()._handle_special_tool(name, result, **kwargs)
功能:处理特殊工具执行和状态变化。
实现细节:
- 检查工具是否为特殊工具
- 如果是特殊工具,清理浏览器资源
- 调用父类的
_handle_special_tool()
方法
工具集
- PythonExecute:执行 Python 代码
- WebSearch:进行网络搜索,获取信息
- BrowserUseTool:使用浏览器访问和交互网页
- FileSaver:保存文件到本地
- Terminate:结束Agent执行,完成任务
2. PlanningAgent(规划Agent)
概述
PlanningAgent 是一个创建和管理计划来解决任务的Agent,使用规划工具创建结构化计划,并跟踪各个步骤的进度直到任务完成。
参数
属性名 | 默认值 |
---|---|
name | planning |
description | An agent that creates and manages plans to solve tasks |
system_prompt | PLANNING_SYSTEM_PROMPT |
next_step_prompt | NEXT_STEP_PROMPT |
available_tools | PlanningTool(), Terminate() |
tool_choices | ToolChoice.AUTO |
special_tool_names | [Terminate().name] |
step_execution_tracker | {} |
current_step_index | None |
max_steps | 20 |
额外参数
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
active_plan_id | Option[str] | 当前 plan 的ID | None |
step_execution_tracker | Dict[str,Dict] | 跟踪每个工具调用的步骤状态 | {} |
current_step_index | Option[int] | 当前步骤索引 | None |
方法
initialize_plan_and_verify_tools()
功能:初始化Agent,设置默认 plan ID并验证所需工具。
think()
async def think(self) -> bool:"""Decide the next action based on plan status."""prompt = (f"CURRENT PLAN STATUS:\n{await self.get_plan()}\n\n{self.next_step_prompt}"if self.active_plan_idelse self.next_step_prompt)self.messages.append(Message.user_message(prompt))# Get the current step index before thinkingself.current_step_index = await self._get_current_step_index()result = await super().think()# After thinking, if we decided to execute a tool and it's not a planning tool or special tool,# associate it with the current step for trackingif result and self.tool_calls:latest_tool_call = self.tool_calls[0] # Get the most recent tool callif (latest_tool_call.function.name != "planning"and latest_tool_call.function.name not in self.special_tool_namesand self.current_step_index is not None):self.step_execution_tracker[latest_tool_call.id] = {"step_index": self.current_step_index,"tool_name": latest_tool_call.function.name,"status": "pending", # Will be updated after execution}return result
功能:基于计划状态决定下一步行动。
实现细节:
- 获取当前计划状态并添加到提示中
- 获取当前步骤索引
- 调用父类的
think()
方法 - 将工具调用与当前步骤关联以进行跟踪
act()
功能:执行步骤并跟踪其完成状态。
实现细节:
- 调用父类的
act()
方法执行工具 - 更新工具执行状态为已完成
- 如果是非规划、非特殊工具,更新计划状态
get_plan()
功能:检索当前计划状态。
实现细节:
- 检查是否有活动计划
- 执行规划工具的 “get” 命令获取计划
run()
功能:运行Agent,可选初始请求。
实现细节:
- 如果提供了请求,创建初始计划
- 调用父类的
run()
方法
update_plan_status()
功能:基于已完成的工具执行更新当前计划进度。
实现细节:
- 检查工具调用是否在跟踪器中
- 验证工具调用已成功完成
- 执行规划工具的 “mark_step” 命令将步骤标记为已完成
_get_current_step_index()
功能:解析当前计划以识别第一个未完成步骤的索引。
实现细节:
- 获取当前计划
- 查找 “Steps:” 行的索引
- 查找第一个未完成或进行中的步骤
- 将当前步骤标记为进行中
create_initial_plan()
功能:基于请求创建初始计划。
实现细节:
- 创建用户消息,要求分析请求并创建计划
- 使用 LLM 获取响应
- 执行规划工具创建计划
- 将结果添加到内存中
工具集
- PlanningTool:创建和管理结构化计划
- Terminate:结束Agent执行,完成任务
设计理念
-
结构化问题解决:
- 将复杂任务分解为有序步骤
- 通过计划创建明确的执行路径
-
进度跟踪:
- 跟踪每个步骤的执行状态
- 将工具调用与计划步骤关联
-
自适应执行:
- 基于当前计划状态决定下一步行动
- 在执行过程中更新计划状态
-
初始化与验证:
- 确保必要的工具可用
- 自动创建初始计划
3. SWEAgent(软件工程Agent)
概述
SWEAgent 是一个自主 AI 程序员 ,能够直接与计算机交互来解决任务。它继承自 ToolCallAgent,专注于软件开发和代码执行任务。
核心属性
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
name | str | Agent的唯一名称 | “swe” |
description | str | Agent的描述 | “an autonomous AI programmer that interacts directly with the computer to solve tasks.” |
system_prompt | str | 系统级指令提示 | SYSTEM_PROMPT |
next_step_prompt | str | 确定下一步行动的提示 | NEXT_STEP_TEMPLATE |
available_tools | ToolCollection | 可用工具集合 | Bash(), StrReplaceEditor(), Terminate() |
special_tool_names | List[str] | 特殊工具名称列表 | [Terminate().name] |
max_steps | int | 最大执行步骤数 | 30 |
bash | Bash | Bash 工具实例 | Bash() |
working_dir | str | 当前工作目录 | “.” |
额外参数
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
bash | Bash | Bash 工具实例 | Bash() |
working_dir | str | 当前工作目录 | “.” |
方法
think()
功能:处理当前状态并决定下一步行动。
实现细节:
- 更新当前工作目录
- 使用当前工作目录格式化
next_step_prompt
- 调用父类的
think()
方法
工具集
- Bash:执行 shell 命令,允许Agent与操作系统交互
- StrReplaceEditor:编辑文本文件,用于代码修改和创建
- Terminate:结束Agent执行,完成任务
设计理念
-
环境感知:
- 通过跟踪当前工作目录,Agent能够了解其操作环境
- 将工作目录信息注入到提示中,使 LLM 能够做出更准确的决策
-
开发工具链:
- 提供基本的软件开发工具(命令行、文件编辑)
- 允许Agent执行完整的软件开发周期(编写、测试、调试)
-
自主性:
- 能够独立执行软件开发任务,无需人工干预
- 通过 Bash 工具提供广泛的系统交互能力
Agent架构比较
特性 | SWEAgent | Manus | PlanningAgent |
---|---|---|---|
主要功能 | 软件开发 | 通用任务解决 | 任务规划与执行 |
工具集 | 命令行、文件编辑 | Python执行、网络搜索、浏览器、文件保存 | 规划工具 |
特殊能力 | 环境感知(工作目录) | 多功能信息获取 | 计划创建与跟踪 |
最大步骤 | 30 | 20 | 20 |
设计重点 | 代码操作 | 信息获取与处理 | 结构化执行 |