omo 工作流概述

omo(Orchestrated Multi-objective Optimization)是 PinableAgents 中最具智能化特征的工作流。与 do 工作流的线性七阶段流程不同,omo 采用信号驱动的动态路由机制——它不预设固定的执行路径,而是根据任务的实时分析结果,动态决定调用哪些智能体、以何种顺序执行。

omo 的核心设计思想是"面对不确定性,让系统自己找到最优路径"。在 Bug 调查、复杂重构、性能优化等不确定性较高的场景中,开发者往往无法在任务开始时就确定最佳的解决路径。omo 通过持续收集和分析任务执行过程中的信号,动态调整编排策略,模拟了经验丰富的技术 Leader 在面对复杂问题时的决策过程。

omo 的价值在于处理那些"你不知道不知道什么"的任务。当需求明确时用 do,当问题模糊时用 omo。

风险信号检测机制

omo 的路由决策基于三类核心风险信号的实时检测。每类信号都有量化的评分体系,综合得分决定了任务的复杂度等级和对应的路由策略。

复杂度信号(Complexity Signals)

衡量任务本身的技术复杂度。系统通过分析任务描述、涉及的代码量和技术栈来计算复杂度得分。

信号指标检测方式权重
涉及文件数代码库搜索匹配0.25
跨语言/框架文件扩展名和导入分析0.20
算法复杂度任务描述关键词识别0.20
并发/异步涉入goroutine/async/channel 模式匹配0.20
外部依赖数量go.mod/package.json 分析0.15

跨模块影响信号(Cross-module Impact Signals)

评估任务变更对其他模块的影响范围。高跨模块影响意味着变更可能引发级联效应,需要更审慎的路由策略。

  • 调用链深度:变更点在调用链中的位置,越底层影响越大
  • 共享状态:是否涉及全局变量、共享缓存、公共数据库表
  • 接口变更:是否修改了公开的 API 契约或内部接口定义
  • 配置耦合:是否涉及影响多个模块行为的配置项

数据完整性信号(Data Integrity Signals)

检测任务是否涉及数据模型变更、数据库迁移或数据转换逻辑。数据相关的变更通常不可逆,需要最高级别的审慎处理。

路由决策算法

omo 的路由引擎基于加权信号评分进行决策。每个信号类别的得分范围是 0-100,综合得分通过加权平均计算:

综合得分 = 复杂度得分 * 0.4 + 跨模块影响 * 0.35 + 数据完整性 * 0.25

路由策略映射:
  得分 0-30   -> 轻量路由(Light Route)
  得分 31-60  -> 标准路由(Standard Route)
  得分 61-85  -> 深度路由(Deep Route)
  得分 86-100 -> 完全路由(Full Route)

每种路由策略对应不同的智能体组合和执行流程。轻量路由可能只调用一个修复智能体直接解决问题,而完全路由则会调用探索、假设生成、多路径验证等多个智能体协作完成。

决策树详解

以下是 omo 路由引擎的决策树结构,以文本形式呈现。每个决策节点根据信号评分选择分支路径。

任务输入
  |
  +-- [信号采集] 分析任务描述和代码库
  |
  +-- 综合得分 <= 30?
  |     |
  |     YES -> 轻量路由
  |     |       +-- 调用 quick-fix 智能体
  |     |       +-- 直接实现并验证
  |     |       +-- 完成
  |     |
  |     NO -> 综合得分 <= 60?
  |           |
  |           YES -> 标准路由
  |           |       +-- 调用 code-explorer
  |           |       +-- 调用 bugfix 或 refactor 智能体
  |           |       +-- 运行验证套件
  |           |       +-- 完成
  |           |
  |           NO -> 综合得分 <= 85?
  |                 |
  |                 YES -> 深度路由
  |                 |       +-- 调用 code-explorer(深度模式)
  |                 |       +-- 启用 EHRB 循环
  |                 |       +-- 调用 hypothesis-generator
  |                 |       +-- 多路径并行验证
  |                 |       +-- 调用 integration-tester
  |                 |       +-- 完成
  |                 |
  |                 NO -> 完全路由
  |                         +-- 调用 code-explorer(全量扫描)
  |                         +-- 启用 EHRB 循环(最大深度)
  |                         +-- 调用 architect(重新评估架构)
  |                         +-- 多路径并行验证 + 回归测试
  |                         +-- 调用 security-reviewer
  |                         +-- 人工审查检查点
  |                         +-- 完成

智能体池与能力矩阵

omo 工作流可以调用的智能体池包含以下成员,每个智能体有明确的能力边界和调用条件。

