AI 工程师都在糊"胶水代码"——2026 这篇论文,把"Agent 周边那一坨"变成了一份"可审阅的文档"
- 关联论文:2603.25723
一句话故事
arXiv 2603.25723(Natural-Language Agent Harnesses, NLAH)是 Linyue Pan 等 2026 年 3 月发表的工作 —— 它把 AI Agent 周围那一坨"胶水代码"(怎么组织上下文、怎么路由工具、怎么校验、怎么交接状态)从耦合度极高的 Python 文件里拆出来,写成"结构化自然语言文档",再用一份统一的运行时(Intelligent Harness Runtime, IHR)解释执行。结果:任务效果与手写 controller 持平,但 harness 策略从"几千行代码"变成"几百行可读文档",可消融、可审计、可对比 —— 把 Agent Harness 从"工程师的隐性技能"升级为"可被科学实验的研究对象"。
如果你 2025–2026 年真的在搭过 LLM Agent,大概率踩过这个坑 🤦:
- 打开
agent.py,harness 散落在 30 多个文件里 - context 怎么组织、tool 怎么暴露、retry 几次、状态怎么持久化 —— 全靠工程师手感
- 两个团队做同一个 task,模型一样,结果不同?—— 没人能告诉你"harness 哪个模块贡献了差异"
- 想做 ablation(关掉某个模块看效果)?—— 改 30 个文件,跑半天,paper 还差一个表
- 监管 / 客户问"你这个 Agent 跑了什么策略"?—— 打开源码,reviewer 一脸懵
这不是个别团队的工程债,是整个 Agent 圈 2024–2026 年的隐性结构性问题:harness 是 Agent 的"方向盘与刹车",但它一直嵌在车体里 —— 没人能拿出来单独审、单独比、单独消融。
arXiv 2603.25723(NLAH + IHR) 干了件"看似朴素但范式级"的事:
把 harness 显式化为"结构化自然语言文档(NLAH)",再用一份共享运行时(IHR)解释执行 —— 任务效果不打折,策略却"短到可以读"且"可独立消融"。
被引 26 次(paper_card 口径,2026-07-05 快照)+ 影响力被引 2 次 —— 距离首个 LLM Agent Harness 综述仅有 2 个月,NLAH 已经成为 harness 表示形式方向的事实基线工作,所有想"把 Agent 工程化"的人都该读。
0 · TL;DR(30 秒版)
- 真问题:Agent 的实际表现由 harness(模型周围的外层执行系统)决定,但 harness 现在埋在耦合度极高的 controller 代码里 —— 不可检视、不可对比、不可迁移、不可消融。
- 核心答案:NLAH 把 harness 表示为结构化自然语言文档,IHR 是一份统一运行时,把文档"翻译"成具体 agent 调用、handoff、validation gate、artifact 契约。
- 关键洞察:runtime 是固定的(一份共享代码),策略是可变的(每个任务一份 NLAH 文档) —— 把"控制流"和"策略"解耦。
- 2026 年局限:没有可运行的开源 IHR 实现 = 当前必须自研 runtime;benchmark 覆盖未明确披露(coding / terminal-use / computer-use 三类,具体名/SOTA 数字 abstract 未给);自然语言固有的歧义性是 IHR 解析器的工程坑。
1 · 为什么这件事和大众有关
你手机里的 AI 助手、电商客服、AI 搜索、Copilot —— 它们背后都有一个 Agent。Agent 的"聪明度"其实由两个独立部分决定:
- 🧠 模型(引擎)—— GPT-4o、Claude、Qwen、Llama
- 🛠️ harness(方向盘 + 刹车 + 仪表盘)—— context 怎么组织、tool 怎么调用、错了几次重试、状态怎么存
2025–2026 年的工业真相是:模型本身的天花板远没到,决定 Agent 实际表现的,80% 是 harness。
但 —— harness 现在是"工程师的隐性技能":
- 📂 不可检视:你打开一个 agent 仓库,harness 散落在几十个 .py 里,没人一眼说清"这次跑到底跑了什么策略"
- ⚖️ 不可对比:两个团队做同 task,harness 不同,结果不同,没人告诉你"哪个模块贡献了多少差异"
- 🔁 不可迁移:一个 harness 验证过的策略,换个模型 / 换个场景就要重写
- 🔬 不可消融:ablation 怎么做?把 harness 模块一个个关掉?成本极高
arXiv 2603.25723 干的不是"再发一个新 Agent" —— 它重新定义了 Agent Harness 的表示形式:用结构化自然语言写 harness 策略,让 reviewer 能审、让 ablation 能做、让跨任务复用能跑。
2 · NLAH + IHR 到底干了什么
2.1 NLAH:不是 prompt,不是代码,是"可读可执行"的策略文档
NLAH 是一个结构化的、可编辑的、人类可读的自然语言文档。它描述"一次任务跑起来,harness 该怎么组织"。
伪代码示意:
Harness: code_agent
Goal: Solve {task} using repository tools.
Modules:
- context_builder:
role: Read repo files relevant to {task} using ripgrep
fallback: ls + cat full tree (depth <= 3)
- tool_router:
interface: [shell, edit_file, run_tests]
policy: Prefer edit_file over shell for in-repo changes
- validator:
must_pass: [run_tests, ruff_check]
on_fail: Send diff to model for self-repair (max 2 retries)
- handoff:
next_state: tests_pass → mark_done
tests_fail → loop(validator)
Artifact contracts:
- patch.diff: unified diff, must apply cleanly
- test.log: full pytest output
Validation gates:
- Pre-commit: lint_pass
- Post-commit: tests_pass
要点:
- 每个模块都是独立段落,可以单独打开 / 关闭 / 修改
- 用自然语言,但保留结构化标签(role / interface / policy / must_pass)—— 机器可解析
- 静态可读,运行时由 IHR 解释执行
2.2 IHR:把 NLAH 文档"翻译"成可执行动作
IHR 是 NLAH 的解释器 + 执行器。它接收 NLAH 文档,逐模块实例化为:
- 🤖 agent calls(具体调用哪个 agent / 模型)
- 🔀 handoffs(状态转移)
- 💾 state updates(写入 / 读取持久化状态)
- 🚧 validation gates(gate 判定 + 失败回滚)
- 📜 artifact contracts(产物契约的校验)
设计哲学一句话:runtime 是固定的,策略是可变的 —— 传统 "hard-coded controller" 里控制流与策略耦合的部分,NLAH + IHR 直接解耦开了。
2.3 关键一招:显式模块化
NLAH 强制把 harness 拆成 5 类可命名模块:
| 模块 | 职责 | 例子 |
|---|---|---|
| context_builder | 上下文怎么组织 | ripgrep 找相关文件,失败就 ls+cat 整树 |
| tool_router | 工具接口怎么暴露 | [shell, edit_file, run_tests],偏好 edit_file |
| validator | 输出怎么校验 | 必跑 [run_tests, ruff_check],失败回弹 |
| handoff | 任务怎么交接 | tests_pass → mark_done;tests_fail → 重试 |
| artifact_contracts | 产物契约 | patch.diff 必须干净应用,test.log 全量输出 |
每个模块都是:
- 静态可分析 —— 可以直接读出策略意图
- 运行时可独立关停 —— ablation 时关掉某个模块,看任务表现变化
- 跨任务可复用 —— 一个验证过的 validator 模块可以从 task A 搬到 task B
这一设计把 harness 从"耦合代码"升级为"可被科学实验的对象"。
3 · 关键实验与数据
论文在三类典型 Agent benchmark 上做了评估(abstract 明确陈述,具体数字需查 PDF 实验表):
| 维度 | IHR + NLAH | 代码实现 harness | 纯 prompt harness |
|---|---|---|---|
| 任务达成率 | comparable | baseline | baseline |
| 静态 harness 策略长度 | 明显更短 | 长 | — |
| 模块可分析性 | 可独立消融 | 难 | 难 |
| benchmark 覆盖 | coding / terminal-use / computer-use | 同 | 同 |
abstract 的核心论断:
「Across coding, terminal-use, and computer-use benchmarks, IHR-executed NLAHs achieve comparable task outcomes to code and prompted realizations, while exposing much shorter static harness policies.」
「Module ablations further show that explicit harness modules are analyzable.」
注意:核心是"持平 + 显著更可分析",不是"NLAH 比手写 controller 跑分更高" —— 论文的"赢法"是范式级,不是榜单级。
4 · 对工程落地的启发(不读 PDF 也用得上)
- 别再 hard-code harness —— 把所有 harness 策略显式写成 NLAH 文档,让 reviewer 能审、让 ablation 能做
- runtime 与策略解耦 —— 一份 IHR 跑所有 NLAH,策略变更只改文档不改 runtime
- harness 应该是可对比的研究对象 —— A 团队和 B 团队谁 harness 更好?把 NLAH 公开出来,benchmark 才能跑
- 把 ablation 当作基本工程纪律 —— 任何 harness 模块上线前都做关停实验,看任务表现下降多少
- 自然语言 ≠ 模糊 —— 结构化标签让 NLAH 在"人可读"与"机器可解析"之间取得平衡
- 审计 / 合规有抓手 —— 监管或客户问"你这个 agent 跑了什么策略",NLAH 文档就是现成答案
⚠️ 三个边界坑(落地前必看)
- 没有可运行的开源 IHR —— arXiv 原文 + GitHub 均未检索到 IHR/NLAH 实现仓库,当前必须自研 runtime,不能直接拿来用
- benchmark 对应未披露 —— abstract 只说 "coding / terminal-use / computer-use",SWE-Bench / TerminalBench / OSWorld 这些具体 benchmark 与具体达成率数字 abstract 未给,选型时需补 PDF 实验表
- runtime 开销未量化 —— "comparable"结论是在什么硬件配置 / 什么模型规模下成立的?自研 IHR 在生产环境是否带来不可接受的延迟增量,需实际 profiling
🎯 你能立即做的事
- agent 平台架构师:把现有 controller 重构为"一份 NLAH 模板 + IHR 适配",策略改文档,代码不动
- agent 框架作者:评估是否要把 NLAH 作为更高层的抽象(替代 / 补充 LangChain / AutoGen / CrewAI)
- agent 安全 / 合规团队:用 NLAH 写"当前所有 agent 的 harness 策略文档",让审计有文本依据
- agent benchmark 作者:用 NLAH 写"标准 harness 策略",让不同模型在同一 harness 下对比
- 做 agent ablation 研究的研究生:NLAH 直接降低 ablation 实验的工程门槛,paper 缺表时这就是你的切入点
- CTO / VP Engineering:当团队纠结"为什么 A agent 比 B agent 跑得好"时,让两边都把 harness 写成 NLAH,直接对比策略差异
📌 一句话总结:NLAH 把 Agent Harness 从"嵌在车体里的胶水代码"升级为"可拿出来单独审阅、对比、消融的工程图" —— 任务效果不打折,但 harness 第一次具备"作为研究对象"的资格;这是 2026 年 Agent 走向"可工程化、可审计、可对比"的关键一步。
🔔 评论区聊聊:你搭过的 Agent 里,harness 哪一部分最难复盘?context_builder、tool_router、validator、handoff 哪个模块最值得"显式化"?
AI #Agent #LLM #harness #NLAH #可观测性 #ablation #工程化 #arXiv #论文解读
三个标题变体
- 类比版:Agent 界的"把方向盘从车体里拆出来"——arXiv 2603.25723 用一份可读文档重写 harness
- 数字钩子版:被引 26 次 + 影响力被引 2 次——arXiv 2603.25723 是 Agent Harness 走向"可科学实验"的事实基线
- 反直觉版:task 效果不打折,harness 策略却从几千行变几百行——arXiv 2603.25723 把"代码即策略"打成"文档即策略"
📱 小红书风格卡片文案(直接可用)
做 AI Agent 的姐妹听我说 🫶
你打开一个 Agent 仓库 —— harness 散落在 30 多个 .py 文件里,context 怎么组织、tool 怎么暴露、retry 几次,全靠工程师手感 🤦
两个团队做同一个 task,模型一样,结果不同 —— 没人能告诉你"harness 哪个模块贡献了差异"。想做 ablation(关掉某个模块看效果)?改 30 个文件,跑半天,paper 还差一个表 ✋
arXiv 2603.25723(NLAH) 干了件看似朴素但范式级的事 🪄:
❌ 错法:harness 嵌在 controller 代码里,不可检视、不可对比、不可迁移、不可消融 ✅ 真法:把 harness 显式化为"结构化自然语言文档(NLAH)",再用一份统一运行时(IHR)解释执行
结果: - 任务效果不打折 - 静态策略从"几千行代码"变成"几百行可读文档" - 5 类模块(context / tool / validator / handoff / artifact)可独立消融 - harness 第一次成为"可被科学实验的研究对象"
3 个落地抓手: 1️⃣ 别再 hard-code harness —— 显式写成 NLAH 文档,reviewer 能审、ablation 能做 2️⃣ runtime 与策略解耦 —— 一份 IHR 跑所有 NLAH,策略改文档不改代码 3️⃣ 审计 / 合规有现成答案 —— 监管问"agent 跑了什么策略",文档就是答案
⚠️ 诚实交代: - ⚠️ 没有可运行的开源 IHR = 当前必须自研 runtime - ⚠️ benchmark 对应未明确披露(coding / terminal / computer 三类,具体名/SOTA 数字 abstract 未给) - ⚠️ runtime 开销未量化,需实际 profiling
📌 一句话:把方向盘从车体里拆出来单独审、单独比、单独消融 —— 这就是 NLAH + IHR 干的活。