跳到主要内容

什么是 OpenManus?它的实现原理是什么?

OpenManus 是 FoundationAgents/OpenManus 开源的通用 AI Agent 框架——受商业产品 Manus 启发,目标是「无需邀请码也能跑通用 Agent」。团队来自 MetaGPT 社区,核心思路是用 ReAct + Function Calling + 可插拔工具 实现 Think-Act 闭环。本篇讲面试答法;同类概念见 Agent 核心概念与架构;MCP 见 MCP 概览与实践。

它是什么​

维度说明
定位开源通用 Agent 框架,非单一 SaaS 产品
与 Manus 关系受 Manus 能力启发;OpenManus 是可自部署、可改源码的实现
语言 / 栈Python 3.12、async/await、Pydantic 模型
入口main.py(单 Agent)、run_flow.py(多 Agent 计划流)、run_mcp.py(MCP 工具版)
典型能力跑 Python、改文件、浏览器自动化、接 MCP 远程工具、人机协作(AskHuman)

面试一句话:OpenManus = 分层 Agent 继承体系 + ReAct 工具调用循环 + 可选 PlanningFlow 多步编排 + 原生 MCP 插件化。

整体架构​

用户请求
↓
┌─ Agent 模式(main.py)──────────────────────┐
│ Manus.run() → while step: think → act │
└─────────────────────────────────────────────┘
或
┌─ Flow 模式(run_flow.py)────────────────────┐
│ PlanningFlow:先 plan → 逐步选 Agent 执行 │
└─────────────────────────────────────────────┘
↓
LLM(ask / ask_tool)+ Memory + ToolCollection
↓
内置工具 / MCP Server(Browser Use、自定义 SSE/stdio)

Agent 四层继承(核心原理)​

OpenManus 用继承分层把「状态机、ReAct、工具调用、业务 Agent」拆开:

BaseAgent
└─ ReActAgent think() + act() 抽象
└─ ToolCallAgent LLM function calling + 工具执行
└─ Manus 通用 Agent:内置工具 + MCP 客户端
层级职责
BaseAgent状态机(IDLE / RUNNING / FINISHED / ERROR)、Memory、主循环 run()、步数上限、死循环检测
ReActAgent实现 step() = think() → act(),定义 ReAct 节拍
ToolCallAgentthink() 调 llm.ask_tool() 选工具;act() 执行 tool_calls 并写回 memory
Manus注册 PythonExecute、StrReplaceEditor、AskHuman、Terminate;启动时连 MCP(默认 Browser Use CLI)

主循环(BaseAgent.run)​

  1. 用户请求写入 Memory
  2. 状态切到 RUNNING,循环调用 step(),直到 FINISHED 或 max_steps
  3. 每步后检查 is_stuck():若 assistant 重复相同内容 ≥ 阈值,往 next_step_prompt 注入「换策略」提示
  4. 结束清理 Sandbox / MCP 连接

这和 Agent 核心概念与架构 里的 感知-规划-行动 一致:think 是规划,act 是行动,工具结果是观察。

Think-Act 细节(ToolCallAgent)​

Think 阶段:

  • 把 system_prompt、memory.messages、可选 next_step_prompt 交给 LLM
  • 调用 llm.ask_tool(tools=available_tools.to_params())
  • LLM 返回文本和/或 tool_calls;assistant / tool 消息追加进 Memory

Act 阶段:

  • 遍历 tool_calls,经 ToolCollection.execute() 执行
  • 结果以 tool role 消息回灌;支持 max_observe 截断过长输出
  • 特殊工具 Terminate 触发 AgentState.FINISHED

工具体系​

组件作用
BaseTool工具抽象:name、description、parameters schema、execute()
ToolCollection注册表 + 统一 execute(name, tool_input)
内置工具PythonExecute(沙箱跑代码)、StrReplaceEditor(改文件)、AskHuman、Terminate
MCPClients连 MCP Server(stdio / SSE),远程 tool 映射为本地 MCPClientTool 加入 ToolCollection

Manus 启动时会默认尝试连 Browser Use CLI 3.0(MCP),提供 browser_exec、browser_screenshot 等浏览器能力;也可在 config.toml 里配更多 MCP Server。

和 MCP 概览与实践 的关系:MCP 是工具交付层;OpenManus 的 function calling 是模型选型机制——二者组合,本地工具与远程 MCP 工具对 Agent 是统一列表。

