一文讲透多智能体框架 Open Manus | 全网独家深度解剖,代码级讲解它背后隐藏的秘密

1. 引言

自从 Manus 出圈以来,AI 领域再次掀起热潮,仿佛迈入了一个新的阶段。根据 OpenAI 提出的 AGI 五步走路线,如今似乎已经进入了 L3 级别的“行动者”阶段。

在这里插入图片描述

事实上,早在 LangChain 时代,这种模式的雏形便已初现。LangChain 通过调用外部工具来实现复杂功能,而后 OpenAI 直接将其能力内置,发展为 Function Calling 模式。然而,这一接口仍显得较为僵硬,泛化能力也存在一定的局限性。

近期,随着 DeepSeek 在大模型领域的强势冲击,业界对于基础对话模型的能力重新燃起信心。智能体(Agent)路线也随之复苏,从 Manus 到开源框架 Open Manus 和 OWL 等,大家都在关注这些框架究竟能做什么。但相比之下,却鲜有人深入剖析它们的代码,探究其实现背后的核心逻辑。

为此,我与三位同事——ChatGPT、Claude 以及 DeepSeek——决定啃下这块硬骨头。我们花了一下午的时间,试图彻底吃透其中的“魔法”。在这篇文章中,我们将以 Open Manus 项目代码为例,对其进行详细的解读,揭示它如何实现当前的智能体能力。

Open Manus的代码链接:https://github.com/mannaandpoem/OpenManus

2. 项目框架

通过深入分析 open_manus 的代码结构,我们可以快速梳理出整个项目的框架。本篇文章将重点关注 app 目录下的核心代码。除去根目录中的一些配置和工具性代码,整体架构主要分为以下四个核心部分:

  • agent/:智能体核心,实现 open_manus 的主要功能模块。
  • flow/:工作流管理,负责规划和执行任务。
  • prompt/:智能体的提示词模板,定义不同模块的系统指令。
  • tool/:可扩展的工具集合,为智能体提供具体的执行能力。

接下来,我们将逐一拆解这些模块的代码实现,深入剖析 open_manus 的技术核心。

	app/
        config.py
        exceptions.py
        llm.py
        logger.py
        schema.py
        __init__.py
        agent/
            base.py
            manus.py
            planning.py
            react.py
            swe.py
            toolcall.py
            __init__.py
        flow/
            base.py
            flow_factory.py
            planning.py
            __init__.py
        prompt/
            manus.py
            planning.py
            swe.py
            toolcall.py
            __init__.py
        tool/
            base.py
            bash.py
            browser_use_tool.py
            create_chat_com

2.1 根目录

根目录下包含了一些核心配置和基础功能文件,其中 config.pyexceptions.pylogger.py 主要用于配置管理、异常处理和日志记录,属于项目的基础工具组件,本文不做深入探讨。

2.1.1 llm.py

llm.py 主要实现了一个 LLM(大语言模型)管理类,用于封装 OpenAI 或 Azure OpenAI 的 API 调用,并提供 消息格式化、令牌计数、API 请求、重试策略 等功能。可以理解为 agent 模块的基础支持层。下图展示了 llm.py 的类结构:
在这里插入图片描述

核心代码主要围绕 ask()ask_tool() 这两个方法展开。不过,仔细分析代码后会发现,真正的核心逻辑只有 字数统计,其他部分本质上就是一个标准的 LLM API 封装,80% 的开发者都能自己实现类似的功能。

2.1.2 schema.py

schema.py 主要用于定义 对话消息、工具调用、对话记忆 的数据结构,并确保与 OpenAI API 交互时的格式一致。文件内容可以拆分为四个核心部分:

  • RoleToolChoice 枚举(定义角色 & 工具选择)
  • Function & ToolCall(定义工具调用结构)
  • Message(封装对话消息)
  • Memory(管理对话记忆)

其中,最重要的部分是 MessageMemoryMessage 负责不同角色的信息处理,而 Memory 则管理整个对话历史,可以理解为 MemoryMessage 的更高级封装。

有趣的是,在代码中居然出现了 汉字,我知道作者是中国开发者,但是这可能是彩蛋,也可能是作者的疏忽。不过,这些代码整体质量很高,AI 生成的影子非常明显。未来,代码的“手工艺人”可能会变得越来越少,毕竟代码的核心目的是 解决问题,而非纯粹的艺术创作。

