手撕“開源版Manus”

阿里妹導讀
Manus作為一款引發熱議的AI智慧體產品吸引了大量的關注。OpenManus作為一個開源專案,嘗試復現了Manus的部分功能,可以作為一種“平替”來體驗類似的技術。
週末被Manus刷屏,看了拿到邀請碼的老哥們發到網上的實測影片,確實挺炫酷,但Monica採用的飢餓營銷策略讓manus產品的邀請碼被炒到了2萬一個,家境貧寒之下找了Github上號稱復現manus的專案OpenManus當做它的平替參照,做個剖析來過個癮。
結論
體驗
  • 說是Manus的開源版,但根據已知的資訊,Manus是多agent系統,OpenManus是利用已有能力快速搭建的單agent系統。
  • 一般Agent所有的三個核心能力,包括規劃、執行、記憶等OpenManus都做了實現,但在tools上其沒有用到現在很流行的MCP模組,拓展它的工具箱需要繼承內部的BaseTool基類,並手工實現execute方法,所以有一定成本。
  • 簡單的任務,比如上網搜尋特定內容並生成總結報告,OpenManus都可以正常勝任,但準確率和穩定性並不高,估計是我為其配置的免費版LLM(大語言模型)可能對它的表現力有直接的影響。
思考
  • 基於工程整合所帶來的產品創新,也能創造等量的使用者價值。以OpenManus而言,我們舉個形象點的例子,系統充當的是樂隊指揮者的角色,當消費者(使用者)提出請求之後,它開動自己的大腦(LLM)進行思考,根據使用者的需求生成樂譜,並選擇合適的樂手(工具箱),協調他們按照樂譜進行演奏,當然這個過程裡面少不了預定義的COT、以及在有限組合空間中的列舉試錯。
  • Manus這樣的智慧體確實能提效,但其不具備一次把事情做對的能力和黑盒模式下的干預最佳化能力,是企業落地的最大難點。我在使用OpenManus時發現同樣的命令下,其給的結果非常不穩定,有失敗也有答非所問,更重要的是因為過程完全對使用者遮蔽,無法透過干預系統流程修正過程。正常情況下,一定是需要融合使用者反饋和專有知識來對齊過程和結果,不斷最佳化其龐大的提示詞和校準預定義的工具庫。
  • 專業小模型仍然非常重要,小模型叢集的能力決定了agent的上限。一般而言,在垂域因為資料不出域且知識不開放所以很難從外部獲取到高質量解決域內問題的能力,所以結合agent的實現原理,其解決問題的邊界取決於其工具庫中的儲備,而我們構建的小模型這樣的專業工具,其能力邊界直接定義了agent的能力天花板。
  • 像Manus這樣基於多智慧體架構的方案可能在特定垂直領域更直接有效也更容易落地,相比SOP的agent架構,增加了自動規劃的特性可以勝任非標任務。有研究表明,多智慧體系統也存在比較嚴重的瓶頸(比如Manus),其78%的失敗是由於多智慧體互動問題引起的,僅22%源自單智慧體缺陷,常見的錯誤比如違反角色定義、破壞任務規範、答非所問、plan與act脫節、錯誤終止或者驗證缺失。
  • 所以長遠來看,端到端模型的上限一定是更高的,如更容易由Scaling Law或RL所帶來的“湧現能力”或“Aha Moment”現象等,但是需要我們探索找到最佳的訓練方法和使用方式。
  • 短期。我在OpenManus配置的是qwen-max(支援流式呼叫),由於其可執行的任務組合比較簡單(PythonExecute,GoogleSearch,BrowserUseTool,FileSaver,Terminate再加上一個PlanningTool)所以磕磕絆絆也可以用,而Manus據說有27種工具,為了保證執行精度,推測其用了自研的推理大模型生成planning。
  • 長期。如果agent的每個環節都獨立呼叫一次LLM,甚至是不同環節呼叫不同的模型,那麼大模型固有的缺陷就會被層層放大,所以未來一定是需要訓練出我們自己在agent上的端到端大模型(想象一下我們是怎麼治理多級漏斗的),目前OpenAI在就為自己的DeepResearch定製了一個由o3訓練的端到端模型。
