第 3 章 信任壁垒:为什么 AI 生成的代码不可直接信任

本章你将学到

  • 工程师面对 AI 生成代码时那种"不敢直接合并"的本能,其实由三重结构性障碍构成------它们不是心理作用,而是模型工作机制的必然产物;
  • 一份可操作的编码代理失败模式目录:AI 会犯哪些类型的错,以及每一类错"能不能被自动抓住、由什么来抓";
  • 为什么"Agent 产出越快,人反而越累"------监督成本悖论如何让"信任"从软性话题变成硬性瓶颈;
  • "信任"到底要建立到什么程度,才能真正把人从审查中解放出来(而不是虚假的安心);
  • 人类开发者身上那套看不见的"隐性 Harness"到底包含什么------正是它的缺失,定义了我们要为 Agent 显式补建的东西。

从"能干"到"敢用"之间,隔着一道墙

第 2 章我们拆开了 Agent 的引擎盖,看清它能力很强、边界也很清楚。但一个绕不过去的现实是:能力强,不等于可以直接信任。

几乎每个用过编码代理的工程师都有过同一种体验------Agent 飞快地生成了一大段代码,看起来像模像样,但你的手在"合并"按钮上停住了:"它真的对吗?我得逐行看一遍。" 这一瞬间的迟疑,就是本章要解剖的对象。

这道"信任壁垒"(trust barrier)不是保守,也不是偏见。Birgitta Böckeler 在其框架文开篇就一针见血地指出了它的三个来源:

作为软件工程师,我们对 AI 生成的代码有一种天然的信任壁垒------LLM 是非确定性的,它们不了解我们的上下文,而且它们并不真正理解代码,它们是以 token 在思考。

理解这道墙由什么砌成,是理解"为什么需要 Harness"的前提。因为 Harness Engineering 的终极目标,正是系统性地降低这道墙的高度------让 Agent 在更少监督下工作,同时我们还能对结果保持信心。

本章源级:本章为 A 级为主。三重信任障碍(非确定性、无上下文、以 token 思考)、失败模式目录的核心条目、监督成本矛盾均出自 Böckeler 框架文的一手记载(A 级);失败模式的三分类(结构/语义/意图)与"隐性 Harness"的展开讲法为本书在源文基础上的框架化整理(B 级)。


3.1 三重信任障碍

Böckeler 点出的三个来源,恰好对应第 2 章讲过的三个机制。它们层层递进,共同构成了这道墙。

障碍一:非确定性------"同样的输入,不保证同样的输出"

第 2 章 §2.1 讲过,模型输出来自对概率分布的采样,只要温度不为 0,同样的提示就可能走向不同的结果。

这对信任的打击是根本性的:你无法通过"这次它做对了"推断"下次它也会做对"。 传统软件里,一个函数测试通过了,你就可以信任它------因为它是确定的。但 Agent 这次生成了完美的代码,不构成对下一次的任何保证。信任无法在非确定的对象上简单累积。

回扣 Harness :这解释了为什么 Harness 必须是系统 而非技巧。你不能靠"这次调教好了"一劳永逸,只能靠一套每次都运行的前馈引导 + 反馈传感器,把非确定性的输出,收敛到确定性的质量闸门内。

障碍二:无上下文------"它不知道我们团队的约定与业务背景"

请注意,这里的"上下文"和第 2 章 §2.3 的"上下文窗口"是两个不同层面的概念,切勿混淆:

  • §2.3 的上下文窗口,指模型单次能"看到"的 token 容量(技术容器);
  • 这里的"无上下文",指模型缺乏团队约定、业务背景、历史决策这类背景知识(知识内容)。

模型是在公共数据上训练的,它不知道"我们这个团队为什么规定所有金额必须用整数分存储""这个看似多余的校验其实是三年前一次线上事故的教训""这块代码虽然丑但绝对不能动"。这些信息从来没进过它的训练数据,也不在它的上下文里

回扣 Harness :这道障碍的解法贯穿全书第三篇------把散落在人脑、会议、聊天记录里的隐性知识,持续沉淀进仓库,让它对 Agent 可见。这正是第 15 章"仓库即唯一事实来源"和"新员工测试"要解决的问题:Agent 运行时拿不到的信息,等同于不存在。

障碍三:无理解------"它以 token 思考,而非以语义理解"

