精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

手把手帶你理解OpenManus

發布于 2025-3-25 00:31
瀏覽
0收藏

我之前演示過幾個OpenManus的demo,其實也就是demo,包括manus,現在也就是demo階段,復雜的plan和flow,現在的代碼支撐和LLM的能力都有待改善,但是我們這期不是吐槽文章,是來把OpenManus給打開看看它的實現是怎么樣的,其實Manus也都差不多,甚至OWL也都差不多,我們看一個就夠了。

手把手帶你理解OpenManus-AI.x社區

其他的幾個目錄也沒啥特別需要看的,就看app。

手把手帶你理解OpenManus-AI.x社區

app里面有這么幾個結構:

1- agent 沒啥好解釋的

2- flow 就是來做multiagent的planning和管理任務框架的。

3- prompt 

手把手帶你理解OpenManus-AI.x社區

都是這種形式,來定義系統提示詞和agent的role。

4- tool

手把手帶你理解OpenManus-AI.x社區

純純干活的了。

手把手帶你理解OpenManus-AI.x社區

主要看最重要的目錄agent。

大概總體分這么幾個agent。

先看base:base.py 模塊定義了抽象基類 BaseAgent,用于管理代理的狀態、內存、執行循環(包括運行、步驟執行、卡住處理)和消息,并提供初始化和配置功能,為構建具有特定行為的代理提供基礎框架。

在看planning:planning.py模塊定義了PlanningAgent類,該代理通過PlanningTool和Terminate等工具創建、管理和執行任務計劃。它具有初始化、計劃創建(create_initial_plan)、思考(think)、行動(act)、計劃狀態更新(update_plan_status)、步驟跟蹤(step_execution_tracker)等功能,并能根據工具執行結果動態調整計劃,處理初始請求(run)并檢索當前計劃狀態(get_plan)。

然后是 react.py:react.py模塊定義了繼承自BaseAgent的抽象類ReActAgent,它通過think(思考,決定下一步行動) 和act(執行行動) 兩個抽象方法(需子類實現)以及step方法(整合think和act)來處理和執行任務,并提供基礎的任務處理框架。

swe和tool就是 指從code和tool了

manus.py:manus.py模塊定義了Manus類,一個繼承自ToolCallAgent(實際上你前面提到了繼承自 PlanningAgent, 請確認是哪個) 的通用智能代理。Manus具有預定義的名稱、描述、系統提示、步驟限制(max_observe,max_steps),并利用包含PythonExecute、WebSearch、BrowserUseTool、FileSaver和Terminate等工具的available_tools集合來執行各種任務,并通過_handle_special_tool方法處理(如清理)BrowserUseTool的結果。

好的,我們來梳理一下這些代碼的調用邏輯。這里涉及到多個Agent類(BaseAgent,ReActAgent,ToolCallAgent,PlanningAgent,SWEAgent,Manus),以及它們之間的繼承關系和方法調用。我用文字描述,并結合偽代碼(因為好解釋)來表示調用流程。

1. 總體繼承關系:

BaseAgent (抽象基類)
  └─ ReActAgent (抽象基類)
      └─ ToolCallAgent
          ├─ PlanningAgent
          ├─ SWEAgent
          └─ Manus

2.BaseAgent(核心基類):

  • 核心方法:

__init__: 初始化Agent的基本屬性(name, description, llm, memory, state, max_steps等)。

initialize_agent: 使用model_validator在對象創建后進行進一步初始化(設置默認的LLM和Memory)。

state_context: 一個異步上下文管理器,用于安全地更改Agent的狀態(IDLE, RUNNING, ERROR等)。

update_memory: 將消息添加到Agent的內存中。

run: Agent的主執行循環。它會循環調用step()方法,直到達到max_steps或狀態變為FINISHED。

step:抽象方法,必須由子類實現。執行Agent的單個步驟。

is_stuck: 檢查智能體是否卡住。

handle_stuck_state: 處理卡住的狀態。

