把书放回床头:我和大模型的向内求与向外看

Sep 23, 2026·
夏 伟
夏 伟

以前我坐地铁通勤,每天来回有一个多小时的固定时间,基本都用来读书,会读一些经典书籍。上半年工位搬了,我开始自驾通勤,开车没法看书,这段时间就换成了听播客和网络课程。

一开始觉得路上的时间没有浪费。可听得多了才发现,播客大多面向大众,很多话题点到即止,缺少深度;得到上的讲书也差不多,半个小时讲完一本,听到的是别人消化过的版本。更明显的是阅读计划:年初列了 12 本书,到 9 月初才读了 5 本。

9 月开始,我做了一件很小的事:把想读的书放在床头,每天睡前读半个小时。几周下来,深度阅读和思考的时间又慢慢回来了。

回头看,这件事里有两个动作。第一个是向内的:我先察觉到自己不对劲,听了很多却不踏实,真正想要的是能沉下来的阅读和思考。第二个是向外的:我没有逼自己“每天必须挤出时间读书”,而是改了环境,让书就在伸手可及的地方,把睡前阅读变成默认选项。

这件小事让我想到,一件事做不好的时候,我们通常有两种本能:一种是停下来问自己“我到底怎么了”,另一种是去找工具、找人、换环境。

《孟子·离娄上》说“行有不得者,皆反求诸己”,这是向内求;《荀子·劝学》说“君子生非异也,善假于物也”,这是向外看。两句话都对,但放到具体问题里,究竟该先向内还是先向外,并没有那么容易判断。

《非暴力沟通》我很早就读过,一直觉得这套理念很好,但真到实操落地,总觉得还差点什么。最近读了《助推》,才隐约觉得这两本书像是一体两面,刚好站在内与外的两端。前者花了大量篇幅教人觉察和表达自己的状态,本质上是一种向内的澄清;后者则建立在人的理性有限这一前提上,主张通过设计环境来帮助人做出更好的选择。

再往我熟悉的领域延伸一步,这组关系在大模型上几乎重演了一遍:模型自身的推理能力,让它在回答之前先把问题想清楚,是向内;模型之外的 harness,把它接到工具、代码仓库和测试上,让它从环境里拿到反馈,是向外。

维度向内求向外看
书《非暴力沟通》《助推》
大模型模型自身的推理(reasoning)、自我反思模型之外的 harness:工具、上下文、反馈回路
核心动作觉察感受、澄清需要、正向表达改变环境结构、借力、获取反馈
依赖什么自身已有的信息和能力外部环境的质量

这篇文章想讨论的不是哪一种更好,而是它们各自能解决什么问题、在哪里失效、怎样组合起来,以及在向外已经变得太容易的今天,向内还意味着什么。


向内:从非暴力沟通里取什么

马歇尔·卢森堡把非暴力沟通拆成四个要素:观察、感受、需要和请求。1

但在中文语境里,直接照搬这套句式很难落地。“我感到失落,因为我需要被尊重,你愿意……吗?”这样的话放在家人或同事之间,听起来更像翻译腔,甚至会让对方觉得你在“用技巧”。我们的日常表达更含蓄,很多情绪习惯用语气、行动或者一顿饭来传递,而不是直接说出口。

所以我更倾向于不搬句式,只取原则。这套方法常被当成和别人沟通的技巧,但它的顺序本来就是先向内、再向外:先把自己理清,再开口。书里专门有一章讲怎样用它对待自己,我这次回头再看,最先用上的对象也是自己。

先观察自己

书里反复强调两组区分:

  • 观察与评论:“我最近越来越不自律”是评论,“年初列了 12 本书,到 9 月初读了 5 本”才是观察;
  • 感受与想法:“我觉得自己在退步”是一个判断,“不踏实”才是感受。

这两组区分用在自己身上,比用在别人身上更难。评论自己几乎是一种条件反射:“太懒了”“没毅力”,话一出口就定了性,接下来要么硬逼自己,要么干脆放弃。

卢森堡对这种自我评判有一个很准确的说法:自我评判和所有评判一样,是没有被满足的需要的一种悲剧性表达。1 “我太不自律了”这句话底下,真正在说的是:有一个需要一直没有被照顾到。

按书里的方法拆一下:

  • 观察:换成开车通勤后,路上的时间给了播客和讲书,12 本的阅读计划到 9 月初只完成了 5 本;
  • 感受:不踏实,听了很多,心里却不满足;
  • 需要:一段能沉下来的阅读和思考。

分清需要和策略

拆到“需要”这一步,还有一个很容易滑过去的区分,也是我这次觉得最有用的一点:需要和策略不是一回事。

卢森堡给过一个判断标准:需要不指向具体的人做具体的事;一旦说出“我要(谁)去做(什么)”,那就已经是策略了。在他看来,所有人的需要都是相通的,人与人之间的冲突,几乎都发生在策略层面。2

用这个标准回头看,“读书”其实是一种策略,“能沉下来思考”才是需要。播客和讲书也是策略,它们满足的是“获取信息”,满足不了“深度”。这就解释了我那段时间的别扭:路上的时间一点没浪费,信息也没少听,可真正的那个需要一直空着。

