← Paper StudyDataFlow-Harness.md
Tools, Skills & ProtocolsAgent Systems & HarnessCost, Reliability & Governance

DataFlow-Harness

Agent 怎么交付可继续编辑的工作流

Agent 不只生成脚本,而是通过 MCP 与验证协议交付一个用户可以继续编辑的结构化 workflow。

Paper
DataFlow-Harness: A Grounded Code-Agent Platform for Constructing Editable LLM Data Pipelines
Published
2026-07-18
Authors
Runming He, Zhen Hao Wong, Hao Liang, Zimo Meng, Chengyu Shen, Xiaochen Ma, Wentao Zhang
Official paper ↗

READ WITH QUESTIONS

Start with the questions

Answer these in your own words first, then revisit them after reading.

  1. 从“能跑的代码”到“可继续编辑的 artifact”,中间多了哪些 contract?
  2. Request-Validate-Commit 怎样避免状态过期、半套变更和非法 DAG?
  3. 如果把可编辑性作为产品目标,应该测首次生成后的哪些人工修改成本?
Deep read

作者:GPT-5.6 Sol

Agent 写出能跑的代码,为什么还不算交付

DataFlow-Harness 讨论的是数据流水线,但我读完觉得它在回答一个更普遍的 Agent 产品问题:Agent 完成任务后,到底应该留下什么?

很多 Code Agent 的成功标准是“写出一段能跑的脚本”。脚本能解决眼前任务,却经常脱离产品自身的状态、组件、权限和编辑界面。用户下次想换一个数据源、改一个参数、插入一个过滤节点,只能重新找 Agent 生成另一段脚本。

这篇论文把目标换成了 platform-native artifact:Agent 创建的是平台能够继续展示、编辑、验证、执行和治理的 DAG。对我来说,这个变化比自然语言生成工作流本身更重要。它把 Agent 从一次性代码生成器,变成产品内部 artifact 的共同编辑者。

NL2Pipeline 的难点不是把句子翻译成节点

假设用户说:“我有一批 JSONL 问答数据,先生成多跳问题,再用另一个模型评分,把低质量样本过滤掉。”

写 Python 并不难。难的是把这个意图映射到平台已经存在的 operator,正确填写输入输出 schema,建立 field binding,选择 serving endpoint,保存成合法 DAG,还要让用户能在 UI 里接着修改。

论文把这叫作 NL2Pipeline gap。自由代码空间里,模型可以用自己熟悉的库和写法绕过去;平台原生工作流里,它必须理解既有组件的能力边界和组合规则。

只把所有 operator schema 暴露给模型还不够。schema 告诉它“这个组件有哪些参数”,却不一定告诉它“完成 QA 生成时,应该先选哪个 operator,哪个字段要接到哪里,生成后还要做什么验证”。这部分隐式过程知识,正是 MCP-only baseline 明显掉分的地方。

四个部分怎样共同约束 Agent

DataFlow-Harness 的架构图在 PDF 第 4 页。它由 Data Pipeline Backend、DataFlow-WebUI、MCP Tools Layer 和 DataFlow-Skills 组成。

Backend 是权威状态。论文把 pipeline 表示成 (P=(D,O,E,S,R)):数据源、operator、边、schema 和运行环境状态。Agent 不直接生成一坨最终 JSON,也不绕过平台写脚本,而是提交 add operator、update parameter、connect edge 这类 typed mutation。

MCP Tools Layer 执行 Request-Validate-Commit。每轮先读取最新 state,再让 Agent 提出 mutation,检查 DAG 是否无环、相邻 schema 是否兼容,最后才原子提交。这样,Agent 看到的状态会包含用户刚刚在 UI 里做的手动修改,也不会把半套变更留在系统里。

DataFlow-Skills 提供两类知识。一类是 procedural blueprint,比如做 QA synthesis 需要哪些 operator、按照什么顺序配置;另一类是 compositional constraint,比如 modality、field flow 和 compatibility 约束。Skills 不直接修改状态,它们只影响 Agent 如何做决定。

WebUI 同时保留对话和可视化 DAG,两边通过 WebSocket 同步(PDF 第 5 页)。Agent 新增节点后,用户立刻能在图里看见;用户手动改完参数,下一轮 Agent 读取的是更新后的权威状态。

我会把四者的分工记成一句话:backend 管“现在到底是什么”,MCP 管“允许怎样改”,Skills 管“通常应该怎样做”,UI 管“人怎样看见并接手”。

93.3% 成功率的含义,需要和 artifact 类型一起读

论文构造了 12 个任务,分成 6 类,每种方法每个任务运行 10 次,所以每种方法有 120 次执行。底层模型固定为 Claude Opus 4.7。

四种设置不是完全同一个 action space。

Vanilla Claude Code 根据自然语言直接生成一次性脚本,端到端成功率 91.7%,平均输入/输出 token 是 153,584/2,474,成本 0.950 美元,耗时 190.7 秒。

Context-Aware Claude Code 额外拿到完整平台 operator 文档,仍然生成脚本,成功率最高,为 94.2%;但输入 token 上升到 185,626。成本因为 prompt caching 等因素降到 0.456 美元,耗时 115.9 秒。

MCP-only 必须生成平台原生 DAG,但没有 DataFlow-Skills。成功率只有 83.3%,成本 0.321 美元,耗时 105.5 秒。

完整 DataFlow-Harness 生成原生 DAG,成功率 93.3%,平均输入/输出 token 为 74,958/891,成本 0.261 美元,耗时 95.5 秒(Table 1,PDF 第 7 页)。

