【Agent】OpenManus-Agent-实现具体的智能体

所有实例 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):
            return
        else:
            await self.available_tools.get_tool(BrowserUseTool().name).cleanup()
            await super()._handle_special_tool(name, result, **kwargs)

功能:处理特殊工具执行和状态变化。
实现细节

  • 检查工具是否为特殊工具
  • 如果是特殊工具,清理浏览器资源
  • 调用父类的 _handle_special_tool() 方法

工具集

  1. PythonExecute:执行 Python 代码
  2. WebSearch:进行网络搜索,获取信息
  3. BrowserUseTool:使用浏览器访问和交互网页
  4. FileSaver:保存文件到本地
  5. 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_id
            else self.next_step_prompt
        )
        self.messages.append(Message.user_message(prompt))

        # Get the current step index before thinking
        self.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 tracking
        if result and self.tool_calls:
            latest_tool_call = self.tool_calls[0]  # Get the most recent tool call
            if (
                latest_tool_call.function.name != "planning"
                and latest_tool_call.function.name not in self.special_tool_names
                and 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 获取响应
  • 执行规划工具创建计划
  • 将结果添加到内存中

工具集

  1. PlanningTool:创建和管理结构化计划
  2. Terminate:结束Agent执行,完成任务

设计理念

  1. 结构化问题解决

    • 将复杂任务分解为有序步骤
    • 通过计划创建明确的执行路径
  2. 进度跟踪

    • 跟踪每个步骤的执行状态
    • 将工具调用与计划步骤关联
  3. 自适应执行

    • 基于当前计划状态决定下一步行动
    • 在执行过程中更新计划状态
  4. 初始化与验证

    • 确保必要的工具可用
    • 自动创建初始计划

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() 方法

工具集

  1. Bash:执行 shell 命令,允许Agent与操作系统交互
  2. StrReplaceEditor:编辑文本文件,用于代码修改和创建
  3. Terminate:结束Agent执行,完成任务

设计理念

  1. 环境感知

    • 通过跟踪当前工作目录,Agent能够了解其操作环境
    • 将工作目录信息注入到提示中,使 LLM 能够做出更准确的决策
  2. 开发工具链

    • 提供基本的软件开发工具(命令行、文件编辑)
    • 允许Agent执行完整的软件开发周期(编写、测试、调试)
  3. 自主性

    • 能够独立执行软件开发任务,无需人工干预
    • 通过 Bash 工具提供广泛的系统交互能力

Agent架构比较

特性 SWEAgent Manus PlanningAgent
主要功能 软件开发 通用任务解决 任务规划与执行
工具集 命令行、文件编辑 Python执行、网络搜索、浏览器、文件保存 规划工具
特殊能力 环境感知(工作目录) 多功能信息获取 计划创建与跟踪
最大步骤 30 20 20
设计重点 代码操作 信息获取与处理 结构化执行

你可能感兴趣的:(AI,agent,agi,ai,openManus,Manus,架构)