對比項
短期方案
遠期方案
設計目標
快速具備面向複雜任務的可靠交付能力
開放式探索能力和領域創造力,能帶來新認知新方法
架構
追求專業能力組合的多智慧體架構
1、使用分離的專門模型處理不同任務
2、每個子任務有獨立的執行模組
3、透過明確的協調層管理各智慧體間的通訊
追求整體智慧湧現的端到端模型架構
1、單一模型負責理解所有任務需求
2、透過生成程式碼或指令與外部工具互動
3、任務管理和執行邏輯都內置於同一模型中
優勢
ROI最高:在垂域透過"LLM+小模型叢集+領域知識庫"進行工程化封裝,即可快速具備可用性
更強的專業性:針對特定任務的專業模型可以達到更高精度
更敏捷的迭代:可以單獨最佳化或替換某個智慧體而不影響整體
可驗證的流程:各智慧體的職責劃分明確,便於診斷問題
更強的拓展性:可以更容易地新增新功能或適應新領域
更強的一致性:全過程由同一模型處理,思考、執行、反饋、決策有更強的整體性和連貫性
更極致的效率:沒有多Agent之間的通訊、啟停開銷
更流暢的體驗:對使用者請求的響應更快,更高效
突破人類經驗侷限的創造力:端到端模型可以湧現“反直覺但事後可解釋”的決策模式,另外整體思考也會帶來意想不到的解決方案
劣勢
更高的複雜度:多智慧體協作需要複雜的協調機制
更高的維護成本:多元件系統帶來更高的維護和除錯成本
更高的線上時延:多智慧體間的通訊可能引入額外延遲
整體性思考欠缺:分治的思路可能導致缺乏全域性觀和創造性
更難更新:整體模型更新週期長,針對某一單功能進行最佳化的成本更高
更高資源:需要更大的模型容量來包含所有功能,導致難以訓練,需要探索新方法
核心流程
使用者請求 → 識別任務需求→選擇合適的工具(GoogleSearch、PythonExecute、etc.)→呼叫外部獨立工具並執行 → 蒐集工具結果並整合→ 決定下一步行動
使用者請求 → 將所有上下文給到端到端模型 → 模型生成綜合性的響應(推理、行動,etc)→ 內部執行所有功能 → 更新內部狀態→ 將結果反饋到下一輪
專案獲取

專案地址,供參考

https://github.com/mannaandpoem/OpenManus
以下在本機的終端(terminal)中執行
準備Python環境
conda create -n open_manus python=3.12conda activate open_manus
獲取遠端專案資源
git clone https://github.com/mannaandpoem/OpenManus.gitcd OpenManus
安裝依賴包
pip install -r requirements.txt
準備一個配置大語言模型介面的檔案
cp config/config.example.toml config/config.toml
修改檔案中的三個引數為你的API引數(model、base_url、api_key)
# Global LLM configuration[llm]model = "gpt-4o"base_url = "https://api.openai.com/v1"api_key = "sk-..."# Replace with your actual API keymax_tokens = 4096temperature = 0.0# Optional configuration for specific LLM models[llm.vision]model = "gpt-4o"base_url = "https://api.openai.com/v1"api_key = "sk-..."# Replace with your actual API key
專案實測
指令
訪問知乎網站,瀏覽跟manus關鍵詞相關的帖子,提煉對其的分析與評價,將結果做成小紅書風格的網頁檔案以下是小紅書風格1、吸引人的標題2、高質量的視覺3、適當的標籤和關鍵詞4、個性化
執行過程
執行過程非常慢,需要耐心等待,並且有一定的失敗機率
交付結果
看起來確實有模有樣的,粗看起來無論排版還是內容,讓我自己寫可能也不過如此,但這個表現是LLM直接賦予的,就像我上面說的,OpenManus其實更多是工程化的定義。

系統分析
流程拆解

概述