第 2 章 §2.1 的核心结论在这里再次发挥作用:模型捕捉的是统计规律 而非语义真理。它能生成"看起来对"的 token 序列,但"看起来对"不等于"逻辑对"。

这是三重障碍里最隐蔽、也最危险的一重。前两重障碍(不稳定、缺背景)你还能有所警觉,而"无理解"制造的错误往往表面完美------命名地道、结构工整、注释齐全,唯独逻辑是错的。它甚至会自信地调用一个不存在的 API。这种"言之凿凿的错误",恰恰最能骗过快速的人工扫视。

回扣 Harness :正因为错误会伪装成"看起来对",我们绝不能依赖人工肉眼扫视 来把关,而必须依赖能穿透表象的确定性验证------测试是否真的通过、类型是否真的自洽、契约是否真的满足。这是第二篇整个反馈体系存在的根本理由。

三重障碍的合流

把三者叠加起来,就能理解那道墙为什么如此顽固:

markdown 复制代码
  非确定性  →  这次对,不代表下次对(信任无法累积)
     +
  无上下文  →  它不知道我们的约定和业务背景(会违反不成文规则)
     +
  无理解    →  错误会伪装成"看起来对"(骗过肉眼扫视)
     ↓
  结论:不能凭"看一眼觉得没问题"就信任 AI 生成的代码

这个结论听起来令人沮丧,但它恰恰是 Harness Engineering 的起点 :既然三道障碍都源于模型的固有机制、无法靠"换个更强的模型"根除,那么唯一的出路,就是在模型外部建一套系统去补偿它们。而要建这套系统,我们首先得知道:Agent 到底会犯哪些错?


3.2 编码代理失败模式目录

要对症下药,先得把"病"列清楚。Böckeler 基于实践整理了一份编码代理的失败模式清单,并给出了一个极其关键的判断:这些失败模式,能被自动抓住的能力天差地别。 按"能否被可靠捕获",可以清晰地分为三类。

这份目录是全书的一条主线。 它是第 26 章"失败模式覆盖矩阵"的原型,也是附录 E 完整版的雏形。现在先建立整体认知,后面章节会逐条给出对应的传感器方案。

结构类失败:计算型手段可靠捕获

这类问题是形式层面 的偏差,有客观、确定的判定标准,因此廉价、成熟、确定性的计算型工具就能可靠抓住

失败模式 说明
重复代码(duplicate code) 复制粘贴而非抽象复用
圈复杂度过高(cyclomatic complexity) 分支嵌套过深、函数过于复杂
测试覆盖缺失(missing coverage) 关键路径没有测试保护
架构漂移(architectural drift) 依赖方向、模块边界被悄悄破坏
风格违规(style violations) 不符合既定编码规范

回扣 Harness :这一类是 Harness 最容易见效的地方------用第 11 章的计算型传感器(linter、静态分析、结构性测试)就能覆盖,快到可以在 Agent 每次编辑后都运行。花小钱,办实事。

语义类失败:推理型手段可部分捕获(昂贵、概率性)

这类问题需要语义判断 ,没有简单的形式规则可套,计算型工具无能为力。只能靠推理型手段(AI 评审)部分 识别,而且昂贵、结果概率性、不能每次提交都跑

失败模式 说明
语义重复(semantically duplicate code) 代码长得不一样,但做的是同一件事
冗余测试(redundant tests) 大量测试其实在重复验证同一逻辑
暴力修复(brute-force fix) 用蛮力绕过问题,而非解决根因
过度设计(over-engineered solutions) 为简单需求引入不必要的抽象与复杂度

回扣 Harness :这一类对应第 12 章的推理型传感器(评审 Agent、LLM-as-Judge)。关键认知是:它们能帮忙,但不能兜底------非确定、成本高,只适合抽样或在关键节点触发(第 12、24 章会讲成本控制)。

意图类失败:两类手段都无法可靠捕获

这是最高影响、也最棘手的一类。它们既不是形式问题,也不是纯语义问题,而是"做的事情根本不是人真正想要的"

失败模式 说明
问题误诊(misdiagnosis of issues) 修错了地方------症状缓解了,根因还在
多余功能(unnecessary features) 做了一堆没人要的东西
误解指令(misunderstood instructions) 从一开始就理解偏了需求

Böckeler 对这一类给出了本章、乃至全书最冷静的一句断言:

正确性不在任何传感器的职权范围内------如果人类一开始就没说清楚想要什么。