分清这一点有实际的用处。如果我把需要当成“读完计划里的书”,半小时一本的讲书几乎是最省事的办法;可我要的是自己沉下来想,讲书恰好把这一步替我省掉了。

把“应该”换成“选择”

书里还有一个专门针对自己的练习:把“我不得不”“我应该”换成“我选择……因为我想要……”。1 卢森堡认为,出于“应该”的行动,背后往往是内疚、羞愧或者义务感,即使做成了,人也很难从中得到乐趣。

“我应该多读书”是一句压在自己身上的要求,做不到就自责;换成“我选择每天睡前读半小时,因为我想要一段能沉下来想事情的时间”,事情还是那件事,动力的来源变了:前者在和自己较劲,后者在照顾自己的需要。

上面这几步都发生在心里,不需要对任何人说。它们的作用是让自己先分清:哪些是发生了的事,哪些是我加上去的解读;我真正缺的是什么,我正在用的办法又是不是对路。

倾听:听懂孩子的心声

在自己身上练熟了这几组区分,再听别人说话,也更容易听到话底下的东西。

比如家里的娃。他今年上一年级,有时我晚上回到家已经快十点了,他还不愿意睡觉。我担心他睡眠不够,一着急就会吼着让他去睡,结果往往适得其反。事后拆一下才看清:我的初心是担心他没睡够、影响第二天的状态,可一吼出来,反而让当晚的入睡变得更难。让我失控的不是娃,而是那份没有被自己看清的担心。

后来有一次陪他躺下,我没有催,而是问他:为什么不早点睡,每天早上又起不来?他的回答很简单:还想玩。

他不是故意对着干,只是还没玩够。我在意的是他睡够、第二天状态好,他在意的是玩够,两边都没错,冲突的只是策略:“现在就去睡”和“再玩一会儿”。听懂了这一层,说出口的话也会不一样:

“都几点了还玩!赶紧去睡!”

“我有点担心你明天早上又起不来。是不是还没玩够?我们一起想个办法,既能玩,又能早点睡。”

第二句没有“我感到……因为我需要……”的标准句式,但感受、需要和请求都在里面,还把他的需要也放了进来。问题就从“怎么让他听话”,变成了“怎么让两边的需要都被照顾到”。

对自己也一样:累了一天、只想省力的那个自己也有它的需要,跟它硬碰,通常赢不了。

请求要具体

表达不必套四段式,关键是把“指责对方”换成“说清自己”,并且请求要具体、做得到。“你能不能懂点事”没法执行,“我们约好几点上床”就很清楚。对自己也一样:“我要多读书”是空话,“每天睡前读半小时”才是做得到的请求。

这是我这次重新理解非暴力沟通的地方:向内澄清的终点,是一个具体的请求,对别人如此,对自己也是如此。 但也正是在这里,我过去实操时的那个卡点出现了:想清楚了,下一个晚上怎么办?


向内的边界:看清自己并不容易

问题在于,向内这条路并不总是走得通。

第一,计划是在冷静时做的,执行却常常发生在情绪里。 《助推》第二章引用了行为经济学家 George Loewenstein 提出的“冷热共情鸿沟”:人在冷静的“冷状态”下,会系统性地低估自己在饥饿、渴求、情绪上头这些“热状态”下会怎么做。3 快十点娃还不睡的那一刻,就是一个典型的热状态:书里的方法在平静时很好理解,可急火一上来,根本想不起什么观察和感受,等回过神来,话已经吼出去了。

第二,自我叙事很容易变成自我辩护。 我们向内分析时,用的是同一个大脑,它既是被审视的对象,也是审视者。心理学家 Nisbett 和 Wilson 在 1977 年报告过一个很有名的实验:让路人从一排四双完全相同的丝袜里挑出质量最好的一双,结果最右边那双被选中的次数,几乎是最左边的四倍。问到理由时,大家说的都是质地、做工;直接问是不是受了摆放位置的影响,几乎所有人都否认。4 他们的结论是,人解释自己为什么这么做时,很多时候并没有真的“看见”内心,只是按常理推了一个说得通的理由。向内找到的东西也一样,有时是真正的需要,有时只是一个让自己舒服的解释。

第三,知道不等于做到。 我很清楚自己需要深度阅读,但“清楚”本身并不会把书送到手边。孩子也一样,他知道早上会起不来,到了晚上还是想再玩一会儿。

向内能解决“我不知道自己要什么”的问题,却很难单独解决“我知道但做不到”的问题。后者正是《助推》关注的地方。


向外:用助推从结构上改变环境

理查德·塞勒和卡斯·桑斯坦在《助推》里区分了两种人:经济学模型里的“经济人”(Econs)总能理性计算,现实中的“普通人”(Humans)则会拖延、怕麻烦、受默认选项和周围人的影响。3 书中借用心理学里的两套思维系统来解释这件事:自动系统快速、直觉、省力,反思系统缓慢、审慎、费力,而大多数日常决策是由前者完成的。