當用戶輸入指令(比如給它指令:"分析知乎熱搜")後OpenManusOpenManus執行流程如下
1.啟動系統
使用者啟動main.py並輸入指令
系統建立一個名為OpenManus的"智慧助手"例項,接受並處理使用者指令
2.分析和規劃
大語言模型先分析使用者的指令,理解使用者想要完成什麼任務
再思考解決方案,制定一個詳細的執行計劃
最後決定每一步需要使用什麼工具來完成任務
3.執行與反饋迴圈
選擇LLM推薦的工具(比如用BrowserUseTool工具訪問知乎)
執行工具操作並返回結果(比如網頁內容)
LLM分析上一步的結果
LLM評估後決定下一步行動是什麼(比如是重新調整planning還是執行預定的下一步)
4.處理與建立
如果獲取到資料,LLM會編寫python程式碼處理這些資料
系統執行這些程式碼(這裡用的是PythonExecute工具)
LLM繼續指導如何生成報告和視覺化圖表
5.儲存與完成
有了結果之後視需要選擇儲存檔案(這理由對應的檔案操作工具FileSaver)
LLM確認任務完成,系統返回執行摘要,繼續等待使用者的下一個指令

LLM的關鍵作用

這裡要特地說一下LLM在OpenManus中的作用,LLM 既是系統的認知核心,也是執行控制器,在整個過程中不斷規劃、執行、分析和適應。這種迭代方法使系統能夠處理需要多個步驟、工具互動和基於中間結果的動態調整的複雜任務。LLM就像是OpenManus的"大腦",在整個過程中起到的作用非常關鍵
1.指揮中心
LLM接收使用者指令,理解任務需求,然後規劃整個執行流程。它決定需要採取哪些步驟,以什麼順序執行,以及使用哪些工具。
2.工具排程
在執行任務的過程中,LLM能夠從工具箱中預設的幾種可選工具(瀏覽器、Python執行器、檔案儲存器等)裡面挑選最合適的工具來完成當前任務,同時還會生成執行時工具的配置引數。
{"tool_calls": [    {"id""call_9c3e5d7f8b","type""function","function": {"name""browser_use","arguments": {"action""execute_js","script""function extractHotList() {\n  const hotItems = document.querySelectorAll('.HotList-item');\n  const result = [];\n\n  hotItems.forEach((item, index) => {\n    const titleElement = item.querySelector('.HotList-itemTitle');\n    const metricElement = item.querySelector('.HotList-itemMetrics');\n    const topicElement = item.querySelector('.HotList-itemCategory');\n\n    const title = titleElement ? titleElement.textContent.trim() : 'Unknown';\n    const metric = metricElement ? metricElement.textContent.trim() : 'Unknown';\n    const topic = topicElement ? topicElement.textContent.trim() : 'Unknown';\n\n    result.push({\n      index: index + 1,\n      title: title,\n      hot_metric: metric,\n      topic: topic\n    });\n  });\n\n  return JSON.stringify(result, null, 2);\n}\n\nextractHotList();"        }      }    }  ],"content""現在我們已經成功訪問了知乎熱榜頁面,下一步是提取熱榜資料。知乎熱榜資料通常包含在特定的HTML元素中,我需要使用JavaScript來提取這些資訊。我將使用browser_use工具的execute_js功能來執行JavaScript程式碼,提取熱榜專案的標題、熱度和分類等資訊。"}
3.程式碼生成
當需要處理資料或建立視覺化圖表時,LLM會根據當前情況編寫合適的Python程式碼。比如它可以根據當前的任務生成清洗資料、分析資訊、生成圖表和報告的python指令碼(當然這個過程中可能需要安裝相關的依賴包,實測有大部分安裝包都需要在給出提示後手工安裝)。
{"tool_calls": [    {"id""call_6b8d9e2c5a","type""function","function": {"name""python_execute","arguments": {"code""import json\nimport re\n\n# 假設這是從上一步獲取的熱榜資料\nraw_data = '''\n[{\"index\":1,\"title\":\"國務院辦公廳發文促消費政策再加力\",\"hot_metric\":\"1425萬熱度\",\"topic\":\"財經\"},\n{\"index\":2,\"title\":\"今日春分\",\"hot_metric\":\"1001萬熱度\",\"topic\":\"自然\"}]\n'''\n\n# 解析JSON資料\ntry:\n    hot_list = json.loads(raw_data)\n    print(f\"成功載入{len(hot_list)}條熱榜資料\")\n\n    # 處理熱度數值\n    for item in hot_list:\n        # 提取數字部分\n        if 'hot_metric' in item:\n            match = re.search(r'(\\d+(\\.\\d+)?)', item['hot_metric'])\n            if match:\n                hot_value = float(match.group(1))\n                # 根據單位調整值\n                if '萬' in item['hot_metric']:\n                    hot_value *= 10000\n                item['hot_value'] = hot_value\n            else:\n                item['hot_value'] = 0\n\n    # 統計主題分佈\n    topics = {}\n    for item in hot_list:\n        topic = item.get('topic', '未知')\n        topics[topic] = topics.get(topic, 0) + 1\n\n    print(\"\\n熱榜主題分佈:\")\n    for topic, count in sorted(topics.items(), key=lambda x: x[1], reverse=True):\n        print(f\"{topic}: {count}條\")\n\n    # 按熱度排序\n    sorted_list = sorted(hot_list, key=lambda x: x.get('hot_value', 0), reverse=True)\n    print(\"\\n按熱度排序的前5條熱榜:\")\n    for i, item in enumerate(sorted_list[:5]):\n        print(f\"{i+1}. {item['title']} ({item['hot_metric']})\")\n\n    # 儲存處理後的資料供後續使用\n    processed_data = {\n        'raw_list': hot_list,\n        'sorted_list': sorted_list,\n        'topic_stats': topics\n    }\n    print(\"\\n資料處理完成,已準備好用於後續分析\")\n\nexcept json.JSONDecodeError as e:\n    print(f\"JSON解析錯誤: {e}\")\nexcept Exception as e:\n    print(f\"處理資料時出錯: {e}\")"        }      }    }  ],"content""現在我們已經成功提取了知乎熱榜資料,下一步是清洗和處理這些資料。我需要編寫Python程式碼來處理JSON資料,提取熱度數值,標準化主題分類,並準備用於後續分析的資料結構。我將使用python_execute工具來執行資料處理程式碼。"}
4.過程管理
當遇到困難(如網頁結構複雜、資料提取失敗)時,LLM能夠分析失敗原因,調整策略,嘗試新方法。它具有"反思"能力,可以從錯誤中學習並改進方案。
5.節點決策
在每一步執行後,LLM評估結果並決定下一步行動。它可以根據反饋調整計劃,決定是繼續執行、修改策略還是完成任務。
6.結果評估
LLM負責判斷任務是否完成、結果是否符合要求。它可以生成總結報告,並決定何時結束任務執行。