两种执行模式​

维度Agent 模式Flow 模式
入口python main.pypython run_flow.py
核心Manus.run() 单循环PlanningFlow
规划隐式(模型逐步 ReAct)显式:先 PlanningTool 生成计划,再逐步执行
适用目标相对单一、路径开放复杂多步、需分 Agent(如 DataAnalysis Agent)
执行器单个 Manusget_executor(step_type) 按步骤标签选 Agent

PlanningFlow 原理简述:

  1. LLM + PlanningTool 创建 plan(steps + step_statuses)
  2. 循环取第一个未完成 step,标记 in_progress
  3. 把「当前计划进度 + 本步任务」作为 prompt 交给对应 Agent 的 run()
  4. 完成后 mark_step → completed,直到无剩余 step,LLM 做总结

这是 Plan-and-Execute:计划与执行分离,比纯 ReAct 更可控,适合面试里对比「单 Agent 循环 vs 显式规划流」。

Memory 与配置​

  • Memory:存 Message 列表(user / assistant / system / tool),即短期工作记忆;工具观察也在这里
  • LLM:config.toml 配 model、base_url、api_key;支持多 profile(如 vision)
  • Sandbox:Python 执行等走隔离客户端,任务结束 cleanup()

长期跨会话记忆不是 OpenManus 主打能力——面试可主动说:框架偏单任务轨迹 memory,跨会话要自接业务库 / Store(见 大模型长短期记忆机制)。

与同类框架怎么比​

对比OpenManusLangGraph / 自研 loop
抽象类继承 + ReAct图 / 状态机 / 手写 while
工具ToolCollection + MCP 一等公民各自注册
多 AgentPlanningFlow + 多 executor图分支 / 子图
定位开箱跑通用 Agent Demo生产编排更灵活

OpenManus 价值在教学与 PoC:结构清晰、代码量适中,适合讲清 Agent 最小闭环;上生产还要补权限、评测、多租户等(见 Agent 系统高频题)。

常见坑(面试加分)​

坑说明
与商业 Manus 混淆OpenManus 是开源框架,不是同一产品
以为有长期记忆默认 Memory 是会话内 messages,不持久跨用户
忽略死循环靠 is_stuck + prompt 注入,不是硬中断
MCP 工具面过大连多个 Server 后 tool 暴涨,需裁剪或分场景
Flow 模式稳定性官方标注 multi-agent 版本仍 unstable

面试参考答法(60~90 秒)​

OpenManus 是 MetaGPT 社区开源的通用 Agent 框架,用 Python 实现 ReAct 式的 Think-Act 循环。

架构上四层继承:BaseAgent 管状态机和主循环;ReActAgent 拆 think/act;ToolCallAgent 用 LLM function calling 选工具并执行;Manus 是面向用户的通用 Agent,内置 Python 执行、文件编辑、AskHuman、Terminate,并通过 MCP 接 Browser Use 等远程工具。

原理就是:每步 think 把 memory 和 tool schema 给 LLM,LLM 返回 tool_calls;act 执行工具,结果写回 memory,循环直到 Terminate 或达到 max_steps。另有 PlanningFlow 模式,先用 PlanningTool 生成多步计划,再按步选不同 Agent 执行,适合复杂任务。

和 LangChain/LangGraph 比,它更偏「可读的最小 Agent 参考实现」,MCP 集成和双模式入口是特色。

延伸阅读​

篇关系
Agent 核心概念与架构ReAct、工具/记忆/规划三角
Agent 最小可运行项目手写同类 loop 的对照
MCP 概览与实践OpenManus 工具扩展方式
[LangGraph 编排实践](/docs/ai/Agent/LangGraph 编排实践)Flow 模式的图编排替代

面试速记​

  1. 是什么: 开源通用 Agent 框架(FoundationAgents),ReAct + function calling + MCP。
  2. 继承链: BaseAgent → ReActAgent → ToolCallAgent → Manus。
  3. 单步原理: think(ask_tool 选工具)→ act(execute 回灌 memory)→ 循环至 FINISHED。
  4. 双模式: main.py 单 Agent 循环;run_flow.py 的 PlanningFlow 先 plan 再分步执行。
  5. 特色: ToolCollection 插件化、MCP 远程工具、死循环检测、Sandbox 执行 Python。