既然人很难每次都调动反思系统,那么与其要求人更自律,不如调整做选择的环境。作者把这称为“选择架构”,并且强调不存在中性的设计。他们举的例子是建筑师总得决定洗手间放在哪里,这个位置会悄悄影响同事们在走廊里碰面的次数。选择总发生在某种环境里,环境就算没人有意设计,也会推人一把。

我丢掉阅读习惯的过程就是一个例子。地铁车厢本来就是一个无意间的助推:它给了我一段做不了别的事、正好适合读书的时间。换成开车,这个助推消失了,车里最顺手的选择变成了播客和讲书,习惯也就悄悄跟着走了。

书里有几个例子,到现在还常被引用:

  • 默认选项:Madrian 和 Shea 研究了一家美国大公司把 401(k) 养老计划从“主动加入”改为“自动加入、可以退出”的前后变化。入职时间相近的员工里,改之前的参与率是 37%,改之后是 86%,而计划本身的经济条款一点没变;5
  • 器官捐献:德国需要主动登记,同意捐献的比例约为 12%;奥地利默认同意、可以退出,这个比例是 99.98%。6 不过要补一句:登记率的差距远大于实际捐献的差距。同一项研究在控制其他因素后发现,默认同意的国家,每百万人口的实际捐献数只高出约 16%,因为家属意见、医疗条件等因素都会起作用;
  • 承诺机制:“明天存更多”计划让员工提前承诺,把未来每次加薪的一部分存进养老账户,绕开了“当下多存钱很痛”的心理障碍。在第一家实施的公司里,参与者的平均储蓄率在 40 个月里从 3.5% 升到了 13.6%;7
  • 小便池里的苍蝇:阿姆斯特丹史基浦机场在小便池里印了一只苍蝇,流传最广的说法是溅洒减少了 80%。但这个数字从来没有正式的研究支撑,当年负责这件事的机场经理 Aad Kieboom 自己也说,它“非常凭经验”。8

这些例子都没有去改变人的内心。它们承认人有局限,然后调整环境,让正确的行为更容易发生。

从结构上改,才能少内耗

内耗常常来自一种很普遍的模式:环境不变,全靠意志力硬扛。每一次都要和自己的自动系统打一架,赢了很累,输了还要自责。

《助推》用一个模型来描述这种拉扯:每个人身上都住着一个有远见的“计划者”和一个只顾眼前的“执行者”。计划者代表反思系统,想为长远打算;执行者受自动系统驱动,直接暴露在各种诱惑面前。3 结合前面的冷热鸿沟,思路就清楚了:不要指望执行者在热状态下做对,而是让计划者在冷状态下,提前把环境改好。

床头的书就是这样起作用的。睡前是一天里最累的时候,如果那一刻还要从头决定“今晚读不读、读哪本”,执行者多半会选更省力的那个;书就在枕边,伸手就能拿到,这个决定就不用再做了。

这算不上偷懒。承认自己是普通人,才能把有限的注意力留给真正需要判断的事情。

按原则改,一次改一处

改环境也不是想到什么改什么。《助推》用 NUDGES 这个缩写总结了好的选择架构的六条原则。为了凑出这个缩写,作者还自嘲“稍微作弊了一下”:打头的 N 其实取自 iNcentives 的第二个字母。3 我把它们放到重拾阅读这件事上:

原则在重拾阅读上的用法
用好激励(iNcentives)给自己设计及时、看得见的小回报
理解映射关系(Understand mappings)把抽象目标换算成具体结果:每天半小时,一个月就是十五个小时
设好默认选项(Defaults)把书放在床头,让睡前阅读成为不需要做决定的默认安排
给出反馈(Give feedback)记下读了什么、想到了什么,让积累被看见
预期会犯错(Expect error)提前接受会有断掉的晚上,断了第二天照常,不自责
简化复杂选择(Structure complex choices)提前选好下一本,睡前不用再挑

这六条里,我现在做得最差的是反馈。以前偶尔会把读书时的想法记进收集的笔记里,最近基本没怎么写了。

在此之上,还可以借一点实验的思路:一次只改一处环境,观察两三周,有效就保留,无效就换一个。床头放书就是我改的第一处,到写这篇时差不多三周。这样改变就不用靠一次下决心的冲刺,而是拆成一连串可以验证的小实验。这和调试代码很像,也和后面要讲的 Agent 一样:小步修改,看反馈,再决定下一步。


向外的边界:环境也可能把人带偏

助推的力量来自环境,它的风险也来自环境。

同样的默认选项,既可以帮人储蓄,也可以诱导人订阅一项难以取消的服务。后者常被称为“暗黑模式”,技术上和助推几乎一样,区别只在于设计者站在谁的一边。塞勒后来专门给这类设计起了个名字,叫 sludge(淤泥):好的助推帮人做出“按他们自己的标准”更好的选择,淤泥则故意制造摩擦,让人更难做对自己有利的事,比如繁琐到让人放弃的退款流程。9 桑斯坦也专门讨论过助推的伦理问题,强调透明、可退出和符合被助推者自身的利益。10