2.2 agent/ 智能体核心

agent/ 目录是 open_manus 的核心部分,定义了整个智能体的实现逻辑。根据文件结构,我们可以看到几个主要的智能体模块:

  • manus.py:主智能体,统筹整个 open_manus 逻辑。
  • planning.py:任务规划智能体。
  • react.py:响应式智能体。
  • swe.py:程序执行智能体。
  • toolcall.py:工具调用智能体。

以下是 agent 各个类之间的依赖关系(感谢 open_manus 的自我剖析):

BaseAgent
BaseModel
ABC
Manus
ToolCallAgent
PlanningAgent
ReActAgent
SWEAgent

核心在于 工具调用(ToolCall),只需要围绕 ToolCallAgent 扩展 3 个子类(Manus, PlanningAgent, SWEAgent),整个框架的核心功能就能快速复刻(开个玩笑,实际上代码质量还是很高的)。

2.2.1 manus.py - 主智能体

manus.pyopen_manus 的核心智能体模块,负责协调任务并管理工具调用。从代码结构来看,它继承自 ToolCallAgent,并扩展了额外的工具支持,使其具备更强的执行能力。

manus.py 中,智能体默认支持 5 种工具:

# Add general-purpose tools to the tool collection
    available_tools: ToolCollection = Field(
        default_factory=lambda: ToolCollection(
            PythonExecute(), WebSearch(), BrowserUseTool(), FileSaver(), Terminate()
        )
    )

这些工具的功能如下:

  • PythonExecute():执行 Python 代码,支持计算、数据处理、自动化任务等。
  • WebSearch():进行网络搜索,获取外部信息。
  • BrowserUseTool():打开、浏览和操作网页,支持加载本地 HTML 文件。
  • FileSaver():保存文件,如 .txt.py.html 等格式。
  • Terminate():当任务完成或需要用户提供额外信息时,终止当前交互。
    可以看出,Manus 主要是一个 工具协调者,它自身并不直接执行任务,而是通过工具调用完成各种复杂操作。

2.2.2 swe.py - 代码执行智能体

SWEAgent 主要扩展了对 代码执行 的支持,使其能够与系统终端交互,并运行命令行指令。

1. 代码执行工具
相比 manus.pySWEAgent 额外增加了 对命令执行的支持:

available_tools: ToolCollection = ToolCollection(
        Bash(), StrReplaceEditor(), Terminate()
    )

新增的工具包括:

  • Bash():运行 Shell 命令,支持 Linux/Mac 终端操作。
  • StrReplaceEditor():字符串替换工具,能够修改文本内容。
  • Terminate():终止任务执行。

2. 任务思考与执行
SWEAgent 具备 思考与调整执行流程 的能力,它在执行前会先更新工作目录,并调整 next_step_prompt 以确保正确的任务规划:

async def think(self) -> bool:
        """Process current state and decide next action"""
        # Update working directory
        self.working_dir = await self.bash.execute("pwd")
        self.next_step_prompt = self.next_step_prompt.format(
            current_dir=self.working_dir
        )

        return await super().think()

可以看出,SWEAgent 不仅是一个工具调用智能体,还增加了 自我调整能力,能够动态修改执行环境,使任务管理更具灵活性。

2.2.3 planning.py - 任务规划智能体

PlanningAgent 侧重于 任务的分解与执行规划,它能够分析任务需求,并制定清晰的执行计划。其主要作用如下:

  • 任务分析:拆解任务,定义执行步骤。
  • 计划创建:根据需求构建任务计划,并调整执行顺序。
  • 执行管理:调用适当的工具,确保任务顺利完成。

下图展示了 PlanningAgent 的执行流程:

在这里插入图片描述

2.2.4 toolcall.py - 工具调用智能体

ToolCallAgent 是 open_manus 工具调用的核心模块,它定义了工具调用的完整流程,包括 选择工具、执行工具、检查执行结果 等操作。

这里核心还是他们的父类toolcall.py。这里写的很清楚,如何调用工具的。

  1. 关键方法
    工具调用的主要流程如下:
  • think():调用 LLM 询问应执行哪些工具(基于 Function Calling)。
  • act():执行选定工具,并确保调用的正确性。
  • execute_tool():单独执行工具,检查参数并解析返回值。
    其中,think() 方法用于决定下一步行动,它会基于当前对话上下文,调用 LLM 选择合适的工具:
