← 全部项目

Sprout — 会自己生长的 Multi-Agent 任务树

开源框架,独立设计:每个 Agent 自主决定要不要分裂,树形拓扑深度不限,真正递归

PythonasynciolitellmMulti-Agent递归任务分解

问题

预设角色的 Multi-Agent 编排(固定的 researcher / writer / reviewer)适应不了任务的真实形状;单 Agent 又被单次 LLM 调用的 token 与注意力瓶颈卡死——需要让分工结构从任务本身长出来。

做法

树形递归架构(Python + asyncio 并发执行,litellm 兼容多家模型):① 两阶段 Worker——analyze() 轻量调用先判断「要不要拆」,execute() 再做实际工作,分析与执行分离让分裂决策更准;② Approach 注入——父节点分裂时为每个子任务生成方法论与关注点,注入子 Agent 的 system prompt,角色从任务中涌现而非预设;③ straggler 处理——某分支耗时显著异常(如 2.5× 于兄弟节点)即取消重拆;节点做完就死,结果向上汇聚;④ max_depth / max_children / max_total_nodes / max_total_tokens 四重上限防止树爆炸。

结果

受限 token 预算下:单 Agent 25 分 vs Sprout 100 分

对照实验

突破单次 LLM 调用的 token 与注意力瓶颈

核心价值

24 个单元测试覆盖核心模块 · MIT 开源

工程质量

AI 在这个项目里的角色

框架本身就是 Multi-Agent 工程:分裂决策、straggler 检测、结果汇聚、安全边界全部独立设计——回答「Multi-Agent 到底解决什么问题」的一手实验。

为什么做它

主流 Multi-Agent 编排是「预设角色」:先定好 researcher / writer / reviewer,再把任务塞进去。但任务的真实形状千差万别——预设结构经常不合身。Sprout 反过来:结构不预设,让每个 Agent 拿到任务后自己决定要不要分裂、怎么分裂,任务树递归生长,深度不限。

四个核心设计

1. 两阶段 Worker。 analyze() 用轻量调用先判断「要不要拆」,execute() 再做实际工作。分析与执行分离,分裂决策更准,也更省 token。

2. Approach 注入。 父节点分裂时为每个子任务生成方法论与关注点,注入子 Agent 的 system prompt——子 Agent 的「角色」从任务中涌现,而非人工预设。

3. Straggler 处理。 某个分支耗时显著异常(例如 2.5× 于兄弟节点)就取消并重新拆分。节点做完就死,结果向上汇聚到父节点。

4. 安全边界。 max_depth · max_children · max_total_nodes · max_total_tokens 四重上限防止树爆炸;24 个单元测试覆盖核心模块。

对照实验

受限 token 预算下同一任务:单 Agent 25 分,Sprout 100 分。结论:Sprout 的核心价值不是并行加速,而是突破单次 LLM 调用的 token 与注意力瓶颈——每个节点都有完整的上下文预算去做自己那一小块事。

链接