ROMA
ROMA(Recursive-Open-Meta-Agent)是一个旨在简化高性能多智能体系统构建的元智能体框架。面对复杂任务时,单一智能体往往能力有限,而传统多智能体协作又面临架构设计难、协调效率低等挑战。ROMA 通过引入“递归”与“分层”机制,让智能体能够像组织一样自我编排:高层智能体负责拆解目标与调度,底层智能体专注执行,甚至能动态生成新的子智能体来应对突发需求,从而显著提升系统解决复杂问题的整体性能。
这款工具特别适合 AI 开发者、研究人员以及需要构建自动化工作流的技术团队使用。如果你正在探索如何让多个 AI 模型高效协作,或者希望搭建具备自我进化能力的代理系统,ROMA 提供了灵活的底层支持。其核心亮点在于“元智能体”设计理念,即框架本身不仅能运行智能体,还能管理智能体的创建与交互逻辑,实现了从静态编排到动态递归协作的跨越。作为开源项目,ROMA 目前处于测试阶段,为社区提供了一个探索下一代多智能体架构的实用起点,帮助创作者更轻松地实现从概念到高性能系统的落地。
使用场景
某金融科技团队需要构建一个能实时监测全球新闻、分析市场情绪并自动生成交易策略报告的复杂系统。
没有 ROMA 时
- 架构搭建困难:开发人员需手动编写大量样板代码来协调多个单一功能 Agent,层级关系混乱,难以维护。
- 任务执行断裂:当遇到需要多步推理的复杂任务(如“关联地缘政治事件与特定板块波动”)时,单个 Agent 容易迷失上下文,导致分析中断或逻辑跳跃。
- 扩展性差:每增加一个新的分析维度(如新增加密货币监控),都需要重构整个通信协议,迭代周期长达数周。
- 资源调度低效:无法动态分配计算资源,简单查询与深度研报消耗相同的算力,造成成本浪费。
使用 ROMA 后
- 层级化自动构建:利用 ROMA 的元代理框架,团队只需定义高层目标,系统即可自动递归生成 hierarchical(分层)的多 Agent 架构,将开发时间从数周缩短至几天。
- 递归推理增强:面对复杂分析,ROMA 协调下的子 Agent 能自主进行多轮递归思考与自我修正,确保从新闻抓取到策略生成的全链路逻辑严密。
- 灵活动态扩展:新增监控维度仅需插入新的子节点 Agent,ROMA 会自动处理路由与协作,无需改动核心架构,实现热插拔式升级。
- 高性能资源编排:框架根据任务难度动态调度不同层级的 Agent,简单任务由轻量级节点处理,复杂研判才调用高级模型,显著降低运行成本。
ROMA 通过递归元代理机制,将原本碎片化的单点智能整合为具备自我演进能力的高性能协同网络,让构建复杂多智能体系统变得像搭积木一样简单高效。
运行环境要求
- 未说明
未说明
未说明