async def think(self) -> bool:
        """Process current state and decide next actions using tools"""
        if self.next_step_prompt:
            user_msg = Message.user_message(self.next_step_prompt)
            self.messages += [user_msg]

        try:
            # Get response with tool options
            response = await self.llm.ask_tool(
                messages=self.messages,
                system_msgs=[Message.system_message(self.system_prompt)]
                if self.system_prompt
                else None,
                tools=self.available_tools.to_params(),
                tool_choice=self.tool_choices,
            )
        except ValueError:
            raise
        except Exception as e:
            # Check if this is a RetryError containing TokenLimitExceeded
            if hasattr(e, "__cause__") and isinstance(e.__cause__, TokenLimitExceeded):
                token_limit_error = e.__cause__
                logger.error(
                    f"🚨 Token limit error (from RetryError): {token_limit_error}"
                )
                self.memory.add_message(
                    Message.assistant_message(
                        f"Maximum token limit reached, cannot continue execution: {str(token_limit_error)}"
                    )
                )
                self.state = AgentState.FINISHED
                return False
            raise

        self.tool_calls = response.tool_calls

        # Log response info
        logger.info(f"✨ {self.name}'s thoughts: {response.content}")
        logger.info(
            f"🛠️ {self.name} selected {len(response.tool_calls) if response.tool_calls else 0} tools to use"
        )
        if response.tool_calls:
            logger.info(
                f"🧰 Tools being prepared: {[call.function.name for call in response.tool_calls]}"
            )

        try:
            # Handle different tool_choices modes
            if self.tool_choices == ToolChoice.NONE:
                if response.tool_calls:
                    logger.warning(
                        f"🤔 Hmm, {self.name} tried to use tools when they weren't available!"
                    )
                if response.content:
                    self.memory.add_message(Message.assistant_message(response.content))
                    return True
                return False

            # Create and add assistant message
            assistant_msg = (
                Message.from_tool_calls(
                    content=response.content, tool_calls=self.tool_calls
                )
                if self.tool_calls
                else Message.assistant_message(response.content)
            )
            self.memory.add_message(assistant_msg)

            if self.tool_choices == ToolChoice.REQUIRED and not self.tool_calls:
                return True  # Will be handled in act()

            # For 'auto' mode, continue with content if no commands but content exists
            if self.tool_choices == ToolChoice.AUTO and not self.tool_calls:
                return bool(response.content)

            return bool(self.tool_calls)
        except Exception as e:
            logger.error(f"🚨 Oops! The {self.name}'s thinking process hit a snag: {e}")
            self.memory.add_message(
                Message.assistant_message(
                    f"Error encountered while processing: {str(e)}"
                )
            )
            return False

而 act() 方法则负责执行工具调用,并确保执行顺序:

async def act(self) -> str:
        """Execute tool calls and handle their results"""
        if not self.tool_calls:
            if self.tool_choices == ToolChoice.REQUIRED:
                raise ValueError(TOOL_CALL_REQUIRED)

            # Return last message content if no tool calls
            return self.messages[-1].content or "No content or commands to execute"

        results = []
        for command in self.tool_calls:
            result = await self.execute_tool(command)

            if self.max_observe:
                result = result[: self.max_observe]

            logger.info(
                f"🎯 Tool '{command.function.name}' completed its mission! Result: {result}"
            )

            # Add tool response to memory
            tool_msg = Message.tool_message(
                content=result, tool_call_id=command.id, name=command.function.name
            )
            self.memory.add_message(tool_msg)
            results.append(result)

        return "\n\n".join(results)

下图展示了 ToolCallAgent 的执行流程:
在这里插入图片描述
至此,我们完成了 agent/ 目录的核心解析。接下来,我们将深入分析 flow/ 工作流管理模块,探索 open_manus 如何组织任务执行流程。

2.3 flow/ 文件夹

flow/ 目录主要用于 工作流管理,负责规划和执行任务,使 open_manus 能够高效地组织和协调各个智能体的运作。该模块包含多个文件,其中 base.pyflow_factory.py 主要为 planning.py 提供支持,确保任务流的合理调度和执行。

2.3.1 base.py - 执行流程与状态管理

