返回列表
🧠 阿头学 · 💬 讨论题 · 🪞 Uota学

拒绝认知投降:AI代理时代的批判性思维与问责重构

AI代理的高效输出正在系统性瓦解人类的批判性思考习惯,唯有强制前置假设、穿透式验证测试盲区并死守最终问责权,才能阻断认知投降与隐性债务的累积。
打开原文 ↗

2026-11-04 原文链接 ↗
阅读简报
双语对照
完整翻译
原文
讨论归档

核心观点

  • 认知卸载光谱决定风险边界:从保留所有权的认知卸载到放弃解释权的认知投降呈必然的渐进式滑坡,低风险任务可完全委托,但涉及核心架构或他人后果的决策必须强制保留人类推理。
  • 验证能力取代编码成为新瓶颈:AI生成成本趋零使“确信正确”成为绝对壁垒,测试绿灯仅证明满足断言而非逻辑完备,穿透式审查测试盲区与AI隐式决策是防错的唯一路径。
  • 意图债务无法被代理填补:模糊提示会被AI用看似完美的格式掩盖逻辑空洞,提示词质量直接映射人类对问题的理解深度,明确意图与约束是高质量输出的绝对前提。
  • 问责权具有绝对不可让渡性:监督AI所需的底层技能会因过度依赖而不可逆萎缩,但无论自动化程度多高,业务影响、伦理后果与系统稳定性的最终责任必须由人类承担。

跟我们的关联

  • 对 👤ATou 意味着必须将“意图债务”排查纳入需求评审前置环节,下一步需在PRD模板中强制增加“AI隐式假设声明”与“验证盲区清单”字段以阻断逻辑空心化。
  • 对 🧠Neta 意味着需重构团队认知校准机制,下一步应建立“每周脱离AI手动执行核心任务”的硬性规范,防止监督技能因自动化而断代。
  • 对 🪞Uota 意味着需将“编排税”量化为交付红线,下一步需设定“产出/背书容量比”阈值,一旦积压即触发降级审查或强制降速,彻底杜绝以期望替代审查。

讨论引子

1. 当AI生成的代码或文档通过所有自动化测试且格式完美时,团队应如何设计低成本但高穿透力的“反绿灯陷阱”审查流程? 2. 在交付压力与“认知投降”风险之间,如何量化界定“可接受委托”与“必须人工兜底”的动态边界? 3. 监督悖论指出“监督AI所需的正是会被AI替代的技能”,团队应如何设计技能保留机制以避免关键判断力断代?

过去,批判性思维的教导方式是以谦逊的好奇心和适度的怀疑态度来对待新信息——吸收不同的观点,形成自己的看法。这依然正确,但越来越多地,我的日常生活中已经没有什么能迫使我进行批判性思维了,因为我的大量工作都通过代理(agents)来完成。对于那些完全接受了智能体工作流(agentic workflows,即并行运行多个会话并期望模型不断改进)的工程师和产品人员,我想说:我是这些工具的超级粉丝。我写这篇文章不是为了提倡减少智能体工作流。 我的目标是帮助你在这样一个很容易把任何事情都甩给智能体的世界里,保持批判性思维。 过去,我们大部分的认知和审美处理都发生在提出问题与得到答案之间的空间里。现在,这个空间是以秒来计算的。你越是使用智能体工作流,这就变得越困难(尽管不是我认为人们预期的那种方式):随着模型的改进,明显错误的比例越来越低。许多(大多数?)输出都会写得很好且基本正确,但它们不会让你想要再看第二眼。 即使你同时运行多个智能体,你对这些输出依然只有一双眼睛。 你必须把批判性思维融入你的日常,因为默认情况下,没有任何东西会替你做这件事。 很难在这方面自我纠正的部分原因是,智能体工作流令人愉悦。在忙碌的一天中,获得快速、愉快且通常正确的答案令人耳目一新,但这也正是为什么你很容易放松警惕。

卸载、推迟与投降

当与人讨论这个问题时,我将其描述为一个光谱: 在最顶端:认知卸载(cognitive offloading),即将任务委托给 AI,但保持对结果的所有权。我整天都在做这件事。你也应该如此。在中间:推迟(deferral),工具的输出成为你的新输入;结果已不再是一个假设。在最底端:认知投降(cognitive surrender)——AI 的输出悄然变成了你自己的东西,你觉得没有必要去检查它。 认知投降是 Steven Shaw 和 Gideon Nave 在 Wharton 创造的术语。它完美契合了我一直以来的观察:随着信任(或懒惰)的增加,人们在这个光谱上逐渐下滑。这种转变很少被察觉,因为每一步都是渐进的,且看似合理。你仔细阅读了上一个答案,所以你略读了下一个。对于再下一个,你只扫视了骨架。然后有人问你某一行代码,你却无法解释,即使在智能体的帮助下也无能为力。 这就是认知投降。这就是认知债务(cognitive debt)积累的方式。通常,当你试图应用某个系统的心理模型却发现它并不存在时,才会发现这一点。Margaret-Anne Storey 曾撰文指出,这在团队中表现为对共享系统理论的认知不断削弱。我也写过代码层面的等价物,即理解债务(comprehension debt,由 Jeremy Twei 创造的术语)。在当时,它是完全不可见的。代码库看起来完美无瑕,测试也通过了。直到你必须对系统进行更改,并意识到已经没有人理解它时,问题才会变得明显。当你阅读了一份战略文档或规范的目录并签字确认时,情况也是如此。 需要说明的是,我并不是在提倡不可能的事。要维护一个现代大型代码库的完整心理模型是不可能的。Claude Code 团队曾公开表示,他们按需重建理解:当他们需要理解某一部分时,他们会要求 Claude 解释那个片段,而不是将整个模型装在脑子里。正如我之前所写,这种债务比大多数工程师预期的更容易恢复。只要你能在需要时在局部重建它,你就不需要维护完整的模型。你只需要知道你缺少什么。 在风险较低的地方,完全可以放心地完全委托。当你无法解释一个问题的答案,甚至借助智能体也无法解释时,你就已经让渡了所有权。 这也不总是一个问题。就在最近,我在录制一门课程,必须从三家评分相近的酒店中选择一家作为录制地点。我没有时间手动查看所有的评论,所以我把决定权交给了 AI。结果很奏效,如果再来一次我也会这么做。然而,在决定如何投资我们的资金、如何就职业向孩子们提供建议,或者在工作中:我们应该构建什么、哪些变更会影响哪些用户、发布是否安全时,我不会这样做。在犯错成本较低的地方接受交接,在他人需要承担后果的地方保留推理。

我问自己的问题

当我不清楚自己的想法时,我通常会回到这样一个基本问题清单:我怎么知道我在解决正确的问题?我怎么知道我在用正确的方式解决它?有证据支持我的结论吗?我怎么知道我已经完成了?大多数时候,这无非就是谁、什么、哪里、为什么、何时和怎么做。写出来的时候,它看起来幼稚得有些荒谬,但它迫使你按照你原本会忽略的类别去思考。如今,跳过所有这些并直接问你的智能体它认为你该怎么做,实在是太容易了。以下是我现在问自己的这些问题的全新版本。 在提问之前我是否形成了一个假设?在让智能体执行任何重要任务之前,我会写下——哪怕只是在脑海中——我认为答案可能是什么。即使是个糟糕的猜测也没关系。你随时可以根据新信息改变想法。然而,一旦你读到了一个写得很好的回复,就很难想象还有其他任何可能性。如果你完全没有任何指引,可以要求进行 Thariq Shihipar 所说的“盲点检查”:把你所知道的交给模型,让它找出你的未知的未知。 我是让它帮我思考,还是从我这儿卸载思考?两者都可以,只要你清楚自己在做哪一种。 要证明这是错的,必须有什么条件成立?然后去查明。模型对自身信心的自我评估,远不如你能进行的实际测试有价值,所以给它一个测试。 我是否从不同角度听过反对意见?当我对某个有些开放性的问题采取了强硬立场时,我会让不止一个模型来论证相反的一面,然后审查输出并形成我自己的观点。这需要更长的时间,但最终我会对这个主题有更多的了解。 我是否愿意在必须维护它的人面前为此打赌?这适用于代码以及你正在交付的任何其他东西。我认为这就是可问责的标准。 我不再练习什么了?也许是一些常规的调试。我可以接受放弃其中一些,但我希望这是有意识的。

