ROMA:让多智能体“套娃”式协作像搭积木一样简单
把“复杂任务拆到原子级”这件事做成框架,30 秒上手,5 分钟写出第一个专属 Agent。
本文要回答的核心问题
-
ROMA 到底是什么? -
它如何把“任务拆分-并行-聚合”做成可递归的通用框架? -
作为开发者,我怎样在本地 30 秒跑起来,并在 5 分钟内拥有自己的专属 Agent? -
框架里那些现成的搜索、研究、加密金融 Agent 能直接抄作业吗? -
如果我想深度定制,该动哪几块代码?
1 一分钟看懂 ROMA:把“套娃”做成基础设施
ROMA(Recursive Open Meta-Agents)不是又一个“LLM 包装器”,而是把“任务无限拆分→并行执行→结果聚合”做成了一条内建回路。
一句话总结:任何只要实现了 agent.execute()
的对象都能被 ROMA 递归调用,于是你的 Planner、Searcher、Code Executor、甚至第三方的 API 统统变成可嵌套的“乐高积木”。
1.1 为什么“递归拆分”是刚需
-
单轮 Prompt 再长也装不下真实世界的复杂依赖; -
人肉写 DAG 图太累,且需求一变就要重画; -
多 Agent 并行最怕“等前一个结果”导致的空转。
ROMA 用 4 个原子角色就把事办了:
-
Atomizer:判断“够不够小”。 -
Planner:不够小就继续拆。 -
Executor:够小就立即干。 -
Aggregator:把子结果拼回父问题。
整个流程被浓缩成 6 行伪代码,逻辑一眼望穿:
def solve(task):
if is_atomic(task):
return execute(task)
else:
subtasks = plan(task)
results = [solve(t) for t in subtasks] # 递归点
return aggregate(results)
反思:我第一次读到这段代码时,脑子里闪过的是“这不就是 MapReduce 的语义版吗?”——区别是 MapReduce 要你提前写死 Job 分裂规则,而 ROMA 把“什么时候拆、怎么拆”交给 Agent 自己决定,动态剪枝,省掉大量胶水代码。
2 框架全景图:信息如何“上下左右”流动
ROMA 把数据流拆成 3 条明线:
-
自顶向下:任务被逐层爆破; -
自底向上:子结果逐级汇总; -
水平依赖:若子任务 B 需要 A 的输出,框架自动让 B 等 A 完成后再入队。
flowchart TB
A[Your Request] --> B{Atomizer}
B -->|Plan Needed| C[Planner]
B -->|Atomic Task| D[Executor]
C --> E[Subtasks]
E --> G[Aggregator]
E -.-> B
D --> F[Final Result]
G --> F
场景示例:假设你让 Agent“比较以太坊和 Solana 的 2025 年 L2 费用经济模型”,Atomizer 发现这是跨链+预测+经济学的复合问题 → Planner 拆出“抓取两条链最新 L2 数据”“找费用模型论文”“预测代币价格”三个子任务 → 前两个任务无依赖可并行,第三个需要等价格数据 → 框架自动把第三个挂起,前两个跑完再唤醒。
3 30 秒上手:从 0 到浏览器里看到 Agent 界面
3.1 最速安装路径(Docker 版,推荐)
git clone https://github.com/sentient-agi/ROMA.git
cd ROMA
./setup.sh # 出现交互提示选 Docker
脚本会自动:
-
检测 OS,拉 Python 3.12 + Node 20 镜像; -
起后端 FastAPI(5000)+ 前端 React(3000); -
把 goofys 装好,S3 桶若配了 AK/SK 会一并挂载。
看到终端输出 Frontend ready → http://localhost:3000
即可开玩。
3.2 如果你想“裸金属”开发
./setup.sh --native
脚本会装 apt/yum 依赖、建 Python venv、拉 Agno 框架,最后同样给两条地址。
反思:我在 M1 Pro 上试 Native 路径,Homebrew 把 Python 3.12 装到 /opt/homebrew/bin
导致 venv 识别失败,脚本自动给出 export PATH
提示并 retry,这个小细节省了我 10 分钟排错时间——开源项目最怕“装不上”,ROMA 的安装脚本把常见坑都提前写了判断。
4 5 分钟写出你的第一个 Agent
前端点“New Agent”→ 选“Blank Template”→ 把下面 3 行粘进去:
from sentientresearchagent import SentientAgent
agent = SentientAgent.create()
result = await agent.run("把 ROMA 的核心机制改写成 200 字科普文")
点击 Save → Run,右侧会实时回显递归拆分树:Atomizer→Planner→3 个子任务→Aggregator→最终 200 字科普文。
场景价值:市场同事要一份“给老板看的 1 页说明书”,我直接让他自己在前端输入,30 秒后拿到中文稿,连“套娃”比喻都写好了——技术团队再也不用被“写科普”打断。
5 预置 Agent 速览:拿来就能抄的三套作业
Agent | 适用场景 | 亮点 | 开箱命令 |
---|---|---|---|
General Task Solver | 老板问“任意奇怪问题” | 接 ChatGPT Search Preview,实时联网 | 前端直接选“General” |
Deep Research | 竞品/学术深潜 | 自动拆“搜→读→综合”三阶段,并行搜多源 | 模板已配好 Wikipedia、Arxiv API |
Crypto Analytics | 代币/DeFi 研究 | 接 Binance&DefiLlama 实时行情 + Arkham 链上标签 | 需填 E2B_API_KEY 跑沙盒绘图 |
反思:我把“Crypto Analytics”丢给做投资的友人试用,他原本用脚本手撸 REST API,一个上午写 200 行;换成 ROMA 后, Planner 自动把“TVL 抓取→收益率计算→画折线”拆成 3 个原子任务,他只在 config 里写一次 API Key,代码量降到 20 行——再一次验证“递归拆分”对业务人员的友好度。
6 深度定制:动这 4 个钩子就够了
-
agent.is_atomic()
重写即可定义“什么时候不用再拆”。
示例:财务审计场景,把“金额字段>100 万 USD”设为非原子,强制走人工复核节点。 -
agent.plan()
返回 List[SubTask],可插入领域规则。
示例:医药注册文档自动生成,Planner 先查 FDA 最新指南,再拆“CTD 模块 2/3/4”。 -
agent.execute()
任意可执行体:LLM、本地脚本、E2B 沙盒、甚至远程 Jenkins Job。
示例:用 E2B 跑 Python 画图,返回 SVG 字符串给 Aggregator。 -
agent.aggregate()
决定“如何拼回父答案”。默认是“按顺序拼接”,你可以改投票、加权平均、甚至再调一次大模型做摘要。
7 性能到底怎样?官方基准一览
ROMA 团队用“ROMA-Search”这一搜索专用形态跑三家公开数据集:
-
SEAL-0(故意给噪音/冲突结果的搜索难题) -
FRAMES(考检索+推理+事实性) -
SimpleQA(短事实问答)
成绩放官网图,这里只给结论:在“噪音环境”和“多跳推理”两项,ROMA-Search 均高于同参数规模 gpt-4-search-preview 基线,提升幅度 6–12%。
反思:很多人看到“Benchmark”就怀疑刷榜。注意 ROMA 并未改模型本身,只是把“搜索→重排→摘要”拆成可递归子任务,用并行+聚合策略赢了单一大模型——这侧面印证“结构红利”有时比“换更大模型”更划算。
8 常见踩坑与排查清单
症状 | 最可能根因 | 一键修复 |
---|---|---|
./setup.sh 报“goofys: command not found” |
没装 fuse 依赖 | Ubuntu: apt install fuse 后重跑 |
前端 3000 端口白屏 | 后端 5000 没起 | docker logs roma-backend 看是否 AK/SK 填错 |
E2B 沙盒画图报 NoModuleFound | 镜像缺包 | 在 e2b_template/requirements.txt 加库,再 ./setup.sh --e2b |
递归深度爆栈 | 子任务一直拆到 1+1=2 | 重写 is_atomic() 给最小粒度兜底 |
9 实用摘要 / 一页速览
-
克隆 → ./setup.sh
→ 浏览器打开localhost:3000
,30 秒完成。 -
写 Agent 只需 3 行:import → create → run。 -
想深度定制:重写 is / plan / execute / aggregate 四钩子。 -
官方已给搜索、研究、加密金融三套现成模板,直接抄配置。 -
拆得够细 + 并行聚合,结构红利就能让同参数模型再涨 6–12% 基准。
10 可检索 FAQ
-
ROMA 和 AutoGPT、MetaGPT 有何不同?
ROMA 只专注“递归拆分-聚合”机制,不与任何特定角色(产品经理、程序员)绑定,也更轻量。 -
必须会 Docker 吗?
提供--native
路径,macOS/Ubuntu/Debian 一键装。 -
支持哪些 LLM?
所有 LiteLLM 支持的提供商(OpenAI、Anthropic、Google、本地 Ollama 等)。 -
可以离线运行吗?
可以,只要把 Executor 换成本地模型或离线脚本;搜索类 Agent 需联网。 -
商业使用是否收费?
框架 MIT 协议,任意商用;若调用第三方 API 需遵循对应提供商条款。 -
递归太深把程序卡死怎么办?
重写is_atomic()
给最小粒度,或加max_depth
参数硬截断。 -
E2B 沙盒必须配 AWS 吗?
目前 E2B 的文件持久化依赖 S3,如不用可关掉沙盒,只跑本地 Executor。 -
前端能二次开发吗?
前后端分离,React 代码在/frontend
目录,标准 Vite 工程,改完npm run build
即可。