← 所有文章
· 4 分钟阅读

Open Multi-Agent v1.14:修复计划,保留记录

发布自适应恢复执行路由治理式编排releaseorchestrationrecoverytypescript
证据版本说明

描述已经发布的 v1.14.0 运行时能力,并链接到按版本固定的 Reference 文档。

v1.13 把四个运行时边界变成了显式能力。v1.14 让其中两个可以在监管下移动:任务图 可以在运行中被修复,自动路由也可以请求一次语义上的第二意见。两者都需要显式开启。 另外,三条过去会静默通过、然后跑出错误行为的校验路径,现在会在一开始就失败。

Terminal window
npm install @open-multi-agent/[email protected]
npm create oma-app@latest my-oma

修复计划中尚未执行的部分

重试是把同一个任务再跑一遍,完全重新规划则会丢掉已经成功的部分。 recovery.mode: 'repairable' 提供了中间选项:当一个任务成功、失败或被共识校验 拒绝之后,Replanner 可以针对图中尚未开始的部分,提出一个只追加的 PlanPatch

import { type Replanner } from '@open-multi-agent/core'
const replanner: Replanner = {
name: 'fallback-search',
replan(outcome) {
if (outcome.kind !== 'failure' || outcome.task.title !== 'Search') return undefined
const analysis = outcome.tasks.find((task) => task.title === 'Analysis')
if (!analysis) return undefined
return {
reason: 'Primary search failed; use the fallback source.',
supersedePending: [analysis.id],
addTasks: [
{ key: 'fallback-search', title: 'Fallback Search', description: '…', assignee: 'researcher-b' },
{ key: 'replacement-analysis', title: 'Replacement Analysis', description: '…', assignee: 'analyst', dependsOn: ['fallback-search'] },
],
}
},
}
const result = await orchestrator.runTasks(team, tasks, {
recovery: { mode: 'repairable', replanner, maxPlanRevisions: 3, maxAddedTasks: 20 },
})

补丁落在一个结果屏障上,而不是塞进重试循环。OMA 会校验 Agent 资格、限额、任务 状态、引用关系与生成的 DAG;执行可选的 onPlanPatch 审批;原子地应用补丁;在开启 checkpoint 时先落盘;只有到这一步之后,触发补丁的那个任务才会完成或向下游级联。 一个下游任务不会在它的替代方案还没定下来时就先启动。

补丁可以追加任务(addTasks)、改派处于 pending 或 blocked 的任务 (retargetPending),或跳过一个(supersedePending)。没有任何东西被改写或删除, 引用用的是任务 ID 而不是标题。result.tasks 里的历史保持真实:被修复的失败仍然是 failed,并带上 recoveredByRevision;被替换的分支是 skipped,并带上 supersededByRevision。已接受的修订会回到 result.planRevisions,也会出现在 progress event 和可观测性 span 里。

边界和机制同样重要。修复只能向前——OMA 不会撤销任务已经产生的外部副作用。 runFromPlan() 是精确重放,会拒绝 repairable 恢复。触及限额时补丁会被拒绝,而不是 被悄悄截断。onTaskOutcome 是不想定义具名 Replanner 时的简写;两者只配置一个。

详见自适应恢复

给路由一次语义上的第二意见

自动 runTeam() 路由默认仍然是确定性的。strategy: 'hybrid' 最多增加一次不带工具的 模型调用,而且只在确定性路由器本来会选择 Single 时才发生:

const orchestrator = new OpenMultiAgent({
executionRouting: {
strategy: 'hybrid',
confidenceThreshold: 0.7,
failurePolicy: 'fallback',
},
})

选择拓扑的不是模型。LLMTaskProfiler 返回一份严格的 TaskProfile——独立证据来源、 独立评审、目标冲突、副作用意图、权限隔离、可分解性、并行度、复杂度、置信度,以及 有边界的理由——然后由一套确定性策略结合框架自身计算出的事实来消费它。高置信度信号 可以把 Single 升级为 Team。推断出的副作用或隔离需求,如果与高影响的实际工具授权、 或调用方声明的多个 permissionBoundary 相交,就会在任何 Coordinator、worker 或 可用工具的 Agent 启动之前抛出 ROUTING_DECLARATION_REQUIRED。置信度不足时保持 Single。V1 永远不会把 Team 降为 Single。

Profiler 被当作敌意输入面来处理。目标文本是不可信数据;Profiler 拿不到 Agent 或 Coordinator 的 system prompt、凭据、工具实现或完整权限细节,也不能调用工具。Profile 永远不会创建 requiredRoles、批准一次副作用,或证明治理已被满足——真实执行的拓扑、 最终的工具授权与 ExecutionReceipt 仍然是治理事实。