将验证作为一种习惯

我最近写了很多关于验证的文章,因为我相信瓶颈已经从编码转移到了确信自己是正确的。当你赋予智能体验证其所作所为的手段时——无论是通过端到端测试、属性测试,还是通过实际的应用交互——它就可以在进行更改、运行验证测试、读取输出并再次尝试,而这一切都发生在你查看任何东西之前。这就是 Boris Cherny 所说的“给 Claude 一种验证其工作的方法”,我相信这是取得出色成果的最关键组成部分之一。你将不再是逐行阅读,而是构建这些循环并审查证据。 你也可以在验证上投降。“有支持我结论的证据吗?”变成了“检查变绿了吗?”智能体使得创建测试的成本极低,以至于你会看到很多绿灯,而你可能会遇到一个通过了测试却没能发现功能损坏的情况。如果测试的编写带有与功能相同的错误,它就会通过。而且绿色的勾号只传达了一种属性。太容易让人想象它涵盖了一切。 当检查变绿时,问问它证明了什么。然后再问问它没有证明什么。 预先定义“已验证”,因为事后你会为任何结果寻找合理化借口。 智能体工作的终点线应该是切实可见的东西:通过的测试、截图、日志或追踪记录。这确保了完成工作的标准是基于事实的,而不是基于“看起来完成了”这样的事情进行解释(并投降)。当你收到智能体的完成通知时,在看摘要之前,首先要审查执行命令的代码片段及其输出。 Claude Code 还可以自我批评(通过全新上下文中的子智能体)将其工作作为一项健全性检查,值得将此固化到循环中,使其每次都运行,而不仅仅是在你记得的时候。我仍然会在最后问:“我遗漏了什么吗?”这听起来很傻,但很多时候,当我使用前沿模型完成了一些复杂的功能工作,查看它、审查它,然后问:“我遗漏了什么吗?”它随后会返回两三个其他的东西。这就是我总是问的原因。 当然,这些都不需要成为常态;知道何时深入是一项技能。在我们关于 Claude Code 团队如何进行代码审查的文章中,我最喜欢的经验法则是:“如果你说不出检查会遗漏什么,那就要求进行一次真正的审查,而不是快速批准。” 这也适用于代码之外的情况。如果智能体为你综合了五十个客户电话,或者一份竞争分析,请检查几个源文档以确保摘要准确。检查一个你的建议所依赖的数字,以确保其计算正确。 智能体使得验证的设置成本很低。对你来说困难的是,知道良好的验证是什么样的。

真正关注生成的内容

假设一个智能体给了你一个 600 行的 PR。你大致看了一下结构。你没有逐行阅读。变量名看起来合理,测试也通过了,所以你批准了它。但在中间的某个地方,事务边界有一个微妙的顺序变化,或者在你从未想过的边缘情况上翻转了默认值。我想你确实审查了它,但只是为了寻找你已知会找到的东西。 编写代码和审查代码是不同的技能,审查总会在某个点变成橡皮图章。因此,阅读 diff 时要假装它不是 AI 写的,然后越过 diff,看看智能体做了什么决定。在长时间的会话中,它为你做了很多小决定:默认值、超出范围的内容、当两个需求冲突时它重新解释了哪个需求。 你不会在一个写着“一切顺利”的摘要中看到这些,所以让它列出它所做的决定和假设。然后考考自己。随机挑几行问问,这行怎么样?那行呢?对于一份文档,合上它并尝试凭记忆写出主要论点。有些人对于长会话有一个我喜欢的习惯:让 Claude 写一份关于更改的报告,然后在底部给你一个测验,规则是“只有我完美通过测验后才会合并”。 充分理解你正在交付的东西,以便能够为之辩护。因为在某个时刻,可能会有人来问你。 智能体也可以保护你的注意力。例如,我有一个开源项目,收到了很多 pull request。我会使用智能体来帮助确定进来了什么、什么违反了我们的准则,以及哪里可能需要我的关注。我很少让智能体自行决定这一点,但它们可以将其缩小到我应该集中注意力的范围,然后我就可以真正思考这些更改是否以正确的方式解决了正确的问题。 然后就是数量问题,你必须对此对自己诚实。我称之为编排税。它是你的智能体生成的内容与你愿意署名的内容之间的差距。如果完成的工作堆积的速度比你处理的速度快,那么在解决这个问题之前,再开一个会话也无济于事:收紧检查,这样就不需要你管那么多,或者放慢速度。 当你产出的东西超过你能背书的范围时,你就不再是在审查了。你是在期望。

质量输入,质量输出

人类的心理模型仍然参与其中,但不是在中间,而是在前端和后端。你把精力投入到任务描述和上下文的前端,以及审查输出的后端。这就是为什么良好的输入对输出质量如此重要,我将良好的提示词编写视为一项批判性思维技能。 过去,如果你提出一个不明确的请求,有人会质疑它,你可能会意识到:“哦,等等,我其实没想清楚这个。”智能体通常不会在那里阻止你。它会填补你遗漏的部分,并交回一些看起来已完成的东西,即使其背后的想法仍然模糊。我曾将其写为意图债务,即可能存在于你没有编写的工件中的隐含目标、约束和理由。与其他类型的债务不同,没有人能替你修复这一种。意图必须来自你。 你的提示词反映了你对问题的理解,如果你不能清楚地表达它,那么在你自己的脑海中它可能也不清晰。 在寻求帮助之前,用你自己的话写下你自己的请求摘要。描述受众、范围外的项目以及完成的定义。当你的第二轮修改还没有达到目标时,停止微调并重写你的提示词。 你也可以让智能体在这方面帮助你。我喜欢 Andy Clark 在委托给 AI 系统和与 AI 系统协作之间所做的区分。在后一种情况下,你处于相互放大的良性循环中:你的提示词使你的输出更敏锐,使你的下一个提示词更敏锐,并使你对问题的心理模型更敏锐。如果不清楚,让智能体就它不理解的地方对你进行访谈。如果你在结束会话时完善了自己的心理模型,那就是成功的标志。 还要小心输入。每个智能体很容易只将前一个智能体的摘要传递到其上下文中,不久之后,第三个智能体就没有阅读过原始文档了。 你还需要有自己的输出标准。我在许多不同的创意媒介中尝试过 AI,其中大部分从未展示过,因为它们不符合我的标准。东西出来时格式都很漂亮且充满自信,所以润色不再是一个有用的信号。 AI 可能使得产出更快,但如果我不愿意将输出归功于自己,我就不会输出它。 当某些东西不符合你的标准时,在共享配置、钩子或测试中记下原因,这样它就不会再发生。这就是品味复利的方式,而记下某些东西为何不达标本身也是一种好习惯。

“但模型在这方面会比我更好”