这句话必须被反复咀嚼。它意味着:再完善的 Harness 也无法弥补"意图输入"本身的缺失。如果人没说清楚要什么,任何传感器都无从判断对错------因为"对错"的标准根本还不存在。

回扣 Harness :这一类不是靠加传感器能解决的,它指向了两个方向------第一,第 17 章的"规格工程",把模糊意图转化为清晰、可验证的验收标准(把问题往前馈端解决);第二,第 33 章工程师的新职责"明确意图"。这也正是第 2 章 §2.6"第三档能力"和第 26 章反复强调的边界:Harness 兜住不确定性,但兜不住人类没想清楚的需求。

目录的战略意义:Harness 投资的地图

把三类合起来看,这份目录立刻变成一张投资地图------它诚实地告诉你,花钱建 Harness 能买到什么、买不到什么:

复制代码
结构类  → 计算型可靠捕获   → 必建,且廉价,优先做
语义类  → 推理型部分捕获   → 该建,但要控成本、管好非确定性
意图类  → 都无法可靠捕获   → 别指望传感器,投资规格工程与人类判断

这张地图会在第 26 章被细化为完整的"覆盖矩阵"。现在你只需记住一个反直觉的结论:Harness 最擅长解决的,恰恰是那些看起来最琐碎的结构问题;而最影响成败的意图问题,反而最需要人类亲自兜底。


3.3 监督成本悖论:Agent 越快,人越成为瓶颈

前面说清楚了 Agent 会犯错、且很多错抓不住。一个自然的应对是:"那我就人工审查每一份产出好了。"

这恰恰掉进了 Harness Engineering 要解决的核心矛盾------监督成本悖论

逻辑链条是这样的:

  1. 引入 Agent 的初衷,是大幅提高代码产出的速度(第 1 章 OpenAI 案例:人均每天约 3.5 个 PR);
  2. 但由于三重信任障碍,每一份产出原则上都需要人工审查才能放心合并;
  3. 于是,产出越快,等待人工审查的队列就越长------瓶颈从"写代码"平移到了"审代码";
  4. 人的审查速度是基本恒定的,它无法随 Agent 产量线性扩张。

结果就是这个悖论:Agent 把生产环节加速了 10 倍,却让审查环节成了新的天花板。 如果监督方式不变,Agent 带来的速度收益会在审查队列里被大量抵消。这也预告了第 21 章的"瓶颈转移定律"------代码吞吐上去之后,卡点会转移到人工 QA。

回扣 Harness :悖论的出路只有一条------不是让人审得更快,而是让绝大多数问题在到达人眼之前就被自动纠正 。这正是 Böckeler 对"好 Harness"的定义:一套外层 Harness 应当"提供反馈回路,在问题到达人类眼前之前,就自动纠正掉尽可能多的问题,最终降低审查负担"。换句话说,Harness 的价值不只是提质,更是把人从线性增长的审查负担里解放出来


3.4 信任的经济学:多高的信任才算"够"

既然目标是减少监督,那就要追问一个精确的问题:信任要建立到什么程度,才能真正减少监督?

这里有一个容易被忽视的"信任的经济学"陷阱:部分信任,往往等于零信任。

设想你对 Agent 的产出有 90% 的把握。听起来很高了?但只要那 10% 的不确定足以造成严重后果,你就仍然必须审查 100% 的产出 ------因为你事先并不知道这一份恰好落在可靠的 90% 还是危险的 10% 里。在这种情况下,那 90% 的信任在"减少监督"这个目标上没有产生任何价值:你付出的审查成本一分没省。

这就是信任的经济学核心:

只有当信任高到"可以据此跳过审查"时,它才开始真正减少监督成本;停留在"还是得看一眼"的信任,经济价值约等于零。

那么怎样才能跨过"可以跳过审查"这道门槛?答案不是"祈祷模型更强",而是用 Harness 把"信任"从对模型的主观期望,转化为对系统的客观保证

  • 你信任的不再是"这个 Agent 这次应该没问题"(主观、不可累积);
  • 而是"任何未通过全套传感器的产出,都无法被合并"(客观、确定、可累积)。

信任的锚点,从变幻莫测的模型 ,转移到了稳定可靠的 Harness 上。这正是 Böckeler 反复强调的目标------建立"足以减少监督和手工测试的信心(confidence)"。而这种信心的高低,本身也是分维度、分场景的:核心业务路径需要极高的信任门槛,外围功能则可以容忍更高的自主性(这是第 28 章"分级信任"策略的伏笔)。