messages: 屬性,用于獲取和設置消息。

  • 調用流程 (以run方法為例):

async run(request):
  if state != IDLE:
    raise RuntimeError


  if request:
    update_memory(USER, request)


  async with state_context(RUNNING):
    while current_step < max_steps and state != FINISHED:
      current_step += 1
      step_result = await step()  # 調用子類的 step() 方法
      if is_stuck():
         handle_stuck_state()


      results.append(step_result)


    if current_step >= max_steps:
      state = IDLE
      results.append("Terminated: Reached max steps")


  return "\n".join(results)

3.ReActAgent(ReAct模式的基類):

  • 繼承自:?BaseAgent
  • 核心方法:

think:抽象方法,由子類實現。思考下一步行動。

act:抽象方法,由子類實現。執行行動。

step: 實現了BaseAgent的step方法。依次調用think()和act()。

  • 調用流程 (以step方法為例):

4.ToolCallAgent(支持工具調用的Agent):

async step():
  should_act = await think()  # 調用子類的 think()
  if should_act:
    return await act()  # 調用子類的 act()
  else:
    return "Thinking complete - no action needed"


  • 繼承自:?ReActAgent
  • 核心方法:

__init__: 初始化工具相關的屬性 (available_tools, tool_choices, special_tool_names, tool_calls等)。

think: 根據當前狀態和可用工具,決定是否調用工具。使用LLM進行決策。

act: 執行工具調用,并處理工具的輸出。

execute_tool: 執行具體的工具調用。

_handle_special_tool: 處理特殊工具。

  • 調用流程 (以think和act為例):

async think():
  # ... (準備消息和工具信息) ...
  response = await llm.ask_tool(...) # 讓LLM決定是否調用工具,以及調用哪個工具
  if response.tool_calls:
     self.tool_calls = response.tool_calls
     return True # 需要執行工具
  else:
     return False


async act():
   if self.tool_calls:
      tool_call = self.tool_calls.pop(0) # 取出第一個工具調用
      result = await execute_tool(tool_call)
      await _handle_special_tool(tool_call.function.name,result) # 如果是特殊工具,則處理。
      update_memory(TOOL, result, tool_call_id=tool_call.id)
      return result
   else:
       return "No tool to execute"

5.PlanningAgent(規劃型Agent):

  • 繼承自:?ToolCallAgent
  • 核心方法:
  • initialize_plan_and_verify_tools: 初始化計劃ID并驗證是否有PlanningTool。
  • think: 獲取當前計劃狀態,并讓LLM決定下一步行動(包括是否調用工具)。
  • act: 執行工具調用,并更新計劃狀態。
  • get_plan: 獲取當前計劃。
  • create_initial_plan: 根據用戶請求創建初始計劃。
  • update_plan_status: 根據工具執行結果更新計劃步驟的狀態。
  • _get_current_step_index: 獲取當前計劃中第一個未完成步驟的索引。
  • 調用流程 (更詳細,以run->think->act為例):

async run(request):
  if request:
     await create_initial_plan(request)
  return await super().run()  # 調用 ToolCallAgent.run() -> ReActAgent.run() -> BaseAgent.run()




async create_initial_plan(request):
  # 1. 構造消息,讓 LLM 創建計劃
  messages = [...]
  response = await llm.ask_tool(..., tool_choice=ToolChoice.AUTO)


  # 2. 處理 LLM 的響應,提取工具調用(應該是 planning 工具的調用)
  for tool_call in response.tool_calls:
    if tool_call.function.name == "planning":
      result = await execute_tool(tool_call) # 執行 planning 工具
      # 3. 將工具執行結果(計劃)存入內存
      update_memory(TOOL, result, tool_call_id=tool_call.id)




