前言:最近 Manus 火得一塌糊涂啊,OpenManus 也一夜之間爆火,那么作為程序員應該來嘗嘗鮮
1、前期準備
FastGithub
:如果有科學上網且能正常訪問 github 則不需要下載此軟件,此軟件是提供國內直接訪問 githubGit
:通過 git 遠程拉去 github 代碼,當然也可以不用安裝Anaconda
或者Miniconda
:python 依賴管理工具科學上網
:如果想去谷歌搜索,則需要支持訪問 google.com,如果不需要,則配置訪問路徑為 百度,請往下看
2、進入 github 下載源碼
點我進入OpenManus 倉庫
閱讀官方提供的文檔:OpenManus 中文文檔
2.1、下載源碼
下載源碼分兩種方式:
- 第一種是安裝了 Git 的,直接通過命令
git clone https://github.com/mannaandpoem/OpenManus.git
- 第二種是直接下載 zip 包
下載 ZIP 包直接點擊
2.2、準備工作
- 創建 python 虛擬環境
# 創建虛擬環境
conda create -p D:\dev\py_repo\open_manus python=3.12
# 激活這個環境
conda activate open_manus
- 支持 function calling 的大模型 API key
這里推薦使用 阿里云百煉平臺,百煉開通后180天內送一定額度的 token,基本上是屬于免費級別的
獲得 API-KEY
- 獲取模型
每個模型都有相應的說明,注意看每個模型的注意事項描述,如果說明了不支持 Function calling 的模型,是無法使用到 OpenManus 中的
比如這個圖片中,deepseek-r1 模型就不支持 Function calling
親測有效的是 qwen-plus
模型,qwq-32b
也是支持的,不過我沒親測
3、使用 PyCharm 打開源碼,并配置虛擬環境
這一步主要是為了閱讀源碼和啟動源碼,如果不需要閱讀源碼的可以直接跳過本步驟
-
配置解釋器
啟動 PyCharm 打開源碼,并配置剛剛設置的 open_manus conda 環境,我這里已經配置過了,沒有配置過第一步顯示的是 Add interpreter
-
選擇虛擬環境
選擇好以后,點擊 OK ,等待環境的初始化和加載,大概也就 10 來分鐘左右
4、配置 OpenManus 環境
- 如果是 PyCharm 啟動,則直接手動復制
/config/config.example.toml
將復制出來的文件名改為config.toml
即可
# Global LLM configuration
[llm]
model = "qwen-plus"
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
api_key = "sk-.................................."
max_tokens = 4096
temperature = 0.0
model :一定要是支持 function calling 的模型
base_url:百煉云平臺的接口地址,只要是百煉的模型,接口地址幾乎是相同的,不用修改
api_key:這個就是之前注冊的 api-key,直接復制接口
其他的都不用修改
- 如果是通過 CMD 啟動的,則使用命令復制文件,然后將正確的內容填寫進去即可
cp config/config.example.toml config/config.toml
5、依賴拉取
5.1、激活環境
PyCharm 打開 terminal 窗口,激活 conda 環境,注意這里一定要是在項目的根目錄下才可以
conda activate open_manus
5.2、安裝依賴
pip install -r .\requirements.txt
完整命令截圖如下:
6、各種踩坑
6.1、不支持 function calling
不支持 tool call,選擇支持 function calling 的模型
<400> InternalError.Algo.InvalidParameter: The tool call is not supported.
6.2、模型名字錯誤
檢查模型的名字,是否拼寫錯誤
'The model `xxxxxx` does not exist or you do not have access to it.'
6.3、google_search 無法調用
?? Tool 'google_search' encountered a problem: HTTPSConnectionPool(host='www.google.com', port=443): Max retries exceeded with url: /search?q=Google+homepage&num=12&hl=en&start=0&safe=active (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x0000020960CF1520>, 'Connection to www.google.com timed out. (connect timeout=5)'))
- 方式1:科學上網全局代理,或者切換穩定的谷歌代理站點
- 方式2:添加配置,有大佬提交了 pr,支持百度搜索
[llm]
model = "qwen-plus"
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
api_key = "sk-.................................."
max_tokens = 4096
temperature = 0.0# 添加此項代碼,走百度搜索
search_agent_config = "baidu"
6.4、循環打印日志 playwright install
2025-03-10 22:07:44.834 | INFO | app.agent.base:run:137 - Executing step 1/30
2025-03-10 22:07:48.030 | INFO | app.agent.toolcall:think:53 - ? Manus's thoughts:
2025-03-10 22:07:48.030 | INFO | app.agent.toolcall:think:54 - 🛠? Manus selected 1 tools to use
2025-03-10 22:07:48.031 | INFO | app.agent.toolcall:think:58 - 🧰 Tools being prepared: ['browser_use']
2025-03-10 22:07:48.031 | INFO | app.agent.toolcall:execute_tool:140 - 🔧 Activating tool: 'browser_use'...
ERROR [browser] Failed to initialize Playwright browser: BrowserType.launch: Executable doesn't exist at C:\Users\admin\AppData\Local\ms-playwright\chromium-1148\chrome-win\chrome.exe
╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated. ║
║ Please run the following command to download new browsers: ║
║ ║
║ playwright install ║
║ ║
║ <3 Playwright Team ║
╚════════════════════════════════════════════════════════════╝
2025-03-10 22:07:48.464 | INFO | app.agent.toolcall:act:113 - 🎯 Tool 'browser_use' completed its mission! Result: Observed output of cmd `browser_use` executed:
Error: Browser action 'navigate' failed: BrowserType.launch: Executable doesn't exist at C:\Users\admin\AppData\Local\ms-playwright\chromium-1148\chrome-win\chrome.exe
╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated. ║
║ Please run the following command to download new browsers: ║
║ ║
║ playwright install ║
║ ║
║ <3 Playwright Team ║
╚════════════════════════════════════════════════════════════╝
2025-03-10 22:07:48.476 | INFO | app.agent.base:run:137 - Executing step 2/30
首先這個問題是缺少了瀏覽器,那么需要先下載瀏覽器組件
python -m playwright install chromiumpip install playwright
安裝不上,那么就暴力安裝
- 下載 chromium
下載地址:https://playwright-verizon.azureedge.net/builds/chromium/1148/chromium-win64.zip
- 解壓后放入指定目錄
根據錯誤日志可以看到,程序去這個路徑下面尋找
Browser action 'navigate' failed: BrowserType.launch: Executable doesn't exist at C:\Users\admin\AppData\Local\ms-playwright\chromium-1148\chrome-win\chrome.exe
,那么就直接把瀏覽器復制到這個路徑下即可
6.5、其他踩坑
如果你遇到了其他坑,就去這里面搜索問題:
https://github.com/mannaandpoem/OpenManus/issues
總能找到問題的解決辦法
7、補充
2025-03-11補充
deepseek-r1 模型均不可用
deepseek-r1 不管是阿里云百煉平臺,還是 deepseek 官網,都是不支持 Function calling 的,親測結果
deepseek官網唯一支持 Function calling 的模型 deepseek-chat 在官方的描述如下:
deepseek-chat 模型親測有效:
提示詞:搜索整理昨天的所有AI相關的最新咨詢,整理成markdown文件,文件名為:news_ai
經過漫長的等待,最終得到了如下的結果:超時了
修改 chrome.exe 位置
修改位置需要修改源代碼,有三處地方需要修改
- /app/config.py 文件
第四行代碼和第 26 行代碼修改
from typing import Dict, Optional # ,Optional 為添加項class LLMSettings(BaseModel):model: str = Field(..., description="Model name")base_url: str = Field(..., description="API base URL")api_key: str = Field(..., description="API key")max_tokens: int = Field(4096, description="Maximum number of tokens per request")temperature: float = Field(1.0, description="Sampling temperature")api_type: str = Field(..., description="AzureOpenai or Openai")api_version: str = Field(..., description="Azure Openai version if AzureOpenai")chrome_instance_path: Optional[str] = Field(None, description="Local Chrome installation path") # 為添加項
- browser_use_tool.py 修改
將 _ensure_browser_initialized 函數替換為如下代碼
async def _ensure_browser_initialized(self) -> BrowserContext:"""Ensure browser and context are initialized."""if self.browser is None:# 舍棄本句代碼# self.browser = BrowserUseBrowser(BrowserConfig(headless=False))# 新增如下代碼llm_config = config.llm['default']chrome_instance_path = llm_config.chrome_instance_pathprint(chrome_instance_path)self.browser = BrowserUseBrowser(BrowserConfig(headless=False, chrome_instance_path=chrome_instance_path))if self.context is None:self.context = await self.browser.new_context()self.dom_service = DomService(await self.context.get_current_page())return self.context
- config.toml 新增配置項
[llm]
model = "qwen-plus"
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
api_key = "sk-xxxxxx"
chrome_instance_path = "D:\\software\\chrome-win\\chrome.exe" # 此項為新增配置項
max_tokens = 4096
temperature = 0.0
親測有效