需要自进化的不是 Agent,而是 Harness:LobeHub 的 Self-Evolving Runtime 实践


需要自进化的不是 Agent,而是 Harness:LobeHub 的 Self-Evolving Runtime 实践

过去一年,AI Agent 圈子里最容易被高估的是“模型又强了多少”,最容易被低估的是:真正决定产品稳定性的,往往不是模型,而是包在模型外面的 Harness。

单独的模型已经不再是完整产品。真正被用户感知到的产品,是:

模型 + 工具 + 上下文 + 权限 + 环境 + 错误恢复机制。

这套把模型组织起来、让它能稳定完成任务的运行时,才是 Agent 产品的核心。LobeHub 最近这篇关于 Self-Evolving Harness 的文章,讲的正是这个变化:

未来需要自进化的不是单个 Agent,而是承载 Agent 的 Harness。

本文试着把原文的工程逻辑拆开讲清楚:为什么 Harness 会成为 AI-Native 产品的新护城河?为什么 Tracing 是自进化的起点?以及 LobeHub 的 Error Pattern 自动巡检为什么是一个很值得关注的生产案例。

Self-Evolving Harness 博客封面图

一、模型越来越强,为什么产品体验没有同比变强?

早期 AI 产品的竞争,主要是模型能力竞争。

谁的 benchmark 更高,谁的上下文更长,谁的推理更快,谁就更容易获得体验优势。但到了 2026 年,这种优势开始边际递减。

在很多真实任务里,用户感受到的差异已经不再只是“模型聪不聪明”,而是:

  • 它能不能记住任务约束?
  • 它能不能在第 50 步工具调用后仍然不跑偏?
  • 它能不能在工具失败后正确恢复,而不是编造结果?
  • 它能不能识别哪些错误该展示给用户,哪些错误应该系统内部消化?
  • 它能不能根据不同模型、不同 provider、不同环境自动调整执行策略?

这就是 Phil Schmid 提到的 Durability 问题:模型在长链路、多工具、复杂环境中到底能坚持多久。

一个模型在榜单上领先 1%,并不能保证它在真实 Agent 任务里不会误删文件、忘记权限边界、丢失上下文,或者把上游 API 报错解释成“任务完成”。

所以,模型能力只是底座。真正把能力转化为稳定体验的,是 Harness。


二、什么是 Agent Harness?

如果把大模型看作 CPU,把上下文窗口看作 RAM,那么 Agent Harness 更像操作系统

它不等于 Agent 本身,却决定 Agent 能不能跑起来、跑多久、跑得稳不稳。

一个成熟的 Harness 至少要处理这些事情:

  • Model Runtime:适配 OpenAI、Anthropic、DeepSeek、Gemini、MiniMax、Kimi 等不同模型和 provider
  • Agent Runtime:管理 Agent 的 step loop、工具调用、状态机、生命周期
  • Context Engine:决定哪些上下文应该进入窗口,哪些应该压缩,哪些应该从历史恢复
  • Environment:支持 Page、Task、Group、IM、CLI、浏览器等不同执行环境
  • Tool Orchestration:设计工具 schema,决定何时调用、失败后是否重试、如何重试
  • Error Handling:识别错误类型,区分用户侧问题和系统侧问题
  • Permission Boundary:限制危险操作,管理外部副作用和用户确认

模型像发动机,Harness 像整辆车的传动、刹车、仪表盘和自动驾驶系统。

发动机再猛,如果刹车不稳、仪表盘不准、导航乱跳,用户也不会觉得这辆车好开。

Agent Harness 运行时架构示意图

三、Harness 为什么必须是“活的”?

传统软件里的运行时大多是静态的:工程师写好逻辑,用户使用,出了问题再修。

但 Agent Harness 面对的是一个高速变化的环境:

  • 模型接口会变
  • provider 错误格式会变
  • 工具 schema 会变
  • 用户任务会变
  • 上下文策略会过时
  • reasoning / thinking 字段的行为会变化
  • 某个只在小流量下偶发的错误,会在用户增长后变成主要故障来源