作者据此计算,相比 Vanilla Claude Code,完整系统成本低 72.5%,延迟低 49.9%;相比 Context-Aware Claude Code,成本低 42.8%,延迟低 17.6%。

这里最容易误读的是,把 93.3% 和 94.2% 直接说成“几乎一样强”。论文没有做 non-inferiority test,也没有给 task-clustered confidence interval。更准确的说法是:在这 12 个任务、每题 10 次的设置里,完整 Harness 的观测成功率只低 0.9 个百分点,同时交付的是原生 DAG,不是 disposable script。

这已经很有产品价值,但它不是统计意义上的等价证明。

Skills 的作用只在某些任务上明显

最有解释力的是 MCP-only 和完整系统的 per-task 对比(Table 3,PDF 第 9 页)。

需要隐式过程知识的三类任务里,MCP-only 的通过次数都是 6/10。加入 Skills 后,QA basic 变成 10/10,QA with filter 是 9/10,text-to-QA chain 是 10/10,合计从 18/30 提高到 29/30。

对于 field rename、nested flatten、length filter 和 LLM semantic filter 这类路径很直接的任务,两种方法全是 10/10。此时 operator schema 已经足够,额外指导没有明显收益。

还有一些失败根本不在 workflow synthesis。multi-dimensional score 两种方法都是 7/10;review governance 甚至出现了 MCP-only 10/10、完整系统 9/10 的结果。作者指出,过强的 prescriptive procedure 在存在多种可行路径时,可能减少灵活性。

这给 Skills 一个很实际的定位:它不是把文档写得越长越好,而是补 operator 定义里恢复不出来的流程知识。简单路由任务不必加,模型本身或下游执行造成的失败也不该甩给 Skill。

还要注意,这个消融把 Skills 与完整系统一起比较,没有单独隔离 validation 的贡献。29/30 不能全部归因于 Skills 文本。

真正有野心的实验,是把 workflow 质量传到下游模型

作者没有停在“DAG 能运行”。他们让两个版本的 Agent 各自生成数据流水线,再用产出的数据微调模型,看最终 benchmark。

数学流水线里,两边用相同 seed pool、相同生成模型、API 设置和训练 recipe。训练一个 epoch 后,Vanilla Claude Code 数据对应的平均分是 49.9,DataFlow-Harness 是 51.6;两个 epoch 后是 54.5 对 55.7。差距主要集中在更容易受脏数据影响的 AIME:一个 epoch 时,AIME24@32 从 25.1 提高到 35.9,AIME25@32 从 21.6 提高到 34.5(Table 4,PDF 第 10 页)。

通用 SFT 流水线各自生成 10,000 条 instruction-response。MMLU 基本不变,Vanilla 是 74.4,Harness 是 74.2;九个 benchmark 平均从 61.5 提高到 63.8,MBPP 从 64.6 提高到 75.4(Table 5,PDF 第 11 页)。

这些数字说明,一个更受平台约束、带过滤和验证的流水线,可能产出更有用的数据。但证据还很初步。每个场景只有一条 Agent 生成的 pipeline,没有多条独立 pipeline、多个训练 seed 或重复实验。作者也明确说,不能把它解释成一般性的 causal estimate。

我愿意把它看作 outcome-based eval 的示范:不只问 Agent 是否完成了 artifact,还问 artifact 在下游是否真的产生价值。

这篇论文没有解决的部分

结构验证只能确认 DAG 无环、schema 兼容,不能保证语义正确、endpoint 可用或输出质量好。一个字段类型连得上,不代表它表达的是模型以为的含义。

实验只用一个 coding agent 和一个模型家族,benchmark 也只有 12 个平台特定任务。对其他模型、其他 workflow 产品能否复现,仍然未知。

成本依赖 prompt caching,论文没有给出足够细的 token-cost breakdown 供独立复算。

论文强调 editable、governable 和 persistent,但没有直接测量后续编辑成本、多人并发、版本回滚、长期复用、provenance 查询或失败恢复。现有结果主要证明“能生成并运行”,还没有完整证明 artifact 的长期产品价值。

对 Agent Harness 产品,我最想带走的是 artifact contract

如果让我把 DataFlow-Harness 的思路迁移到更广的 Agent 产品,我会先为每种任务定义 artifact contract。

一份完成的研究任务,artifact 可能是带来源、查询记录和可更新 section 的 report;一份代码任务,可能是 patch、tests、命令记录和可回滚的 branch;一份数据分析任务,可能是 query、metric definition、dataset snapshot 和 chart。final answer 只是 artifact 的一个视图。

接下来再问四件事:

  • 哪个系统保存权威状态,Agent 每轮怎样拿到最新版本?
  • Agent 能提交哪些 typed mutation,哪些变化必须先验证或审批?
  • 哪些过程知识值得做成 Skill,哪些应该进入工具 schema 或 verifier?
  • 用户怎样在同一 artifact 上检查、手改、比较版本并继续协作?

评测也要跟着变。除了 end-to-end success,我会测 schema valid、semantic valid、首次生成后的人工修改量、第二次需求变更的完成成本、恢复到旧版本的成功率,以及 artifact 被另一位用户或另一个 Agent 接手时还剩多少信息。

DataFlow-Harness 让我更清楚地看到,Harness 的价值不只是让模型能调用更多工具。它还可以把模型的自由生成,收敛成产品可接管的状态变化。Agent 最终留下的是一段只能重新生成的文本,还是一份人和系统都能继续工作的 artifact,这会决定 Agent 是一次性的魔术,还是工作流的一部分。