async think():
    prompt = f"CURRENT PLAN STATUS:\n{await self.get_plan()}\n\n{self.next_step_prompt}"
    self.messages.append(Message.user_message(prompt))
    self.current_step_index = await self._get_current_step_index()
    result = await super().think() # 調用 ToolCallAgent 的 think()


    if result and self.tool_calls:
       # 記錄工具和步驟的關聯
       latest_tool_call = self.tool_calls[0]
       if latest_tool_call 不是 planning tool 且 不是 special tool:
           self.step_execution_tracker[latest_tool_call.id] = {
               "step_index": self.current_step_index,
               "tool_name": latest_tool_call.function.name,
                "status": "pending"
           }
    return result


async act():
   result = await super().act() # 調用 ToolCallAgent 的 act()
   if self.tool_calls:
       latest_tool_call = self.tool_calls[0]
       if latest_tool_call.id in self.step_execution_tracker:
          self.step_execution_tracker[latest_tool_call.id]["status"] = "completed"
          self.step_execution_tracker[latest_tool_call.id]["result"] = result


          if latest_tool_call 不是 planning tool 且 不是 special tool:
              await self.update_plan_status(latest_tool_call.id)
   return result




async update_plan_status(tool_call_id):
  # 1. 檢查 tool_call_id 是否在 tracker 中,以及狀態是否為 completed
  # 2. 調用 planning 工具的 mark_step 命令,將對應步驟標記為 completed


async _get_current_step_index():
   # 1. 獲取當前計劃 (文本)
   # 2. 解析計劃文本,找到第一個 [ ] 或 [→] 的步驟
   # 3. 調用 planning 工具的 mark_step 命令,將當前步驟設置為 in_progress
   # 4. 返回步驟索引

6.SWEAgent(軟件工程師Agent):

  • 繼承自:?ToolCallAgent
  • 核心方法:

think: 更新工作目錄,并使用格式化的next_step_prompt。然后調用父類的think。

  • 調用流程 (以think為例):

async think():
  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()  # 調用 ToolCallAgent 的 think()


7.Manus(通用Agent):

  • 繼承自:?ToolCallAgent
  • 特點:擁有更廣泛的工具集 (PythonExecute, WebSearch, BrowserUseTool, FileSaver, Terminate)。
  • _handle_special_tool: 重寫此方法,處理BrowserUseTool的清理工作。

那么好,我們總結一下:

  • BaseAgent提供了Agent的基本框架和執行循環。
  • ReActAgent引入了 "思考-行動" 模式。
  • ToolCallAgent增加了工具調用的能力。
  • PlanningAgent、SWEAgent和Manus是ToolCallAgent的具體實現,分別針對不同的任務類型。
  • 調用邏輯主要通過繼承和重寫think、act和step方法來實現。
  • PlanningAgent具有更復雜的內部狀態管理,用于跟蹤計劃的執行。


畫出來就是下圖這樣:

手把手帶你理解OpenManus-AI.x社區


總體調用的抽象感覺就是下圖這樣:

手把手帶你理解OpenManus-AI.x社區

好了今天這節課就解釋到這,大家可以結合我的解釋自己去run一下代碼,甚至自己按著這個邏輯來新寫一套multi-agents的框架也不是特別難的事。

本文轉載自??熵減AI??,作者:周博洋


