對於向深入學習上下文工程(Context Engineering)的同學,這又是一篇必看的文章。 這篇文章講的是如何解決MCP 工具太多的問題,但凡你做過Agent 開發,用了大量MCP 工具,就會知道MCP 工具多了後最大的問題就是上下文佔用太多,不僅導致成本高,還會影響推理和生成品質。 另外一個問題就是MCP 工具回傳的中間結果也會擠佔大量的上下文空間。 看這篇文章的時候忍不住誇了一下Manus,他們確實在上下文工程方面探索的很深入了,裡面的工程技巧和他們以前分享過的很類似(我一會把之前分享過的Manus 相關的文章在評論也發一下)。 Anthropic 的方案也很簡單直接,就是把「程式碼」也當作工具的一種,然後從程式碼中去呼叫MCP。 這樣做有很多好處: 1. 解決了系統提示詞中工具定義太多的問題 不需要在系統提示詞中載入所有MCP 工具,只需要定義一個「代碼」工具。 那需要工具了怎麼辦呢? 這些程式碼都保存在統一的目錄下,去目錄檢索下就能找到合適的工具了,例如這是文中的一個目錄範例: servers ├── google-drive │ ├── getDocument.ts │ ├── ... (other tools) │ └── index.ts ├── salesforce │ ├── updateRecord.ts │ ├── ... (other tools) │ └── index.ts └── ... (other servers) 找不到現成的工具怎麼辦? 直接現寫一個!寫完了還可以保存起來下次繼續用。 2. 解決了MCP 工具回傳結果太長的問題 比如說我們要用MPC 工具獲取1 萬行數據後篩選轉換出合格的數據,就可以先從代碼中調用MCP 工具獲取這1 萬行數據,然後從代碼中去篩選過濾,最後只返回5 條數據,這樣上下文中就只需要保留那5 條過濾的數據,而不是像以前一樣有1 萬條數據在裡面。 3. 解決了資料隱私問題 如果你直接使用MCP 工具,工具回傳的資料都要載入到上下文每次上傳給LLM,用程式碼就可以對敏感資料先二次處理再加到上下文 4. 中間結果持久化與技能沉澱 程式碼可以把一些中間結果寫入檔案儲存到硬碟,一方面可以不佔用上下文空間,另一方面也可以隨時從硬碟避免重複呼叫MCP。 還有雖然很多程式碼是臨時產生的,但是這些臨時產生的程式碼可以保存下來,沉澱為「技能」(Skill),加上SKILL .MD 檔案就和Claude Code 的技能一樣可以被重複使用了。
可能有人還記得2023 年@DrJimFan 他們團隊做的一個玩Minecraft 的Agent Voyager,就能把玩遊戲的技能寫成代碼,保存起來後續使用,最終讓Agent 在Minecraft 中做很多事。現在想想還蠻超前的。
@DrJimFan Manus 把工具分成了3 層,預先定義了許多Shell 工具,也是讓Agent 透過檔案系統直接檢索,另外也會即時寫Python 程式碼來創造工具
Manus 早期分享的《AI 智能體的脈絡工程:建構Manus 的經驗教訓》