如果你和我身边的许多人一样对这个领域的未来持乐观态度,你可能在这几节里一直有这个想法。在一两年内,模型将能够检测到我能检测到的东西,那为什么还要费心维持这项技能呢? 在很多检测方面你可能是对的,我自己也一直在主张越来越多地将检测推给智能体。但这就是为什么我认为它仍然重要:归根结底,有人要对发布的东西负责。无论 AI 提供了多少帮助,人类都必须承担责任。 在任何给定任务中应该信任智能体多少,这本身就是一个判断。保持校准的部分原因是审查工作,因为模型出错的地方在不断变化。Anthropic 对其工程师和研究人员自己的研究将这个陷阱称为监督悖论:“监督 Claude 所需的正是那些可能因过度使用 AI 而萎缩的编码技能。” 这些是对我来说最重要的一些事情,也是更好的模型无法解决的:你在构建什么,为什么它值得,它影响了谁,以及你愿意牺牲什么?这些都是你需要回答的问题。智能体在解决这些问题时可能会有所帮助,我也希望如此,但最终它们仍然是你的问题。 你可以卸载工作和大部分审计,但不能卸载问责。

日常实践

你不需要严格地做所有这些。只需将适合你工作流的内容插入其中。 每周一次,在没有智能体的情况下写一点代码,或者做一件如果你忘了怎么做会很糟糕的实事。(我称之为校准练习,但我并不是从道德层面来说的。)每月一次,写下你已经停止做的事情,并决定其中哪些你是不介意不做的。我以前一篇博客文章中的一个问题一如既往地有效:如果 AI 不存在,你会感到多迷茫? 如果某件事超出了你的理解范围,就去学习它。如果我在写作时遇到一个以前没见过的短语,我可以搜索一下一行解释并将其包含进去。我更愿意做一些研究来正确理解它,这样我就能看到它适合放在哪里。 正确地检查机器是真正的工作,假装它不是正是团队最终不这样做的原因。它不是免费的,所以把它作为一个单独项目安排进日程,你才会真正完成它。 你停止锻炼的技能将会消失,而且可能比你猜测的更快。继续做那些你不愿意放弃的技能。

随身携带什么

要有意识。智能体可以测试你、访谈你并向你展示它的证据,但前提是你设置了这些。所以去设置吧。 对你在这个光谱上的位置要诚实。如果你无法解释答案,即使在智能体的帮助下也无法解释,你就已经投降了。 拥有一个假设。在提问之前先构思一个,即使它很糟糕。 绿色的勾号意味着一件事。它检查了什么?它没有检查什么? 寻找证据。在阅读摘要之前,先阅读它运行了什么以及返回了什么。 阅读以了解它做了什么决定。它为你决定了什么? 精心制作你的提示词。你编写提示词的方式表明了你对问题理解了多少。 设定一个标准,并坚持下去。如果你不愿意在上面署名,就不要发布它。 通过手动应用重要的技能,让自己保持在游戏中。你可以做的一件事是:在提问之前,写下你认为会发生什么;在智能体完成后,写下一件它没有检查的事情。如果这改变了你阅读输出的方式,请告诉我。独立思考。提出更好的问题。对结果负责。

Back in the day, critical thinking was taught as approaching new info with humble curiosity and a healthy dose of skepticism - take in different views, form your own opinion. Still true, but increasingly, nothing in my day-to-day forces critical thinking on me now that so much of my work runs through agents. For the engineers and product people who have fully bought into agentic workflows (running multiple sessions in parallel and expecting the models to improve), I'm here to say: I'm a big fan of these tools. I'm not writing this to advocate for less agentic workflows.

过去,批判性思维的教导方式是以谦逊的好奇心和适度的怀疑态度来对待新信息——吸收不同的观点,形成自己的看法。这依然正确,但越来越多地,我的日常生活中已经没有什么能迫使我进行批判性思维了,因为我的大量工作都通过代理(agents)来完成。对于那些完全接受了智能体工作流(agentic workflows,即并行运行多个会话并期望模型不断改进)的工程师和产品人员,我想说:我是这些工具的超级粉丝。我写这篇文章不是为了提倡减少智能体工作流。

My goal is to help you maintain critical thinking in a world where it's easy to offload anything to an agent.

我的目标是帮助你在这样一个很容易把任何事情都甩给智能体的世界里,保持批判性思维。

In the past, most of our cognitive and aesthetic processing happened in the space between question and answer. That space is now measured in seconds. The more you use agentic workflows, the more difficult it becomes (though not in the way I think people expected): as the models improve, the percentage of obvious errors is lower. Many (most?) outputs will be well-written and mostly correct, but they won't demand a second look.

过去,我们大部分的认知和审美处理都发生在提出问题与得到答案之间的空间里。现在,这个空间是以秒来计算的。你越是使用智能体工作流,这就变得越困难(尽管不是我认为人们预期的那种方式):随着模型的改进,明显错误的比例越来越低。许多(大多数?)输出都会写得很好且基本正确,但它们不会让你想要再看第二眼。

Even if you are running many agents at a time, you still only have one pair of eyes on the outputs.

即使你同时运行多个智能体,你对这些输出依然只有一双眼睛。

You have to build critical thinking into your day, because by default nothing will do it for you.

你必须把批判性思维融入你的日常,因为默认情况下,没有任何东西会替你做这件事。

Part of the reason it's hard to self-correct for this is that agentic workflows are pleasant. Getting fast, pleasant, often-correct answers is refreshing in a busy day, but that's also why it's easy to relax your vigilance.

很难在这方面自我纠正的部分原因是,智能体工作流令人愉悦。在忙碌的一天中,获得快速、愉快且通常正确的答案令人耳目一新,但这也正是为什么你很容易放松警惕。

Offloading, deferral and surrender

卸载、推迟与投降

When discussing this with people, I describe it as a spectrum:

当与人讨论这个问题时,我将其描述为一个光谱:

At the top: cognitive offloading, the act of delegating tasks to the AI, but maintaining ownership of the result. I do this all day. You should, too. In the middle: deferral, where the output of the tool becomes your new input; the result has ceased to be a hypothesis. At the bottom: cognitive surrender - the AI's output quietly becomes your own, you feel no need to check it.

在最顶端:认知卸载(cognitive offloading),即将任务委托给 AI,但保持对结果的所有权。我整天都在做这件事。你也应该如此。在中间:推迟(deferral),工具的输出成为你的新输入;结果已不再是一个假设。在最底端:认知投降(cognitive surrender)——AI 的输出悄然变成了你自己的东西,你觉得没有必要去检查它。

Cognitive surrender is a term coined by Steven Shaw and Gideon Nave at Wharton. It fits neatly what I've been seeing: as trust (or laziness) increases, people drift down the spectrum. The transition is rarely observed, because the steps are each gradual and seem reasonable. You read the last answer well, so you skim the next one. You just scan the skeleton of the one after that. Then you get asked about a line and can't explain it, even with your agent's help.

认知投降是 Steven Shaw 和 Gideon Nave 在 Wharton 创造的术语。它完美契合了我一直以来的观察:随着信任(或懒惰)的增加,人们在这个光谱上逐渐下滑。这种转变很少被察觉,因为每一步都是渐进的,且看似合理。你仔细阅读了上一个答案,所以你略读了下一个。对于再下一个,你只扫视了骨架。然后有人问你某一行代码,你却无法解释,即使在智能体的帮助下也无能为力。

That's cognitive surrender. It's how cognitive debt accumulates. It's usually discovered when you try to apply a mental model of the system and it doesn't exist. Margaret-Anne Storey has written about how this shows up in teams as an eroding understanding of a shared system theory. I've written about the code equivalent, comprehension debt (a term coined by Jeremy Twei). In the moment, it's completely invisible. The codebase looks pristine and the tests pass. It doesn't become obvious until you have to make a change to the system and realize that nobody understands it anymore. The same applies when you've read the table of contents of a strategy doc or spec and signed off on it.