快速开始
ROMA 是一个 元智能体框架,它利用递归的层次化结构来解决复杂问题。通过将任务分解为可并行化的组件,ROMA 使智能体能够应对复杂的推理挑战,同时保持透明性,从而让上下文工程和迭代变得简单直接。该框架提供 并行问题求解,即智能体可以同时处理复杂任务的不同部分;透明开发,拥有清晰的结构以便于调试;以及 经过验证的性能,这从我们的搜索智能体在基准测试中取得的优异成绩中可见一斑。我们已经证明了该框架的有效性,但这仅仅是个开始。作为一款 开源且可扩展 的平台,ROMA 专为社区驱动的开发而设计,允许您根据自身需求构建和定制智能体,同时受益于社区的集体改进。
🏗️ 工作原理
ROMA 框架通过递归的 计划–执行循环 来处理任务:
def solve(task):
if is_atomic(task): # 第一步:原子化器
return execute(task) # 第二步:执行器
else:
subtasks = plan(task) # 第二步:规划器
results = []
for subtask in subtasks:
results.append(solve(subtask)) # 递归调用
return aggregate(results) # 第三步:聚合器
# 入口:
answer = solve(initial_request)
- 原子化器 – 决定请求是否为 原子级(可以直接执行)或需要 规划。
- 规划器 – 如果需要规划,任务会被分解成更小的 子任务。每个子任务会再次送回 原子化器,从而使整个过程具有递归性。
- 执行器 – 负责处理原子级任务。执行器可以是 大语言模型、API,甚至是其他智能体——只要它们实现了
agent.execute()接口即可。 - 聚合器 – 收集并整合子任务的结果。重要的是,聚合器生成的是 原始父任务的答案,而不仅仅是子任务的原始输出。
📐 信息流
- 自上而下: 任务被递归地分解为子任务。
- 自下而上: 子任务的结果被向上聚合,形成父任务的解决方案。
- 从左到右: 如果某个子任务依赖于前一个子任务的输出,它会等待前一个子任务完成后再执行。
这种结构使系统灵活、递归且具备依赖感知能力——能够将复杂问题分解为更小的步骤,同时确保结果被连贯地整合在一起。
点击查看系统流程图
flowchart TB
A[您的请求] --> B{原子化器}
B -->|需要规划| C[规划器]
B -->|原子任务| D[执行器]
%% 规划器产生子任务
C --> E[子任务]
E --> G[聚合器]
%% 递归
E -.-> B
%% 执行与聚合
D --> F[最终结果]
G --> F
style A fill:#e1f5fe
style F fill:#c8e6c9
style B fill:#fff3e0
style C fill:#ffe0b2
style D fill:#d1c4e9
style G fill:#c5cae9
🚀 快速入门
最快方式:最小化安装(推荐用于评估)
无需任何基础设施,即可在 30秒内 开始使用:
# 使用 uv 安装(速度提升 10-100 倍)
uv pip install roma-dspy
# 或者使用 pip
pip install roma-dspy
# 设置您的 OpenRouter API 密钥(默认使用 Claude Sonnet 4.5 + Gemini 2.5 Flash)
export OPENROUTER_API_KEY="sk-or-v1-..."
# 立即开始解决问题
python -c "from roma_dspy.core.engine.solve import solve; print(solve('2+2 是多少?'))"
注意:默认配置使用 OpenRouter 的 Claude Sonnet 4.5(执行器)和 Gemini 2.5 Flash(其他智能体)。您也可以通过设置
OPENAI_API_KEY并自定义配置,直接使用 OpenAI。
您将获得:
- ✅ 核心智能体框架(原子化器、规划器、执行器、聚合器、验证器)
- ✅ 所有 DSPy 预测策略(CoT、ReAct、CodeAct 等)
- ✅ 文件存储(无需数据库)
- ✅ 内置工具包(计算器、文件操作)
- ✅ 可与任何 LLM 提供商兼容(OpenRouter、OpenAI、Anthropic 等)
无需 Docker、无需数据库、无需任何设置——只需安装即可使用!
生产环境部署:完整功能与 Docker
适用于需要持久化、可观ability 和 API 服务器的生产环境:
# 一键部署(构建 Docker,启动服务)
just setup
# 或者使用特定配置
just setup crypto_agent
# 验证服务是否运行
curl http://localhost:8000/health
# 通过 API 解决任务
just solve "法国的首都是哪里?"
Docker 版本的附加功能:
- 📊 PostgreSQL 持久化(执行历史、检查点)
- 📈 MLflow 可观测性(实验跟踪、可视化)
- 🌐 REST API 服务器(FastAPI,附带交互式文档)
- 📦 S3 兼容存储(MinIO)
- 🔧 E2B 代码执行沙箱
- 🎨 交互式 TUI 可视化
可用服务:
- 🚀 REST API:http://localhost:8000/docs
- 🗄️ PostgreSQL:自动持久化
- 📦 MinIO:S3 兼容存储(http://localhost:9001)
- 📊 MLflow:http://localhost:5000(使用
docker-up-full)
🧠 概念概述
ROMA 的模块层将经典的 DSPy 模式封装为专门构建的组件,这些组件反映了复杂任务执行的生命周期:
- 原子化器 决定请求是否可以直接处理,或者需要进一步分解。
- 规划器 将非原子目标分解为有序的子任务图。
- 执行器 解决各个子任务,必要时通过函数或工具调用来完成。
- 聚合器 将子任务的输出综合成一个连贯的答案。
- 验证器(可选)在交付最终结果之前,检查汇总输出是否符合原始目标。
每个模块都采用相同的使用方式:只需传入语言模型(LM)或提供商字符串进行实例化,选择一种预测策略,然后使用任务特定的参数调用 .forward()(或异步的 .aforward())方法。
所有模块最终都会委托给 roma_dspy.core.signatures 中定义的 DSPy 签名。这样即使内部实现不断演进,接口也能保持稳定。
📦 安装与设置
选项 1:最小化安装(最快——推荐用于评估)
适用场景: 评估 ROMA、开发、测试、快速原型制作
30 秒内即可完成安装:
# 使用 uv(推荐——速度提升 10-100 倍)
uv pip install roma-dspy
# 或者使用 pip
pip install roma-dspy
设置您的 API 密钥:
export OPENROUTER_API_KEY="sk-or-v1-..." # 推荐
# 或者
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
立即开始使用:
from roma_dspy.core.engine.solve import solve
# 解决任何任务
result = solve("法国的首都是什么?")
print(result)
包含内容:
- ✅ 所有核心模块(原子化器、规划器、执行器、聚合器、验证器)
- ✅ 所有 DSPy 预测策略
- ✅ 基于文件的存储(无需数据库)
- ✅ 核心工具包(计算器、文件操作)
- ✅ 兼容任何 LLM 提供商
不包含的内容(如需请单独安装):
- PostgreSQL 持久化 →
uv pip install roma-dspy[persistence] - MLflow 可观测性 →
uv pip install roma-dspy[observability] - E2B 代码执行 →
uv pip install roma-dspy[e2b] - REST API 服务器 →
uv pip install roma-dspy[api] - S3 存储 →
uv pip install roma-dspy[s3] - 所有功能 →
uv pip install roma-dspy[all]
方案 2:使用 Docker 的完整安装(生产环境)
适合场景: 生产部署、团队协作、全面可观测性
先决条件:
- Docker 和 Docker Compose
- Python 3.12+(用于本地开发)
- Just 命令运行工具(可选,推荐使用)
一键式设置:
# 交互式设置(会提示配置 E2B、S3 等)
just setup
# 或者指定特定配置文件
just setup crypto_agent
手动启动 Docker:
just docker-up # 基础版(PostgreSQL + MinIO + API)
just docker-up-full # 包含 MLflow 可观测性的完整版
环境变量(由 just setup 自动配置):
# LLM 提供商(必填)
OPENROUTER_API_KEY=... # 推荐
# 或者
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
# 可选:高级功能
E2B_API_KEY=... # 代码执行
COINGECKO_API_KEY=... # 加密货币工具包
Docker 的其他功能:
- 📊 PostgreSQL(执行历史、检查点)
- 📈 MLflow(实验跟踪、指标)
- 🌐 REST API(FastAPI,附带文档)
- 📦 MinIO(兼容 S3 的存储)
- 🎨 TUI 可视化界面
方案 3:开发环境安装
适用于贡献或扩展 ROMA:
# 克隆仓库
git clone https://github.com/sentient-agi/roma.git
cd roma
# 安装开发工具(包括 pytest、ruff、mypy)
uv pip install -e ".[dev]"
# 运行测试
just test
# 格式化代码
just format
# 类型检查
just typecheck
对比:哪种安装方式适合您?
| 特性 | 极简版(pip install roma-dspy) |
Docker 版(just setup) |
|---|---|---|
| 安装时间 | < 30 秒 | ~5–10 分钟 |
| 所需基础设施 | 无 | Docker |
| 核心代理框架 | ✅ | ✅ |
| 文件存储 | ✅ | ✅ |
| PostgreSQL 持久化 | ❌(需安装 [persistence]) |
✅ |
| MLflow 可观测性 | ❌(需安装 [observability]) |
✅ |
| REST API | ❌(需安装 [api]) |
✅ |
| 最佳适用场景 | 评估、开发 | 生产、团队协作 |
⚡ 快速入门:端到端工作流
以下示例模拟了一个典型的编排流程。它使用了三个不同的提供商,展示了各个模块如何轻松地与不同模型和策略协同工作。
import dspy
from roma_dspy import Aggregator, Atomizer, Executor, Planner, Verifier, SubTask
from roma_dspy.types import TaskType
# 执行器可能调用的可选工具
def get_weather(city: str) -> str:
"""返回该城市的固定天气预报"""
return f"{city} 的天气是晴朗的。"
# 面向 ReAct 的执行器,使用 Fireworks 模型
executor_lm = dspy.LM(
"fireworks_ai/accounts/fireworks/models/kimi-k2-instruct-0905",
temperature=0.7,
cache=True,
)
executor = Executor(
lm=executor_lm,
prediction_strategy="react",
tools=[get_weather],
context_defaults={"track_usage": True},
)
# 原子化器决定何时分支进入规划阶段
atomizer = Atomizer(
lm=dspy.LM("openrouter/google/gemini-2.5-flash", temperature=0.6, cache=False),
prediction_strategy="cot",
context_defaults={"track_usage": True},
)
# 规划器为非原子目标生成可执行的子任务
planner = Planner(
lm=dspy.LM("openrouter/openai/gpt-4o-mini", temperature=0.85, cache=True),
prediction_strategy="cot",
context_defaults={"track_usage": True},
)
aggregator = Aggregator(
lm=dspy.LM("openrouter/openai/gpt-4o-mini", temperature=0.65),
prediction_strategy="cot",
)
verifier = Verifier(
lm=dspy.LM("openrouter/openai/gpt-4o-mini", temperature=0.0),
)
def run_pipeline(goal: str) -> str:
atomized = atomizer.forward(goal)
if atomized.is_atomic 或 atomized.node_type.is_execute:
execution = executor.forward(goal)
candidate = execution.output
else:
plan = planner.forward(goal)
results = []
for idx, subtask in enumerate(plan.subtasks, start=1):
execution = executor.forward(subtask.goal)
results.append(
SubTask(
goal=subtask.goal,
task_type=subtask.task_type,
dependencies=subtask.dependencies,
)
)
aggregated = aggregator.forward(goal, results)
candidate = aggregated.synthesized_result
verdict = verifier.forward(goal, candidate)
if verdict.verdict:
return candidate
return f"验证器标记了输出:{verdict.feedback 或 '未返回反馈'}"
print(run_pipeline("计划一个巴塞罗那周末之旅,并附上打包清单。"))
亮点:
- 不同模块可以运行在不同的 LM 和温度下。
- 工具可以在构建时提供,也可以在每次调用时动态传入。
context_defaults确保每个.forward()调用都会进入带有模块 LM 的正确dspy.context()。
⚙️ 配置与存储
ROMA-DSPy 使用 OmegaConf 进行分层配置,并结合 Pydantic 进行验证;同时提供 执行范围内的存储,以实现完全的任务隔离。
快速配置示例
from roma_dspy.config import load_config
# 加载特定配置文件并覆盖默认值
config = load_config(
profile="crypto_agent",
overrides=["agents.executor.llm.temperature=0.3"]
)
可用配置文件: general、crypto_agent(可通过 just list-profiles 查看列表)
更多信息: 配置指南 提供关于配置文件、代理配置、LLM 设置、工具包配置以及任务感知代理映射的完整说明。
存储
存储是自动且按执行范围管理的——每个任务都会获得一个独立的目录。较大的工具包响应(超过 100KB)会自动保存为 Parquet 文件。
from roma_dspy.core.engine.solve import solve
# 存储路径自动生成:{base_path}/executions/{execution_id}/
result = solve("分析区块链交易")
特点: 执行隔离、兼容 S3、自动 Parquet 存储、Docker 管理
更多信息: 部署指南 提供生产环境存储配置,包括 S3 集成。
🧰 工具包
ROMA-DSPy 包含 9 个内置工具包,用于扩展智能体的能力:
核心工具包: FileToolkit、CalculatorToolkit、E2BToolkit(代码执行) 加密货币工具包: CoinGeckoToolkit、BinanceToolkit、DefiLlamaToolkit、ArkhamToolkit 搜索工具包: SerperToolkit(网页搜索) 通用工具包: MCPToolkit(连接任意 MCP 服务器)
快速配置
agents:
executor:
toolkits:
- class_name: "FileToolkit"
enabled: true
- class_name: "E2BToolkit"
enabled: true
toolkit_config:
timeout: 600
参阅: 工具包参考文档,其中包含所有工具的完整说明、配置选项、MCP 集成以及自定义工具包开发指南。
🌐 REST API 和 CLI
ROMA-DSPy 同时提供了 REST API 和命令行界面,适用于生产环境使用。
REST API
基于 FastAPI 的服务器,附带交互式文档:
# 使用 Docker 自动启动
just docker-up
# API 文档:http://localhost:8000/docs
# 健康检查:http://localhost:8000/health
端点: 执行管理、检查点、可视化、指标
CLI
# 本地任务执行
roma-dspy solve "您的任务" --profile general
# 服务器管理
roma-dspy server start
roma-dspy server health
# 执行管理
roma-dspy exec create "任务"
roma-dspy exec status <id> --watch
# 交互式 TUI 可视化(建议配合 MLflow 使用以获得最佳效果)
just viz <execution_id>
# 完整帮助信息
roma-dspy --help
参阅: /docs 端点中的 API 文档,获取完整的 OpenAPI 规范和交互式测试功能。
🏗️ 核心构建模块:BaseModule
所有模块均继承自位于 roma_dspy/core/modules/base_module.py 的 BaseModule。它实现了以下标准化:
- 通过 DSPy 预测策略进行签名绑定;
- 大模型实例化与上下文管理;
- 工具规范化与合并;
- 支持同步/异步调用,并具备安全的关键字过滤机制。
上下文与大模型管理
实例化模块时,您可以提供一个已有的 dspy.LM,也可以让模块根据提供商字符串(model)及可选关键字参数(model_config)自动构建一个。
from roma_dspy import Executor
executor = Executor(
model="openrouter/openai/gpt-4o-mini",
model_config={"temperature": 0.5, "cache": True},
)
在内部,BaseModule 确保每次调用 .forward() 时,都会将预测器的调用包裹在以下上下文中:
with dspy.context(lm=self._lm, **context_defaults):
...
您可以通过 get_model_config() 检查实际的大模型配置,确认提供商、缓存设置或经过清理的关键字参数。
工具的使用
工具可以以列表、元组或映射的形式提供,这些工具应为 DSPy 的 ReAct/CodeAct 策略所接受的可调用对象。
executor = Executor(tools=[get_weather])
executor.forward("安曼的天气如何?", tools=[another_function])
BaseModule 会自动根据对象身份去重工具,并将构造函数默认值与每次调用的覆盖值合并。
预测策略
ROMA 通过 PredictionStrategy 枚举(位于 roma_dspy/types/prediction_strategy.py)暴露了 DSPy 的策略。您可以直接使用枚举,也可以使用不区分大小写的字符串别名:
from roma_dspy.types import PredictionStrategy
planner = Planner(prediction_strategy=PredictionStrategy.CHAIN_OF_THOUGHT)
executor = Executor(prediction_strategy="react")
可用的策略包括 Predict、ChainOfThought、ReAct、CodeAct、BestOfN、Refine、Parallel、majority 等。对于需要工具的策略(如 ReAct 或 CodeAct),模块会自动应用您传递的工具。
异步执行
每个模块都提供 aforward() 方法。当底层 DSPy 预测器支持异步操作(acall/aforward)时,ROMA 会以异步方式调度;否则,它会优雅地回退到同步实现,同时保持可等待性。
result = await executor.aforward("下载最新的销售报告")
📚 模块参考
⚛️ 分解器
位置: roma_dspy/core/modules/atomizer.py
用途: 判断目标是否为原子级,还是需要规划。
构造函数:
Atomizer(
prediction_strategy: Union[PredictionStrategy, str] = "ChainOfThought",
*,
lm: Optional[dspy.LM] = None,
model: Optional[str] = None,
model_config: Optional[Mapping[str, Any]] = None,
tools: Optional[Sequence|Mapping] = None,
**strategy_kwargs,
)
输入 (AtomizerSignature):
goal: str
输出 (AtomizerResponse):
is_atomic: bool— 任务是否可以直接执行。node_type: NodeType— 用于下游路由的提示,取值为PLAN或EXECUTE。
使用示例:
atomized = atomizer.forward("策划一份包含餐厅预订的东京五日行程")
if atomized.is_atomic:
... # 直接发送给执行器
else:
... # 转交给规划器
分解器与具体策略无关,但通常会使用 ChainOfThought 或 Predict 策略。您可以通过 call_params 传递提示信息(例如 max_tokens):
atomizer.forward(
"总结这份 PDF 文件",
call_params={"max_tokens": 200},
)
📋 规划器
位置: roma_dspy/core/modules/planner.py
用途: 将目标分解为有序的子任务,并可选生成依赖关系图。
构造函数: 与分解器相同。
输入 (PlannerSignature):
goal: str
输出 (PlannerResult):
subtasks: List[SubTask]— 每个子任务包含目标、任务类型和依赖关系。dependencies_graph: Optional[Dict[str, List[str]]]— 当大模型返回时提供的显式邻接矩阵。
使用示例:
plan = planner.forward("在六周内举办一场 B2B 网络研讨会")
for subtask in plan.subtasks:
print(subtask.goal, subtask.task_type)
SubTask.task_type 是一个遵循 ROMA MECE 框架的枚举类型(检索、写作、思考、代码解释、图像生成)。
⚙️ 执行器
位置: roma_dspy/core/modules/executor.py
用途: 解决原子级目标,可选地通过 DSPy 的 ReAct、CodeAct 策略调用工具或函数。
构造函数: 与前面一致;常用的策略是 ReAct、CodeAct 或 ChainOfThought。
输入 (ExecutorSignature):
goal: str
输出 (ExecutorResult):
output: str | Anysources: Optional[List[str]]— 来源或引用。
使用示例:
execution = executor.forward(
"整理一份为期三天的滑雪旅行行李清单",
config={"temperature": 0.4}, # 每次调用时对大模型的覆盖
)
print(execution.output)
若仅希望在特定调用中启用工具:
execution = executor.forward(
"巴黎的天气如何?",
tools=[get_weather],
)
🔀 聚合器
位置: roma_dspy/core/modules/aggregator.py
目的: 将多个子任务的结果合并为最终的叙述或决策。
构造函数: 模式相同。
输入(AggregatorResult 签名):
original_goal: strsubtasks_results: List[SubTask]— 通常是规划器的提案,并附加了执行结果。
输出(AggregatorResult 基类模型):
synthesized_result: str
使用方法:
aggregated = aggregator.forward(
original_goal="计划数据迁移",
subtasks_results=[
SubTask(goal="盘点当前数据库", task_type=TaskType.RETRIEVE),
SubTask(goal="起草迁移时间表", task_type=TaskType.WRITE),
],
)
print(aggregated.synthesized_result)
由于它继承自 BaseModule,如果您的聚合策略需要外部调用,仍然可以附加工具(例如知识库检索函数)。
✅ 验证器
位置: roma_dspy/core/modules/verifier.py
目的: 验证合成输出是否满足原始目标。
输入(VerifierSignature):
goal: strcandidate_output: str
输出:
verdict: boolfeedback: Optional[str]
使用方法:
verdict = verifier.forward(
goal="起草符合 GDPR 的隐私政策",
candidate_output=aggregated.synthesized_result,
)
if not verdict.verdict:
print("需要修订:", verdict.feedback)
🎯 高级模式
运行时替换模型
使用 replace_lm() 可以在同一个模块中使用不同的语言模型(适用于 A/B 测试或备用方案)。
fast_executor = executor.replace_lm(dspy.LM("openrouter/anthropic/claude-3-haiku"))
每次调用的覆盖
您可以在不重新构建模块的情况下,改变语言模型的行为或提供额外参数。
executor.forward(
"总结会议记录",
config={"temperature": 0.1, "max_tokens": 300},
context={"stop": ["Observation:"]},
)
call_params(或关键字参数)会被过滤,以匹配 DSPy 预测器接受的参数,从而防止意外错误。
仅工具执行
如果您希望实现确定性的工具路由,可以设置一个虚拟语言模型(或极低温模型),并传入纯 Python 可调用对象。
from roma_dspy import Executor
executor = Executor(
prediction_strategy="code_act",
lm=dspy.LM("openrouter/openai/gpt-4o-mini", temperature=0.0),
tools={"get_weather": get_weather, "lookup_user": lookup_user},
)
ROMA 将确保构造函数和每次调用中提供的工具都可供策略使用。
🧪 测试
# 运行所有测试
just test
# 运行特定测试
pytest tests/unit/ -v
pytest tests/integration/ -v
参阅: justfile 中包含所有可用的测试命令。
💡 故障排除与提示
ValueError: Either provide an existing lm— 在构造模块时,请提供lm=或model=。Invalid prediction strategy— 检查拼写;字符串不区分大小写,但必须匹配已知别名。- 缓存 — 在您的语言模型上启用
cache=True,或在model_config中设置,以重用之前的完成内容。 - 异步上下文 — 在混合同步和异步调用时,确保事件循环正在运行(例如使用
asyncio.run)。 - 工具重复 — 工具会按身份去重;如果您需要变体,请创建不同的函数。
📖 术语表
核心概念
- DSPy: 斯坦福大学的声明式框架,用于提示、规划和工具集成。
- 预测策略: 驱动推理的 DSPy 类或函数(CoT、ReAct 等)。
- 子任务: 描述分解后工作单元的 Pydantic 模型(
goal、task_type、dependencies)。 - 节点类型: Atomizer 选择的是
PLAN还是EXECUTE。 - 任务类型: 子任务的 MECE 分类(
RETRIEVE、WRITE、THINK、CODE_INTERPRET、IMAGE_GENERATION)。 - 上下文默认值: 每次调用时传递给
dspy.context(...)的关键字参数。
配置与存储
- FileStorage: 执行范围内的存储管理器,为每次任务执行提供隔离的目录。
- DataStorage: 自动 Parquet 存储系统,用于大型工具包响应(基于阈值)。
- 执行 ID: 每次任务执行的唯一标识符,用于存储隔离。
- 基础路径: 所有存储操作的根目录(本地路径或 S3 存储桶)。
- 配置文件: 命名的配置预设(例如
general、crypto_agent)。 - 配置覆盖: 运行时值,会覆盖配置文件或默认设置。
工具包
- BaseToolkit: 提供存储集成和工具注册的所有工具包的抽象基类。
- REQUIRES_FILE_STORAGE: 元数据标志,表示工具包需要 FileStorage(例如 FileToolkit)。
- 工具包配置: 工具包特有的设置,如 API 密钥、超时时间和阈值。
- 工具选择: 包含/排除列表,用于筛选工具包中可用的工具。
- 存储阈值: 大小限制(KB),超过该限制的响应将以 Parquet 格式存储。
架构
- 执行范围隔离: 每次执行都会获得唯一的存储目录的模式。
- Parquet 集成: 自动列式存储,用于大型结构化数据。
- S3 兼容性: 可通过 Docker 卷挂载使用兼容 S3 的存储。
- 工具注册: 自动发现并注册工具包方法为可调用工具。
祝您构建愉快!如果您扩展或自定义模块,请保持签名一致,以便您的高层编排保持稳定。
附加资源:
- 快速入门指南 - 10 分钟内上手
- 配置指南 - 完整配置参考
- 工具包参考 - 所有内置和自定义工具包
- 部署指南 - 使用 Docker 进行生产部署
- E2B 设置 - 代码执行工具包设置
- 可观测性 - MLflow 跟踪与监控
- 配置系统 - 配置文件及示例
📊 基准测试
我们使用 ROMA 实现的一个简单搜索系统——ROMA-Search,在三个基准测试中进行了评估:SEAL-0、FRAMES 和 SimpleQA。以下是每个基准测试的性能图表。
SEAL-0
SealQA 是一个新的具有挑战性的基准测试,用于评估搜索增强型语言模型在事实查询方面的能力,尤其是在网络搜索产生冲突、噪声或无帮助结果的情况下。

