來自上海人工智慧實驗室。
有 AI 在的科技圈,似乎沒有中場休息。除了大模型釋出不斷,各家科技大廠也在尋找著第一個「殺手級」AI 應用的落腳之地。
OpenAI 首先瞄準的是谷歌 1750 億美元的搜尋業務市場。7 月 25 日,OpenAI 帶著 AI 搜尋引擎——SearchGPT 高調入場。在演示 demo 中,搜尋引擎的使用體驗不再像以往一樣,需要我們逐個點開網頁連結,判斷資訊有沒有用。SearchGPT 像端上了一桌精美的套餐,所有答案都幫你總結好了。
在演示 demo 中,SearchGPT 分析了在應季最適合種植哪種品種的番茄。
不過,鑑於年初發布的 Sora 到目前都還未正式開放,估計很多人排上 SearchGPT 的體驗名額也遙遙無期。
然而,有一款國產的開源平替,在和能聯網的 ChatGPT 和專攻 AI 搜尋引擎的 Perplexity.ai 的 PK 中,它的回答在深度、廣度和準確度方面都都秒了這兩款明星產品。
它甚至可以在不到 3 分鐘內收集並整合 300 多頁相關資訊。這換成人類專家,需要大約 3 小時才能做完。
這款「國貨」就是多智慧體框架 MindSearch(思・索),由來自中科大和上海人工智慧實驗室的研究團隊聯合研發。正如其名,MindSearch 是一個會「思索」的系統,面對你輸入的問題,它將先呼叫負責充分「思」考問題的智慧體,再啟用全面搜「索」的智慧體,這些智慧體分工合作,理解你的需求,併為你呈上從網際網路的五湖四海蒐羅來的新鮮資訊。
論文連結:https://arxiv.org/abs/2407.20183
專案主頁:https://mindsearch.netlify.app/
MindSearch 演示 demo
那麼,MindSearch 是憑什麼打敗 ChatGPT 和 Perplexity.ai 的呢?和別的 AI 搜尋引擎相比,MindSearch 有什麼獨到之處嗎?
答案還得從它的名字說起。MindSearch 的核心競爭力在於採用了多智慧體框架模擬人的思維過程。
如果向 Perplexity.ai 提問「王者榮耀當前賽季哪個射手最強?」它會直接搜尋這個問題,並總結網上已有的回覆。把這個問題交給 MindSearch,它會把這個問題拆解成一個邏輯鏈:「當前賽季是哪個賽季?」,「從哪些指標可以衡量王者榮耀的射手的強度?」,再彙總所能查詢到的答案。
技術實現
WebPlanner:基於圖結構進行規劃
僅依靠向大型語言模型輸入提示詞的方式並不能勝任智慧搜尋引擎。首先,LLM 不能充分理解複雜問題中的拓撲關係,比如前一段掛在熱搜上的大模型無法理解 9.9 和 9.11 誰大的問題,就是這個問題的生動註腳。字與字之間的關係,LLM 都很難在簡單對話中理解,那麼「這個季節種哪個品種的番茄最合適?」這種需要深入思考,分解成多個角度來回答的問題,對於 LLM 就更難了。換句話說,LLM 很難將使用者的意圖逐步轉化為搜尋任務,並提供準確的響應,因此它總是提供一些模版式的知識和套話。
基於此,研究團隊設計了高階規劃器 WebPlanner,它透過構建有向無環圖(DAG)來捕捉從提問到解答之間的最優執行路徑。對於使用者提出的每個問題 Q,WebPlanner 將其解決方案的軌跡表示為 G (Q) = 〈V, E〉。在這個圖中,V 代表節點的集合,每個節點 v 代表一個獨立的網頁搜尋任務,包括一個輔助的起始節點(代表初始問題)和一個結束節點(代表最終答案)。E 代表有向邊,指示節點之間的邏輯和推理關係。
研究團隊進一步利用 LLM 優越的程式碼能力,引導模型編寫程式碼與 DAG 圖互動。為了實現這一點,研究團隊預定義了原子程式碼函式,讓模型可以在圖中新增節點或邊。在解答使用者問題的過程中,LLM 先閱讀整個對話,還有它在網上搜尋到的資訊。閱讀完這些資訊後,LLM 會根據這些資訊產生一些思考和新的程式碼,這些程式碼將透過 Python 直譯器新增在用於推理的圖結構中。
一旦有新節點加入圖中,WebPlanner 將啟動 WebSearcher 來執行搜尋任務,並整理搜尋到的資訊。由於新節點只依賴於之前步驟中生成的節點,所以這些節點可以並行處理,大大提高了資訊收集的速度。當所有的資訊收集完畢,WebPlanner 將新增結束節點,輸出最終答案。
WebSearcher:分層檢索網頁
由於網際網路上的資訊實在太多,就算是 LLM 也不能一下子處理完所有的頁面。針對這個問題,研究團隊選擇了先廣泛搜尋再精確選擇的策略,設計了一個 RAG 智慧體 ——WebSearcher。
首先,LLM 將根據 WebPlanner 分配的問題,生成幾個類似的搜尋問題,擴大搜尋的範圍。接下來,系統將呼叫不同搜尋引擎的 API 查詢問題,例如分別在 Google、Bing 和 DuckDuckGo 查一下,得到網頁的連結、標題和摘要等關鍵資訊。接著,LLM 將從這些搜尋結果中選出最重要的網頁來仔細閱讀,彙總得出最終答案。
MindSearch 中,LLM 如何管理上下文
作為一個多智慧體框架,MindSearch 為如何管理長上下文提供了全新嘗試。當需要快速閱讀大量網頁時,由於最終答案只依賴 WebSearcher 的搜尋結果,WebPlanner 將專注於分析使用者提出的問題,不會被過長的網頁資訊分心。
這種明確的分工也大大減少了上下文計算量。如何在多個智慧體之間高效共享資訊和上下文並非易事,研究團隊在實證中發現,如果只依靠 WebPlanner 的分析,有可能會在資訊收集階段由於 WebSearcher 內部的區域性感知場丟失有用的資訊。為了解決這個問題,他們利用有向圖邊構建的拓撲關係來簡化上下文如何在不同智慧體間傳遞。
具體來說,在 WebSearcher 執行搜尋任務時,它的父節點以及根節點的回答將作為字首新增在其回答中。因此,每個 WebSearcher 可以有效地專注於其子任務,同時不會丟失之前的相關上下文或者忘記最終的查詢目標。
本地部署
7 月初,上海人工智慧實驗室已經開源了搭載 MindSearch 架構的 InternLM2.5-7B-Chat 模型。
除了直接點選連結,跳轉到體驗 Demo 試玩。研究團隊還公開了 MindSearch 的完整前後端實現,基於智慧體框架 Lagent,感興趣的朋友可以在本地部署模型。
線上 Demo:https://mindsearch.openxlab.org.cn/
開原始碼:https://github.com/InternLM/mindsearch
在 GitHub 下載 MindSearch 倉庫後,輸入如下命令就可以打造屬於自己的 MindSearch 了:
# 啟動服務
python -m mindsearch.app --lang en --model_format internlm_server
## 一鍵啟動多種前端
# Install Node.js and npm
# for Ubuntu
sudo apt install nodejs npm
# for windows
# download from https://nodejs.org/zh-cn/download/prebuilt-installer
# Install dependencies
cd frontend/React
npm install
npm start