如果每一次变化都靠工程师手动发现、分类、修复,这套系统会越来越难维护。

更麻烦的是,很多问题不是设计阶段能想出来的,而是只有在真实运行里才会暴露。

比如:

  • 某个 provider 在余额不足时返回了非标准错误
  • 某个模型在 thinking mode 下丢了 reasoning_content
  • 某个工具 schema 对某类参数兼容性不好
  • 某个 context window 策略在长任务里把关键约束压没了
  • 某类用户任务经常在第 N 步触发同一种失败

这些都是运行数据里长出来的问题。

因此,Harness 不能只是被动执行环境。它需要能观察自己、理解自己、修复自己。

这就是 Self-Evolving Harness 的核心:

进化的对象不是模型,而是模型外面的运行时系统。

flowchart TD
    A[模型接口变化] --> E[Harness 持续过时]
    B[工具 schema 变化] --> E
    C[用户任务变化] --> E
    D[错误模式变化] --> E
    E --> F[Tracing 记录真实执行]
    F --> G[识别失败模式]
    G --> H[更新上下文策略 / 工具编排 / 错误处理]
    H --> I[运行时变得更稳定]
    I --> F

四、自进化的前提:Tracing 必须是一等公民

要让 Harness 自我改进,第一步不是让 Agent 自动写代码,而是让系统知道刚才到底发生了什么。

也就是:Tracing。

每一次 Agent 执行,都应该留下完整记录:

  • 调用了哪个模型?
  • 每次 LLM 请求用了多少 token?
  • 花了多少钱?
  • 每一步是模型调用还是工具调用?
  • 每一步耗时多久?
  • 总共走了多少步?
  • 哪一步失败了?
  • 错误类型是什么?
  • 当时的上下文是什么?
  • cache 命中率如何?
  • 工具输入输出是什么?

没有这些数据,所谓 Self-Evolution 就只是口号。

原文里有个判断很关键:行业里很多 Agent Framework 都在说 tracing 难做,不是因为大家不会用 OpenTelemetry,而是因为大多数 runtime 一开始就没有把 observability 当作一等公民。

典型问题是:Tracing 是后加的。

  • LangChain:callback 是可选的,忘了注册就没有 trace
  • CrewAI:事件监听器挂在事件总线上,事件丢失 trace 就断
  • OpenAI Agents SDK:需要显式创建 trace,不会天然传播
  • AG2:middleware 是可选安装,不装就没有 tracing

这种架构下,trace 像外挂,不像系统血液。

LobeHub 的做法则是把 Agent Runtime 设计成状态机,按“单步执行”原则拆成细粒度 step。每个 step 天然就是一个 trace event。

换句话说:

Tracing 不是执行之后补一份日志,而是执行过程本身的副产品。

这点非常重要。只有 trace 足够完整、稳定、可回放,后面的自动归因、自动修复、自动优化才有意义。

flowchart LR
    U[用户任务] --> R[Agent Runtime]
    R --> S1[Step 1: LLM 调用]
    R --> S2[Step 2: Tool 调用]
    R --> S3[Step 3: Context 更新]
    R --> S4[Step N: 错误或完成]
    S1 --> T[Trace Event]
    S2 --> T
    S3 --> T
    S4 --> T
    T --> ES[Execution Snapshot]
    ES --> A[回放 / 归因 / 对比 / 优化]

五、Trace 是 Harness 的黑匣子

飞机出事故后,黑匣子不直接修飞机,但它能告诉你事故发生前到底经历了什么。

Agent Harness 也是一样。

一次失败任务如果只留下一句“调用失败”,工程师或者 Agent 都很难分析。但如果它保留了完整 Execution Snapshot,就能回放出:

  • 哪个 provider 出错
  • 是用户 API Key 问题,还是上游服务问题
  • 是 schema 不兼容,还是上下文溢出
  • 是模型 hallucination,还是工具返回异常
  • 是某一步重试策略不合理,还是错误提示对用户不友好