这就是认知投降。这就是认知债务(cognitive debt)积累的方式。通常,当你试图应用某个系统的心理模型却发现它并不存在时,才会发现这一点。Margaret-Anne Storey 曾撰文指出,这在团队中表现为对共享系统理论的认知不断削弱。我也写过代码层面的等价物,即理解债务(comprehension debt,由 Jeremy Twei 创造的术语)。在当时,它是完全不可见的。代码库看起来完美无瑕,测试也通过了。直到你必须对系统进行更改,并意识到已经没有人理解它时,问题才会变得明显。当你阅读了一份战略文档或规范的目录并签字确认时,情况也是如此。

To be clear, I'm not advocating for the impossible. It's impossible to maintain the full mental model of a large modern codebase. The Claude Code team has said publicly that they rebuild understanding on demand: when they need to understand a part, they ask Claude to explain that slice, rather than holding the full model in their heads. As I've written about before, this sort of debt is more recoverable than most engineers expect. You don't need to maintain the full model as long as you can rebuild it locally as needed. You just need to know what you don't have.

需要说明的是,我并不是在提倡不可能的事。要维护一个现代大型代码库的完整心理模型是不可能的。Claude Code 团队曾公开表示,他们按需重建理解:当他们需要理解某一部分时,他们会要求 Claude 解释那个片段,而不是将整个模型装在脑子里。正如我之前所写,这种债务比大多数工程师预期的更容易恢复。只要你能在需要时在局部重建它,你就不需要维护完整的模型。你只需要知道你缺少什么。

Where the stakes are low, feel free to delegate entirely. When you can't explain the answer to a question, even by way of your agent, you've ceded ownership.

在风险较低的地方,完全可以放心地完全委托。当你无法解释一个问题的答案,甚至借助智能体也无法解释时,你就已经让渡了所有权。

This isn't always a problem, either. Just recently, I was recording a course and had to select one out of three similarly-rated hotels to use as a recording location. I didn't have time to manually review all the reviews, so I delegated the decision to an AI. It worked, and I'd do the same thing again. However, I wouldn't do that when deciding how to invest our money, how to advise our kids on their careers, or at work: what we should build, what changes affect what users, whether it's safe to ship. Take the handoff where being wrong is cheap, keep the reasoning where others will have to deal with the consequences.

这也不总是一个问题。就在最近,我在录制一门课程,必须从三家评分相近的酒店中选择一家作为录制地点。我没有时间手动查看所有的评论,所以我把决定权交给了 AI。结果很奏效,如果再来一次我也会这么做。然而,在决定如何投资我们的资金、如何就职业向孩子们提供建议,或者在工作中:我们应该构建什么、哪些变更会影响哪些用户、发布是否安全时,我不会这样做。在犯错成本较低的地方接受交接,在他人需要承担后果的地方保留推理。

The questions I ask myself

我问自己的问题

When I didn't know what I thought, I'd usually go back to a basic list of questions like these: How do I know that I'm working on the right problem? How do I know that I'm solving it the right way? Is there evidence that supports my conclusion? How do I know that I'm finished? Most times, this is just who, what, where, why, when and how. When written out, it looks absurdly child-like, but it forces you to think in terms of categories that you'd otherwise ignore. These days, it's too easy to simply skip all of this and ask your agent what it thinks you should do. These are the new versions of these questions that I ask myself now.

当我不清楚自己的想法时,我通常会回到这样一个基本问题清单:我怎么知道我在解决正确的问题?我怎么知道我在用正确的方式解决它?有证据支持我的结论吗?我怎么知道我已经完成了?大多数时候,这无非就是谁、什么、哪里、为什么、何时和怎么做。写出来的时候,它看起来幼稚得有些荒谬,但它迫使你按照你原本会忽略的类别去思考。如今,跳过所有这些并直接问你的智能体它认为你该怎么做,实在是太容易了。以下是我现在问自己的这些问题的全新版本。

Did I formulate a hypothesis before asking? Before I run an agent on any non-trivial task, I write down, even just in my head, what I think the answer might be. It's OK if it's a bad guess. You're always welcome to change your mind in light of new information. Once you've read a well-written response, though, it's hard to imagine any other possibility. If you have no guidance whatsoever, ask for what Thariq Shihipar calls a blind spot pass: give the model what you know and have it find your unknown unknowns.

在提问之前我是否形成了一个假设?在让智能体执行任何重要任务之前,我会写下——哪怕只是在脑海中——我认为答案可能是什么。即使是个糟糕的猜测也没关系。你随时可以根据新信息改变想法。然而,一旦你读到了一个写得很好的回复,就很难想象还有其他任何可能性。如果你完全没有任何指引,可以要求进行 Thariq Shihipar 所说的“盲点检查”:把你所知道的交给模型,让它找出你的未知的未知。

Am I asking it to help me think or to offload thinking from me? Both are OK, as long as you know which one you're doing.

我是让它帮我思考,还是从我这儿卸载思考?两者都可以,只要你清楚自己在做哪一种。

What would have to be true for this to be wrong? Then go find out. A model's self-assessment of confidence is much less valuable than an actual test you can perform, so give it one.

要证明这是错的,必须有什么条件成立?然后去查明。模型对自身信心的自我评估,远不如你能进行的实际测试有价值,所以给它一个测试。

Have I heard the counter argument from a different angle? When I've taken a hard stance on something that's somewhat open-ended, I'll ask more than one model to argue the opposite side, then review the output and form my own opinion. This takes longer, but I end up knowing much more about the subject.

我是否从不同角度听过反对意见?当我对某个有些开放性的问题采取了强硬立场时,我会让不止一个模型来论证相反的一面,然后审查输出并形成我自己的观点。这需要更长的时间,但最终我会对这个主题有更多的了解。

Would I bet on this in front of the person who has to maintain it? This applies to code and to anything else that you're delivering. I believe that this is the bar for answerability.

我是否愿意在必须维护它的人面前为此打赌?这适用于代码以及你正在交付的任何其他东西。我认为这就是可问责的标准。

What am I no longer practicing? Maybe it's some of the routine debugging. I'm OK with letting some of that go, but I want it to be intentional.

我不再练习什么了?也许是一些常规的调试。我可以接受放弃其中一些,但我希望这是有意识的。

Verification as a habit

将验证作为一种习惯

I've been writing a lot about verification lately because I believe that the bottleneck has shifted from coding to being sure you're right. When you give an agent the means to verify what it's doing, whether that be by way of end-to-end tests, property tests, or by way of actual app interactions, it can make a change, run the verification test, read the output, and attempt again all before you've looked at anything. This is what Boris Cherny calls "give Claude a way to verify its work" and I believe that this is one of the most critical components of achieving great results. Rather than reading every line, you'll be building these loops and reviewing the evidence.

我最近写了很多关于验证的文章,因为我相信瓶颈已经从编码转移到了确信自己是正确的。当你赋予智能体验证其所作所为的手段时——无论是通过端到端测试、属性测试,还是通过实际的应用交互——它就可以在进行更改、运行验证测试、读取输出并再次尝试,而这一切都发生在你查看任何东西之前。这就是 Boris Cherny 所说的“给 Claude 一种验证其工作的方法”,我相信这是取得出色成果的最关键组成部分之一。你将不再是逐行阅读,而是构建这些循环并审查证据。

You can also surrender verification. "Is there evidence that supports my conclusion?" becomes "Did the check turn green?" Agents make it so cheap to create tests that you'll see a lot of green, and you could have a passing test that doesn't catch a broken feature. If the test is written with the same mistake as the feature, it'll pass. And a green check only conveys one property. It's too easy to imagine it covers everything.