FRAMES
查看完整结果
这是一个全面的评估数据集,旨在测试检索增强生成(RAG)系统在事实准确性、检索精度和推理能力方面的表现。

SimpleQA
查看完整结果
一个事实性基准测试,用于衡量语言模型回答简短、以获取事实为目的的问题的能力。

🧩 基础与渊源
尽管 ROMA 引入了一个实用的开源分层任务执行框架,但它直接建立在两项基础性研究贡献之上,这些贡献首次发表于 WriteHERE:
异构递归规划 — ROMA 的整体架构遵循先前关于 异构递归规划 的工作所提出的框架,在该框架中,复杂任务会被递归地分解为子任务图,每个子任务都被赋予一种独特的认知类型。
分解中的类型指定 — ROMA 的“三大通用操作”(THINK 🤔、WRITE ✍️、SEARCH 🔍)推广了 分解中的类型指定 假说,该假说指出推理、创作和检索是三种基本的认知类型。
这些贡献在 WriteHERE 仓库和论文中得到了详细描述。通过明确采纳并扩展这一基础,ROMA 提供了一个 可泛化的框架、智能体系统、多功能性和可扩展性,它基于这些洞见,并使其能够被跨领域的开发者所使用。
🙏 致谢
如果没有这些出色的开源贡献,这个框架将无法实现!
- 受 Xiong 等人发表的《超越提纲:异构递归规划》(https://arxiv.org/abs/2503.08275) 中描述的分层规划方法启发。
- Pydantic - 使用 Python 类型注解进行数据验证
- DSPy) - 用于编程 AI 智能体的框架
- E2B - 用于 AI 智能体的云端运行时
📚 引用
如果您在研究中使用了 ROMA 仓库,请引用以下内容:
@misc{alzubi2026romarecursiveopenmetaagent,
title={ROMA: 面向长周期多智能体系统的递归式开放元智能体框架},
author={Salaheddin Alzu'bi、Baran Nama、Arda Kaz、Anushri Eswaran、Weiyuan Chen、Sarvesh Khetan、Rishab Bala、Tu Vu、Sewoong Oh},
year={2026},
eprint={2602.01848},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/abs/2602.01848},
}
🌟 星标历史
📄 许可证
本项目采用 Apache 2.0 许可证授权 — 详情请参阅 LICENSE 文件。
版本历史
v0.2.0-beta2025/10/22ROMA2025/09/04常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
n8n
n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。
AutoGPT
AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台,核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点,让用户只需设定目标,AI 即可自主规划步骤、调用工具并持续运行直至完成任务。 无论是开发者、研究人员,还是希望提升工作效率的普通用户,都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体;研究人员能基于开源架构探索多智能体协作机制;而非技术背景用户也可直接选用预置的智能体模板,立即投入实际工作场景。 AutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑,每个块负责单一动作,灵活且易于调试。同时,平台支持本地自托管与云端部署两种模式,兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本,即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛,让人人都能成为 AI 的创造者与受益者。
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