智能体核心能力触发条件
code-explorer代码库结构分析、依赖追踪、调用链映射所有路由策略
quick-fix小范围单文件修复轻量路由
bugfixBug 定位和修复,含根因分析标准及以上路由
refactor代码重构,保持行为不变标准及以上路由
debug运行时调试,日志分析,断点追踪深度及以上路由
hypothesis-generator生成问题假设并设计验证实验深度及以上路由
architect架构级评估和重构方案设计完全路由
security-reviewer安全漏洞检测和修复建议完全路由

EHRB 模式详解

EHRB(Explore-Hypothesize-Repair-Backtrack)是 omo 在深度和完全路由中使用的核心问题解决模式。它模拟了资深工程师调试复杂问题时的思维过程。

Explore(探索)

在已有信息的基础上,深入探索问题的具体表现和上下文。这一步不是泛泛的代码浏览,而是带有明确目标的定向探索——根据已知的症状和线索,聚焦在最可能的问题区域。

Hypothesize(假设)

基于探索结果生成问题根因的假设列表。每个假设都附带置信度评分和可验证的预测。例如:"假设竞态条件发生在 goroutine A 和 B 对共享 map 的并发读写(置信度 75%),预测:加入 -race 标志后可重现"。

Repair(修复)

针对最高置信度的假设实施修复方案。修复在隔离的 Git worktree 中进行,不影响主代码库。修复完成后自动运行验证测试。

Backtrack(回溯)

如果修复未能通过验证,系统回溯到 Hypothesize 阶段,排除已证伪的假设,重新评估剩余假设的置信度,并可能基于新发现生成新的假设。这个循环最多执行五次,超过后请求人工介入。

# EHRB 循环的日志输出示例
[omo:ehrb] 循环 1/5
[omo:ehrb:explore] 分析 goroutine dump...检测到 2 处潜在数据竞争
[omo:ehrb:hypothesize] 假设 1: sync.Map 未正确初始化 (置信度: 80%)
[omo:ehrb:hypothesize] 假设 2: channel 关闭后仍有写入 (置信度: 45%)
[omo:ehrb:repair] 实施假设 1 的修复方案...
[omo:ehrb:repair] 运行验证: go test -race ./...
[omo:ehrb:repair] 验证通过! 竞态条件已解决

实战:调试竞态条件

以下演示使用 omo 工作流调试一个 Go 项目中的竞态条件问题。

问题描述

项目在高并发场景下偶发 panic,错误信息为 concurrent map writes。问题在本地环境难以稳定复现,仅在 CI 的 -race 检测中触发。

启动 omo 工作流

# 使用 omo 调查并修复竞态条件
pinable-agents run omo \
  --task "修复高并发场景下 concurrent map writes panic" \
  --context "CI 日志显示 data race 在 cache/store.go:47"

# 或通过 codeagent CLI 直接调用
codeagent --backend claude --workflow omo \
  --task "fix concurrent map writes in cache module"

路由过程

omo 的信号检测引擎分析后得出:复杂度得分 72(并发问题触发高权重),跨模块影响 55(cache 模块被多处调用),数据完整性 40。综合得分 58.35,进入标准路由。然而由于检测到"并发"关键信号,路由引擎将其提升至深度路由,启用 EHRB 循环。这种信号触发的路由提升是 omo 的核心智能特征之一。

跨模块重构路由

当 omo 检测到任务涉及跨模块重构时,会激活特殊的重构路由策略。该策略的核心是"变更隔离"——将大范围的重构拆解为多个可独立验证的小变更,每个小变更都在独立的 Git worktree 中完成,通过测试后才合入主分支。

重构路由的典型流程是:首先调用 architect 智能体评估重构范围和风险;然后将重构拆解为有序的变更步骤;每个步骤由 refactor 智能体执行并由 integration-tester 验证;最后由 code-reviewer 进行全量审查。

CLI 命令参考

# 基本用法
pinable-agents run omo --task "任务描述"

# 指定最大 EHRB 循环次数
pinable-agents run omo --task "任务描述" --max-ehrb-cycles 3

# 强制使用特定路由策略
pinable-agents run omo --task "任务描述" --route deep

# 输出路由决策详情(不执行)
pinable-agents run omo --task "任务描述" --dry-run

# 附加上下文信息
pinable-agents run omo --task "任务描述" \
  --context-file ./error-log.txt \
  --context "仅在 Linux CI 环境复现"

与 do 工作流的对比

维度do 工作流omo 工作流
执行路径线性七阶段信号驱动动态路由
适用场景需求明确的功能开发Bug 调查、复杂重构、性能优化
不确定性容忍低(需要明确需求)高(可以从模糊问题开始)
智能体数量固定 7 个动态 2-8 个
执行时间可预测取决于问题复杂度
回溯机制阶段间回退EHRB 循环回溯