你也可以在验证上投降。“有支持我结论的证据吗?”变成了“检查变绿了吗?”智能体使得创建测试的成本极低,以至于你会看到很多绿灯,而你可能会遇到一个通过了测试却没能发现功能损坏的情况。如果测试的编写带有与功能相同的错误,它就会通过。而且绿色的勾号只传达了一种属性。太容易让人想象它涵盖了一切。

When a check goes green, ask what it proved. Then ask what it didn't.

当检查变绿时,问问它证明了什么。然后再问问它没有证明什么。

Define "verified" upfront, because post-facto, you'll rationalize any outcome.

预先定义“已验证”,因为事后你会为任何结果寻找合理化借口。

The finish line for agent work should be something tangible: a test passing, a screenshot, a log or trace. This ensures that the criteria for finishing the work is factual, and not up for interpretation (and surrender) based on something like "it looks like it's done." When you receive a finish notification from an agent, before you look at the summary, first review the code snippet of the command executed and its output.

智能体工作的终点线应该是切实可见的东西:通过的测试、截图、日志或追踪记录。这确保了完成工作的标准是基于事实的,而不是基于“看起来完成了”这样的事情进行解释(并投降)。当你收到智能体的完成通知时,在看摘要之前,首先要审查执行命令的代码片段及其输出。

Claude Code can also self-critique (via a subagent in a fresh context) its own work as a sanity check, and it's worth baking that into the loop so it runs every time, not just when you remember. I still ask at the end "Did I miss anything?" That sounds silly, but so often, when I finish some complex feature work using a frontier model, look at it, review it, and then ask, "Did I miss anything?" It will then come back with two or three more things. That's why I always ask.

Claude Code 还可以自我批评(通过全新上下文中的子智能体)将其工作作为一项健全性检查,值得将此固化到循环中,使其每次都运行,而不仅仅是在你记得的时候。我仍然会在最后问:“我遗漏了什么吗?”这听起来很傻,但很多时候,当我使用前沿模型完成了一些复杂的功能工作,查看它、审查它,然后问:“我遗漏了什么吗?”它随后会返回两三个其他的东西。这就是我总是问的原因。

None of this needs to be the norm, of course; knowing when to go deep is a skill. My favorite rule of thumb from our write-up on how the Claude Code team does code review is: "If you can't say what the checks would miss, ask for a real review rather than a quick approval."

当然,这些都不需要成为常态;知道何时深入是一项技能。在我们关于 Claude Code 团队如何进行代码审查的文章中,我最喜欢的经验法则是:“如果你说不出检查会遗漏什么,那就要求进行一次真正的审查,而不是快速批准。”

This applies beyond code as well. If an agent has synthesized fifty customer calls for you, or a competitive analysis, check a couple of the source documents to make sure the summary is accurate. Check a number that your recommendation depends on to make sure it's being calculated correctly.

这也适用于代码之外的情况。如果智能体为你综合了五十个客户电话,或者一份竞争分析,请检查几个源文档以确保摘要准确。检查一个你的建议所依赖的数字,以确保其计算正确。

Agents have made verification cheap to set up. What's difficult for you is knowing what good verification looks like.

智能体使得验证的设置成本很低。对你来说困难的是,知道良好的验证是什么样的。

Actually paying attention to what's generated

真正关注生成的内容

Say an agent gives you a 600-line PR. You roughly look at the structure. You don't read every line. The variable names look reasonable and the tests pass, so you approve it. But somewhere in the middle there's a subtle ordering change in a transaction boundary, or a flipped default on an edge case you never thought about. You did review it, I guess, but only for what you already knew you'd find.

假设一个智能体给了你一个 600 行的 PR。你大致看了一下结构。你没有逐行阅读。变量名看起来合理,测试也通过了,所以你批准了它。但在中间的某个地方,事务边界有一个微妙的顺序变化,或者在你从未想过的边缘情况上翻转了默认值。我想你确实审查了它,但只是为了寻找你已知会找到的东西。

Writing code and reviewing it are different skills, and there's a point where reviewing turns into rubber stamping. So read the diff as if the AI didn't write it, and then look past the diff at what the agent decided. Over a long session it makes a lot of small decisions for you: the defaults, what's out of scope, which requirement it reinterprets when two of them clash.

编写代码和审查代码是不同的技能,审查总会在某个点变成橡皮图章。因此,阅读 diff 时要假装它不是 AI 写的,然后越过 diff,看看智能体做了什么决定。在长时间的会话中,它为你做了很多小决定:默认值、超出范围的内容、当两个需求冲突时它重新解释了哪个需求。

You won't see any of that in a summary that says everything went well, so ask it to list the decisions and assumptions it made. Then quiz yourself. Pick a few lines at random and ask, what about this line? What about that one? For a document, close it and try to write out the main argument from memory. Some have a habit I like for long sessions: have Claude write a report on the change, and then give you a quiz at the bottom, where the rule is "I only merge after I pass the quiz perfectly."

你不会在一个写着“一切顺利”的摘要中看到这些,所以让它列出它所做的决定和假设。然后考考自己。随机挑几行问问,这行怎么样?那行呢?对于一份文档,合上它并尝试凭记忆写出主要论点。有些人对于长会话有一个我喜欢的习惯:让 Claude 写一份关于更改的报告,然后在底部给你一个测验,规则是“只有我完美通过测验后才会合并”。

Understand what you're shipping well enough to defend it. Because at some point, someone could ask.

充分理解你正在交付的东西,以便能够为之辩护。因为在某个时刻,可能会有人来问你。

Agents can also guard your attention. For example, I have an open source project that receives a lot of pull requests. I'll use agents to help determine what's incoming, what's contrary to our guidelines, and where my attention is likely required. I rarely let the agents self-determine this, but they can narrow it down to where I should focus my attention, and then I can actually think about whether these changes are solving the right problem in the right way.

智能体也可以保护你的注意力。例如,我有一个开源项目,收到了很多 pull request。我会使用智能体来帮助确定进来了什么、什么违反了我们的准则,以及哪里可能需要我的关注。我很少让智能体自行决定这一点,但它们可以将其缩小到我应该集中注意力的范围,然后我就可以真正思考这些更改是否以正确的方式解决了正确的问题。

Then there's volume, and you have to be honest with yourself about it. I've called this the orchestration tax. It's the gap between what your agents generate and what you'd feel comfortable putting your name on. If finished work is piling up faster than you can get through it, another session won't help until you've fixed that: tighten the checks so less of it needs you, or slow down.

然后就是数量问题,你必须对此对自己诚实。我称之为编排税。它是你的智能体生成的内容与你愿意署名的内容之间的差距。如果完成的工作堆积的速度比你处理的速度快,那么在解决这个问题之前,再开一个会话也无济于事:收紧检查,这样就不需要你管那么多,或者放慢速度。

When you're producing more than you can stand behind, you're no longer reviewing. You're hoping.

当你产出的东西超过你能背书的范围时,你就不再是在审查了。你是在期望。

Quality in, quality out

质量输入,质量输出

The human mental model is still involved, but instead of in the middle, it's at the front and end. You're putting your energy into the front-end of the task description and context, as well as the back-end of reviewing the output. This is why good input is so important to the quality of output, and I view good prompting as a critical thinking skill.

人类的心理模型仍然参与其中,但不是在中间,而是在前端和后端。你把精力投入到任务描述和上下文的前端,以及审查输出的后端。这就是为什么良好的输入对输出质量如此重要,我将良好的提示词编写视为一项批判性思维技能。