另一个风险是依赖。环境可以帮我们做到一件事,却不一定帮我们理解为什么要做。一旦环境变化,行为可能随之消失。地铁上天天读的书,通勤方式一换,习惯就散了,说明它很大程度上是靠环境撑着的,并没有真正长在自己身上。

所以向外看并不是把判断交出去,而是要先想清楚:我希望被推向哪里?这个问题又回到了向内。


一体两面:非暴力沟通与助推

回到开头那个疑问:为什么《非暴力沟通》的理念很好,我实操时却总觉得不够?重拾阅读这件事给了我一个解释。

非暴力沟通帮我看清了需要:我缺的不是信息,而是深度思考。但如果只停在这里,想得再清楚,到了晚上累了一天,那点清楚也敌不过惯性。

助推帮我把这份理解变成结构:书放在床头,睡前半小时成了默认安排。但如果跳过前一步,只盯着“一年读多少本”,再配上打卡和奖励,环境倒是设计得很完整,推的方向却可能是错的:为了凑数去挑薄书、快书。古德哈特定律常被概括成一句话:一个指标一旦变成目标,就不再是一个好指标。

说起来,我年初那份 12 本的计划本身就是一个数量指标。拿它提醒自己没有问题,我也是看到“12 本读了 5 本”才意识到落后了;可一旦把凑够数量当成目标,前面说的半小时一本的讲书,就会显得是一条很合理的捷径。数字适合用来发现问题,不适合用来定义需要。