回扣 Harness :这一节点明了 Harness Engineering 的经济学本质------它不是质量工具,而是信任的生产系统。它把"能不能少看一点"这个模糊的心理问题,变成了"传感器覆盖到什么程度、就能安全地跳过哪一层人工审查"这个可计算、可投资的工程问题。


3.5 人类开发者的"隐性 Harness"

读到这里,一个更深的问题浮现了:为什么人类资深工程师写的代码,我们就敢相对放心地信任?

答案揭示了本章最重要的洞察:人类开发者本身,就自带一套看不见的 Harness。 Böckeler 称之为"隐性 Harness"(implicit harness)------我们把自己的技能和经验,作为一套隐性的约束,带进了每一个代码库。它至少包含四样东西:

一、内化的约定(Absorbed Conventions)

资深工程师在长期工作中,把大量"好实践"和团队约定内化 成了肌肉记忆。他不需要每次都查规范,因为规范已经长进了他的直觉里。而 Agent 没有肌肉记忆------它每一次都是"新来的",除非你把约定显式喂给它。

二、复杂度的痛感(Cognitive Pain of Complexity)

人类工程师面对一个 300 行的巨型函数,会产生一种生理性的不适 ------Böckeler 直白地称之为"审美上的厌恶"(aesthetic disgust)。正是这种痛感,驱使他停下来重构。而 Agent 对复杂度毫无痛感:它可以心平气和地生成、维护一个丑陋到人类无法忍受的结构,因为它感受不到"丑"。

三、社会问责(Social Accountability)

人类工程师知道------这次提交上,署的是我的名字。 代码出了事,要负责的是我,同事的目光、团队的信任都系于此。这种社会问责构成了一种强大的、无需明说的质量约束。而 Agent 没有名誉可失:它不会因为写了烂代码而感到羞愧,也不担心明天被同事追问。

四、组织记忆(Organisational Memory)

资深工程师携带着大量组织层面的对齐信息 :团队正在追求什么目标、哪些技术债是出于业务原因被有意容忍的、在这个特定语境下"好"到底长什么样。而 Agent 没有组织记忆:它不知道团队的来龙去脉,也感受不到那些"心照不宣"的共识。

关键差异:分不清"承重墙"和"习惯"

这四样东西汇成一个最致命的差距,Böckeler 一语道破:

Agent 分不清哪一条约定是"承重墙"(load-bearing),哪一条只是"习惯"(habit);也判断不了那个"技术上正确"的方案,是否契合团队真正想做的事。

人类工程师凭经验知道:有些规则动了会塌方(承重墙),有些规则只是历史习惯(可以商量)。而 Agent 眼里所有规则一样重------它可能小心翼翼地遵守一条无关紧要的格式习惯,却大刀阔斧地推倒一堵真正的承重墙,浑然不觉。

这一切如何定义了 Harness 的使命

现在,我们可以给出 Harness Engineering 一个最本质的定义了。Böckeler 的原话是:

Harness 是一种尝试------把人类开发者经验中那些隐性的东西,外化(externalise)并显式化(make explicit)。

也就是说,我们要为 Agent 显式补建的那套系统,本质上就是人类工程师头脑里那套隐性 Harness 的"外化版本"

复制代码
人类的隐性 Harness          →   Agent 的显式 Harness(本书主题)
──────────────────────────────────────────────────────────
内化的约定                  →   AGENTS.md、规则文件、Skills(第 7、8 章)
复杂度的痛感                →   linter、圈复杂度检查、垃圾回收 Agent(第 11、23 章)
社会问责                    →   变更归因、审计追溯、评审闭环(第 22、25 章)
组织记忆                    →   仓库即事实来源、知识库、决策日志(第 15--17 章)

但 Böckeler 也诚实地划了界:外化"只能做到一定程度"(it can only go so far)。构建一套连贯的引导、传感器与自纠错回路的成本很高,所以我们必须带着清晰的目标去取舍------

好的 Harness 不应以"完全消灭人类输入"为目标,而应把人类的输入,引导到它最重要的地方去。

这句话是第 3 章的落点,也是全书的价值主张(它会在第 33 章被再次郑重提起)。信任壁垒无法被彻底拆除,但可以被系统性地降低;人类判断无法被完全替代,但可以被精准地节约。这,就是 Harness Engineering 要做的事。