Historically, if you made a non-specific request, someone would challenge it, and you might realize, "Oh wait, I actually didn't figure this out." An agent often won't stop you there. It fills in what you left out and hands back something that looks done, even though the idea behind it is still fuzzy. I've written about this as intent debt, the implicit goals, constraints and rationale that may exist in artifacts you didn't write. Unlike other kinds of debt, nobody else can fix this one for you. The intent has to come from you.

过去,如果你提出一个不明确的请求,有人会质疑它,你可能会意识到:“哦,等等,我其实没想清楚这个。”智能体通常不会在那里阻止你。它会填补你遗漏的部分,并交回一些看起来已完成的东西,即使其背后的想法仍然模糊。我曾将其写为意图债务,即可能存在于你没有编写的工件中的隐含目标、约束和理由。与其他类型的债务不同,没有人能替你修复这一种。意图必须来自你。

Your prompt is a reflection of your understanding of the problem, and if you can't express it clearly, it may not be clear in your own mind.

你的提示词反映了你对问题的理解,如果你不能清楚地表达它,那么在你自己的脑海中它可能也不清晰。

Write your own request brief in your own words before you ask for help. Describe the audience, out-of-scope items, and the definition of done. When your second round of corrections hasn't got you there, stop tweaking and rewrite your prompt.

在寻求帮助之前,用你自己的话写下你自己的请求摘要。描述受众、范围外的项目以及完成的定义。当你的第二轮修改还没有达到目标时,停止微调并重写你的提示词。

You can have the agent help you with this too. I like the distinction Andy Clark makes between delegating to an AI system and collaborating with it. In the latter case, you're in a virtuous cycle of mutual amplification: your prompts sharpen your output, sharpen your next prompt and sharpen your mental model of the problem. If it's not clear, ask the agent to interview you about what it doesn't understand. If you close the session having refined your own mental model, that's a sign of success.

你也可以让智能体在这方面帮助你。我喜欢 Andy Clark 在委托给 AI 系统和与 AI 系统协作之间所做的区分。在后一种情况下,你处于相互放大的良性循环中:你的提示词使你的输出更敏锐,使你的下一个提示词更敏锐,并使你对问题的心理模型更敏锐。如果不清楚,让智能体就它不理解的地方对你进行访谈。如果你在结束会话时完善了自己的心理模型,那就是成功的标志。

Also be careful about the input. It's easy for each agent to just pass the previous agent's summary into its context, and before long the third agent hasn't read the original document.

还要小心输入。每个智能体很容易只将前一个智能体的摘要传递到其上下文中,不久之后,第三个智能体就没有阅读过原始文档了。

You also need your own standards for output. I've played around with AI in lots of different creative mediums, and most of it never gets shown because it doesn't meet my standards. Things are all coming out nicely formatted and confident, so polish is no longer a useful signal.

你还需要有自己的输出标准。我在许多不同的创意媒介中尝试过 AI,其中大部分从未展示过,因为它们不符合我的标准。东西出来时格式都很漂亮且充满自信,所以润色不再是一个有用的信号。

AI may have made it faster to produce, but if I wouldn't feel comfortable attributing the output to myself, I won't output it.

AI 可能使得产出更快,但如果我不愿意将输出归功于自己,我就不会输出它。

When something doesn't meet your standards, note why in shared config, a hook or a test so that it doesn't happen again. That's how taste compounds, and noting why something didn't make the cut is good practice on its own.

当某些东西不符合你的标准时,在共享配置、钩子或测试中记下原因,这样它就不会再发生。这就是品味复利的方式,而记下某些东西为何不达标本身也是一种好习惯。

"But the models will be better at this than me"

“但模型在这方面会比我更好”

If you're as bullish on the future of this space as many people around me are, you've probably had this thought for a couple of sections. In a year or two, the model will be able to detect what I'd be able to detect, so why bother maintaining the skill?

如果你和我身边的许多人一样对这个领域的未来持乐观态度,你可能在这几节里一直有这个想法。在一两年内,模型将能够检测到我能检测到的东西,那为什么还要费心维持这项技能呢?

You may be right on a lot of that detection, and I've been arguing for increasingly pushing detection to agents myself. But here's why I think it still matters: at the end of the day, someone is responsible for what ships. Regardless of how much AI helped, a human has to take responsibility.

在很多检测方面你可能是对的,我自己也一直在主张越来越多地将检测推给智能体。但这就是为什么我认为它仍然重要:归根结底,有人要对发布的东西负责。无论 AI 提供了多少帮助,人类都必须承担责任。

The question of how much to trust an agent for any given task is itself a judgment call. Part of staying calibrated is reviewing the work, because what the models get wrong keeps changing. Anthropic's own research on its engineers and researchers calls out the trap as the paradox of supervision: "supervising Claude requires the very coding skills that may atrophy from AI overuse."

在任何给定任务中应该信任智能体多少,这本身就是一个判断。保持校准的部分原因是审查工作,因为模型出错的地方在不断变化。Anthropic 对其工程师和研究人员自己的研究将这个陷阱称为监督悖论:“监督 Claude 所需的正是那些可能因过度使用 AI 而萎缩的编码技能。”

These are some of the things that matter most to me and that a better model won't solve: what are you building, why is it worth it, who does it impact and what are you willing to sacrifice? Those are all questions you need to answer. An agent can be helpful in working them through, and I would like it to be, but ultimately they're still yours.

这些是对我来说最重要的一些事情,也是更好的模型无法解决的:你在构建什么,为什么它值得,它影响了谁,以及你愿意牺牲什么?这些都是你需要回答的问题。智能体在解决这些问题时可能会有所帮助,我也希望如此,但最终它们仍然是你的问题。

You may offload the work and much of the auditing, but not the accountability.

你可以卸载工作和大部分审计,但不能卸载问责。

Practices for the everyday

日常实践

You don't need to do all this rigorously. Just plug in what works for your workflow.

你不需要严格地做所有这些。只需将适合你工作流的内容插入其中。

Once a week, write a bit of code without an agent, or do one real thing that would suck if you forgot how to do it. (I've called this a calibration exercise, but I don't mean it as a moral one.) Once a month, write down what you've stopped doing and decide which of those you're okay not doing. One question from an old blog post of mine remains as valid as ever: How lost would you be if AI didn't exist?

每周一次,在没有智能体的情况下写一点代码,或者做一件如果你忘了怎么做会很糟糕的实事。(我称之为校准练习,但我并不是从道德层面来说的。)每月一次,写下你已经停止做的事情,并决定其中哪些你是不介意不做的。我以前一篇博客文章中的一个问题一如既往地有效:如果 AI 不存在,你会感到多迷茫?

If something is above your comprehension, go learn it. If I'm writing and I run into a phrase I haven't seen before, I could Google a one-line explanation and include it. I prefer to do a little research to properly understand it, so I can see where it fits.

如果某件事超出了你的理解范围,就去学习它。如果我在写作时遇到一个以前没见过的短语,我可以搜索一下一行解释并将其包含进去。我更愿意做一些研究来正确理解它,这样我就能看到它适合放在哪里。

Checking the machine properly is real work, and pretending otherwise is how teams end up not doing it. It isn't free, so schedule it as a line item and you'll actually get it done.

正确地检查机器是真正的工作,假装它不是正是团队最终不这样做的原因。它不是免费的,所以把它作为一个单独项目安排进日程,你才会真正完成它。

Skills that you stop exercising are going to go away, and probably faster than you might guess. Keep doing the ones you're not willing to let go.

你停止锻炼的技能将会消失,而且可能比你猜测的更快。继续做那些你不愿意放弃的技能。

What to bring with you

随身携带什么

Be intentional. An agent can quiz you, interview you and show you its evidence, but only if you set that up. So set it up.