这时,错误就不再是噪音,而是训练 Harness 的原料。

原文把这点讲得很清楚:Trace 本身不解决问题,但它让问题第一次变得可以回放、归因和比较。

对 AI-Native 产品来说,这可能是比单次模型调用更重要的数据资产。


六、生产案例:Error Pattern 自动巡检

LobeHub 的 Error Pattern 自动巡检,是 Self-Evolving Harness 最具体的落地案例。

它的背景是:LobeHub Model Runtime 接入了 70 多个 AI Providers,每天承接大量 Agent 运行。每次模型调用失败,系统都会留下错误记录。

这些错误大致可以分为两类。

第一类是用户侧错误:

  • API Key 过期
  • 余额不足
  • 触发速率限制
  • 权限不足

第二类是 Harness 自身问题:

  • Tool schema 不兼容
  • 负数 max_tokens
  • DeepSeek reasoning_content 丢失
  • Context Window 过载
  • thinking mode 元数据处理异常

传统做法是人定期看后台,人工分类,再手动修复。

但在高频 Agent 系统里,这个办法很快失效。错误产生速度高于人工分类速度,未归类错误会不断堆积,用户看到的就是陌生、难懂、无法处理的报错。

LobeHub 的做法是把失败 trace 的查询权限开放给 Agent,让 Agent 批量解析 tracing 数据:

  1. 从后台拉取最近 error records
  2. 按 provider、errorType、status code、message 多维分桶
  3. 对照已有 ERROR_PATTERNS,找出未覆盖的新错误模式
  4. 区分用户侧错误和 Harness 自身 bug
  5. 对用户侧错误,自动更新匹配 Pattern
  6. commit、push、开 PR
  7. 清理 Dashboard 中已被新 pattern 覆盖的历史噪音
  8. 对 Harness 自身 bug,继续根因分析并创建修复任务

这套机制已经运行了九轮,结果很有代表性:

  • 累计 Pattern 从 31 增长到 104 后趋于平稳
  • 新增 Pattern 从 31 持续下降到 0
  • 即使 error 日志量在 334 到 1158 之间波动,Pattern 库仍然趋于饱和
  • Agent 自主发现了 20+ 个 Harness 自身缺陷
  • Agent 成功率从早期约 75% 提升到 95% 以上

这说明一件事:Harness 的错误认知能力可以随着使用增长而增长。

产品不是只在版本发布时变好,而是在每天的运行中变好。

Error Pattern 自动巡检闭环示意图

七、Harness 自进化的四个层次

原文把 Harness 自进化理解成一个连续谱,而不是一步到位的“完全自动”。

flowchart LR
    L1[L1 纯人工
人发现 / 人分析 / 人修复] L2[L2 Agent 辅助
Agent 整理线索
人确认修复] L3[L3 Agent 主导
采集 / 识别 / 修复 / PR / 验证] L4[L4 Harness 主动优化
持续观察 / 提出修复 / 回归验证] L1 --> L2 --> L3 --> L4

L1:纯人工

人发现问题,人分析问题,人修复问题。

这是传统软件维护方式。可靠,但慢,且很难适应高频 Agent 执行环境。

L2:Agent 辅助

Agent 帮人找可疑问题、整理日志、给出修复建议。

人负责确认,再让 Agent 执行部分修复。

L3:Agent 主导

Agent 可以完成大部分流程:

  • 采集数据
  • 识别模式
  • 修改代码
  • 提交 PR
  • 跑验证
  • 清理历史噪音

人仍然保留关键判断,比如根因归属、修复方向、是否影响用户体验。

LobeHub 的 Error Pattern 巡检大致就在 L3。

L4:Harness 主动优化自己