本章要点

  • 信任壁垒由三重结构性障碍构成:非确定性(这次对不代表下次对)、无上下文(不懂团队约定与业务背景)、无理解(以 token 思考,错误会伪装成"看起来对")。三者都源于模型固有机制,无法靠换更强的模型根除------只能靠外部系统补偿。
  • 注意区分两种"上下文":§2.3 的"上下文窗口"是技术容器(能看到多少 token);本章的"无上下文"是知识内容缺失(不懂团队与业务背景)。两者不可混淆。
  • 失败模式分三类,可捕获性天差地别:结构类(重复、圈复杂度、覆盖缺失、架构漂移、风格违规)计算型可靠捕获;语义类(语义重复、冗余测试、暴力修复、过度设计)推理型可部分捕获但昂贵、概率性;意图类(问题误诊、多余功能、误解指令)两者都抓不住。
  • "正确性不在任何传感器的职权范围内------如果人类没说清楚要什么。" 这是意图类失败的根本,指向规格工程(第 17 章)与工程师的"明确意图"新职责(第 33 章),而非更多传感器。
  • 监督成本悖论:Agent 产出越快,人工审查越成为瓶颈,且审查速度无法随产量线性扩张。出路不是审得更快,而是让问题在到达人眼前被自动纠正。
  • 信任的经济学:部分信任约等于零信任。 只有信任高到"可以据此跳过审查",才真正减少监督。Harness 的作用,是把信任的锚点从"变幻的模型"转移到"稳定的系统"。
  • 人类自带"隐性 Harness" :内化约定、复杂度痛感、社会问责、组织记忆------Agent 一样都没有,尤其分不清"承重墙"与"习惯"。Harness Engineering 的本质,就是把这套隐性经验外化、显式化,并把人类输入引导到最重要的地方。

动手练习

  1. 给你最近一次的"不敢合并"归因。 回想你最近一次面对 Agent 产出时的迟疑,试着判断:让你不放心的,究竟是三重障碍中的哪一重(不稳定?缺背景?还是怕它"看起来对但其实错")?不同的障碍,指向不同的 Harness 对策。
  2. 给你的代码库列一份失败模式清单。 回顾最近 Agent 在你项目里犯过的错,逐条归入"结构类 / 语义类 / 意图类"。数一数三类各有几条------这个分布会直接告诉你:你的 Harness 建设,最该先补哪一类。
  3. 盘点你的"隐性 Harness"。 挑一个你非常熟悉的模块,写下 3 条你自己遵守、但从未写进任何文档的约定。然后自问:其中哪些是"承重墙"(动了会出事)、哪些只是"习惯"?这份清单,就是你把隐性经验"外化"给 Agent 的第一份原料。

承上启下 :本章我们论证了"为什么必须建 Harness",并借"人类隐性 Harness"的镜像,隐约看到了它该长什么样。下一章 第 4 章「什么是 Harness Engineering」 将正式给出它的核心定义------Agent = Model + Harness 公式、三层同心圆模型、前馈与反馈两大目标,把本书最重要的概念地基一次性夯实。

相关推荐
toolsmith1 小时前
我用AI拆解了Charles的授权机制,发现密钥被写死在了代码里
java·人工智能
小羊431 小时前
Agent规划范式进化论:从CoT到Plan-and-Execute
人工智能
AI探索派1 小时前
Agent Teams和Agent Swarm是什么?多Agent协作原理实战拆解
人工智能·架构·agent
wizardpisces1 小时前
Prompt 堆叠的尽头,是系统设计问题
人工智能
Wang's Blog1 小时前
Vibe Coding一人即团队系列8: Claude Code 模型选型指南
人工智能
我叫孙一鸣-专注电子元器件1 小时前
自动驾驶的眼睛正在换代:激光雷达的“小镜子”正在改变未来
人工智能·机器学习·自动驾驶·卫星通讯·压电驱动器
后端小肥肠1 小时前
开营 10 天变现率 20%:我用一套 Skill,把小红书虚拟资料跑成了可复制流程
人工智能·aigc·agent
格林威2 小时前
C#图像快速剪切:使用OpenCvSharp和Halcon优化图像剪切和CPU占用
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
远航计算机2 小时前
GEO自诊断实操手册:你的内容为什么AI搜不到?
人工智能·矩阵·aigc·媒体