要有意识。智能体可以测试你、访谈你并向你展示它的证据,但前提是你设置了这些。所以去设置吧。

Be honest about your place on the spectrum. If you can't explain the answer, even with an agent's help, you've surrendered it.

对你在这个光谱上的位置要诚实。如果你无法解释答案,即使在智能体的帮助下也无法解释,你就已经投降了。

Have a hypothesis. Formulate one before asking, even if it's bad.

拥有一个假设。在提问之前先构思一个,即使它很糟糕。

A green check means one thing. What did it check? What did it not check?

绿色的勾号意味着一件事。它检查了什么?它没有检查什么?

Look for evidence. Read what it ran and what it returned before reading the summary.

寻找证据。在阅读摘要之前,先阅读它运行了什么以及返回了什么。

Read to know what decisions it made. What did it decide for you?

阅读以了解它做了什么决定。它为你决定了什么?

Craft your prompt. How you write what you prompt shows how much you understood the problem.

精心制作你的提示词。你编写提示词的方式表明了你对问题理解了多少。

Set a bar, and stick to it. If you wouldn't put your name on it, it doesn't go out.

设定一个标准,并坚持下去。如果你不愿意在上面署名,就不要发布它。

Keep yourself in the game by manually applying the skills that matter. One thing you could do: Before you ask, write down what you think will happen, and after the agent is done, write down one thing it didn't check. Let me know if that changes the way you read the output. Think independently. Ask better questions. Take responsibility for the outcome.

通过手动应用重要的技能,让自己保持在游戏中。你可以做的一件事是:在提问之前,写下你认为会发生什么;在智能体完成后,写下一件它没有检查的事情。如果这改变了你阅读输出的方式,请告诉我。独立思考。提出更好的问题。对结果负责。