收藏
回復
舉報
回復
相關推薦
国产探花在线观看视频| 国产精品久久久久免费| 欧美成人久久久免费播放| 在线看欧美视频| 亚洲美女屁股眼交3| 加勒比在线一区二区三区观看| 亚洲国产成人无码av在线| 日韩理论电影| 亚洲大胆人体av| 午夜视频你懂的| 中文国产字幕在线观看| 91欧美激情一区二区三区成人| 国产精品电影网| 国产这里有精品| 国内精品久久久久久99蜜桃| 精品免费日韩av| 色多多视频在线播放| 免费av不卡在线观看| 国产肉丝袜一区二区| 国产99在线播放| 人妻中文字幕一区二区三区| 国产一区欧美| 日韩在线观看免费全| 无码成人精品区在线观看| 成人免费黄色| 精品久久久久久久久久ntr影视| 美女视频黄久久| 久久精品久久久久久国产 免费| 白嫩情侣偷拍呻吟刺激| 亚洲aⅴ网站| 欧美日韩一区二区三区| 黄色片免费在线观看视频| bbbbbbbbbbb在线视频| 99久久久国产精品免费蜜臀| 91成人伦理在线电影| 亚洲中文字幕在线观看| 99精品福利视频| 欧美伦理91i| 亚洲欧美另类日本| 不卡中文字幕| 亚洲深夜福利视频| 成人网站免费观看| **爰片久久毛片| 日韩亚洲欧美在线| 天堂在线精品视频| 91精品亚洲一区在线观看| 欧美亚洲高清一区二区三区不卡| 久久视频这里有精品| 直接在线观看的三级网址| 国产精品毛片a∨一区二区三区| 久久久久久久久久久久久久一区| 成人无码一区二区三区| 国产激情一区二区三区四区| 成人啪啪免费看| 在线观看色网站| 免费久久99精品国产| 国产97色在线| 最近日韩免费视频| 日日嗨av一区二区三区四区| 国产成人久久久| 无码久久精品国产亚洲av影片| 三级在线观看一区二区| 青青青国产精品一区二区| 日韩在线视频免费播放| 亚洲女人av| 欧美最猛性xxxx| 黄色av网站免费| 日本欧美一区二区三区| 国产精品日韩av| 亚洲图片中文字幕| 韩国三级电影一区二区| 成人高清免费观看| 欧美成人午夜剧场免费观看| 538任你躁在线精品视频网站| 1024精品久久久久久久久| 久久影视免费观看| 精品无码久久久久久久久| 伊人精品在线| 热99精品里视频精品| 亚洲av无码乱码国产精品fc2| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品毛片a∨一区二区三区|国| 中文字幕av资源| 国产在线播放一区二区三区| 国产不卡一区二区在线观看 | 色屁屁草草影院ccyy.com| 精品欧美久久| 久久99亚洲精品| 国产视频91在线| 日韩精品91亚洲二区在线观看| 国产精品精品国产| 国产wwwxxx| 91丨九色丨尤物| 亚洲欧美国产精品桃花| 黄色影院在线看| 日韩欧美在线观看视频| 色一情一区二区三区| 97久久亚洲| 国产一区二区日韩| 欧美丰满艳妇bbwbbw| 亚洲综合激情| 91人成网站www| 日本大臀精品| 亚洲欧洲成人av每日更新| 国产成人在线小视频| jizz内谢中国亚洲jizz| 91精品国产色综合久久不卡蜜臀| 大尺度做爰床戏呻吟舒畅| 日韩欧美一区二区三区免费看| 欧美日韩国产二区| 在线视频免费观看一区| 99精品视频一区| 中文字幕色呦呦| 电影在线观看一区二区| 亚洲国产精品网站| 99成人在线观看| 三级欧美在线一区| 成人羞羞视频免费| 国产精品视频免费一区二区三区| 欧美三级午夜理伦| 国产一区二区视频在线播放| 玛丽玛丽电影原版免费观看1977| 菠萝菠萝蜜在线观看| 欧洲精品一区二区三区在线观看| 逼特逼视频在线观看| 日韩专区精品| 国产精品久久久久久久久久东京 | 日韩高清免费观看| 亚洲国产美女视频| 蜜臀av一级做a爰片久久| 国产综合欧美在线看| www红色一片_亚洲成a人片在线观看_| 在线视频一区二区三| 欧美深性狂猛ⅹxxx深喉| 欧美在线资源| 91久久精品一区| 91亚洲精选| 91官网在线免费观看| 国产精品九九视频| 亚洲乱码视频| 黄色99视频| gogo高清午夜人体在线| 日韩一区二区三| 日本中文在线视频| 久久精品99久久久| 一个色的综合| 亚洲一区二区三区久久久| yellow中文字幕久久| 伊人网综合在线| 国产精品第一页第二页第三页| 自拍偷拍 国产| jizzjizz欧美69巨大| 国产精品久久久久999| 可以在线观看的av| 欧美性猛交xxxx乱大交3| 三级电影在线看| 99国产精品视频免费观看一公开 | 国内成人精品一区| 日本xxxx人| 黑丝美女久久久| av网页在线观看| 首页综合国产亚洲丝袜| 日韩久久久久久久| 成人日韩视频| 欧美日韩国产成人在线| 日韩在线观看视频网站| 污污影院在线观看| 欧美精品亚洲一区二区在线播放| 99鲁鲁精品一区二区三区| 国产专区欧美精品| 国产精品videossex国产高清 | 极品日韩久久| 国产精品迅雷| 最近的2019中文字幕免费一页| 欧美另类高清videos的特点| 国产精品久久久久久久午夜片| 第一区免费在线观看| 欧美日韩 国产精品| 精品欧美日韩| 日韩欧美少妇| 久久视频这里只有精品| 亚洲精品国产av| 欧美视频13p| 日韩av毛片在线观看| 国产激情视频一区二区三区欧美| 国产在线播放观看| 日本一区二区在线看| 亚洲free性xxxx护士hd| 天堂网在线最新版www中文网| 在线观看视频99| 亚洲va天堂va欧美ⅴa在线| 欧美日韩亚洲精品一区二区三区| 人妻互换一区二区激情偷拍| 国产黄色精品网站| 亚洲一二三区av| 国产精品啊啊啊| 欧美一区观看| 日韩不卡在线视频| 国产成人综合亚洲| 国产精品—色呦呦| 国产亚洲人成a一在线v站| 国产成人精品亚洲精品色欲| 欧美日韩在线视频一区| 久久久久久久麻豆| 91麻豆免费在线观看| 一道本在线免费视频| 在线视频亚洲| 国产香蕉一区二区三区| 国产成人一区| 国产一区二区三区四区五区在线 | 欧美手机在线视频| 日本熟妇毛耸耸xxxxxx| 中文字幕在线不卡视频| 色欲av无码一区二区三区| 国产福利一区二区三区视频在线| 久久久精品三级| 国产精品久久777777毛茸茸 | 亚洲精品一区二区三区蜜桃下载| 69成人免费视频| 一区二区三区精品视频| 五月天精品在线| 91女神在线视频| 免费观看污网站| 久久99精品久久久久久久久久久久 | 亚洲精品中文字幕乱码无线| 美女精品网站| 国产精品久久久久7777| 99久久综合狠狠综合久久aⅴ| 欧美污视频久久久| 露出调教综合另类| 成人动漫在线观看视频| 999色成人| 国产一区视频在线播放| 亚洲天堂1区| 日本精品久久电影| 55av亚洲| 欧美极品欧美精品欧美视频 | 成人免费一区二区三区视频| 欧美bbbbb性bbbbb视频| 成人av免费在线| 无码人妻一区二区三区免费n鬼沢| 久久99精品网久久| 三年中文在线观看免费大全中国| 日韩二区三区四区| 黄色片在线免费| 免费观看成人鲁鲁鲁鲁鲁视频| 可以免费在线看黄的网站| 99综合视频| 男人天堂1024| 欧美一级久久| 午夜免费福利在线| 麻豆精品蜜桃视频网站| 国内外成人免费在线视频| 老色鬼精品视频在线观看播放| 日本熟妇人妻中出| 麻豆成人免费电影| 国产欧美精品一二三| 国产精品自在欧美一区| 中文字幕在线观看视频www| 国产精品自拍一区| 最新国产精品自拍| 成人国产精品免费| 97人妻天天摸天天爽天天| 久久久影视传媒| 免费一级特黄3大片视频| 国产精品免费久久| 午夜69成人做爰视频| 亚洲最大成人网4388xx| 久久久精品视频免费| 欧美日韩国产一中文字不卡| 好看的av在线| 欧美探花视频资源| 精品国产av一区二区| 国产精品一区二区三区av麻| 欧美亚州一区二区三区| 中文字幕21页在线看| 国产精品美女视频网站| 高清一区二区三区av| 俄罗斯精品一区二区三区| 极品束缚调教一区二区网站| 国产嫩草一区二区三区在线观看| 婷婷综合一区| 中日韩在线视频| 在线观看视频日韩| www.xxx亚洲| 国产精品亚洲а∨天堂免在线| 人妻体内射精一区二区三区| 久久久综合视频| 久久久久久久久久久久久女过产乱| 亚洲动漫第一页| 伊人网中文字幕| 亚洲国产精品久久| 美女羞羞视频在线观看| 国自在线精品视频| 2019中文亚洲字幕| 久久久亚洲综合网站| 日韩理论电影大全| 日本www在线视频| 久久精品久久综合| 变态另类丨国产精品| 韩国成人在线视频| 亚洲第一香蕉网| 亚洲精品视频免费观看| 在线观看污污网站| 日韩精品一区二区在线观看| 国产三级电影在线观看| 欧美激情性做爰免费视频| 美女色狠狠久久| 激情小说综合区| 综合亚洲视频| 国产一区二区在线免费播放| 不卡av在线网| 国产精品白嫩白嫩大学美女| 色94色欧美sute亚洲线路一久| 精品久久久无码中文字幕| 亚洲图片在线综合| av今日在线| 91免费观看| 99热国内精品| av五月天在线| 91麻豆蜜桃一区二区三区| 日韩av毛片在线观看| 色欧美日韩亚洲| 亚洲va天堂va欧美ⅴa在线| 色综久久综合桃花网| 成人影院av| 精品一区二区三区免费毛片| **女人18毛片一区二区| 色综合手机在线| 国产亚洲短视频| 在线永久看片免费的视频| 亚洲精品在线三区| 50度灰在线| 91青草视频久久| 天天影视天天精品| 日本肉体xxxx裸体xxx免费| 久久久久久黄色| 国产免费av一区| 亚洲精品综合精品自拍| 国产免费拔擦拔擦8x高清在线人 | 国产一卡二卡三卡| 99久久精品99国产精品| 欧美人妻精品一区二区免费看| 欧美精品久久一区| 麻豆视频在线观看免费网站| 国产精品入口福利| 欧洲激情视频| 奇米影音第四色| 国产精品伦理在线| 91肉色超薄丝袜脚交一区二区| 亚洲视频欧洲视频| 亚洲第一影院| 色婷婷精品国产一区二区三区| 久久国产日韩| 特级西西www444人体聚色| 欧洲一区在线电影| 日本暖暖在线视频| 91欧美精品成人综合在线观看| 一本一道久久综合狠狠老| 奇米777在线| 亚洲一区二区三区免费视频| 黄片毛片在线看| 51ⅴ精品国产91久久久久久| 亚洲ab电影| 超碰影院在线观看| 中文字幕在线一区免费| 国产成人精品一区二三区四区五区| 欧美成人免费全部| 韩国女主播一区二区三区| 国产精品专区在线| 久久精品视频在线看| 一级aaaa毛片| 欧美精品在线播放| 岛国精品一区| 成人性视频欧美一区二区三区| 亚洲国产精品t66y| 国产精品久久久久久久免费| 欧美猛交免费看| 台湾亚洲精品一区二区tv| 欧美一级裸体视频| 亚洲另类中文字| 五月天婷婷激情网| 国产精品视频免费在线| 午夜精品婷婷| 泷泽萝拉在线播放| 欧美美女一区二区| 成年人国产在线观看| 欧美少妇一区| 国产乱码精品一品二品| 国产精品500部| 最近2019好看的中文字幕免费| 欧美电影院免费观看| 超碰97人人射妻| 国产精品久久福利| 丝袜视频国产在线播放| 国产日韩欧美在线观看| 99伊人成综合| 欧美激情精品久久久久久免费| 亚洲第一区中文99精品| 国产毛片精品久久|