base.py 负责定义 执行流程(Execution Flow)任务步骤状态(Plan Step Status),用于规范任务在 open_manus 中的运行方式。其主要组件包括:

  • BaseFlow:提供多个智能体(Agent)之间的执行流程管理,确保任务有序推进。
  • PlanStepStatus 枚举:定义任务执行的不同状态,例如 待处理(Pending)进行中(In Progress)已完成(Completed),用于跟踪任务的当前状态。

下图展示了 BaseFlow 及其相关组件的结构:
在这里插入图片描述

2.3.2 planning.py - 任务规划执行流

planning.py 主要实现 PlanningFlow,它是基于 BaseFlow 设计的 任务规划执行流,用于管理任务的创建、执行、进度跟踪及最终的总结。核心功能包括:

  • 任务拆解:基于 BaseFlow 逻辑,制定任务执行计划。
  • 动态调整:支持任务执行中的调整和优化,以适应不同情况。
  • 进度跟踪:记录任务执行状态,确保流程顺利推进。
  • 任务总结:在任务完成后,提供总结反馈,便于后续优化。

实际上,PlanningFlow 可以被视为 BaseFlow 的实例化,它是 manus 智能体的真正执行者,负责协调各个任务的有序执行。

下图展示了 PlanningFlow 的任务规划流程:
在这里插入图片描述
flow/ 目录的核心作用是让 open_manus 具备 高效的任务调度和执行能力,它确保了多个智能体能够协同工作,并依据合理的执行流程完成复杂任务。接下来,我们将深入解析 prompt/ 文件夹,了解 open_manus 如何利用提示词(Prompt)来引导智能体的行为。

2.4 prompt/ 文件夹

prompt/ 目录主要存放 不同智能体的提示词(Prompt)模板,用于指导 open_manus 在不同任务场景下的行为。每个智能体的 Prompt 都定义了其工作方式、任务目标以及可用工具。尽管该目录本身不涉及具体的代码逻辑,但它在智能体的决策过程中起到了 关键引导作用

接下来,我们对其中几个核心智能体的 Prompt 进行简要解析。

2.4.1 manus.py - 主智能体 Prompt

Manusopen_manus 的主智能体,负责统筹任务执行。它的 SYSTEM_PROMPT 明确规定了其职责,即 充当一个全能的 AI 助手,能够调用各种工具完成复杂任务

SYSTEM_PROMPT=“你是OpenManus,一个全能的人工智能助手,旨在解决用户提出的任何任务。你可以使用各种工具来高效地完成复杂的请求。无论是编程、信息检索、文件处理还是网页浏览,你都可以处理。”

NEXT_STEP_PROMPT=“”“您可以使用PythonExecute与计算机交互,通过FileSaver保存重要内容和信息文件,使用BrowserUseTool打开浏览器,以及使用GoogleSearch检索信息。
PythonExecute:执行Python代码与计算机系统、数据处理、自动化任务等进行交互。
FileSaver:在本地保存文件,如txt、py、html等。
BrowserUseTool:打开、浏览和使用网络浏览器。如果打开本地HTML文件,则必须提供文件的绝对路径。
WebSearch:执行网络信息检索
Terminate:当任务完成或需要用户提供其他信息时,结束当前交互。使用此工具表示您已经完成了对用户请求的处理,或者在继续之前需要澄清。
根据用户需求,主动选择最合适的工具或工具组合。对于复杂的任务,您可以分解问题并使用不同的工具逐步解决。使用每个工具后,清楚地解释执行结果并建议下一步。
在整个互动过程中,始终保持一种乐于助人、信息丰富的语气。如果您遇到任何限制或需要更多详细信息,请在终止之前向用户明确传达。

从 Manus 的 Prompt 可以看出,它的核心任务是高效利用工具执行任务,并确保用户理解执行过程。

2.4.2 planning.py - 任务规划智能体 Prompt

PlanningAgent 负责任务的分解、执行计划的制定与调整,因此它的 SYSTEM_PROMPT 更加强调 结构化任务规划:

