1. MotleyCrew 核心組件
- 協調器: Crew
MotleyCrew 的核心是一個 “Crew” 對象,即多代理系統的指揮者。Crew 持有一個全局的知識圖譜(使用 Kuzu 圖數據庫),用于記錄所有任務、任務單元和其執行狀態。
Crew 不斷循環查詢“可執行任務”(所有上游依賴完成的任務),調用get_next_unit() 獲取下一步的任務單元,并將其分派給對應的執行者(Agent)。任務單元被分派后即加入知識圖,當執行完成時觸發任務的 on_unit_completion 邏輯。Crew 支持同步與異步兩種模式:在異步模式下,Crew 在后臺隊列中并行調度多個任務單元。當前框架支持多種并發后端,包括 asyncio、線程池甚至 Ray 分布式執行,從而實現跨 CPU/GPU 節點的高并發和可擴展調度。
- 任務調度系統: Task
以 任務(Task)為粒度組織工作流程。每個任務可以依賴其它任務,形成任務圖(DAG)或更復雜的拓撲。
MotleyCrew 提供多種預定義任務類型(如 SimpleTask、TreeReduceTask 等),也支持自定義任務邏輯。每個任務通過 >> 運算符將上下游串聯,Crew 基于任務依賴自動生成調度順序。任務包含的“任務單元” (TaskUnit) 封裝了執行時的輸入(通常為 LLM 的提示和上游結果),并記錄狀態、輸出等。
任務系統負責在執行過程中動態更新知識圖:例如在執行過程中生成的新子任務或新的數據可以即時寫入知識圖,供后續任務查閱。這種設計使得任務調度不僅僅是靜態的流程,而可以根據中間結果動態展開新的計算(見“研究代理”示例)。
- 管理模塊: Agent
MotleyCrew 抽象了“智能體”(Agent)這一概念,所有 Agent 均實現為符合 LangChain 可運行接口 (Runnable) 的組件。
框架提供多種 Agent 封裝,包括對 LangChain AgentExecutor 的 LangchainMotleyAgent,對 LlamaIndex agent 的 LlamaIndexMotleyAgent,以及對其他框架(如 CrewAI、AutoGen)agent 的包裝。同時,Agent 可攜帶多個 工具(Tool),這些工具同樣實現了 Runnable 接口。每個任務在執行時會將其配置的 Agent 或工具作為工作者來運行(通過 get_worker() 獲得)。MotleyCrew 特別支持“Agents-as-Tools” 模式:一個 Agent 可以被轉換為 Tool 交給其他 Agent 使用,允許任意組合不同框架的 Agent 共同協作。
理論上,所有agent又能作為tool被上游agent使用,形成多agent聯合調用網絡,理想情況下,agent之間相互合作,幫助更好的完成任務(相對于單一agent)。但是,這種多agent工作流是否有效或高效,還需要分析觀察所有agent|tool的調用和被調用路線。
- 插件和外部集成機制
MotleyCrew 設計了靈活的插件式接口,可與多種開源工具和代理框架集成。通過 MotleyTool 類,可以將 LangChain 的 BaseTool、LlamaIndex 的工具、甚至 CrewAI 的工具等封裝為 MotleyCrew 的工具。開發者可直接使用 MotleyTool.from_langchain_tool、from_llama_index_tool、from_crewai_tool 等方法將外部工具引入。文檔和示例中展示了如何無縫混合 LangChain、LlamaIndex、CrewAI、AutoGen 等生態的 Agent 和工具。所有組件(Agent、Tool、Task)均實現了 LangChain 的 Runnable 接口,使其與 LangChain Edge等生態兼容,并可用于構建復雜的 LangGraph 工作流。
-知識圖譜存儲
每個 Crew 自帶一個內置的知識圖譜(Knowledge Graph)實例,用于全局信息共享。所有任務、任務單元及其輸入輸出都會存儲在該圖中,節點間邊則表示依賴關系或序列順序。這一持久化存儲既可用作流程控制(決定哪些任務可執行),也可充當共享狀態(Multiple Agent 共享中間數據)。Agent 和 Task 通過讀寫知識圖來交換信息,例如一個 Task 在完成后可以將結果寫回圖中,供后續 Task 或其他 Agent 查詢。這一設計讓 MotleyCrew 在多 Agent 協作中實現了像「全局共享記憶」一樣的信息流轉。
- 可觀測性與緩存
MotleyCrew 集成了開源的觀測跟蹤框架 Lunary,以及用于 HTTP/LLM 調用的緩存工具 MotelyCache。在執行過程中,Lunary 可記錄每一次 Agent 調用、任務執行的元數據,方便性能監控和調試;MotleyCache 則對重復的 API 請求做結果緩存,提高執行效率并降低成本。這些功能為生產環境下的穩定性和可運維性提供支持, 同時可以與MCP調用及記錄做良好支撐。
2. 解決的問題
MotleyCrew 的設計旨在解決現代多 Agent 系統中的若干挑戰:
-
多 Agent 協作
多個智能體要共同完成復雜任務時,需要合理分工與信息交換。MotleyCrew 通過靈活的任務調度和共享知識圖,實現了多 Agent 之間的協同工作。用戶可以將不同領域的 Agent(包括跨框架的 Agent)組合在同一 Crew 中,利用 Agents-as-Tools 模式讓一個 Agent 調用另一個 Agent 的能力。同時,全局知識圖充當中樞,使 Agents 能夠讀寫共享狀態,例如發布任務結果、生成新問題、共享檢索到的信息等,從而天然支持復雜的協作場景。這一機制有效避免了傳統設計中各 Agent 相互隔離、溝通困難的問題。 -
異構資源調度
現實場景中,不同任務可能需要不同資源類型(如 CPU 計算、GPU 大模型、專用工具或外部服務)。MotleyCrew 通過抽象的并行執行后端,實現了跨異構資源的彈性調度。內置的 AsyncBackend 支持多種并發模式:在默認的 asyncio 或線程模式下,可以利用本地機器的多核并行;更進一步,支持將 Crew 作為 Ray 任務運行在分布式集群上。這一點允許用戶在多臺機器、異構硬件(如有無 GPU)間分配和運行任務單元。同時,由于任務和工具都是可序列化的 Runnable,可以輕松在集群節點上傳輸執行,滿足大規模擴展需求。 -
任務分配與執行優化
MotleyCrew 提供智能的調度邏輯來高效分配任務。Crew 循環時,會查詢所有“可用任務”(即所有上游依賴已完成的任務),并一次取出每個任務的下一個任務單元進行調度。任務的 get_next_unit() 方法根據是否滿足前置條件自動確定是否有新的單元可執行。分派單元時,Crew 隨即將該單元標記為掛起并放入執行隊列,再調用任務的 on_unit_dispatch 回調。執行結束后,再觸發 on_unit_completion 處理結果。這樣,調度過程自動遵守任務依賴關系,無需用戶手動同步。由于后端支持并行模式(比如允許某些任務在隊列中并行執行),能夠將獨立的任務單元同時派發給多個代理執行,提高吞吐量。加上內置的 MotelyCache 緩存重復調用(如重復的 LLM 查詢或 API 請求),執行效率進一步提升。 -
可擴展性與穩定性
架構模塊化、內置分布式支持使系統易于擴展。新增 Agent、工具或任務類型不影響現有組件,新的任務只需加入 Crew 即可納入調度。Ray 后端和并發執行讓系統可擴展至大規模集群;Lunary 和緩存在生產環境提供了監控與故障恢復機制。關鍵執行狀態持久化在知識圖中,即使運行崩潰后也能從上次任務節點恢復。此外,重試機制(在 RetryConfig 中設置)可對短暫錯誤自動重試,進一步提高魯棒性。總之,MotleyCrew 的分布式、異步設計搭配完整的觀測和緩存,使其在多agent場景下具備良好的擴展性和穩定性。
3. 系統邏輯原理
MotleyCrew 的核心在于架構設計和調度邏輯如何保障多 Agent 協作和高效執行:
-
核心架構
一個 MotleyCrew 實例維護著一個任務圖和對應的全局知識圖。用戶首先創建一個 Crew,然后定義若干 Task(任務)并指定 Agent 和描述,使用 >> 運算符將任務以有向依賴串聯起來。每個 Task 在運行時會生成一個或多個 TaskUnit(任務單元),這些單元攜帶了對 Agent 的調用所需的信息(如提示模板、上游結果拼接等)。Crew 根據任務依賴關系決定調度順序,形成有向無環的執行流。 -
調度邏輯
如文檔所示,“Crew 不斷循環查詢任務并分派單元”。具體流程:Crew 檢查哪些任務的所有上游任務都已完成(這些稱為可用任務),并依次調用其 get_next_unit()。如果返回了新的 TaskUnit,Crew 就將其標記為“運行中”,加入到知識圖,然后調用任務的 on_unit_dispatch() 鉤子(可用于如日志記錄)。Agent 收到任務單元后執行 LLM 推理或工具調用,完成后執行結果會觸發任務的 on_unit_completion()(例如 SimpleTask 會將輸出存儲并標記任務完成)。在異步模式下,Crew 會在后臺不斷搜索和隊列化可執行單元;在同步模式下,Crew 會等待每個單元完成后再繼續下一個。總之,調度邏輯保證了:只有當依賴任務結束后,下游任務才被激活;多個任務單元滿足條件時可并行調度;新生成的任務單元只要被寫入知識圖,也能被Crew及時發現并處理。 -
通信機制
Agent 之間的交互主要通過兩種方式:一是工具調用(Agents-as-Tools 模式),二是通過共享知識圖傳遞信息。在工具調用模式下,某代理可以把其他代理包裝成工具,當它需要某領域幫助時直接調用這一工具(即讓另一個 Agent 扮演相應角色)。這種方式與 LangChain 的工具調用模式兼容,可讓不同 Agent 在對話中相互利用。另外,由于所有任務單元的輸入輸出都存儲在知識圖上,一個 Agent 完成任務后留下的結果數據可以被任何下游 Agent 讀取。例如,在“研究代理”示例中,一個 Task 會在知識圖中生成新的問題子任務,另一組 Task 則基于這些問題的檢索結果順序解答回推。這類似于一個全局共享的黑板(shared memory),使得通信更為松耦合和靈活。 -
狀態管理
知識圖譜起著關鍵作用:它記錄了每個 TaskUnit 的狀態(pending、running、done),以及上下游關系、輸出內容等。框架使用 Kuzu 存儲層(MotleyGraphStore)來持久化這些狀態。這樣,無論是程序崩潰還是中斷,系統都可以從知識圖恢復執行。Agent 和 Task 均可通過圖 API 讀寫節點,實現復雜的狀態管理:除了任務數據外,用戶還可以將任意中間結果或全局變量存入知識圖,用作后續決策依據。總之,知識圖是 MotleyCrew 管理全局狀態、協調 Agent 互動的“事實數據庫”。 -
代理編排模型
MotleyCrew 使用基于任務依賴的調度模型,但對于內部任務的執行和交互并不強加固定流程。用戶可以采用高度結構化的流程(顯式列出任務節點),也可以依賴輸出處理器(OutputHandler)等高級工具強制執行特定行為。每個任務在創建時都可指定特定的 Agent、工具、以及提示模板。框架支持任務層級(TaskGroup)、動態任務生成等高級機制。最典型的并行場景是多線索任務(TreeReduceTask)或細粒度子任務并行(allow_async_units=True)等。由于所有 Agent 和 TaskUnit 都是基于 LangChain Runnable 的組件,理論上它們可以嵌套或遞歸組合,并與 LangGraph 等其他框架配合使用。
4. 與類似系統的區別
與其它多 Agent 框架相比,MotleyCrew 在架構設計上具有獨特之處:
AutoGen:微軟的 AutoGen 強調通過對話驅動多代理協作,內置 ConversableAgent(可交流的代理)、AssistantAgent、UserProxyAgent 等,支持人機交互和代碼執行。其設計核心是“多代理聊天”,每個代理作為獨立角色在對話中傳遞信息。相比之下,MotleyCrew 并不局限于對話模式,而是以任務圖為核心,實現更加結構化的工作流。MotleyCrew 可以集成 AutoGen 的代理(通過 Agents-as-Tools 模式),但更強調任務依賴和共享記憶的協調,而非純粹基于聊天的協商。
CrewAI:CrewAI 框架以“Crew(團隊)+Flows(流程)”著稱,將多個 Agent 組織為明確角色,各司其職。CrewAI 強調使用事件驅動的流程(Flows)來定義任務序列和狀態轉換,并提供 GUI 工具等企業級功能。與之相比,MotleyCrew 則更輕量、框架無關:它通過代碼定義任務和依賴,內置知識圖而不依賴外部流程引擎。雖然兩者都提出“角色”和“流程”概念,但CrewAI 在架構上高度專有,而 MotleyCrew 采用通用的任務-代理模型,支持混合不同 Agent 框架并運行在任何環境中。此外,MotleyCrew 強調與 LangChain 生態的兼容性,以及使用開源數據庫保存狀態,而非使用專有的流程引擎。
LangGraph:LangGraph 將多代理系統視為有向圖:每個代理是圖節點,使用命令對象(Command)在節點間傳遞控制和狀態。它適合構建嚴格的決策圖和狀態機。MotleyCrew 與其思路有相似之處(共享圖結構),但更加靈活:不僅支持靜態流程圖,代理還可以在運行時通過寫入知識圖來創建新節點,實現動態擴展。更重要的是,MotleyCrew 的所有組件都兼容 LangChain Runnable,意味著用戶可以在 MotleyCrew 內部直接使用 LangGraph 的編程模型。換言之,MotleyCrew 既能在簡單場景下充當 LangGraph 的“框架”,也能在復雜場景下提供額外的多代理協作能力。
綜上,MotleyCrew 的優勢在于多框架兼容、任務圖+知識圖驅動的協調以及高度可擴展的調度后端,這些使其既適合快速搭建常見的多 Agent 工作流,也能滿足復雜應用場景的需求。相較于其他系統,它在架構上更為通用和開放,同時提供了強大的工作流表達能力。