有两处值得刻意配置。内置 Profiler 按这个顺序解析 adapter:单次运行与 orchestrator 级的 executionRouting.adapter,然后是 Coordinator adapter,最后是用 orchestrator 默认 provider 构造的 adapter——也就是说,目标文本可能通过一条以前根本不会调用 defaultProvider 的路径到达它。如果你有数据驻留或 provider 边界要求,请显式设置 adapter、提供 Coordinator adapter,或者继续用 strategy: 'deterministic'。另外,只对通过了文档中 Shadow 闸门的 provider/模型组合开启 hybrid;Shadow 评估是发布工程手段,不是运行时模式。

在默认的 failurePolicy: 'fallback' 下,路由失败仍然只是提示性的。设为 'fail' 则会 直接终止,并抛出 RoutingProfilerFailedErrorRoutingTimeoutError;机器可读的 statusrequestedRouterVersionfallbackCode 字段让你不必再解析给人看的 reasons。 一旦跑过语义分析,semanticRoutingAssessment 会报告推断出的 profile、确定性决策、 语义建议、实际拓扑与用量——这部分用量计入本次运行的 token 与成本预算。

hybrid 之下的确定性策略详见执行路由,hybrid 本身详见 v1.14 路由参考

让过去静默失败的地方 fail closed

三条校验路径从宽松改为严格:

  • 无效的任务依赖图会被提前拒绝,而不是先执行一个只有部分有效的计划。
  • Coordinator 面对无法校验的计划会 fail closed,而不是继续往下跑。
  • 任务要求被当作全局硬约束执行。没有任何 Agent 能满足其要求的任务会被拒绝,而不是 派给一个不合格的 Agent。validateTaskRequirements 已导出,供需要在派发前核对 阵容的调用方使用。

这是一次真实的行为变化:过去带着无效 DAG 或无法满足的要求”跑完”的运行,现在会在 校验阶段失败,把本来就存在的缺陷暴露出来。正确的图与阵容不受影响。这些新的失败模式 都有导出的类型化错误——InvalidTaskRequirementsErrorRoutingDeclarationRequiredErrorRoutingProfilerFailedErrorRoutingTimeoutErrorUnsupportedToolCallError

平台与兼容性

Node.js 20 是新的下限@open-multi-agent/core@open-multi-agent/otelcreate-oma-app 同步提升;Node 18 已于 2025-04-30 结束生命周期。推荐运行时是 Node 22 或 24——20 只是一个迁移窗口,下一个大版本会移除它,时间不早于 2026-10-31。

内置的 openai 依赖从 v4 升到 v6。用户主动中止现在被归类为取消,而不是可重试的失败; OpenAI 兼容响应里如果出现独立的 custom 工具调用变体,会抛出 UnsupportedToolCallError, 而不是塌缩成一次空的成功回合。

DeepSeek V4 Flash 获得原生推理控制:AgentConfig.thinking.enabled 映射到 DeepSeek 的 thinking.typethinking.effort 接受 DeepSeek 专有的 'max',并且不会把它转发给 OpenAI、Azure OpenAI 或 GitHub Copilot。

1.13.0 的所有公开导出都仍然保留,新增的结果与配置字段都是可选的,因此现有调用方和已 序列化的结果继续能通过类型检查。自适应恢复引入了携带计划修订历史的第 2 版任务队列 快照;TaskQueue.fromSnapshot() 仍然接受第 1 版快照,早期版本写下的 checkpoint 依然 可以恢复。

阅读完整的 v1.14.0 Release Notes, 或从快速开始入手。


阅读英文原文

// 企业服务

要把它用到生产环境?

open-multi-agent 采用 MIT 许可、可自行免费运行。当你需要在期限内交付、集成,或获得支持时,元定义科技(YuanASI)提供商业交付与支持。

// 直接联系

把 Open Multi-Agent 用进真实业务

联系框架作者本人,帮你梳理 AI 落地目标、让 AI 真正与业务结合

可提供的工程服务
S-01

AI Agent 定制开发

业务梳理、Agent 设计、Prompt 评估、生产部署、私有化与持续支持。

S-02

多智能体系统集成

多 Agent 架构编排、RAG、CRM / ERP / API 对接、性能与稳定性调优。

S-03

企业 AI 咨询

AI 场景评估、技术选型、POC、ROI 估算与落地路线规划。