flowchart LR self["观察自己
听了很多却不踏实"] --> need["分清需要
深度思考,而不是读书数量"] need --> nudge["改变默认
书放在床头"] nudge --> act["睡前半小时"] act --> feedback["看见反馈
读了什么、想到了什么"] feedback -.->|不合适就调整| need

开头引的孟子和荀子,分歧在更底层:怎么看人性。孟子主张性善,善端本在心中,所以“反求诸己”;荀子在《性恶》篇里点名反驳孟子:“人之性恶,其善者伪也。”“伪”不是虚伪,而是“人为”:善要靠师法和礼义一点点塑造,这也是他在《劝学》里强调“善假于物”的底层理由。

两本书的出发点,几乎就落在这两端。卢森堡在书的开头说,他相信人天生乐于以慈悲的方式给予和接受,暴力是人与这种天性断开之后的结果;1 《助推》当然不认为人性恶,但它同样不指望人自发做对,它的前提是普通人会犯可以预见的错,所以要从外部设计环境。3 一个相信内在,一个借助外物,和孟荀之争的结构很像。

所以我现在觉得,这两本书是一体两面:非暴力沟通回答“我真正需要什么”,助推回答“怎样让它不再依赖每一次的意志力”。 前者向内,决定了方向;后者向外,让方向可以持续。只有前者,想清楚的事容易在下一个晚上被打回原形;只有后者,改变容易被错误的指标带偏,用在别人身上,还可能变成操纵。


大模型的向内:推理

读这两本书的时候,我脑子里总在对照另一件事:大模型。模型面对的是同一个困境:只靠自己,能想清楚的东西是有上限的。

让模型“先想再答”,起点是 2022 年的思维链(Chain-of-Thought,CoT):只要在示例里展示推理过程,或者加一句 “Let's think step by step”,大模型在数学和常识推理上的表现就会明显提升。1112 那时它还是一个写在提示词里的技巧。之后,OpenAI o1(2024 年 9 月)和 DeepSeek-R1(2025 年 1 月)用强化学习把“想得更久”直接训练进了模型;1314 到 2025 年 8 月 GPT-5 发布时,ChatGPT 已经由一个路由根据问题的难度自动决定要不要深入思考,API 里则用 reasoning_effort 这样的参数调节想多久。15 到今天,推理已经是主流模型的默认能力,一道题值得想多久,基本由模型自己判断。

形式变了,做的事没变:把一团直觉拆成可以被检查的结构,这和非暴力沟通做的是同一件事。模型没有获得新的信息,但获得了更多的计算步骤。Merrill 和 Sabharwal 从理论上证明过,允许 Transformer 在回答前生成中间步骤,确实能扩展它能解决的问题范围,扩展多少取决于中间步骤有多长。16 说白了,推理给了模型一张草稿纸。

严格说,草稿纸本身就是一种外化:思考被写成文本,模型再读着自己写下的东西往下推。所以推理的“内”,指的是信息来源仍然只有模型自己,没有新的事实进来;形式上,它已经借了外物。内与外从这里开始就不是截然分开的,后面还会再遇到。

推理的边界,也和人向内时遇到的问题很像。模型变强之后,这些问题并没有消失,只是换了形式:

  • 越想越错:早先 Huang 等人就发现,缺少外部信号时,让模型“检查一下自己的答案”,它有时会把原本正确的答案改错。17 推理模型学会了回头检查,问题却换了一种形态。Anthropic 的研究人员在 2025 年构造了一批任务,模型推理得越长,准确率反而越低:比如问“你有一个苹果和一个橘子,一共有几个水果”,题干里再掺一段无关的概率描述,Claude Opus 4 和 DeepSeek R1 想得越久,越容易把干扰信息算进去;18
  • 自我叙事:Turpin 等人在 2023 年做过一个实验,把示例里的选项重新排序,让正确答案总是 (A)。模型的答案明显被这种位置偏向带偏了,写出的推理过程却对此只字不提。19 2025 年,Anthropic 沿用这个思路在推理模型上重做了一遍:在提示里悄悄塞进答案线索,模型确实用了线索,但在推理过程里承认这一点的,Claude 3.7 Sonnet 平均只有 25%,DeepSeek R1 只有 39%。20 推理模型比普通模型坦诚一些,可大多数时候,写出来的推理仍然不是它真正的理由;
  • 想不出不知道的事:推理再深,也无法凭空得到训练数据之外的新事实,比如今天的股价、某个仓库里一段没见过的代码。

这几条几乎可以逐一对应到人身上:想得越多越偏的内耗、事后编出来的理由,以及知识本身的边界。Turpin 和 Anthropic 的实验与那排丝袜尤其像:模型被选项的位置或一条暗示带偏,路人被丝袜的摆放位置带偏,事后给出的理由,都没提到真正起作用的那个因素。


大模型的向外:harness

推理是模型自身能力的演进;harness 则是模型之外的一切。Agent 的思路更接近《助推》:既然模型单靠内部推理有局限,那就把它放进一个能提供反馈的环境里。

这条路的起点是 2022 年的 ReAct:让推理和行动交替进行,模型想一步、查一步,再根据观察结果继续想。21 随后的 CRITIC 说明,一旦允许模型借助搜索、代码解释器等工具验证自己的输出,自我纠正就变得可靠得多。22 今天的 Claude Code、Codex 这类编程 Agent,最里层转的仍然是这个“想、做、看”的循环,但和当年比,模型内外两侧都变了。

模型这一侧,循环里的思考和调用工具,都已经成了训练出来的能力。推理模型可以在两次工具调用之间继续思考,拿到结果先想一想,再决定下一步;23 调用工具也不再靠提示词里的格式约定,而是模型的原生能力(这段是怎么来的,后面会讲)。怎么转这个循环,已经不需要人去教。

模型之外,工程的重心从循环本身挪到了循环外面的环境。2026 年 2 月,OpenAI 和 LangChain 前后相隔几天发文,把这件事叫作 harness engineering。2425 LangChain 的定义最简洁:Agent = 模型 + harness,除了模型本身,其余的代码、配置和执行逻辑都算 harness。26 它要决定给模型看什么上下文、开放哪些工具和权限、每一步之后自动跑哪些检查、什么时候压缩历史、什么时候把任务拆给子 Agent。这一层有多重要,LangChain 做过一个对照:模型固定不变,只改 harness,他们的编程 Agent 在 Terminal Bench 2.0 上的得分从 52.8% 提到了 66.5%。25

今年上半年,各家的 harness 一度层出不穷,到年中,逐渐收敛到头部几家,彼此之间也在相互借鉴思路。一篇对 11 个生产级编程 harness 做源码分析的论文发现,它们没有一个依赖 LangChain 这类通用的 Agent 框架,彼此却越长越像:Codex 直接沿用了 Claude Code 的 hooks 术语,还能导入它的会话和配置。27

在代码场景里,向外的价值最明显。我在 Code Agent 的中控系统 里写过,编译器、单元测试和 git diff 比模型自评可靠得多。模型不用去猜“这段代码应该没问题”,运行一次测试就知道了。外部环境在这里扮演的是一面镜子,帮模型看见自己看不见的错误。

OpenAI 那篇文章里有一句话,把这层关系说得很直白:当工程团队的主要工作不再是写代码,剩下的就是设计环境、说清意图、搭建反馈回路,让 Agent 能可靠地干活。24 换成《助推》的说法,harness 就是给模型设计的选择架构,写 harness 的人,就是模型的选择架构师:

助推中的设计harness 中的对应
设好默认选项每次启动自动读入项目规则(AGENTS.md、CLAUDE.md),默认按项目约定干活
理解映射关系给一张地图,而不是一本手册:规则文件只当目录,细节按需去查
简化复杂选择先写计划,把大任务拆成小步,必要时交给子 Agent
给出反馈用 hooks 在每次改动后自动跑 lint 和测试
预期会犯错沙箱、权限确认、git 检查点和回滚

其中几条,OpenAI 做得很彻底:AGENTS.md 控制在一百行左右,只当目录用,详细的设计和架构文档放在仓库的 docs/ 里按需查阅;自定义 lint 的报错信息直接写成修复指引,报错的同时就告诉 Agent 该怎么改。24 一个好的 harness,不是让模型每一步都做艰难的判断,而是让正确的动作成为最自然的下一步。

向外同样有边界。测试覆盖不足时,Agent 可能学会“让测试通过”而不是“把问题修好”,这就是前面读书指标那个问题在代码里的翻版。它还可能过早宣布完工:Anthropic 在长时任务的 harness 里专门对付这一点,先让 Agent 把要做的功能全部列成清单、一律标为“未通过”,再一次只做一项,做完留下提交记录和进度说明。28 检索到的网页可能过时,甚至带有恶意指令;工具权限过大时,一次错误调用的代价远高于一次错误回答。这和被暗黑模式带偏的人很像:环境越强,环境本身的质量就越重要。


一段钟摆:大模型在内外之间来回

回看这几年的演进,业界注意力的重心大致在向内和向外之间摆了几次。这是事后整理出来的叙事,实际上两条路线一直并行,ReAct 本身就是推理和行动交替。但重心的转移是看得见的:

  • 2022 年,CoT 让大家意识到,模型“多想一会儿”就能变强;
  • 2022 年底到 2023 年,ReAct、function calling 和各种 Agent 框架相继出现,注意力转向工具、检索和环境;
  • 2024 年到 2025 年初,OpenAI o1、DeepSeek-R1 等推理模型把“想得更久”直接训练进模型,推理时计算成了新的扩展方向;1314
  • 2025 年,推理和工具调用在模型内部合流。4 月,OpenAI 发布 o3 和 o4-mini,官方的说法是,这是他们的推理模型第一次可以在推理过程中自主使用并组合 ChatGPT 里的所有工具;29 5 月发布的 Claude 4 可以在两次工具调用之间继续思考;23 8 月的 GPT-5 把推理变成了默认配置。15 也是在这一年,Claude Code、Codex 这类编程 Agent 走进了日常开发;
  • 2026 年上半年,推理和调用工具都成了模型自带的能力,注意力又转回模型之外:harness engineering 有了名字,各家 harness 集中涌现,又很快收敛到头部几家,相互借鉴。2427

每一次转移都不是否定上一次,更像是撞到了上一种方式的边界:只会想的模型碰到了知识和验证的上限,于是转向工具;只会调工具的 Agent 暴露出规划和判断的不足,于是回头补强推理;等推理和调用工具都成了模型自带的能力,差距又落回了模型之外:给它什么上下文、什么约束、什么反馈。这一次钟摆摆向外面,摆到的已经不是“多接几个工具”,而是“设计整个环境”,和《助推》的思路几乎一样。最后留下来的,是一个既会想、也会看的系统。

我的阅读习惯也走过类似的一圈:先是被地铁这个外部环境托着,环境一撤就散了;后来靠向内的觉察找回方向,再用床头的书重新搭起一个外部结构。


内与外不是二选一

这样看下来,向内和向外不是两条路线,而是同一个循环的两半。

向内决定了向外的质量。 一个说不清自己需要什么的人,即使求助也很难得到有效帮助;一个没有规划的 Agent,工具再多也容易乱用。非暴力沟通最后落在“请求”上,Agent 里的推理最后落在“下一步调用什么工具”上,道理是一样的:先想清楚,外部的力量才能用对地方。

向外反过来塑造向内。 被助推形成的习惯,时间久了可能变成自己的一部分。床头这本书能不能做到这一步,让习惯在环境再变时也留得住,才过了三周,还不好说。大模型在这一点上倒是给了一个清楚的例子。DeepSeek 在训练 R1 的过程中,先做了一个 R1-Zero:直接用可验证的外部奖励做强化学习,奖励主要看最终答案对不对,并不教模型该怎么想。可训练过程中,模型的回答越来越长,开始自己回头检查、换思路重试;论文里还记录了一个“顿悟时刻”:“wait” 这个词在训练早期几乎不出现,8000 步之后突然激增,模型学会了停下来重新审视自己的步骤。14 外部反馈,最终被内化成了向内的能力。

更日常的例子是 Agent 的 harness。早期要让模型用工具,得在提示词里规定好 “Thought / Action / Observation” 这样的格式,再由框架从输出的文本里把调用解析出来,格式一乱就会调用失败。2023 年 6 月,OpenAI 推出 function calling,模型经过微调,能自己判断什么时候该调用函数,并按函数签名输出 JSON。30 “一步一步思考”也走了同样的路:它原本是写在提示词里的外部技巧,到了推理模型,OpenAI 的官方指南反而建议别再这么写,因为模型已经会在内部推理,额外要求有时还会拖累效果。31 到了今天,这个过程还在加快:LangChain 在文章里提到,Claude Code 和 Codex 背后的模型,后训练时就是连同 harness 一起练的,文件操作、执行命令、做计划、分派子 Agent 这些 harness 设计者希望它擅长的动作,被直接练成了模型的本能。26 很多一开始要靠 harness 搭出来的能力,就这样一点点变成了模型本身的能力。

反方向的移动也在同时发生。前面那篇源码分析观察到,原本写在提示词里的行为约束,正越来越多地搬进配置。27 与其在提示词里嘱咐模型“改完代码记得跑测试”,不如写一个 hook,每次改动之后自动跑。这几乎就是《助推》的主张:不指望执行者在当下记得做对,而是让计划者提前把环境改好。模型身上的“应该”,也在被一条条换成结构。

最好的外部工具,常常是帮人向内的工具。 程序员有一个老办法叫“小黄鸭调试”,出自 1999 年出版的《程序员修炼之道》:遇到解决不了的 bug,就对着桌上的一只橡皮鸭,逐行解释代码在做什么。32 鸭子什么也不会说,但很多时候,解释到一半,问题就自己浮现出来了。鸭子是外物,它帮助的却是向内的澄清。非暴力沟通里的“请求”、写给自己的计划、Agent 在行动前写下的 plan,连同前面推理的那张草稿纸,都有点像这只鸭子:借一个外部的形式,逼自己把内部想清楚。

flowchart LR clarify["向内澄清
观察、需要、目标"] --> plan["具体请求
或行动计划"] plan --> act["向外行动
工具、他人、环境"] act --> signal["外部反馈"] signal --> update["更新认知"] update --> clarify signal -.->|长期积累| habit["内化为
习惯或能力"] habit -.-> clarify

落到具体问题上,我会用几个问题判断该先往哪边走:

当前的困难更适合的方向人的例子模型的例子
不清楚自己要什么先向内区分感受、需要和策略先拆解任务、写计划
知道要什么,但做不到向外设计环境改默认选项、找人监督写进项目规则,用 hooks 自动检查
缺少必要的信息向外获取请教、查资料检索、调用工具
反复思考却没有进展找外部反馈找人聊一聊、先做一个小尝试运行测试、换一条路径
外部意见太多、互相冲突回到向内重新确认自己的需要回到目标和验收条件

当向外变得太容易

最后还有一个问题绕不过去:对今天的人来说,向外看已经太容易了。

遇到不懂的问题,打开对话框问一句,几秒钟就能得到一个条理清晰的答案;心里别扭,也可以让大模型帮忙分析情绪、润色措辞。大模型成了一个随时可用、几乎零成本的外部环境。

开头我把丢掉阅读归因于环境变了。现在回头看,还有另一层:播客和讲书本身就是一种太容易的向外。别人已经替你读完、消化好,再用半小时讲给你听,获取信息的成本很低,但咀嚼和思考的那一步,也一起被省掉了。用非暴力沟通的话说,它是一个很高效的策略,却刚好绕开了那个需要。

大模型让这个问题变得更隐蔽。讲书只是替你读,大模型还能替你组织思路、替你下结论。如果连“我到底想要什么”“我此刻是什么感受”都交给模型回答,得到的答案再漂亮,也只是一个外部的猜测。非暴力沟通里最难的部分,恰恰是没法外包的:观察要自己看,感受要自己认,需要要自己找。

写代码时,这一点我感受最深。Claude Code 是很好的工具,确实能大幅提效,但怎么用好它是一门学问。它常常一下子交回一大段代码,看上去需求也实现了;可我描述到的部分做对了,没描述到的地方,却不知道埋了多少隐患,我经常要回头收拾残局。

有一次我让大模型写 SQL,查一个场景的曝光和点击率。点击的口径我明确告诉过它,但同一轮里还给了几个别的口径,它把这几个混在了一起。偏偏我跑 Claude Code 的机器连不上数据库,它没法自己跑一遍、拿一手数据核对,只能在上下文里顺着推,推出了一堆有模有样的结论。直到几组数据叠在一起越看越不对劲,我才回头手动推了一遍,发现点击口径用错了,整个分析都失效了。

复盘下来,问题出在两头。向内没理干净:口径我说了,但几个口径一起给,哪个用在哪里没有划清边界,模糊的地方它就按自己的理解补上,还补得像模像样。向外被切断了:没有数据库,就没有反馈,模型只能自己检查自己,这正是前面讲的推理的边界,没有外部信号时,自我纠正并不可靠,错误的解释反而越写越圆。前面说“测试通过”不等于“问题修好”,这一次更糟:连测试都没有。

一个简单的做法是给自己一点助推:问模型之前,先写下自己的判断,哪怕只有一两句。写代码时,这个判断就是验收标准:要做成什么样,哪些地方不能动,怎样才算做完。它也不是开头写一次就够了,模型每交回一段代码,都要拿它对一遍。能给模型一条自己验证的路就尽量给,哪怕只是一小份样本数据;给不了,这个核对就只能由我来做。这样模型的回答就成了反馈,而不是替代。OpenAI 讲 harness engineering 时,把工程师剩下的工作归结为设计环境、说清意图、搭建反馈回路;回头看那次 SQL,后两件我都没有做好。先有意图,工具才是助力;没有意图,工具只会带着人跑。


我现在怎么理解

回到床头那本书。它能起作用,靠的不只是“放在床头”这个向外的动作:如果不是先察觉到自己听了很多却不踏实,真正想要的是沉下来的阅读,书放在哪里都不会被翻开。反过来,光有这份察觉也不够,是床头的书让它每天都有机会变成行动。

向内求是为了看清,向外看是为了借力。

《非暴力沟通》让我学会在开口之前先理一理自己的脉络,分清什么是需要、什么只是策略;《助推》让我接受人的局限,与其和自己较劲,不如从结构上把环境改好。放到大模型上,推理让模型更充分地使用已有的能力,harness 则让它可以依靠真实世界的反馈,看见自己原本看不见的错误。

最好的状态也许不是只选其中一种,而是知道自己此刻卡在哪里:想不清楚的时候向内,想清楚了却做不到的时候向外,被外部信息淹没的时候再回到自己。反求诸己和善假于物,本来就不矛盾。


参考资料

关于 Agent 如何借助外部环境形成闭环,可以继续阅读:Code Agent 的中控系统 和 Agent 如何积累能力:RAG、Memory 与 Skills。


  1. 马歇尔·卢森堡,《非暴力沟通》(Nonviolent Communication: A Language of Life),章节号按英文第二版。人天生乐于以慈悲的方式给予和接受,见第一章 “Giving From the Heart”;自我评判、“把‘不得不’换成‘我选择’”见第九章 “Connecting Compassionately with Ourselves”。 ↩︎ ↩︎ ↩︎ ↩︎

  2. Marshall B. Rosenberg, We Can Work It Out: Resolving Conflicts Peacefully and Powerfully, PuddleDancer Press。 ↩︎

  3. 理查德·塞勒、卡斯·桑斯坦,《助推:如何做出有关健康、财富与幸福的最佳决策》(Nudge: Improving Decisions About Health, Wealth, and Happiness),2008。冷热状态与“计划者/执行者”见第二章 “Resisting Temptation”;NUDGES 见第五章 “Choice Architecture”。 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. Richard E. Nisbett and Timothy D. Wilson, Telling More Than We Can Know: Verbal Reports on Mental Processes, Psychological Review, 1977。 ↩︎

  5. Brigitte C. Madrian and Dennis F. Shea, The Power of Suggestion: Inertia in 401(k) Participation and Savings Behavior, The Quarterly Journal of Economics, 2001。 ↩︎

  6. Eric J. Johnson and Daniel Goldstein, Do Defaults Save Lives?, Science, 2003。 ↩︎

  7. Richard H. Thaler and Shlomo Benartzi, Save More Tomorrow: Using Behavioral Economics to Increase Employee Saving, Journal of Political Economy, 2004。 ↩︎

  8. Blake Evans-Pritchard, Aiming to Reduce Cleaning Costs, Works That Work, 2013。 ↩︎

  9. Richard H. Thaler, Nudge, not sludge, Science, 2018。 ↩︎

  10. Cass R. Sunstein, The Ethics of Influence: Government in the Age of Behavioral Science, 2016。 ↩︎

  11. Jason Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, 2022。 ↩︎

  12. Takeshi Kojima et al., Large Language Models are Zero-Shot Reasoners, 2022。 ↩︎

  13. OpenAI, Learning to Reason with LLMs, 2024。 ↩︎ ↩︎

  14. DeepSeek-AI, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, 2025。“wait” 的词频统计见 arXiv v2 补充材料 C.2 的 Figure 9,v1 只有“顿悟时刻”的案例,没有这组统计。 ↩︎ ↩︎ ↩︎

  15. OpenAI, Introducing GPT-5 与 Introducing GPT-5 for developers, 2025。 ↩︎ ↩︎

  16. William Merrill and Ashish Sabharwal, The Expressive Power of Transformers with Chain of Thought, ICLR 2024。 ↩︎

  17. Jie Huang et al., Large Language Models Cannot Self-Correct Reasoning Yet, 2023。 ↩︎

  18. Aryo Pradipta Gema et al., Inverse Scaling in Test-Time Compute, TMLR, 2025。 ↩︎

  19. Miles Turpin et al., Language Models Don't Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting, 2023。 ↩︎

  20. Yanda Chen et al., Reasoning Models Don't Always Say What They Think, Anthropic, 2025。 ↩︎

  21. Shunyu Yao et al., ReAct: Synergizing Reasoning and Acting in Language Models, 2022。 ↩︎

  22. Zhibin Gou et al., CRITIC: Large Language Models Can Self-Correct with Tool-Interactive Critiquing, 2023。 ↩︎

  23. Anthropic, Extended thinking: Interleaved thinking。Claude 4 起以 beta 形式提供,之后的模型在自适应思考模式下默认开启。 ↩︎ ↩︎

  24. Ryan Lopopolo, Harness engineering: leveraging Codex in an agent-first world, OpenAI, 2026-02-11。 ↩︎ ↩︎ ↩︎ ↩︎

  25. Vivek Trivedy, Improving Deep Agents with harness engineering, LangChain, 2026-02-17。 ↩︎ ↩︎

  26. Vivek Trivedy, The Anatomy of an Agent Harness, LangChain, 2026-03-10。 ↩︎ ↩︎

  27. Paul Barbaste et al., Harness Engineering: Anatomy, Architecture, and Evolution of Coding Agents – A Source-Code Study of Eleven Systems, 2026。 ↩︎ ↩︎ ↩︎

  28. Anthropic, Effective harnesses for long-running agents, 2025。 ↩︎

  29. OpenAI, Introducing OpenAI o3 and o4-mini, 2025。 ↩︎

  30. OpenAI, Function calling and other API updates, 2023。 ↩︎

  31. OpenAI, Reasoning best practices。 ↩︎

  32. Andrew Hunt and David Thomas, The Pragmatic Programmer: From Journeyman to Master(中译本《程序员修炼之道》), Addison-Wesley, 1999。 ↩︎