更完整的形态是:Harness 持续观察自己的运行状态,发现可改进点,提出修复,经过人确认后执行并验证。

未来它不只是处理错误,还能主动优化:

  • Context Engine 策略
  • Tool schema 兼容层
  • provider 适配规则
  • Prompt 和执行策略
  • 失败任务的 eval / replay / regression 流程

人不需要盯每一条日志,而是设定目标、审查边界、处理少数高风险决策。


八、为什么 Consumer AI Product 天然更适合 Self-Evolving?

这篇文章里一个比较尖锐的观点是:Consumer-Aimed Product 天然拥有信号密度优势。

自部署方案,比如 OpenClaw、Hermes 这类本地运行的助手,技术上可以很强,但它们天然有一个瓶颈:每个用户每天的 Agent 执行可能只有几条到几十条,而且数据分散在本地,应用开发方拿不到完整错误信号。

这意味着:

  • 错误样本稀疏
  • pattern 验证周期长
  • 很难知道某个修复是否真的覆盖了高频问题
  • 难以形成全局运行时优化闭环

而面向消费者的云产品不同。

以 LobeHub 为例,每天有上万次 Agent 执行,Error 样本按分钟级积累。一个 Harness bug 上午触发,中午被巡检发现,下午就可能修复上线。

反馈闭环越快,Harness 进化速度越快。

这会带来一种新的护城河:

模型是外部的、通用的、可替换的;Harness 中沉淀的上下文、pattern、trajectory,才是产品内部长期积累的数据资产。

传统 SaaS 的产品逻辑是:功能代码 + 用户数据。

AI-Native 产品的逻辑则更像:

Harness + 用户交互数据 + 进化能力。

用户每一次使用,不只是消费产品,也在为产品提供进化信号。


九、The Bitter Lesson 在 Agent 时代的新含义

Rich Sutton 的《The Bitter Lesson》说的是:通用方法 + 算力,长期会战胜手工编码的领域知识。

到了 Agent 时代,这条经验有了新版本:

模型进步太快,手工写死的 Harness 逻辑随时会过时。

LangChain 的 Open Deep Research Agent 一年内重构三次,Manus 的 Harness 六个月重构五次,Anthropic 也不断从 Claude Code Harness 中剥离过时逻辑。

这些现象都指向同一个问题:昨天的最佳实践,今天可能变成负担。

如果 Harness 只能靠人定期重构,它永远追不上模型和用户场景的变化。

所以真正的解法不是写一个“完美 Harness”,而是构建一个能持续观察、持续验证、持续改进自己的 Harness。

也就是原文最后那句话:

Build a Harness That Builds Itself.


十、我的判断:Agent 产品的护城河会从模型迁移到运行时

这篇文章最重要的启发,不是 LobeHub 做了一个 tracing 系统,而是它指出了 AI 产品竞争的下一层。

过去我们习惯问:

  • 你接了哪个模型?
  • 你的上下文多长?
  • 你的 benchmark 多高?

接下来更应该问:

  • 你的 Harness 能不能记录每一次失败?
  • 你的错误 pattern 能不能自动增长?
  • 你的 context strategy 能不能根据真实任务优化?
  • 你的工具 schema 能不能从失败调用中自我修复?
  • 你的 Agent 成功率能不能随着使用量提高?

这才是 AI-Native 产品和传统套壳产品的分水岭。

真正优秀的 Agent 产品,不应该只是“调用模型的前端”,而应该是一套会自我学习的运行时。

它观察每一次交互,从错误中学习,把失败变成 pattern,把 pattern 变成修复,把修复变成下一次更稳定的体验。

模型会越来越通用,越来越可替换。

但一个长期运行、持续积累真实 trajectory、error pattern、context strategy 的 Harness,会越来越难复制。

这就是 Self-Evolving Harness 的价值:

不是让 Agent 看起来更聪明,而是让整个系统真的越用越稳。


参考


文章作者: Onefly
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Onefly !
评论
  目录