PLANNING_SYSTEM_PROMPT=“”“
您是一名专业的规划代理,负责通过结构化计划有效地解决问题。
你的工作是:
1.分析请求以了解任务范围
2.制定一个明确、可操作的计划,利用“规划”工具取得有意义的进展
3.根据需要使用可用工具执行步骤
4.跟踪进度,必要时调整计划
5.任务完成后,使用“完成”立即结束
可用工具因任务而异,但可能包括:
-“planning”:创建、更新和跟踪计划(命令:Create、update、mark_step等)
-'finish':任务完成后结束
将任务分解为具有明确结果的逻辑步骤。避免过多的细节或子步骤。
考虑依赖关系和验证方法。
知道什么时候结束——一旦目标实现,就不要继续思考。
"""
NEXT_STEP_pmpt=“”“
根据目前的情况,你的下一步行动是什么?
选择最有效的前进道路:
1.这个计划是否足够,还是需要改进?
2.你能立即执行下一步吗?
3.任务完成了吗?如果是这样,请立即使用“finish”。
推理要简洁,然后选择合适的工具或行动。
"""

这一 Prompt 使 PlanningAgent 能够 自适应地规划任务流程,确保执行过程高效且逻辑清晰。

2.4.3 swe.py - 代码执行智能体 Prompt

SWEAgent 主要负责 代码执行与终端交互,因此它的 SYSTEM_PROMPT 主要强调 代码编辑与命令执行 的约束:

SYSTEM_PROMPT=“”“设置:您是一名自主程序员,使用特殊界面直接在命令行中工作。

特殊界面由一个文件编辑器组成,一次显示文件的{{WINDOW}}行。
除了典型的bash命令外,您还可以使用特定的命令来帮助您导航和编辑文件。
要调用命令,您需要使用函数调用/tool调用来调用它。

请注意,编辑命令需要正确的标识。
如果你想添加“print(x)”行,你必须完整地写出来,并在代码前加上所有空格!缩进很重要,没有正确缩进的代码将失败,需要修复才能运行。

响应格式:
您的shell提示符格式如下:
(打开文件:<path>)
(当前目录:<cwd>)
bash-$

首先,你应该始终对下一步要做什么有一个总体的想法。
然后,对于每个响应,您必须精确地包含_ONE_工具调用/函数调用。

请记住,您应该始终包含_SINGLE_工具调用/函数调用,然后等待shell的响应,然后再继续进行更多讨论和命令。您在讨论部分包含的所有内容都将被保存以供将来参考。
如果你想同时发出两个命令,请不要这样做!请先提交第一个工具调用,然后在收到响应后,您将能够发出第二个工具调用。
请注意,该环境不支持交互式会话命令(例如python、vim),因此请不要调用它们。
"""

NEXT_STEP_TEMPLATE=“”{{观察}}
(打开文件:{{Open_file}})
(当前目录:{{working_dir}})
bash-$
"""

从 SWEAgent 的 Prompt 设计可以看出,它需要 精确执行代码任务,并严格遵循 Shell 交互格式,以确保代码的正确性和稳定性。

2.4.4 总结

prompt/ 目录中的内容,虽然不涉及具体的代码实现,但却在 open_manus 的智能体行为决策中起到了 至关重要的作用。不同智能体的 Prompt 侧重点各不相同:

  • Manus 关注工具调用,确保任务执行的高效性。
  • PlanningAgent 负责任务分解,优化任务规划和调整能力。
  • SWEAgent 专注于代码执行,确保 Shell 交互和代码编辑的准确性。

这些 Prompt 定义了各个智能体的行为边界,使得 open_manus 能够在不同的任务场景下表现出合理的智能决策能力。

接下来,我们将深入解析 tool/ 文件夹,了解 open_manus 如何通过外部工具扩展功能,提高任务执行能力。

2.5 tool/ 文件夹

与前面几个目录不同,tool/ 目录主要负责 扩展 open_manus 的功能,它提供了一系列 可调用的工具模块,用于支持智能体执行各种任务。可以将其理解为一个 可扩展的工具包,每个工具都封装了特定的功能,使 open_manus 能够执行更复杂的操作。

截至 2025 年 3 月 19 日tool/ 目录已包含以下工具:

  • bash:执行 Shell 命令,实现命令行操作。
  • browser_use:用于浏览器交互,打开和控制网页。
  • file_saver:用于保存文件,如文本、代码文件等。
  • planning:支持任务规划和执行管理。
  • python_execute:执行 Python 代码,实现数据处理和计算任务。
  • run(命令行)**:用于运行系统级命令。
  • str_replace_editor:字符串替换工具,支持文本编辑。
  • terminal:终端操作支持,扩展 Shell 交互能力。
  • terminate:任务终止工具,用于控制任务流结束。
  • web_search:执行互联网信息检索,帮助查找外部资源。

