论文链接:From General Agents to RCA Experts: A Self-Evolving Harness for Root Cause Analysis 发表时间:2026年8月 机构:香港中文大学(CUHK)+ 字节跳动 + 独立研究者——企业+高校合作:高校侧(CUHK Michael Lyu 团队)负责方法设计与公共基准评估,字节跳动提供真实生产数据集(Company A 云服务变更异常数据,773,340 数据点、88 个确认异常)与工业部署验证,是「学术方法 + 产业落地」双轮驱动的典型合作。 领域标签:cs.SE / AIOps / Agent 工程 / 根因分析
一、论文背景
根因分析(Root Cause Analysis, RCA) 是运维领域最紧迫的任务之一:现代软件由大量微服务组成网状结构,某个服务劣化时,症状(延迟尖峰、错误激增)常在远离病因的地方浮现并沿依赖链传播——RCA 就是从系统的指标、日志、调用链这三种遥测数据中定位那个真正的病因(哪个组件、什么故障类型、何时开始)。一次生产事故可能让值班工程师花几十分钟才能定位。
LLM 时代的 RCA 自动化有两条路:路线一,直接拿通用 Agent(Codex、Claude Code)来诊断——它们自带成熟的工具调用、代码执行、沙箱与长程规划;路线二,从零构建专用 RCA Agent(如 RCA-Agent、mABC),为任务定制 ReAct 循环、管线与多智能体协作。两条路都遇到天花板:通用 Agent 平均 Top-1 准确率只有 36.1%(最强配置 GPT-5.5 也才 51.2%);专用 Agent 则在为 OpenRCA 定制后在 RCAEval 上崩到 5.1%,无法泛化。
论文的诊断很关键:通用 Agent 的短板不是推理能力,而是像「刚入职的全能工程师」——会推理,但不了解这套系统。一个真实失败案例:Telecom 系统凌晨 2:15 的延迟尖峰,Agent 正确定位了异常窗口,却把根因归给绝对跳变最大的主机网络错误计数器——但这个计数器在该系统里长期受负载噪声污染;真因是某容器 CPU 饱和(从近零基线只小幅偏移)。缺的是系统特定诊断知识:哪个指标在这个系统里是噪声、近零基线的小偏移比大幅摆动更重要——这些恰是专家 SRE 逐年积累、几乎无法预先写全的经验(微软 4000+ 篇故障排查指南仍靠手写;有记录指南的事故中 36.2% 至少复发两次;152 起高严重性事故 90% 以上靠既有流程缓解)。
于是论文提出外部 harness(external harness)的概念:包裹整个通用 Agent 之上、在通用能力之外的任务特定适配层——这正是近年兴起的「harness engineering」研究方向在 Ops 域的空白。
二、论文定位和关联工作
论文处在三条研究线的交汇处:
LLM-based RCA 谱系。经典方法用依赖图/因果推断/频谱分析(MicroRCA、Sage、Eadro、BARO);LLM 方法构建专用 Agent:RCAgent 与 OpenRCA 的 RCA-Agent 在原始遥测上规划-写码-推理,mABC 与 Flow-of-Action 按标准作业流程协调角色化多智能体,RCACopilot/Xpert 从工单和日志辅助事件管理。共同局限有二:无法利用快速迭代的通用 Agent(等于每次都在重新实现且通常实现得更差的通用机制),以及是固定框架、不学习不进化。OpsHarness 以「首个自进化外部 RCA harness」同时补上两个缺口。
Harness 工程谱系。CoALA 命名了 Agent 的记忆/技能/工具组件;后续综述把 Agent 构建重构为「把能力外置到记忆、技能与工具」;各组件各有专门研究(agent-computer 接口、OS 式上下文分页、技能库)。Dev 域已有外部 harness 先例(Superpowers 技能框架、OMX 工作流层),Ops 域外部 harness 仍是空白。关键区别:论文把 harness 定义收紧为「包裹整个通用 Agent 之上的任务特定层」,而不是「模型之外的一切」。
自进化 Agent 谱系。技能库累积可复用流程(Voyager 类),但多数自进化缺少进化质量控制;OpsHarness 的贡献是把「验证门」作为进化循环的一等公民——这直接回应了自进化系统「越学越偏」的已知风险。
| 维度 | 专用 RCA Agent(RCA-Agent/mABC) | 裸通用 Agent(Direct/ICL) | OpsHarness |
|---|---|---|---|
| 通用能力 | 从零实现(通常欠实现) | 复用旗舰框架 | 复用旗舰框架 |
| 系统特定知识 | 无/静态提示 | 无 | 四层知识+工具库,持续进化 |
| 学习能力 | 固定框架不学习 | 无 | 正负轨迹挖掘+双门验证 |
| 泛化性 | 单系统绑定(RCAEval 崩到 5.1%) | 有泛化但精度低 | 时间序外推+工业验证 |
定位结论:论文做了一次范式转移——把 RCA 智能的实现载体从「Agent 内部」移到「Agent 外部的可进化 harness」,并用 24 实例受控实验(4 backbone × 6 框架)为这一重构提供了量化动机。
三、问题定义
具体问题:如何让通用编码 Agent 在特定微服务系统上达到生产级 RCA 精度,并且越用越好?
核心洞察:RCA 精度的瓶颈可以干净地分解为两层——通用诊断能力(读遥测、写分析代码、跨模态推理)与系统特定经验(本系统的噪声画像、故障传播惯例、有效诊断路径)。前者通用 Agent 已经很强且迭代飞快,重造不划算;后者无法预先枚举,只能从每次诊断(无论对错)中蒸馏。专家 SRE 与新手的能力差恰恰在第二层——且 36.2% 的事故会复发,经验可复用。
形式化:harness 被定义为数据平面 h = (K, T)——分层知识库 K 与工具库 T;自进化的目标是在诊断流上推动 h_i → h_{i+1},使得 held-out 案例的 Top-1 准确率单调不降、成本受控。知识分层 K = (K0, K1, K2, K3):K0 通用指南(harness 自带)、K1 系统画像(setup 自动生成)、K2/K3 从轨迹挖掘——组织成有向图 G=(O,E,R):操作节点 O、边 E 记录「之后合理的下一步」、规则 R 是带极性 p∈{+,−} 的类型化标注(正规则=该做什么的提示,负规则=反模式)。工作流骨架是 G 中的路径(K2 = Paths(G) 的子集,剪枝到决定性步骤),细粒度节点与规则构成 K3 = (O, R)。
类比:这相当于把专家经验建成一张「诊断地图」——骨架是主干路线(先确认前端 KPI 窗口、自顶向下逐层定位、分离病因与传播),节点是路口的具体走法(从节点 CPU 隔离容器),规则是路牌(正:容器 CPU 激增会传播为远程进程延迟;负:DB 会话数随负载波动、不可单独定因)。进化的抽象精妙之处在于原子性:进化提案 P 是一组原子算子 ω ∈ {add, update, delete} × {SKEL, OP, RULE, TOOL},每个算子只改一个元素——这让「验证一个提案」成为可能,也让坏提案可以被精确拒绝。
四、问题解法
4.1 数据平面:四层知识 + idea-card 工具库
分层知识(K0–K3) 按粒度与更新频率分层,配渐进披露策略:小而永远相关的 K0(RCA 指南,随 harness 以 AGENTS.md/CLAUDE.md 形式提供)与 K1(系统画像:schema、磁盘布局、组件清单——setup 自动生成,替代每个数据集的硬编码 loader)每次诊断全量加载;K2 每条骨架只带短摘要,诊断时先读摘要、选定工作流后才全文加载;选中的骨架再驱动 K3 的按需召回。这样知识增长不会挤爆上下文。
idea-card 工具库(T):分析工具(异常检测、特征评分、嫌疑人排序)不以预写脚本形式存在,而是自然语言规格卡——写明核心思想、轻量伪码、输入输出契约、适用场景、关键参数;诊断时 Agent 读卡后针对当前 schema 现写几行代码实现。理由:运维数据布局因系统而异、甚至因时间窗而异,硬编码脚本会在没见过的 schema 上碎掉,而按现场上下文写并迭代的代码更可能正确。工具库同样分阶段披露(先看一页算法菜单,再按需开卡);冷启动只有脚手架占位,进化会把正确轨迹中反复出现的固定代码逻辑蒸馏成新工具卡。K3 的操作常与工具卡配对——诊断动作配上实现它的算法。
4.2 控制平面:四个生命周期工作流
以斜杠命令暴露:/opsharness:setup <system_path>(自动探查数据、绑定 schema、写 K1,零每数据集代码)、/opsharness:diagnose <query>(自顶向下收敛 when/where/why,跨模态交叉验证:指标确认、日志解释、链路显示影响路径,输出排序的根因报告)、/opsharness:evolve(挖掘轨迹产出提案)、/opsharness:verify(双门验证)。可观测子系统给每次运行记 session ID 并格式化为轨迹;钩子负责诊断前注入知识、诊断后索要反馈(点赞/点踩+真实根因)、触发进化。
4.3 自进化循环:轨迹挖掘 → 证据挖掘 → 分阶段验证
轨迹挖掘:从原始会话中切出 diagnose 命令开闭的最大跨度作为轨迹 τ,按反馈贴标签 ℓ(τ) = (a, c)(精度 correct/partial/wrong + token/时间成本),切成正集 D⁺ 与负集 D⁻。
证据挖掘与提案合成(正负两路):从正确轨迹抽共性——反复出现的整体诊断顺序升格/精炼为骨架 π,跨正确运行复现的动作升格为操作节点(如「从节点 CPU 隔离容器」出现在每个正确的 CPU 诊断中),反复出现的固定代码块蒸馏成工具卡,反复观察升格为正规则;骨架剪枝到决定性步骤,让后续诊断重放高效路径而不是重新发现它。从错误轨迹做对比修正——把每步意图与确认根因对比,找出分歧点(第一个与真值不一致的步骤);若同类事故恰好有对错两份诊断,分歧点后被跳过的动作就是修复;错误运行中反复出现的误导源蒸馏为负规则;由过时知识导致的失败触发更新或删除。
分阶段双门验证(防过拟合的核心):提案先在沙箱 stage(live harness 的纯净副本)上应用得 h′,然后过两道门:
- 内门(源案例严格更优):ΔA ≥ 0 且 ΔC ≤ max(β·C, 1)(成本容忍带 β=0.05)且至少一项严格改善——严格条款挡掉无操作提案,成本带拒绝「用失控探索换精度」;
- 外门(held-out testbed 非回归):testbed B 不预先固定,每次进化前按故障族(CPU/内存/磁盘/网络/数据库)与发生时间对累积案例聚类分层抽样重采,与被挖掘案例不相交——提案无法跨迭代拟合一个静态 held-out 集。testbed 案例存为无真值任务提示、标签私有持有;只要求非回归(accOK ∧ costOK)。
两门全过才原子晋升 h_{i+1} ← h′;失败则退回进化器带上失败案例作新负例精修,至多三轮,仍败则丢弃并拆除沙箱。
五、评估指标与实验证据
指标:A@k(top-k 精确准确率——完整根因元组进入前 k 候选的比例)、Avg Score(元素级部分得分)、每案例 token/时间。数据集:OpenRCA(335 真实案例:电信/银行/市场三大企业系统、46 节点、68 容器、176 服务网格、28 类根因)+ RCAEval(270 案例:Online Boutique/Sock Shop/Train Ticket 三大开源微服务基准、混沌工程注入 CPU/内存/网络/磁盘/代码级故障、97 实体、87 微服务)+ 工业数据集(773,340 数据点、88 确认异常)。切分:一律按时间序留最后 20% 作测试、前 80% 暖机(OpsHarness 用于自进化、ICL 用于示例检索)——时间切分模拟真实部署(系统只能向前诊断),杜绝任何方法窥见未来。
RQ1 总效果(24 实例 = 4 backbone × 6 框架,六子数据集 Final A@1):
| 框架(4 backbone 平均) | Final A@1 |
|---|---|
| mABC(专用) | 5.6% |
| RCA-Agent(专用) | 17.9% |
| Direct(裸通用 Agent) | 36.1% |
| ICL(+检索 3 个相似案例) | 38.4% |
| OpsHarness (no-evolve)(冷启动基座) | 41.4% |
| OpsHarness(完整) | 59.0% |
分 backbone:GPT-5.5 66.0%、GLM-5.2 65.8%、Claude Sonnet 4.6 55.7%、DeepSeek-V4 48.4%——每个 backbone 上都是最强框架。增益分解:冷启动基座 +5.3 点(36.1→41.4),自进化再 +17.6 点(→59.0)。值得注意的细节:最强 backbone 上裸 Agent 已强(51.2%),冷启动基座几乎不加(52.8%),增益几乎全部来自自进化;最弱 backbone(DeepSeek-V4)冷启动提升最大(20.3→31.6)。ICL 平均只加 2.3 点且 Avg Score 反而降(67.0 vs 68.8)——检索原始案例注入的是「例子」而非蒸馏出的可复用实践。
RQ2 消融(12 窗口连续诊断,每窗进化一次):完整版 A@1 从首窗约 0.4–0.5 爬到末窗 0.9(四 backbone 末窗均值 0.83);no-evolve 全程平坦(末窗 0.43);no-verify(有进化无验证门)先升后崩,末窗均值 0.33,低于不进化的 0.43,在 DeepSeek-V4 上从峰值 0.4 崩到 0.0——弱模型更容易从源案例挖出虚假模式(实例:进化器看到网络类案例反复失败就提议「推理时上调网络异常权重」,帮了源案例,却在下一窗口把原本诊断正确的 CPU/内存案例误标为网络噪声)。验证门平均拒绝 37% 的提案,被接受提案平均尝试 1.7 次。进化产物质量:6 条骨架(召回 91.7%/精度 73.5%)、19 个操作技能(82.5%/84.3%)、21 条注记规则(64.7%/85.1%)、11 个固化工具(61.0%/77.2%)——高粒度知识被广泛召回,细粒度规则与工具选择性触发但触发即高效。
RQ3 成本:每案例约 106k token/325s,与 Direct(112k/317s)、ICL(106k/308s)持平——加载知识的开销被减少的试错抵消;专用 Agent 反而花 1.7–2.7 倍 token、2.3–3.5 倍时间(重试与重规划更多)。进化三阶段(setup 0.82M/412s、evolve 0.75M/184s、verify 1.55M/421s,验证占 token 账单 49.8%)低频运行、可摊销。harness 落盘仅约 228KB(工具 106KB+技能 95KB+进化知识 27KB)。
RQ4 工业部署:六配置(Codex 与开源 OpenCode × 3 模型)全部改善,平均 A@1 0.74 vs Direct 0.24(约 3 倍);全开源栈(OpenCode+GLM-5.2)也有 0.73。三天案例:D1 setup 自动画像 → D2 12:07 告警触发诊断、Top-3 第三项正确(上游数据库同步故障)、SRE 一行反馈确认 → 13:00 evolve 蒸馏因果链(DB-sync 故障→实体查询失败)与支撑规则、通过双门入库 → D3 同故障复发,Top-1 一次命中、2 分钟内定位——用的是自动挖掘而非手写的最佳实践。
为什么实验设计能证明论点:核心主张「自进化是关键」。证据链:(1) 同 backbone 受控对比剥离模型因素(no-evolve 41.4% vs 完整 59.0%);(2) ICL 对照排除「多看案例就行」——同样看案例,不蒸馏成结构化知识只加 2.3 点;(3) 时间序切分排除未来信息泄漏;(4) no-verify 对照证明「进化必须带验证」——无门进化反而崩到 0.33;(5) 12 窗口曲线证明「越用越好」是持续趋势而非一次性跳变;(6) 工业数据集证明不依赖公共基准的分布偏置。防御性细节:守护脚本阻断对真值标签的一切访问;骨干记忆化无法解释增益(同模型裸 Agent 仅 36.1%)。
六、效果优势的根源解释
baseline 的根本局限:专用 RCA Agent 的瓶颈是架构代差——它们从零实现的 ReAct 循环、规划与上下文管理,是旗舰框架迭代多年成熟的能力的欠实现版本;OpenRCA 自己的分析就承认 RCA-Agent 的失败多源于通用能力缺口(错误恢复脆弱、推理链懒惰)。裸通用 Agent 的瓶颈则是经验真空——失败案例显示它被原始幅度误导(绝对跳变最大的噪声计数器),不知晓系统特定的噪声画像与运维惯例;这不是推理缺陷(给足线索它能推理对),是知识缺陷。ICL 的局限在于注入的是原始案例而非蒸馏实践——案例携带大量无关细节,且无法表达「不要做什么」的负规则。
因果链:OpsHarness 的四层知识+工具库 → Agent 在诊断前就持有系统画像(K1)与既往最佳路径(K2),诊断中被相关规则按需提示(K3 正负规则)、用系统适配过的算法(T)→ 被幅度误导类错误被负规则拦截、有效路径被骨架剪短 → 同 backbone 下冷启动即 +5.3 点、诊断成本持平(试错减少抵消知识加载);evolve 从正轨迹蒸馏共性/从负轨迹定位分歧点 → 复发故障(36.2% 的事故会复发)直达根因 → 12 窗口持续爬升(0.4→0.9);verify 双门 → 37% 过拟合提案(如网络权重上调)在分层重采样的 held-out 上被拦截 → 进化曲线不崩(0.83 vs no-verify 0.33)。
为什么「原子提案+双门」在机制上必然优于「直接进化」:自进化的本质风险是提案在源案例上有效但编码了伪相关。原子性保证每个提案的效果可单独测量;内门用严格改善条款排除噪声级改动;外门的重采样 held-out(而非固定集)保证测试分布始终代表当前案例总体、且提案无法通过迭代拟合固定测试集——这两点合起来把「学习信号」与「过拟合信号」在验证阶段就分开。弱 backbone 崩得最狠(DeepSeek no-verify 0.4→0.0)恰恰证明:进化器挖掘能力越弱,越需要外置的质量控制——验证门不是锦上添花,是自进化系统的承重墙。
反事实推理:去掉负规则挖掘,DB 会话数类误导错误会持续复发(工业案例中该类教训被蒸馏为负规则);去掉 idea-card 改用硬编码脚本,跨系统(OpenRCA 三系统 + RCAEval 三系统 + 工业 Prometheus)的 schema 差异会让脚本反复碎裂;去掉 K2/K3 图结构改用平铺文档,渐进披露失效、上下文膨胀挤占推理。失败案例分析也支撑机制解释:剩余失败多为首次遇到的故障模式(会随进化缓解)或遥测本身纠缠(抽样 75% 以上人类也无法诊断——接近不可答)。
七、必要知识反推
领域知识层:(1) 微服务可观测性三支柱(指标/日志/调用链)的语义与交叉验证方法——不知道「指标确认、日志解释、链路显示影响路径」,设计不出 diagnose 工作流;(2) RCA 领域的故障传播规律与既有基准(OpenRCA/RCAEval 的构造、A@k 评测惯例);(3) 真实运维的知识形态——TSG、事后复盘、故障族分布、36.2% 复发率这类经验事实决定了「进化可复利」的前提成立。
方法论知识层:(1) Agent = 模型 + harness 的分解观与 harness engineering 脉络——论文的问题重构直接建立在这上面;(2) 知识图谱化组织(节点/边/带极性规则)与渐进披露(源自 OS 式上下文管理的思想);(3) 持续学习中的灾难性遗忘/过拟合理论——双门验证是这些理论在 harness 进化上的工程化;(4) 时间序 train/test 切分与分层重采样——评测有效性的方法论底线;(5) 消融实验设计(no-evolve/no-verify 双对照)。
工程知识层:(1) 与通用 Agent 框架的集成能力(斜杠命令、AGENTS.md 约定、钩子机制);(2) 沙箱化验证基础设施(stage 副本、原子晋升、私有标签 testbed);(3) 生产遥测栈(Prometheus、分布式日志存储)的接入与采样画像;轨迹格式化与可观测子系统。
知识融合的关键节点:第一个化学反应在「专家认知模型 × 数据结构设计」——把 SRE 经验(论文图 2 的三天案例是真实认知过程的模板:错误初判→反馈纠偏→两条教训)映射为图结构(骨架=路线、节点=动作、正负规则=路牌),使经验变得可存储、可召回、可验证。第二个节点在「软件工程的变更管理 × Agent 自进化」——沙箱、原子提交、回归测试、门禁晋升这套 CI/CD 纪律被整体移植到知识进化上,使「学习」具备了工程可靠性。第三个节点是「反馈回路的轻量化」:一行点赞/点蚀+根因确认就够进化器开工——把人类反馈成本压到最低,是进化循环能在生产跑起来的前提。
八、论文中可以提取的通用性灵感
1. 当通用能力商品化,价值迁移到「外部适配层」。核心思想:基础能力被快速迭代的大平台标准化后,竞争差异不在重造轮子,而在系统特定的经验层——且这一层应该做成可进化的。论文证据:24 实例受控实验中裸通用 Agent 全面碾压专用 Agent(36.1% vs 17.9%/5.6%),而外置自进化 harness 把同一 Agent 推到 59.0%。推广场景:垂直领域 Copilot(法律/医疗)的知识层设计、RAG 系统的领域知识库运维、企业内部工具的平台化封装、个人助手的用户偏好进化层。
2. 负经验(错误轨迹)与正经验同等重要,且要定位到分歧点。核心思想:从失败中学习的正确姿势不是笼统复盘,而是找到「第一个与真值不一致的步骤」,把它与同类成功案例对比后转化为负规则。论文证据:「DB 会话数不可单独定因」这类负规则来自错误诊断;对比修正机制让分歧点后的跳过动作成为修复。推广场景:代码评审的反模式库、销售复盘的失败环节定位、医疗误诊分析、自动驾驶的接管事件挖掘。
3. 自进化系统必须内置「变更管理」,否则会学到伪规律。核心思想:任何从数据中自动提炼规律的回路,都需要沙箱验证+非回归门禁+可回退,且 held-out 要持续重采样防拟合。论文证据:无验证门时进化从 0.4 崩到 0.0(DeepSeek),37% 提案被双门拒绝——被拒的「网络权重上调」提案正是典型伪相关。推广场景:AutoML 的自动特征选择防过拟合、推荐系统的自动策略上线、企业知识库的众包编辑审核、LLM 记忆系统的写入门控。
4. 工具存为「意图规格」而非「固定代码」,现场生成适配实现。核心思想:当执行环境(schema/布局)多变时,存储算法的自然语言规格、执行时按现场上下文现写代码,比预写脚本更鲁棒。论文证据:idea-card 在 6 个系统+工业 Prometheus 上零每数据集代码适配;冷启动时工具库只有占位符照样能诊断。推广场景:数据分析 Agent 的算子库、跨客户部署的 SaaS 自动化、ETL 管道的可移植步骤定义、机器人技能的跨本体迁移。
5. 知识分层 + 渐进披露,让知识增长与上下文预算解耦。核心思想:把知识按「总是相关/画像/路径/细节」分层,先给摘要按需展开,系统才能在知识积累十倍后依然可用。论文证据:K0/K1 全量、K2 摘要先行、K3 骨架驱动召回,harness 落盘 228KB 而每案例 token 与裸 Agent 持平。推广场景:长期运行的对话系统记忆设计、企业知识库的检索粒度设计、代码 Agent 的大型项目上下文管理、教育系统的课程知识分层。
6. 时间序切分是自进化评测的底线。核心思想:任何「越用越好」的主张都必须在时间上后置的 held-out 上验证,随机切分等于让系统偷看未来。论文证据:全部实验按时间序 80/20 切分,「防止任何方法看到未来案例」被明写进设计。推广场景:持续学习 benchmark、推荐系统的离线评估、金融策略回测、任何增量学习系统的论文评审标准。
一句话总结:这篇论文用扎实的受控实验宣告「从零造专用 RCA Agent」这条路线的落幕,并把工程重心移到 Agent 之外——一个带双门验证的自进化 harness 让通用 Agent 在 12 个诊断窗口内从新手成长为专家,并在字节的真实生产环境里把同一故障的诊断从 Top-3 之外变成 2 分钟内的 Top-1。