Back in the day, critical thinking was taught as approaching new info with humble curiosity and a healthy dose of skepticism - take in different views, form your own opinion. Still true, but increasingly, nothing in my day-to-day forces critical thinking on me now that so much of my work runs through agents. For the engineers and product people who have fully bought into agentic workflows (running multiple sessions in parallel and expecting the models to improve), I'm here to say: I'm a big fan of these tools. I'm not writing this to advocate for less agentic workflows. My goal is to help you maintain critical thinking in a world where it's easy to offload anything to an agent. In the past, most of our cognitive and aesthetic processing happened in the space between question and answer. That space is now measured in seconds. The more you use agentic workflows, the more difficult it becomes (though not in the way I think people expected): as the models improve, the percentage of obvious errors is lower. Many (most?) outputs will be well-written and mostly correct, but they won't demand a second look. Even if you are running many agents at a time, you still only have one pair of eyes on the outputs. You have to build critical thinking into your day, because by default nothing will do it for you. Part of the reason it's hard to self-correct for this is that agentic workflows are pleasant. Getting fast, pleasant, often-correct answers is refreshing in a busy day, but that's also why it's easy to relax your vigilance. Offloading, deferral and surrender When discussing this with people, I describe it as a spectrum: At the top: cognitive offloading, the act of delegating tasks to the AI, but maintaining ownership of the result. I do this all day. You should, too. In the middle: deferral, where the output of the tool becomes your new input; the result has ceased to be a hypothesis. At the bottom: cognitive surrender - the AI's output quietly becomes your own, you feel no need to check it. Cognitive surrender is a term coined by Steven Shaw and Gideon Nave at Wharton. It fits neatly what I've been seeing: as trust (or laziness) increases, people drift down the spectrum. The transition is rarely observed, because the steps are each gradual and seem reasonable. You read the last answer well, so you skim the next one. You just scan the skeleton of the one after that. Then you get asked about a line and can't explain it, even with your agent's help. That's cognitive surrender. It's how cognitive debt accumulates. It's usually discovered when you try to apply a mental model of the system and it doesn't exist. Margaret-Anne Storey has written about how this shows up in teams as an eroding understanding of a shared system theory. I've written about the code equivalent, comprehension debt (a term coined by Jeremy Twei). In the moment, it's completely invisible. The codebase looks pristine and the tests pass. It doesn't become obvious until you have to make a change to the system and realize that nobody understands it anymore. The same applies when you've read the table of contents of a strategy doc or spec and signed off on it. To be clear, I'm not advocating for the impossible. It's impossible to maintain the full mental model of a large modern codebase. The Claude Code team has said publicly that they rebuild understanding on demand: when they need to understand a part, they ask Claude to explain that slice, rather than holding the full model in their heads. As I've written about before, this sort of debt is more recoverable than most engineers expect. You don't need to maintain the full model as long as you can rebuild it locally as needed. You just need to know what you don't have. Where the stakes are low, feel free to delegate entirely. When you can't explain the answer to a question, even by way of your agent, you've ceded ownership. This isn't always a problem, either. Just recently, I was recording a course and had to select one out of three similarly-rated hotels to use as a recording location. I didn't have time to manually review all the reviews, so I delegated the decision to an AI. It worked, and I'd do the same thing again. However, I wouldn't do that when deciding how to invest our money, how to advise our kids on their careers, or at work: what we should build, what changes affect what users, whether it's safe to ship. Take the handoff where being wrong is cheap, keep the reasoning where others will have to deal with the consequences. The questions I ask myself When I didn't know what I thought, I'd usually go back to a basic list of questions like these: How do I know that I'm working on the right problem? How do I know that I'm solving it the right way? Is there evidence that supports my conclusion? How do I know that I'm finished? Most times, this is just who, what, where, why, when and how. When written out, it looks absurdly child-like, but it forces you to think in terms of categories that you'd otherwise ignore. These days, it's too easy to simply skip all of this and ask your agent what it thinks you should do. These are the new versions of these questions that I ask myself now. Did I formulate a hypothesis before asking? Before I run an agent on any non-trivial task, I write down, even just in my head, what I think the answer might be. It's OK if it's a bad guess. You're always welcome to change your mind in light of new information. Once you've read a well-written response, though, it's hard to imagine any other possibility. If you have no guidance whatsoever, ask for what Thariq Shihipar calls a blind spot pass: give the model what you know and have it find your unknown unknowns. Am I asking it to help me think or to offload thinking from me? Both are OK, as long as you know which one you're doing. What would have to be true for this to be wrong? Then go find out. A model's self-assessment of confidence is much less valuable than an actual test you can perform, so give it one. Have I heard the counter argument from a different angle? When I've taken a hard stance on something that's somewhat open-ended, I'll ask more than one model to argue the opposite side, then review the output and form my own opinion. This takes longer, but I end up knowing much more about the subject. Would I bet on this in front of the person who has to maintain it? This applies to code and to anything else that you're delivering. I believe that this is the bar for answerability. What am I no longer practicing? Maybe it's some of the routine debugging. I'm OK with letting some of that go, but I want it to be intentional. Verification as a habit I've been writing a lot about verification lately because I believe that the bottleneck has shifted from coding to being sure you're right. When you give an agent the means to verify what it's doing, whether that be by way of end-to-end tests, property tests, or by way of actual app interactions, it can make a change, run the verification test, read the output, and attempt again all before you've looked at anything. This is what Boris Cherny calls "give Claude a way to verify its work" and I believe that this is one of the most critical components of achieving great results. Rather than reading every line, you'll be building these loops and reviewing the evidence. You can also surrender verification. "Is there evidence that supports my conclusion?" becomes "Did the check turn green?" Agents make it so cheap to create tests that you'll see a lot of green, and you could have a passing test that doesn't catch a broken feature. If the test is written with the same mistake as the feature, it'll pass. And a green check only conveys one property. It's too easy to imagine it covers everything. When a check goes green, ask what it proved. Then ask what it didn't. Define "verified" upfront, because post-facto, you'll rationalize any outcome. The finish line for agent work should be something tangible: a test passing, a screenshot, a log or trace. This ensures that the criteria for finishing the work is factual, and not up for interpretation (and surrender) based on something like "it looks like it's done." When you receive a finish notification from an agent, before you look at the summary, first review the code snippet of the command executed and its output. Claude Code can also self-critique (via a subagent in a fresh context) its own work as a sanity check, and it's worth baking that into the loop so it runs every time, not just when you remember. I still ask at the end "Did I miss anything?" That sounds silly, but so often, when I finish some complex feature work using a frontier model, look at it, review it, and then ask, "Did I miss anything?" It will then come back with two or three more things. That's why I always ask. None of this needs to be the norm, of course; knowing when to go deep is a skill. My favorite rule of thumb from our write-up on how the Claude Code team does code review is: "If you can't say what the checks would miss, ask for a real review rather than a quick approval." This applies beyond code as well. If an agent has synthesized fifty customer calls for you, or a competitive analysis, check a couple of the source documents to make sure the summary is accurate. Check a number that your recommendation depends on to make sure it's being calculated correctly. Agents have made verification cheap to set up. What's difficult for you is knowing what good verification looks like. Actually paying attention to what's generated Say an agent gives you a 600-line PR. You roughly look at the structure. You don't read every line. The variable names look reasonable and the tests pass, so you approve it. But somewhere in the middle there's a subtle ordering change in a transaction boundary, or a flipped default on an edge case you never thought about. You did review it, I guess, but only for what you already knew you'd find. Writing code and reviewing it are different skills, and there's a point where reviewing turns into rubber stamping. So read the diff as if the AI didn't write it, and then look past the diff at what the agent decided. Over a long session it makes a lot of small decisions for you: the defaults, what's out of scope, which requirement it reinterprets when two of them clash. You won't see any of that in a summary that says everything went well, so ask it to list the decisions and assumptions it made. Then quiz yourself. Pick a few lines at random and ask, what about this line? What about that one? For a document, close it and try to write out the main argument from memory. Some have a habit I like for long sessions: have Claude write a report on the change, and then give you a quiz at the bottom, where the rule is "I only merge after I pass the quiz perfectly." Understand what you're shipping well enough to defend it. Because at some point, someone could ask. Agents can also guard your attention. For example, I have an open source project that receives a lot of pull requests. I'll use agents to help determine what's incoming, what's contrary to our guidelines, and where my attention is likely required. I rarely let the agents self-determine this, but they can narrow it down to where I should focus my attention, and then I can actually think about whether these changes are solving the right problem in the right way. Then there's volume, and you have to be honest with yourself about it. I've called this the orchestration tax. It's the gap between what your agents generate and what you'd feel comfortable putting your name on. If finished work is piling up faster than you can get through it, another session won't help until you've fixed that: tighten the checks so less of it needs you, or slow down. When you're producing more than you can stand behind, you're no longer reviewing. You're hoping. Quality in, quality out The human mental model is still involved, but instead of in the middle, it's at the front and end. You're putting your energy into the front-end of the task description and context, as well as the back-end of reviewing the output. This is why good input is so important to the quality of output, and I view good prompting as a critical thinking skill. Historically, if you made a non-specific request, someone would challenge it, and you might realize, "Oh wait, I actually didn't figure this out." An agent often won't stop you there. It fills in what you left out and hands back something that looks done, even though the idea behind it is still fuzzy. I've written about this as intent debt, the implicit goals, constraints and rationale that may exist in artifacts you didn't write. Unlike other kinds of debt, nobody else can fix this one for you. The intent has to come from you. Your prompt is a reflection of your understanding of the problem, and if you can't express it clearly, it may not be clear in your own mind. Write your own request brief in your own words before you ask for help. Describe the audience, out-of-scope items, and the definition of done. When your second round of corrections hasn't got you there, stop tweaking and rewrite your prompt. You can have the agent help you with this too. I like the distinction Andy Clark makes between delegating to an AI system and collaborating with it. In the latter case, you're in a virtuous cycle of mutual amplification: your prompts sharpen your output, sharpen your next prompt and sharpen your mental model of the problem. If it's not clear, ask the agent to interview you about what it doesn't understand. If you close the session having refined your own mental model, that's a sign of success. Also be careful about the input. It's easy for each agent to just pass the previous agent's summary into its context, and before long the third agent hasn't read the original document. You also need your own standards for output. I've played around with AI in lots of different creative mediums, and most of it never gets shown because it doesn't meet my standards. Things are all coming out nicely formatted and confident, so polish is no longer a useful signal. AI may have made it faster to produce, but if I wouldn't feel comfortable attributing the output to myself, I won't output it. When something doesn't meet your standards, note why in shared config, a hook or a test so that it doesn't happen again. That's how taste compounds, and noting why something didn't make the cut is good practice on its own. "But the models will be better at this than me" If you're as bullish on the future of this space as many people around me are, you've probably had this thought for a couple of sections. In a year or two, the model will be able to detect what I'd be able to detect, so why bother maintaining the skill? You may be right on a lot of that detection, and I've been arguing for increasingly pushing detection to agents myself. But here's why I think it still matters: at the end of the day, someone is responsible for what ships. Regardless of how much AI helped, a human has to take responsibility. The question of how much to trust an agent for any given task is itself a judgment call. Part of staying calibrated is reviewing the work, because what the models get wrong keeps changing. Anthropic's own research on its engineers and researchers calls out the trap as the paradox of supervision: "supervising Claude requires the very coding skills that may atrophy from AI overuse." These are some of the things that matter most to me and that a better model won't solve: what are you building, why is it worth it, who does it impact and what are you willing to sacrifice? Those are all questions you need to answer. An agent can be helpful in working them through, and I would like it to be, but ultimately they're still yours. You may offload the work and much of the auditing, but not the accountability. Practices for the everyday You don't need to do all this rigorously. Just plug in what works for your workflow. Once a week, write a bit of code without an agent, or do one real thing that would suck if you forgot how to do it. (I've called this a calibration exercise, but I don't mean it as a moral one.) Once a month, write down what you've stopped doing and decide which of those you're okay not doing. One question from an old blog post of mine remains as valid as ever: How lost would you be if AI didn't exist? If something is above your comprehension, go learn it. If I'm writing and I run into a phrase I haven't seen before, I could Google a one-line explanation and include it. I prefer to do a little research to properly understand it, so I can see where it fits. Checking the machine properly is real work, and pretending otherwise is how teams end up not doing it. It isn't free, so schedule it as a line item and you'll actually get it done. Skills that you stop exercising are going to go away, and probably faster than you might guess. Keep doing the ones you're not willing to let go. What to bring with you Be intentional. An agent can quiz you, interview you and show you its evidence, but only if you set that up. So set it up. Be honest about your place on the spectrum. If you can't explain the answer, even with an agent's help, you've surrendered it. Have a hypothesis. Formulate one before asking, even if it's bad. A green check means one thing. What did it check? What did it not check? Look for evidence. Read what it ran and what it returned before reading the summary. Read to know what decisions it made. What did it decide for you? Craft your prompt. How you write what you prompt shows how much you understood the problem. Set a bar, and stick to it. If you wouldn't put your name on it, it doesn't go out. Keep yourself in the game by manually applying the skills that matter. One thing you could do: Before you ask, write down what you think will happen, and after the agent is done, write down one thing it didn't check. Let me know if that changes the way you read the output. Think independently. Ask better questions. Take responsibility for the outcome.

📋 讨论归档

讨论进行中…