2.5.1 可扩展性

tool/ 目录的 最大特点 在于其 高度可扩展性。开发者可以根据需求不断添加新的工具,以提升 open_manus 的能力。例如:

  • 未来可以引入 GUI 自动化工具,例如 按键精灵(Key Press Automation)。
  • Python 中已有类似功能的库,如 pyautogui,它可以 模拟鼠标和键盘操作,让智能体具备 完整的计算机交互能力

如果 pyautogui 或类似工具被集成到 open_manus,智能体将不仅能执行代码,还能 直接控制计算机界面,例如自动点击按钮、输入文本、滚动页面等,使其能力更加接近人类操作。

2.5.2 未来发展

open_manus 未来可以通过扩展 tool/ 目录,进一步增强其功能:

  1. 系统控制:集成 pyautoguiAutoHotkey,使智能体具备 GUI 自动化能力。
  2. 文件管理:增加 OCR 识别工具,使其能读取图片中的文本信息。
  3. 深度学习推理:支持 TensorFlow/PyTorch,使 open_manus 可执行 AI 计算任务。

可以预见,未来 open_manus 可能会成为一个 更加强大的 AI 助手,不仅限于文本交互,而是能够 直接影响现实世界的任务执行

2.5.3 总结

tool/ 目录是 open_manus核心能力扩展组件,它允许智能体调用不同的工具 执行任务、处理数据、检索信息,甚至 运行外部程序。该模块的 灵活性可扩展性 使其具备 无限的拓展可能性,未来可以加入更多实用工具,进一步提升 open_manus 的智能化水平。

3. 小结

至此,我们已经像庖丁解牛般地 剖析open_manus,从它的核心架构到各个模块的具体实现。事实上,它并没有什么神秘之处,归根结底,其本质仍然是 构建在 LLM(大语言模型)之上的任务执行框架

如果从学习路径来看,理解 open_manus 需要遵循一个 由浅入深的认知递进

  1. 理解 LLM 的基础工作原理,明确它的输入、输出以及推理能力的边界。
  2. 掌握 Function Calling 机制,学习如何通过 API 调用让 LLM 具备更强的功能控制力。
  3. 构建智能体(Agent),赋予 LLM 规划、执行代码、搜索信息 等能力,使其能完成更复杂的任务。
  4. 设计工作流框架,整合所有工具与模块,使其成为一个完整的 自主执行系统

这样的架构并不复杂,只要遵循上述逻辑,任何人都可以在 open_manus 的基础上进行功能扩展。然而,对我而言,open_manus 的价值不仅仅是技术实现,而更在于它所映射出的 软件开发的新范式


3.1 从“Agent”概念到“Agent 生态”

最初,我们提出 Agent 这一概念,希望让 AI 不仅仅是被动的工具,而是能够 自主运行 的智能体。随后,我们又希望用户 能够“看到”Agent 在运行,让智能体的决策与执行过程变得透明。实际上,这种思路,正是 用高级技术兼容低级技术 的典型案例。

但如果我们站得更高一些,是否应该 彻底用 Agent 思维重构整个软件工程体系?

过去,面向对象编程(OOP)本质上是“静态的 Agent”。 在 OOP 中,我们通过类和对象组织代码,虽然它们具备封装、继承、多态等能力,但最终仍是 人工驱动 的静态逻辑。
而现在,我们可以用真正的 Agent 构建整个软件系统。 这意味着:

  • 函数的内部执行可以自动化,开发者只需关注如何组织系统功能,而不是逐行编写逻辑代码。
  • 模块间的协作可以由 Agent 处理,程序员只需设计系统架构,而代码实现、优化、调试都可以交给智能体完成。
  • 软件开发将转向目标驱动,工程师只需设定目标,智能体将自动拆解任务、构建代码,并最终实现功能。

这种构想听起来很疯狂,但如果你仔细思考,它的 模式与人类社会的演化惊人相似


3.2 从软件演化到社会系统

如果我们将软件开发比作人类社会的演化,不难发现其中的相似性:

  • 人类社会的发展并非由某个“上帝”全盘设计,而是个体在各自领域内自我优化,最终推动整体系统进化。
  • 企业和组织的管理并非层层传递具体技术,而是通过设定目标与规则,让下级根据自身能力完成任务,最终形成一个高效的生态系统。

