OMA 开放多智能体运行时
自托管智能体运行时,以持久审批和可离线验证的记录管控关键操作。
- Star 数
- ★ 7k
- 最近更新
- 今天
- License
- MIT
- 主语言
- TypeScript
- FA 评分
- 55/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台Codex · Claude Code · OpenAI API · Claude API
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- 需要让文件写入或 Shell 操作先经人工批准的后端团队,可用持久审批在服务重启后继续处理同一请求。
- 不适合
- 需要托管控制台或厂商云服务的团队,OMA 没有账号与后端
- 希望用 Node.js 20 以下版本或不愿跟进 LTS 迁移的团队
- 需要审批存储具备原子比较交换能力之外的简单存储方案
- 源码审查
- 55/100 · 缺口较多
这个 Agent 能做什么,适合哪些场景?
OMA 是采用 MIT 许可证的自托管 TypeScript 智能体运行时,核心以 @open-multi-agent/core 库交付,不依赖 OMA 托管账户或控制平面。它提供 runAgent()、runTasks() 和 runTeam() 三种执行模式,分别用于单智能体、显式任务流水线和由协调器规划的多智能体任务图。运行时可调用托管模型、本地服务器、OpenAI 兼容端点、Vercel AI SDK 提供方,以及通过进程或 ACP 后端接入的外部编码智能体。关键计划、任务分派或工具调用可以暂停并写入检查点,待审批后从持久状态恢复。日志后端会记录模型所见内容块、工具调用、结果与上下文改写,verifyRun() 可离线检查记录的内容与事件来源是否逐字节一致。项目还包含本地 Run Viewer、可选的 @open-multi-agent/otel 适配器和 create-oma-app 脚手架,适合需要自行控制模型密钥、运行环境、审批和审计资料的团队。
开发者用 OpenMultiAgent 创建智能体或团队,并通过 runAgent() 执行单个智能体、通过 runTasks() 执行已定义的流水线,或通过 runTeam() 从目标生成带负责人和依赖关系的任务图。runTeam() 先用一次模型调用生成任务规格,再由确定性调度器执行,最后通过第二次模型调用汇总已完成任务;协调器不会在执行途中介入。智能体能够使用所配置的工具,关键工具调用、计划或任务分派可返回 suspend,审批请求会与检查点一起保存,并绑定到审批者所见内容的 SHA-256 哈希。审批决定采用原子、先到先得机制;请求遭篡改或存储不支持比较并交换时会安全失败。启用日志后,系统记录模型输入块、工具调用及结果和上下文改写,verifyRun() 可冷读取并离线验证内容血缘;被逐出的上下文窗口会报告为无法确定,而不是验证失败。运行结果还可包含任务状态、负责人、依赖、令牌用量、待审批项、治理执行回执及供离线 Run Viewer 检查的跟踪数据。
- 需要让文件写入或 Shell 操作先经人工批准的后端团队,可用持久审批在服务重启后继续处理同一请求。
- 受治理要求约束的组织,可声明必需角色和独立复核要求,并用执行回执检查实际执行顺序与依赖关系。
- 希望在内网或受限环境运行模型的团队,可连接 Ollama、vLLM、llama-server 或其他 OpenAI 兼容端点,并配置离线或出站白名单策略。
- 构建代码审查、安全分析或教学工作流的 TypeScript 开发者,可用
create-oma-app选择现成模板并运行无需 API 密钥的确定性演示。 - 已有明确步骤的自动化系统可用
runTasks()固定任务流水线;需要动态拆解目标时则可采用runTeam()。 - 需要审计智能体上下文来源的运维或合规团队,可保存运行日志,并用
verifyRun()在离线环境逐字节核验记录。
如何安装或部署这个 Agent?
需要 Node.js 20 或更高版本;生产环境应使用仍在维护的 Node.js LTS。Node.js 20 仅作为迁移兼容窗口保留,并计划在下一个主版本移除,时间不早于 2026-10-31。
创建示例应用:
npm create oma-app@latest my-oma在交互式终端中选择模板和运行时后,脚手架会安装依赖并启动确定性本地演示。该演示不需要 API 密钥,也不会发出模型请求。
若要接入现有后端,安装核心包:
npm install @open-multi-agent/core使用 OpenAI 示例时设置凭据:
export OPENAI_API_KEY="your-api-key"其他托管模型、本地服务器、OpenAI 兼容端点和 AI SDK 提供方需要按相应提供方配置密钥或 baseURL。
如何使用这个 Agent?
以下示例建立一个会暂停关键工具调用的团队,并将检查点保存到本地文件:
import { FileStore, OpenMultiAgent } from '@open-multi-agent/core'
const oma = new OpenMultiAgent({
defaultProvider: 'openai',
defaultModel: 'gpt-5.4',
onToolCall: ({ consequential }) => (consequential ? { action: 'suspend' } : { action: 'allow' }),
})
const team = oma.createTeam('ops', {
name: 'ops',
agents: [{ name: 'operator', systemPrompt: 'Reconcile overdue invoices.', toolPreset: 'readwrite' }],
})
const result = await oma.runTeam(team, 'Find overdue invoices and draft the reminders.', {
checkpoint: { store: new FileStore('./.oma/run.json') },
})当 result.status?.code 为 suspended 时,应用需要让审核者处理 result.pendingApprovals;每项请求都绑定到审核者看到的确切内容。若工作图已知,可改用 runTasks();只需单个智能体时使用 runAgent()。启用日志后,可用 verifyRun() 对保存的运行记录进行离线验证。
这个 Agent 有哪些优点和局限?
- 审批请求与检查点持久化,并通过 SHA-256 绑定审核内容;篡改或缺少比较并交换能力时会安全失败。
- 可离线逐字节验证模型输入块、工具调用、结果与上下文改写的来源,并明确区分验证失败和因窗口逐出而无法确定。
- 没有遥测或 OMA 托管控制平面,可使用自己的密钥、部署环境、云端模型、本地模型或 OpenAI 兼容端点。
- 同时覆盖单智能体、显式流水线和动态任务图,并提供本地 Run Viewer 与可选 OpenTelemetry 集成。
- 支持治理执行回执,可在不读取智能体输出文本的情况下检查角色、顺序、依赖和独立复核。
- 需要 Node.js 20 或更高版本;生产环境还需跟随受维护的 LTS,且 Node.js 20 已进入明确的后续主版本迁移窗口。
runTeam()会额外使用模型调用进行任务规划和最终汇总,因此相较已知流程的runTasks()会增加模型调用和协调成本。- 持久审批依赖支持原子比较并交换的存储;不具备该能力的存储会安全失败,接入生产存储时需要验证语义。
- 日志验证证明内容及血缘能够重现,并不证明底层日志文件从未被编辑。
- 出站策略不覆盖进程和 ACP 后端;若组织依赖这些外部智能体后端,需要另行管控其网络与执行边界。
这个 Agent 与同类方案有什么区别?
runAgent() 适合单个智能体,runTasks() 适合调用方已经知道任务图的确定流程,runTeam() 则用协调器从目标动态生成任务规格和依赖图。与集中式托管控制平面相比,OMA 明确采用自托管库、本地检查点和离线查看方式;需要集中监控的团队可另装 @open-multi-agent/otel,把跟踪数据接入现有 OpenTelemetry 系统。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| OMA 开放多智能体运行时 当前 | 55 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 7k | 今天 | TypeScript | Codex · Claude Code · OpenAI API · Claude API |
| AgentScope 2.0 | 70 · 存在缺口 | 代码库 / SDK免费 + 模型费 | ★ 36k | 3 天前 | Python | OpenAI API · Claude API |
| Selectools | 65 · 存在缺口 | 代码库 / SDK免费 + 模型费 | ★ 11 | 4 天前 | Python | OpenAI API · Claude API |
| Pi Jev 语义路由器 | 80 · 表现良好 | Agent 插件 / 技能免费 + 模型费 | ★ 72 | 9 天前 | TypeScript | — |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
证据显示工具默认拒绝、逐次调用门控、审批和暂停机制,以及隐私控制,但敏感数据处理细节不足,依赖安全未充分展示,发布者身份未验证。
代码和测试显示重试、超时、循环检测、预算限制,以及清晰的失败消息,但依赖可用性未充分验证。
文档明确目标受众和场景,能力边界清晰,触发精确,环境适配良好。
信息架构清晰,安装说明详细,示例丰富,但已知限制和版本变更记录不足,维护责任不明确。
输出可用性高,边际价值明显,但成本效益分析不足。
声明有部分证据支持,但缺乏独立来源验证,事实与推断区分不明确。
- 发布者身份未验证,需谨慎评估供应链风险。
- 敏感数据处理细节不足,需进一步审查。
- 依赖安全未充分展示,建议检查依赖清单。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
Breaking changes This release ships as a minor version, so a caller on a ^1.x range receives it without an explicit upgrade step. A project that pins zod below 3.25, code that uses object-only members of taskProfileSchema or gatePolicySchema, and a coordinator plan over the new size caps can stop working after the upgrade. The individual entries are under Changed below. …在 GitHub 查看 ↗ -
发布说明摘录
Breaking changes This release ships as a minor version, so a caller on a ^1.x range receives it without an explicit upgrade step. A caller that passes malformed task metadata or disables thinking on MiniMax-M3.1-Flash still installs, then fails when the code runs. The individual entries are under Changed and Fixed below. …在 GitHub 查看 ↗ -
发布说明摘录
Fixed - Symlink loops and chains longer than the kernel's link limit now fail the sandbox check with a Too many levels of symbolic links error. Earlier versions also failed these writes, with the filesystem error instead. - A symlink target that ends in a separator or . must now name an existing directory, as the kernel requires. On macOS, earlier versions resolved such a link to the file of that name, so file_write overwrote it. Security …在 GitHub 查看 ↗
常见问题
必须使用云端模型或 OpenAI 吗?
baseURL 使用 Ollama、vLLM、llama-server 或其他 OpenAI 兼容端点。没有 API 密钥可以先试用吗?
npm create oma-app@latest my-oma 提供使用脚本化模型响应的确定性本地演示,不需要 API 密钥,也不会发出模型请求。服务重启后,待审批运行会丢失吗?
离线验证能证明日志绝未被修改吗?
verifyRun() 验证每个内容块能否从具名来源事件逐字节重现,证明内容血缘与一致性;项目明确说明它不证明文件从未被编辑。