流程圖

這裡主要關注=LLM的作用,其在專案中扮演的角色非常核心,無論是生成plan、結合工具執行act,還是根據執行結果判斷是否要調整plan,這些都是由LLM承載。
plan環節的prompt
您是由OpenManus驅動的全能型AI助手,旨在解決使用者提出的任何任務需求。您擁有多種工具呼叫能力,可高效完成程式設計開發、資訊檢索、檔案處理、網頁瀏覽等各類複雜需求。您可以透過以下工具與計算機互動: Python執行工具(PythonExecute) :執行Python程式碼以執行系統互動、資料處理、自動化任務等操作。 檔案儲存工具(FileSaver) :將重要內容和資訊檔案儲存到本地,支援.txt.py.html等格式。 瀏覽器操控工具(BrowserUseTool) :開啟、瀏覽和使用網頁瀏覽器。如果需要開啟本地HTML檔案,必須提供檔案的絕對路徑。 網路資訊檢索工具(GoogleSearch) :執行網路資訊抓取。 操作策略 : 根據使用者需求,主動選擇最合適的工具或工具組合。 對於複雜任務,可以將問題拆解,逐步使用不同工具解決。 在使用每個工具後,清晰解釋執行結果並建議下一步操作。現在,使用者給你的任務是:最近manus很活,請你搜集相關的資訊整理成一份有深度的報告,整理成圖文並茂的html檔案格式

系統時序圖

用例圖
回到開頭的例子,我用這張圖來演示當我們敲入命令“蒐集知乎上關於manus的帖子……”之後,系統內部發生了,模組之間的呼叫順序是什麼、同時從圖中也可以直觀感受到,LLM在agent中發揮的決定性作用。

AI 時代的分散式多模態資料處理實踐
在AI多模態資料處理中,企業面臨海量文字、影像及音訊資料的高效處理需求,本地受限於單機效能,難以滿足大規模分散式計算要求。本方案介紹了基於分散式計算框架 MaxFrame,依託 MaxCompute 的海量計算資源,對多模態資料進行分散式處理、模型離線推理。
點選閱讀原文檢視詳情。

相關文章