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 工作流,也能满足复杂应用场景的需求。相较于其他系统,它在架构上更为通用和开放,同时提供了强大的工作流表达能力。