同理,在软件开发中,我们也可以:

  1. 设定目标(高层决策):开发者不再直接编写具体实现,而是设计 功能目标模块分工
  2. 任务下发(智能体执行):每个智能体(Agent)自动拆解任务,并决定是自己执行,还是调用更底层的 Agent 处理。
  3. 结果回收(系统自优化):Agent 在执行过程中会不断优化自身逻辑,最终形成更高效的解决方案。

目前的 open_manus 仍然处于 第一阶段,即人类主导,智能体作为 辅助工具。但要实现真正的 Agent 生态,关键在于 工具的自我进化


3.3 迈向真正的自动化编程

回顾 open_manus 的实现,我们会发现 一个关键限制

尽管任务执行是智能化的,但 tool/ 目录中的代码仍然是人类手写的。

这意味着,当前的 AI 仍然无法自主创造工具。如果我们希望真正实现 完全自动化的编程,那么下一步的发展方向应该是:

  • 让 Agent 具备造“轮子”的能力,即智能体不仅能调用工具,还能生成新的工具,并用于更高级的任务。
  • 工具链的自我进化,Agent 既能创建工具,也能优化和替换已有工具,使系统具备自学习能力。
  • 从代码到代码世界,最终,开发者不再编写传统意义上的代码,而是创建一个由智能体驱动的代码生态,其中的每个 Agent 都具备自主决策和执行能力。

3.4 未来:代码不再是代码,而是智能体的世界

在很多影视作品中,科幻世界往往会将程序员看到的“代码” 可视化为一个生动的世界,其中的每个逻辑单元都是独立运作的实体。也许,在不远的将来,我们的编程方式也会迎来 从文本到实体的变革

  • 代码不再是冷冰冰的字符,而是一个个“活”的智能体,它们各自独立运作,但又能协同合作。
  • 代码编写不再是机械的过程,而是一个创造新世界的过程,每个开发者都在构建属于自己的智能体生态系统。

当智能体能够自主创建、优化、协作时,软件开发的模式将彻底改变——

编程不再是代码的积累,而是 Agent 生态的构建。

而那一天,或许就在不远的将来。

### Open Manus Requirement 错误解决方案 Open Manus Requirement 错误通常发生在系统未能满足特定需求或工具调用失败的情况下。以下是可能的原因分析以及对应的解决方法: #### 1. 工具未被正确选择 如果日志显示 `Manus selected 0 tools to use`,这表明当前操作中没有任何工具被选中[^1]。这种情况下,可以尝试以下措施: - **确认配置文件**:检查系统的工具配置文件是否缺失必要的工具定义。 - **更新工具列表**:确保所有可用工具已加载到环境中。 #### 2. 步骤执行异常 日志中的 `Executing step 21/30` 表明流程正在进行中,但如果后续步骤无法完成,则可能是某些依赖条件未达成。建议采取如下行动: - **验证前置条件**:确保每一步所需的输入数据和环境变量都已准备就绪。 - **捕获异常信息**:通过增加详细的调试日志来定位具体哪一步出现了问题。 #### 3. 用户请求重复处理 当用户不断询问相同的内容时(如特斯拉财务报告),可能存在误解或者遗漏的关键动作。此时应考虑: - **提供更清晰的结果展示方式**:例如生成可视化图表或将复杂的数据简化成易于理解的形式。 - **主动询问额外需求**:向用户提供选项以确认他们是否有其他待办事项。 ```python def check_tool_selection(tools_configured, tools_selected): """ 验证工具选择逻辑是否正常工作。 参数: tools_configured (list): 当前环境下可使用的全部工具清单。 tools_selected (list): 实际选取用于本次任务的工具集合。 返回值: bool: 如果选择了至少一项有效工具则返回True;否则False。 """ if not tools_selected or set(tools_selected).isdisjoint(set(tools_configured)): return False return True if __name__ == "__main__": configured_tools = ["financial_analysis", "data_visualization"] selected_tools = [] result = check_tool_selection(configured_tools, selected_tools) print(f"Tool selection status: {'Valid' if result else 'Invalid'}") ``` 上述代码片段可用于检测是否存在因工具选择不当而导致的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI让世界更懂你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值