MoreRSS

site iconHutusi | 胡涂说修改

06年开始写博客,终身学习者,热爱读书、写作和编码。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Hutusi | 胡涂说的 RSS 预览

好奇心周刊第24期: 关于AI编程的一些体会和设想

2026-01-25 15:55:00

本文为好奇心周刊第24期,全部周刊参见:周刊系列

现在应该很少人怀疑 AI 的生产力了,去年 Claude Code + Opus-4.5 组合的强大编程能力刷新了很多人的认知,我也是在年底体验后惊叹不已。我用 Claude Code 做了几个应用,后来又尝试 Gemini CLI, 并用 Gemini CLI 也做了静态网站的程序,用在了工作的洞察周刊中。过程中一行代码没有写,甚至连 Git Commit 信息也是由 Gemini CLI 填写的,我把代码开源在了 GitHub 上,如果有想要建博客或知识库、文档网站的同学推荐取用,我在 Vercel 上也部署了 Live Demo 可以体验效果。

最近两个多月,除了 Claude Code 和 Gemini CLI, 我还体验了 Codex 和 Lovable 这种 Web 类 AI 编程工具,不过对比下来,我更喜欢 Claude Code 和 Gemini CLI,这两个使用也最为高频,几乎每天都会用到其中之一。本来打算写一期关于 Claude Code 和 Gemini CLI 的特性洞察的周刊,但我发现这种介绍文章在网上太多了,而且这些 AI 编程工具更新迭代极快,Claude Code 甚至每天都发布新版本。对于 AI 工具,看一百篇介绍文章不如实际动手试一次。所以再写洞察或介绍之类的文章意义不是很大,而是改成总结下我最近两月的使用感受,以及个人的一些看法和对未来的预测。

impression-sunrise

题图:《印象·日出》【法】克劳德·莫奈 Claude Monet, 1872

  1. 以 Claude Code 为代表的 Code Agent 与此前 GitHub Copilot, Cursor(现在也支持 Agent 模式了)等 AI 编程工具完全不同,这种区别属于代际跨越,可以理解为是智能驾驶中 L4 甚至是 L5 和 L3 的差异。

    在 GitHub Copilot 和 早期版本 Cursor 这种 “传统”AI编程中,实际上应该叫 “AI 辅助编程”,正如 Copilot 名称所寓意的那样,AI 是辅助程序员编程。而 Claude Code 这种 Code Agent,则是 “AI 编程”,AI 成为了编程的主角。用户告诉它一个任务,在很多情况下它可以自主完成,小到一个功能优化,一个问题修复,大到一个重大特性、模块重构,甚至是一个网站或应用,它都可以自主完成。

    我从去年11月开始订阅 Claude AI Pro, 接着便尝试使用 Claude Code, 开始由于我并不知道切换模型,便使用默认的 Haiku 4.5 生成了一个 Nextra 文档网站,我除了告诉它一些要求外,并没有做任何干预,然后它就把网站生成并调试运行成功了,虽然网页还有些小 bug, 但已经让我非常吃惊了。当时我同样尝试了 Codex (gpt-5.1-codex-max) 和 Gemini CLI (gemini-2.5), 都没能顺畅的运行。我便认定了 Claude Code, 后来发现还可以切换到更强大的模型 Sonnet-4.5, 而等到12月 Opus-4.5 也对 Pro 用户开放后,效果更显著了。而 Gemini CLI 是等到 Gemini-3 模型开放可用后感到明显的提升,也成了我近期主力使用的 AI 编程工具。

  2. Code Agent 的竞争力是大模型能力,而大模型 API Token 就是生产力。

    如果说 Haiku-4.5 和 Sonnet-4.5 已经让我可以解决大部分 Web 类编程的问题了,而 Opus-4.5 则是让我“沉迷”上了 Vibe Coding. 甚至到了每天睡觉前的事情是给 Claude Code 发送指令,早上起床的第一件事情也是把酝酿的指令发送给 Claude Code. Claude Code + Opus-4.5 对模型 API Token 消耗极大,基本上每次交互三四次就消耗掉了时间窗的限额,根据 Anthropic 的规则,需要在下一个五小时才能继续使用。就算我这种“相对低频”的使用,对于可怜的 Pro 账户来说,基本上没几天就会耗尽一周限额。

    前不久,Claude Code 的创始人 Boris Cherny 在 X 上分享他使用 Claude Code 的经验:他会并行开五个窗口,并行指挥 Claude Code 编程和处理任务,这样的效率提升是巨大,但“代价”也是巨大的。所以很多程序员都订阅了 Claude AI Max 5x(100美元每月) 甚至是 Max 20x(200美元每月) ,而很多企业也考虑其生产力提升给员工订阅 Claude AI。最近一则消息是微软鼓励内部员工使用 Claude Code. 越来越多的程序员依赖 Claude Code 编程,以至于每次 Claude 出故障,网络上都会成为热点,程序员们都停工停产了。

    可以预见的是,越来越多的企业会将为员工提供类似 Claude Code 和更大规格的 AI Token 来作为员工福利,就像二十年前比拼员工食堂,十年前比拼办公设备、人体工学座椅等。2026年企业招聘员工的吸引条件可能会变成“模型不限,Token管饱”之类的福利措施。

  3. 把 Code Agent 当成一个能力极强的程序员,而非只是一个工具箱。

    尽管在 AI 是不是工具这个话题很有争议性,但我认为如果单纯把 Code Agent 当成传统工具来看待,那就大大限制了它们的能力发挥。我在新起项目或任务的时候,总会问 Code Agent 如何规划设计,或者是如 Boris 那样使用 Plan 模式。 Plan 模式其实是 Claude Code 自己在规划,我只需要对它的问题给予反馈即可。Gemini CLI 虽然没有 Plan 模式,但它有 /constructor 扩展,我在实际应用中则会让 Gemini CLI 生成 TODO list, 来规划任务。最初在探索 Claude Code 的时候,我让它设计一款类似 Claude Code 的 Code Agent CLI 工具,它则非常详细地列出了待办清单,我只需要按照待办清单的内容依次下达命令给 Claude Code. 最后,花了大约两周时间,一个功能基本可用的 Code Agent 命令行工具就做出来了。

    网上有很多文章介绍 Claude Code 等 Code Agent 的使用技巧、定制配置,我认为与其花时间研究那些技巧,不如多花时间直接与之交互,在实战中探索其能力边界。Boris Cherny 在介绍他的经验时,也提到他几乎是开箱即用,没有做什么配置:”My setup might be surprisingly vanilla! Claude Code works great out of the box, so I personally don’t customize it much. “当然,Boris 也许是在宣传他们 Claude Code 强大的原生能力。

    我有类似的经验体会。Anthropic 推出的 Agent Skill 和 MCP,我则很少用。在个人项目和通用编程场景中,我暂时还没遇到必须使用 Skills 的情况。我觉得,Skill 可能更适用于特殊业务场景,软件编程场景并非必需。而最近 Skill 在互联网上有愈来愈火的趋势,我觉得也与 Claude Code 这类工具开始向编码外的场景渗透有关。本质上解决好代码问题就能解决其他数字类问题,这就是为什么 AI 先在编码场景卷起来的原因。

    之前,Anthropic 员工做技术分享时说”Don’t build Agents, but build Skills”. 诚然,这是针对n8n, Langraph 那些所谓的 Agent 平台说的。有一个形象的比喻,大模型就是一个超级聪明的博士,但博士到了新企业也不懂企业流程的做事方法,因此 Skill 就像是企业的工作手册,教博士一步一步操作。但软件编程方法大多是通用的,Skills 并非必需。当然,某些企业为了管理的需要,增加了一些对软件编程的管理流程和规则,这些可能是软件团队要使用的 Skills 的原因之一吧。但我认为,这些基于传统软件开发而形成的管理流程和规则,将会在 AI 编程的时代被取代。

  4. 指令并不是越全面越详细越好,给 AI 更多的自主,有时会带来惊喜。

    这个观点可能也是违反主流认知的。

    自从 Vibe Coding 流行以来,另外一个软件工程概念也开始流行:SDD (Spec-Driven Development,规范驱动开发) 。简单的说就是,SDD 要求在 AI 生成代码之前,先编写一套详细、结构化的规范(Specification/Spec)。在复杂工程中,SDD 有助于构建严谨的编程框架,引导 AI 生成更符合预期的代码。

    但我认为,并非所有的场景下 SDD 越详细越好。我给 Claude Code 或 Gemini CLI 下发指令,然后验收成果。以我的经验,有时候简单指令比具体指令生成的效果更好。我的指令一般都是简单的英语语句,这是因为我希望 Vibe Coding 的同时也能学英语。考虑到我蹩脚的英语很可能传递错误的意思,因此我在下达指令前,会在 Gemini 网页上让它优化下语句,而 Gemini 除了纠正语法和优化语句外,还识别到我是在 Vibe Coding, 因此也会提供一份更详细的分解成具体执行步骤的指令给我。但我一般不会取用该指令,只是用能够清楚表达需求的英语语句给到 Code Agent. 这种刻意避免用较为细节的规则去约束 AI 的实际效果往往出乎我的意料。当然,这也得分场景。如果是问题定位和解决,那我会把详细报错信息和场景描述尽可能描述详细。

    下面,举一个实际的例子。我用 Gemini CLI 做了一个静态博客网站,用在周刊上。我不太满意归档页的设计,年份字体太淡了,看着不太清楚,年份字体也太大了,整体不协调。我没有直接指出字体色重的问题,而仅仅是告诉 Gemini CLI:我不满意归档页面的风格,请重新设计并实现,力求优雅。

    previous-archive-page

    Gemini CLI 开始思考并计划。令我惊喜的是,它立刻识别到了年份字体的问题,还考虑优化月份和列表,并且实现了页面滚动时在当前列表所在年份范围内年份固定显示。优化后的效果令我非常满意,完全超出了我的期望。而如果我明确告诉它修改年份字体,那它可能只会根据我的要求做符合我期望的修改。

    gemini-thinking

    优化后的页面效果如下:

    refactor-archive-page

    当然,我举的例子是 AI 编程最擅长的 Web 应用开发,不能代表所有软件开发场景。但我认为随着大模型的能力越来越强大,很多的软件开发场景下自主的 AI 表现会越来越好。那时候,我们要想到的是,AI 的能力远超过我们自己,我们需要的是尽可能激发它,而不是约束它。

  5. 传统软件工程将会消亡。

    2024年初,我写了一篇回顾软件工程历史的文章《银弹飞过先锋大厦》,这篇文章写得太长,以至于我没有把观点表述得简洁明了,我的观点隐藏在了结尾的这句话中:“大模型的AI时代正在来临,我大胆预测大模型是软件开发的银弹”。那个时候,我用 ChatGPT 来生成代码来举例,而现在 Claude Code 的生成代码能力不知道翻了多少倍。这种进化速度更加强化了我的观点:“大模型是软件开发的银弹”。

    “软件开发的银弹”这个概念是弗雷德·布鲁克斯提出的,由于我那篇文章有详细阐述,这里不再赘述,感兴趣的读者可以参看该文。他认为“没有银弹”,因为可见的未来“不会有任何技术或管理上的突破能使软件工程的生产力得到数十倍的提升”。但大模型的发明改变了这一切,Code Agent 使得软件编程效率成倍数上升。Anthropic 刚发布 Cowork, 可以理解为是非编码领域的 Claude Code, 类似 Manus 的通用 Agent 工具。在 X 上,有人问 Boris 有多少代码是 Claude Code 写的,Boris 回答:全都是。而 Claude Code 自身 80%-90% 的代码也由 Claude Code 写成。

    boris-comment-about-cowork

    Boris 在 X 上回复说 cowork 全部由 Claude Code 编写

    “银弹”意味着传统软件工程的历史使命将会终结,软件工程的诞生是因为“软件危机”,而软件危机的本质是因为软件项目膨胀后,个人或小团队无法处理其复杂性而导致的一系列质量问题。因而从上世纪六十年代到目前的软件工程一直致力于通过管理和工程手段来消减复杂性,比如角色分工、瀑布流程、敏捷迭代、CICD、微服务。而大模型将会接手程序员处理软件复杂性的工作,软件工程也可能不再适用。新的软件工程会是什么样的,还不好说,但这将是“全新”的软件工程,而非传统软件工程的演进。这里我暂不展开,后面会考虑单独写一篇文章。

  6. 向 AI 学习,学习技术,学习编程,探索各种可能性。

    传统软件工程中的角色分工不但将消失,高级程序员、初级程序员这种级别的区分也可能消失,或者换句话说:程序员能力的评价标准将从纯粹的代码编写能力转向系统性思维、需求洞察和 AI 协作能力。软件从业人员可能不再像以前那样区分产品经理、架构师、开发、测试等角色,而是融合性的角色。程序员可能不是通过自己编码来提升技能,而是要向 AI 学习编程、学习技术。

    这让我想到了当年柯洁在与 AlphaGo 对弈后连输三局后中途退场大哭,他发现对方无法战胜。赛后,他平静了心情,在微博上写道:“重新学围棋”。柯洁感叹 AlphaGo 对围棋的理解超出了人类的想象,颠覆了人类几千年来形成的思维定式,AlphaGo 的出现是围棋届的幸事,棋手们可以重新认识和定义围棋。

    虽然目前的大模型和 Code Agent 在软件编程方面还有达到 AlphaGo 在围棋方面绝对领先的优势,但这种趋势是很明显的。而柯洁的感悟给给了我启发,通过与 AI 的交互来探索对系统、对编程的理解,学习新技术,探索未知领域。我在使用 Claude Code 的时候也没有用 --dangerously-skip-permissions 的自主模式,倒不是因为我不相信它,而是因为我想要在过程中能够与 Claude Code 实时互动,并观察它的思考和执行过程。在这方面,我觉得 Gemini CLI 做得比 Claude Code 好,Gemini CLI 会详细展示其思考过程,这些思考过程也能反向触发我自己的思考。

以上是我这两个月 Vibe Coding 的思考和猜测,由于经验有限,仅代表个人观点,抛砖引玉,与大家一起切磋。

时间向一个方向移动,记忆向另一个方向。

—— 威廉·吉布森

参考

  1. Boris Cherny 在 X 上分享使用 Claude Code 的经验
  2. Claude Code: Best practices for agentic coding

云何降伏其心

2026-01-11 19:25:00

这是我第三次用佛经的词语来作为年终总结的标题了。前两次分别是前年的《凡所有相,皆是虚妄》和去年的《心猿意马》。“云何降伏其心”与前年的标题同样来自于《金刚经》,我在去年的总结里也曾引用并写道:

在《金刚经》开头,须菩提问释迦牟尼:“云何应住?云何降伏其心?”《金刚经》全书就是佛祖对这个问题的回答。佛祖说:“应如是生清净心,不应住色生心,不应住声、香、味、触、法生心,应无所住而生其心。”

如果把我这三年的总结标题按照佛经的逻辑顺序串联起来,那应该是这样:因为“心猿意马”,弟子发问“云何降伏其心”,佛陀给出“凡所有相,皆是虚妄”的回答。但身处末法时代,我们内心的困惑没有佛陀给予解答,这些问题只能由自己去思考去探索。

Tianjin haihe

[题图] 2025年春节我们一家去了北京和天津玩,此照片摄于在天津海河上走冰。天津给我们的印象不错,人都特别客气和礼貌,保留了很多万国建筑,不比上海外滩建筑群逊色。

惠能与神秀

今年,除了重读《金刚经》,还读了《坛经》。如果说《心经》是《金刚经》浓缩版的话,那么《坛经》就是《金刚经》的注解版。《坛经》是记录禅宗六祖惠能言行的一本经书,也是唯一一本非由释迦牟尼讲述而命名为“经”的佛教典籍。按照佛教的传统,只有佛陀释迦牟尼的言教著作才能称为“经”,其弟子和后代佛徒的著作只能被称作“论”,比如唐玄奘编撰的《成唯识论》。以《坛经》冠名惠能言教,可见惠能在中国佛教史上的地位。

惠能家贫,砍柴卖柴为生,一日在市集偶然听到旅客诵读《金刚经》,顿时得悟,于是北上拜师五祖弘忍,被安排做劈柴舂米的活。后来弘忍想要在弟子们中挑一位合适的人传授衣钵,于是让大家都写一个偈子来作为修行成果的考验。其首席弟子神秀在寺院墙壁写了一偈,获得众人喝彩:“身是菩提树,心如明镜台,时时勤拂拭,勿使惹尘埃。”惠能听到后不以为然,由于他不识字,于是请别人代笔,也在墙上写下一个偈子:“菩提本无树,明镜亦非台。本来无一物,何处惹尘埃。”本来神秀的偈子很好了,但被惠能这么一比,就比下去了。惠能的偈子契合禅宗的见性成佛思想,因而他得到了弘忍传下的衣钵,成为禅宗六祖。

在这个故事里主角是惠能,神秀被当做了反面案例,而神秀所倡导的“渐悟”之道也成了批判对象。这个故事我小时候就看过,后来二十岁左右读到《坛经》时也加深了这种成见。但等到四十多岁再读《坛经》时,却对神秀更能感同身受。神秀在听到弘忍布置的作业后,思虑万千,心里想:“如果不写偈子,师傅怎么知道我的修行程度?如果呈上偈子是为了六祖的位子,这跟凡夫俗子费尽心机谋取功位有什么区别呢?太难太难!”神秀做好偈子,几次想呈送给弘忍,一走到大堂就紧张得神情恍惚、全身流汗,前后四天十三次,却始终没有勇气交上去。最后神秀趁着夜晚三更悄悄写到寺庙的墙壁上,任由师傅看到。写完之后神秀回到房中,又担心自己写得不好,担心自己得不到弘忍的认可,担心自己得不到佛法,一直坐卧不安,直到五更时分。

《坛经》将写偈子这个公案中神秀的内心想法描写得很生动,虽然是在说神秀的纠结与执迷,但如果我们以现代的眼光来看,神秀多像是在大厂赛马机制下的打工人啊,而且是妥妥的FP型人格。后来惠能和神秀一南一北各立宗派,神秀还念念不忘弘忍对惠能的教法传授,派他的弟子志诚去曹溪听惠能说法,并让他记住后回来告诉自己。志诚去到曹溪,惠能当即认出,便问他神秀教了什么。志诚说:“神秀师傅教我们戒定慧之法,诸恶莫作名为戒,诸善奉行名为慧,自净其意(清净自己的意念)名为定。”惠能说:“神秀的戒定慧之法已经是不可思议了,不过我的方法与他的不同,我的方法不离开自我本性,一切的事物和现象,都是从自性中起作用。‘心地无非自性戒,心地无痴自性慧,心地无乱自性定。’神秀的方法适合劝诫小根器的人,而我的方法是劝诫大根器的人。”

简而言之,“戒定慧”是佛教里达到最高境界“觉悟”的途经,神秀的方法是通过持之以恒的对外做善事、对内行正念来达到,而惠能则认为这些是在自我本性之中的,本性执迷则不能通达,需要解脱知见,从而开悟。二十岁时,我认同惠能,仿佛自己有大慧根,写下诗句“任抛星汉归园圃,留取乾坤盛酒囊”,口气不小。二十年后,渐渐明白自己是惠能说的“小根器”之人,神秀的方法更为适合,“时时勤拂拭,勿使惹尘埃。”更早之前,刘备也说过类似的话,他进攻东吴战败后元气大伤,退回白帝城托孤,回望一生的事业,临终遗言交代的便是:“勿以善小而不为,勿以恶小而为之。”换到当下的语境里,就是培养好习惯,而在2025年,这是我践行的重要一项。

基督山伯爵与法里亚长老

2025年我读了51本书。年底最后一天,微信读书报告显示全年读书888小时8分钟,这真是一个惊喜的巧合。读书的时长比2024年多了一百多小时,但书的总数却有下降,主要原因是大部头的书看得多了些。几本大部头的书有《基督山伯爵》《毛泽东传》《世界史的故事》,几本苏东坡传记,以及还没有看完的《罗马人的故事》。

《基督山伯爵》是近年来看的为数不多的虚构类小说之一。年轻的时候看过不少文学小说,不过大仲马的书是不在我的选择之列的,因为觉得它们是通俗小说,现在看来《基督山伯爵》算是遗珠了。《基督山伯爵》是一个快意恩仇的故事,有人说这是爽文鼻祖,主人公唐戴斯身陷囹圄遇到贵人,之后便一路开挂,完成复仇。不过对我启发最大的不是唐戴斯的复仇故事,而是他在狱中所遇到的这位贵人——法里亚长老。在唐戴斯遇到法里亚长老前,后者已经被关了十一年,在这十一年里,法里亚长老利用牢房内有限的资源制作笔、纸、墨水、撬棒、凿子等工具,写出了《意大利统一论》的著作,挖掘了一条试图通往外界的地道,还凭借着记忆复习以前学习的五种语言,并研究历史和科学。唐戴斯此前也被关了六年多,可是他除了祈祷和等待,什么也没做。要知道法里亚长老此时已经六十多岁了,而唐戴斯才二十几岁。唐戴斯被法里亚长老在狱中的成就震惊了,他感叹道:如果法里亚长老是自由的,那会做出多少事情啊!

但法里亚长老的回答引人深思:“说不定一事无成,我过剩的脑力也许会化为乌有……囚禁生活把我分散飘忽的官能都凝聚在了一个焦点上,让它们在一个狭窄的空间相互撞击。乌云相撞生成电,电生成火花,火花生成光。”

人人都想要自由,但真正的自由是我在去年总结里引用的大卫·福斯特·华莱士的话“专注、自觉、自律、不懈努力……”。即康德的自由观点:真正的自由不是随心所欲,而是理性能够自主立法并遵从它。

“只买书图书馆”

年中的时候,大卫跟随妈妈去了加拿大,我则将大部分家当运回了老家,这其中最多的就是书和CD. 在上海的十八年里,一共搬了六次家,每一次搬家都是个浩大的工程,仅仅是书就要打包几十箱,而且越买越多,这一次打包了整整五十箱书。因此经常有搬家师傅打趣说给我搬家后不能去打牌了。

之前我让父亲把长期不住的老家房子简单装修了下,堂屋的两面墙都装上了书架,为的就是能够将这些书存放起来。元旦期间回了趟老家,看到书本已经被妹妹整理好,倒是有点图书馆的感觉。而我也有意将这个老房子打造成一个小型的乡村图书馆,虽然当前还太小,书还太少,充其量只能成为一个图书室。我给它命名为“只买书”,希望未来能成为一个地标。

“只买书”这个名字来源于十几年前我在公司建立的第一个民间社区“只买书不读书”,后来在一位女生的运作下一度成为公司Hi平台第二大社区(第一名是一个英语学习社区),也正是因为该社区我认识到了很多了有趣的人。我给“只买书图书馆”注册了个域名,zhimaishu.com, 即“只买书”的拼音,借助 Claude Code 和 Gemini 创建了个网站原型,后续有时间再慢慢优化它。

老家的房子是三十年前建的,基本保持了三十年前的样子,红砖墙面历经了三十年却还像新的一样。记得在此之前更老的房子因为青砖墙面老化导致某天下雨的时候塌了个窟窿,一部分砸在了我们正睡觉的床上,那时正在夏天,架着蚊帐,蚊帐帮助支撑了些受力,加上那些倒塌的砖块基本都成了泥,才没有砸到人。后来填填补补,熬到了这个红砖房子的建成。

Old house

老家的房子,除了窗户、围栏翻新和加装空调外,基本保持了三十年前的样子。

实际上,红砖房建成时我已经上初中了,后来去县城读高中,除了寒暑假住在里面的时间并不多,儿时大部分的时间是在泥墙老房中度过。泥墙老房跟爷爷的房子连在一起,不知道是什么时候建成的,总之很老很老了。记得我小时候经常提着一个篮子,里面装了一些麻将、扑克,还有两本年历,那些是我全部的玩具和藏书。有一次在爷爷的屋子里玩,从一个柜子里翻到了一些连环画,可把我开心坏了,记得有《珊瑚岛上的死光》《飞向冥王星的人》《沈炼传》等,估计有几十本之多,还翻到了几本书,有叶永烈的童话故事集《谁的脚印》,还有《绿野仙踪》。这些连环画和书可以说是我最早的文学启蒙。

那天的发现在我记忆中非常深刻,惊喜程度不亚于唐戴斯发现基督山岛的财宝,而唐戴斯是有备而来,我则是纯属意外之喜。因此,我也有意把“只买书图书馆”打造成一个知识宝藏,等待乡村里的某个或某些爱书孩童的发现。

苏东坡与王阳明

九、十月间,读了几本苏东坡的传记,分别是林语堂《苏东坡传》、李一冰《苏东坡新传》及王水照、崔铭《苏轼传》。这三本中,我最喜欢《苏轼传》,相较而言,前两本作者表达了过多的个人喜恶,《苏轼传》叙述较为客观。苏东坡是中国人都普遍喜欢的一位文人,网上说他是中国人的“国民偶像”却也不为过。他一声历经坎坷,多次遭贬谪,但始终保持豁达与乐观。面对生活困难,不怨天尤人,亲自下田开垦东坡,写下“谁怕?一蓑烟雨任平生”等千古佳句。

有网友解读苏轼临终遗言“着力即差”是顺其自然,看透人生,但苏轼并非不“着力”,他在失意时寄情山水、躬耕陇亩;在职场时则积极进取,恪守本职。苏轼青年时的偶像是写下“先天下之忧而忧,后天下之乐而乐”的范仲淹,而苏轼终其一生在官场始终保持着他坚持原则的本色。神宗年间王安石变法,他认为新法过于激进,增加了平民负担,被当成守旧派并遭“乌台诗案”诬陷贬谪黄州;到了哲宗初期司马光等旧党上台,尽废新法。苏轼被召回京城,但他看到旧党为了反对而反对,完全不顾其合理的部分,据理力争,又得罪旧党,外放去了杭州。而等到哲宗亲政,再次启用新党,苏轼又被当作旧党报复,贬谪到了更远的惠州和儋州。

儋州在海南岛,在古代环境恶劣,瘴气横行,孤悬海外,被贬谪儋州等于是被流放判死刑。被贬儋州时苏轼已经六十二岁,但他没有消沉,而是积极融入当地环境,劝诫百姓改良风俗。他还在当地开设学堂,讲学授徒,并为海南岛培养出了有史以来第一位进士姜唐佐。姜唐佐跋山涉水到儋州向苏轼求学,深得苏轼赏识,临别之际,姜唐佐请求赠诗一首,苏轼便在他的扇子上题诗道:“沧海何尝断地脉,珠崖从此破天荒。”并告知曰等中了进士,再为续足成篇。姜唐佐后来果然中了进士,只可惜当时苏轼已不在人世,续诗由其弟苏辙完成:“锦衣不日人争看,始信东坡眼力长。”

在俗世的评价中,苏轼不算是一个成功者,直到去世仍在遇赦北归的途中。苏轼从儋州北归途中路过金山寺,看到画师李公麟为他画的像,感慨万千,写下了那首总结一生的诗句:“问汝平生功业,黄州惠州儋州”。这既是自嘲,也是大彻大悟后的真情表露。所以苏轼临终才会说“着力即差”,这种顺其自然并非随波逐流,而是在逆境中坚守内心,把现实的困境看做是人生的修行。

有句流传很广的话:“读过很多书,听过很多道理,为什么依然过不好这一生?”大约几年前一次在公司里的读书活动,我也提出了这个问题,一位同事便回答说学习王阳明的“知行合一”。我似懂非懂,后来也看了王阳明的《传习录》和他的传记,但总感觉不透彻。十月间一次看到 Keep 弹出王阳明的名言“知而不行,只是未知”,那一刻犹如醍醐灌顶。以前我看了很多书、听过很多道理,自以为知道,其实是不知道;而当我逐渐将书中的那些道理应用在日常琐事及工作中时,才真正知道,内心也渐渐充实起来。

这就需要像法里亚神父所说的那样的“牢笼”,并非真的被囚禁,而是自己设计约束自我的牢笼,将注意力和精力囚禁起来;再像神秀那样“时时勤拂拭”,形成长期的习惯。这一年多来,我坚持下来的有:早睡、早起跑步、不喝酒、不喝咖啡、不喝果汁等高糖饮料。生活看起来“单调而无聊”,但我却乐在其中,主动或被动拒绝了很多社交活动,对于几次同事朋友的聚会邀请,我都给与拒绝,理由是“我不喝酒,九点就要回去睡觉,所以就不去扫大家兴致了。”这确实是实话,我现在比以往对聚会饮酒的拒绝都要坚决。年底的时候听到 Lex Fridman 采访杜罗夫的播客,杜罗夫说他二十多岁开始便戒除了酒精、烟草、咖啡等可能成瘾的物质,令我佩服不已。杜罗夫每天要做几百个俯卧撑和深蹲,但他说每天早上去健身房前还是要对抗内心的不情愿(Reluctant),这也是我一年多来早起跑步的感受。以前道听途说认为跑步会上瘾,说很多跑者若不跑步就身体难受,等到自己真的开始跑步了,才改变这种想法。至少到目前为止,我还没有跑步上瘾,经常是要战胜内心的一些偷懒想法。这大概就是要约束自己随心所欲的“自由”,来获得真正的自由吧。

这一年下来平均每周会跑五、六次,每次不长,三到五公里,到下半年基本上都在三公里,也不求配速,算是养生跑。总计下来一年跑了八百多公里,接下来一年也不求多,只是希望能持续跑下去。

好奇心与氛围编程

过去一年还有个重大的变化当属AI对工作和学习的改变,借用 Simon Willison 的博客话是:这是 Agent 的一年,这是氛围编程和 Claude Code 的一年,这是两百美元每月订阅费的一年,这是中国开源模型登顶的一年。Simon Willison 利用 AI 一年创造了110个软件工具,而我则后知后觉,直到年底才开始大量使用 Claude Code.

前些天看公司一位同事写到“科技三定律”颇有感触,这是《银河系漫游指南》的作者英国科幻小说家道格拉斯·亚当斯所提出的:

  1. 任何在我出生时已经有的科技都是稀松平常的世界本来秩序的一部分。

  2. 任何在我 15-35岁 之间诞生的科技都是将会改变世界的革命性产物。

  3. 任何在我 35 岁之后诞生的科技都是违反自然规律要遭天谴的。

幸好在这关键节点的时候迎来了大模型等革命性技术的诞生,不过我虽然看似在积极学习,却缺少大量的实践。这样难免有眼高手低之嫌,或是王阳明说的“知而不行,只是未知”。为了防止“35岁后的傲慢”,我开始利用AI来做一些重构博客、实现之前记在TODO list的想法,同时,重新开始写周刊。我将周刊命名为“好奇心周刊”,提醒自己始终保持好奇心。

年底的时候开始对比使用 Claude Code、Gemini CLI、Codex、Lovable 几个AI工具,其中 Claude Code 带给我的震撼是最大的,网上那些使用 Claude Code 写出几万行代码的案例再正常不过,我使用 Claude Code 两周,便写了一个类似 Claude Code 的 Code Agent 工具,一共两万多行代码,基本功能都已具备。最大的问题是 token 限额太少,哪怕是圣诞节期间 Anthropic 将配额扩大一倍也不够,基本上每周我都将限额用完,然后等待配额重置,像是领救济粮食的灾民。

Claude Code Usage

Claude Code 用量截图,基本上五天就用完了一周的量

Claude Pro 订阅配额不够用的情况下,我又订阅了 Gemini Pro, 虽然在编码任务上感觉 Gemini CLI 要稍逊一些,但最近我发现它进步很快,基本上一些通用的 Web 类程序就让它写了。Gemini CLI 的另一个优势是输入窗口大,不像 Claude Code 那样经常需要压缩上下文。

在大量使用这些AI应用后,我深刻感到未来的工作和学习模式都将发生翻天覆地的变化,无论AI终究会不会取代人,但必将改造人类自身。在我需要学习一种新技术或知识的时候,会用这些 Code Agent 去构建一个demo 应用,从实际案例中学习比看文档快多了。除了 Vibe Coding, 我还将 Claude 和 Gemini 用作英语学习,比如,给它们设置了预制指令,每次对话它们都会纠正我的语法错误并给出正确的语句,这样我就像是在跟一个英语老师对话。

对于个人而言,最大的问题是时间不够、精力不够、点子不够。所以大部分的周末我都会待在房间里,专心“氛围编程”:听着舒伯特和贝多芬的交响乐,看着 Claude Code 和 Gemini 的代码输出。音乐则提醒我,人的目的是创造,而不是成为工具的奴隶。

但在这篇总结的最后,我还是要推荐几款年度工具。除了 Claude Code, 还有 Apple Music Classical、FocusFlight(专注飞机)、AutoSleep(睡眠检测)、Habit(习惯打卡)。苹果音乐上的曲库多,特别是古典音乐,而且没有多余信息干扰。FocusFlight 是一款专注的小应用,模拟飞机航行,启程后便屏蔽手机的其他干扰,让这一段“航程”里不要用手机分心。AutoSleep 来检测每天的睡眠质量,从侧面提醒我反思可能导致睡眠不佳的情况,从而加以改进。Habit 则帮助我记录好习惯和坏习惯。

2025年的总结就写到这里,啰嗦了这么多,其实这一篇不仅是过去一年的总结,也算是过去三年总结的总结。标题中的问题也是面对未来不确定性的发问,尤其在AI时代,如何安下浮躁的内心。对此,我引用两句话作为结尾,送给大家,也送给自己。第一句来自道格拉斯·亚当斯,印在了《银河系漫游指南》的封面:

Don’t Panic!

第二句具有类似含义,英国政府曾在二战来临时印在海报上鼓励国民:

Keep Calm and Carry On!

附:

  1. 《金刚经·心经·坛经》中华书局
  2. 《基督山伯爵》 [法]大仲马(著) 周克希(译) 上海译文出版社
  3. 《苏轼传》 王水照、崔铭(著) 人民文学出版社

好奇心周刊第23期: Claude Code 氛围编程初体验

2025-12-21 21:39:00

本文为好奇心周刊第23期,全部周刊参见:周刊系列

本期周刊介绍 Claude Code 的使用方法,使用 Claude Code 完成特定编程任务的探索,及 CLAUDE.md 的相关实践。

0. 准备

按照官网上的指导安装,MacOS 推荐用 HomeBrew (brew install claude) 安装即可。在终端上输入 claude 命令进入 Claude Code 交互界面,输入 /login 命令登录,有两种模式,一种是 Claude.ai 订阅,一种是配置Claude API Key,前者按月付订阅费,后者按使用Token计费。我使用的是订阅模式,选择该模式登录后会引导到 Web 端登录。Claude 有两档订阅付费选择: Claude AI Pro 和 Claude AI Max, 前者每月约20美元左右,后者则是每月100美元起步。普通开发订阅 Pro 版本就够了。

不过,订阅 Pro 只是第一步。由于 Claude 的公司 Anthropic 创始人对中国态度极不友好(找个机会单独写一下),Claude 会经常封禁来自中国IP的账号,并且在使用 Claude Code 时也会检测所属 IP, 所以在跳转网页登录成功后,终端命令行上报 403 forbidden 的错误。后来搜了下网上经验,发现是终端没有穿墙,执行 curl ipinfo.io显示 IP 地址为国内城市。在尝试了若干方法后,发现 MacOS 上需要安装 ClashX Pro, 然后打开 Proxy Mode(Global) + System Proxy + Enhanced Mode 几个组合选项,终于实现终端上穿墙,才得以通过 Claude Code 的登录验证。

登录后便可以在 Claude Code 终端交互界面上执行命令,Claude Code 的命令以 / 开头,可以通过 /models 选择模型,默认是 Haiku 4.5, 一个轻量但快速的模型,想要更强悍的能力,可以选择 Sonnet 4.5, 或最新推出的 Opus 4.5 (需要 Max 订阅账户)。

1. 工作尝试

1.1 任务一:全新创建 Nextra 文档网站(模型:Haiku 4.5)

1、初始化并创建 CLAUDE.md

首先我创建了一个空的目录,里面没有任何文件,然后在 Claude Code 上输入: /init, Claude 便开始分析当前的codebase:

> /init is analyzing your codebase… 

⏺ I'll analyze this codebase and create a CLAUDE.md file. Let me start by exploring the repository structure and understanding the project.

Claude 调用 git, find, ls 等工具搜索当前文件夹里的文件。由于这是个空目录,Claude发现没有历史记录,也没有任何文件,于是表示它无法生成 CLAUDE.md, CLAUDE.md是一个文档文件,用来描述代码仓的架构、构建命令、测试准备和项目工程相关信息,不包含实际的代码。

如果想要完成初始化并创建 CLAUDE.md,Claude给出三个选择:

  1. 先往当前目录代码仓中添加代码,有了代码,Claude便可以根据代码理解来生成 CLAUDE.md.
  2. 如果这是个计划中的项目,那么告诉 Claude 这个项目的相关信息,比如语言、框架等。
  3. 重新指向一个已知项目,里面包含代码等信息。

我告诉 Claude 生成网站的指令,让它直接生成网站代码及 CLAUDE.md

2、根据指令生成网站

我告诉Claude想要生成一个文档网站,使用最新版本的 Next.js, Nextra, 并使用 pnpm 作为包管理器,优先使用 TypeScript.

> I want to create a documentation website using the latest version of Next.js and Nextra, using pnpm as the package manager, Prefer using TypeScript. 

Claude 开始理解指令并分解任务。Claude 拆解的比较细,分了:

  • 创建项目初始文件:包括 package.json, tsconfig.json, next.config.ts, theme.config.tsx, .eslintrc.json, 等,这些是 Next.js 项目的基础配置文件。
  • 生成 Nextra 网站页面文件:如pages/_app.tsx, pages/_document.tsx 等,还有一些 mdx, _meta.json 文件等。
  • 根据所生成代码形成的 codebase 创建 CLAUDE.md 文件并写入生成内容,CLAUDE.md 里面详细记录了该项目使用到的技术栈、项目结构、关键功能、工程脚本等信息。

做完这些事情后,Claude 更新了 TODO list, 然后做了一个文字小结,并给出了下一步要做的事情,安装依赖包、启动开发环境调试、定制网站等。

3、增强网站内容

我让 Claude 继续完成整个网站:

> Please make this website completely. 

因为我蹩脚的英语,Claude 理解成做一个全面的网站,于是 Claude 来劲了,它准备生成一个架构全面、带自定义组件、且内容丰富的文档网站。

⏺ I'll create a comprehensive documentation website with a complete structure, custom components, and rich content. Let me build this out.

⏺ Let me start by creating a rich homepage and expanding the documentation structure:

... (以下生成内容略)

这还不够,Claude 紧接着又生成了 案例、API 指南、高级话题等内容。并更新了 CLAUDE.md. Claude 时刻不忘更新 CLAUDE.md.

不过一开始生成复杂内容(大多数为Fake)的网站并不是好实践,这会影响后续的重构。

3、调试&bugfix

当我打开 Claude 生成的网站,报错了:

meta-json-error

我将错误信息告知 Claude:

> When run this website in dev mode, it prompts error: [Error: Support of "_meta.json" was removed, use "_meta.{js,jsx,ts,tsx}" instead. Refactor following file "pages/_meta.json".] 

Claude便开始定位问题,认识到要将 json 转成js或ts文件,考虑到前面要求优先使用 TypeScript,因此它改为 ts 文件:

⏺ I need to fix the _meta.json files to use the newer Nextra format. They should be .ts or .tsx files instead. Let me update all of them:

改写成 ts 文件并删除原 json 后,Claude 提示我说它已经解决了问题。但当我打开网站时,新的问题出现了:

Validation of "_meta" file has failed.
The field key "api" in `_meta` file refers to a page that cannot be found, remove this key from "_meta" file.

我把这个新问题抛给 Claude Code, 报错是说 _meta 文件中关键字api所提及的文件找不到,于是 Claude 先到 api 目录中查是否存在 _meta文件,然后又在整个 pages 目录里查找,如此检查了一番之后。Claude 一副胸有成竹的样子说它知道问题所在了,是新版本的Nextra使用了不同格式的meta文件,这语气像个十足老登程序员:我做项目那会还是什么什么,现在新版本都改成这样了……

⏺ I see the issue. The newer version of Nextra uses a different format for meta files. Sections with folders need to be defined differently. Let me check the Nextra documentation format and fix this properly:

修改完 _meta.ts 文件后,还非常谨慎的又改了其他相关文件,然后Claude启动服务,启动失败报错,不过 Claude 自己又去定位问题并解决,最后成功启动服务,这里我就不把过程贴出来了。Claude 自信满满的说完美:

⏺ Perfect! ✅ Fixed and Running!

  The development server is now running successfully without errors!

服务器运行虽然没有问题,但访问网站时又报错,还是原来的错误,我把错误信息发给 Claude 打了它一脸。这次 Claude 不再傲娇了,而是谨慎地开始检查文件结构:

⏺ The issue is that Nextra is looking for actual page files. Let me check what the error is more carefully and adjust. The problem might be that each folder needs to either have an index.mdx or the _meta.ts needs to reference it differently. Let me check the actual file structure:

接下来又检查了文件内容和报错日志输出信息。根据报错日志的输出信息,Claude 先尝试了将 api_meta.ts 文件中删除,删除后可以正常加载的,但页面报了验证错误,于是 Claude 又改回去。

⏺ The issue is specifically with the "api" key. Let me check if there's something wrong with the api folder. Maybe I need to look at how Nextra expects the structure. Let me try removing "api" from the _meta.ts temporarily to see if the server works:

......(修改文件略)

⏺ Good! It's now showing GET / 200 which means the page loaded! But there's still a validation error. Let me add the api back and check the api/_meta.ts file to see if there's an issue there:

......(修改文件略)

改回后又得到了 500 服务器错误,再检查文件内容没什么问题后,Claude 觉得有可能是因为 api 是 Next.js 的保留字,于是尝试将它改名:

⏺ I see it's returning 500 errors. This is a Nextra validation issue. The problem might be that the api folder exists but Nextra can't resolve it properly. Let me try renaming it or restructuring.

⏺ The files look fine. The issue might be that api is a reserved word in Next.js (it's used for API routes in the /pages/api directory). Let me rename the api folder to api-reference:

同步修改其他相关文件后,重启服务并验证访问页面返回状态码,得到 200 后还不放心,检查终端输出是否有错误信息。

⏺ Excellent! I see GET / 200 which means it's working now! The errors in stderr are just warnings but the page is loading. Let me check the full output to see if there are any new error messages:

终端上有一些错误输出,Claude 觉得应该是 cache的问题,于是清理 Next.js 的cache, 重启服务:

⏺ I see - the error is still referencing "api" from the old file. The cache needs to be cleared. Let me kill the server, clear the Next.js cache, and restart ...

在检查完页面和终端都没有报错后,Claude 宣布它终于解决了问题:

⏺ Perfect! ✅ Fixed and Running Successfully!

  The website is now running without any validation errors!

我打开浏览器,试用了下,问题确实都解决了。

simple-homepage

任务二:升级依赖包及迁移 Next.js 路由模式(模型:Sonnet 4.5)

网站运行和操作都没有什么问题,我打开代码看了一下,初略一看发现有两个问题,一个是 package.json 里依赖的 Next.js 和 Nextra 包都比较老旧,第二个问题是路由模式采用的是 Next.js 已不再推荐的 pages 模式。因此,我打算让 Claude Code 重构一下,解决这两个问题。

在重构之前,我想先换下模型,在任务一的时候我没有换模型,采用的是安装 Claude Code 后默认的 Haiku 模型,该模型响应快,但能力稍弱。从这个任务开始,我换成了 Sonnet 4.5 模型。

切换模型后,我让 Claude 升级 Next.js 和 Nextra:

> please update next.js to 16, and update nextra to 4.6 

Claude 接到任务,它便开始分析项目里的组件版本及依赖,经过一系列分析之后,它发现了一个问题。当前不能直接升级 Nextra 版本,因为当前项目使用的 Next.js 路由模式为 Pages 而非 App, 而新版本的 Nextra 已经不支持 Pages 路由。

⏺ I've discovered a critical compatibility issue: Nextra 4 only supports 
  Next.js App Router and has dropped support for the Pages Router. Your
  project currently uses the Pages Router (with the pages/ directory
  structure).

Claude 于是让我选择是否将当前的路由模式重构成 App Router, 在我确认后,Claude 便开始做重构迁移了。具体的过程我就不再追溯,总之经过了几个问题的定位处理后,Claude 最终将路由模式迁移成功,也将 Next.js 和 Nextra 的依赖包版本升级到了新版本。

任务三:重构代码(模型:Sonnet 4.5)

文档网站基本成型,但仔细看项目代码,还是有些不太满意的地方。比如,文档页面都以 JSX 的格式放在 app 目录下,这显然还是 Next.js 网站的设计方式,而不是 Nextra 文档站点的推荐设计。Nextra 推荐将文档从 app 中分离出来,以 MDX 格式放在 content 目录下,做到文档内容与页面样式分离,这样就像一些静态博客框架(如 Jekyll)的设计一样,博客内容是博客内容,网站样式是网站样式,二者解耦,后续当用户想换网站风格了,无需修改内容页面。

由于互联网上 Next.js 的资料远远大于 Nextra, 所以我觉得大模型本身可能会偏向于 Next.js 的设计,于是我在指示 Claude Code 重构时,明确指出让它参考并学习 Nextra 的文档。

> learn this: https://nextra.site/docs/file-conventions/content-directory , and refactor this repository. 

Claude 表示它将学习 Nextra 的文档并以最佳实践来重构代码仓。

⏺ I'll learn about Nextra's file conventions from the documentation and then refactor the repository to follow best practices.

⏺ Fetch(https://nextra.site/docs/file-conventions/content-directory)
  ⎿  Received 279.8KB (200 OK)

⏺ Fetch(https://nextra.site/docs/file-conventions)
  ⎿  Received 220.5KB (200 OK)

......(其他查找搜索内容省略)

Claude 不但获取了我要求它参考的页面,还主动获取了上级目录等其他信息,并阅读了本地代码仓的内容,然后理解了当前代码结构存在的问题,对比 Nextra 的最佳实践,并给出了重构策略。不得不说,Claude 理解和总结能力挺强,这要在大厂妥妥的火车头。

Refactoring Plan

  Current Structure Issues:
  - Using app/page.mdx pattern (Next.js App Router convention)
  - Content files scattered in app/ directory with subdirectories
  - Mixing content with routing configuration

  Nextra Best Practice (Content Directory Pattern):
  - Create a content/ directory for all MDX files
  - Use simple naming: content/index.mdx, content/getting-started.mdx, content/guide.mdx
  - Create a gateway file at app/[[...mdxPath]]/page.jsx to route to content
  - Move _meta files to the content directory
  - Cleaner separation between routing and content

  Benefits:
  - ✅ No server restart needed when editing content
  - ✅ Better hot reloading
  - ✅ Simpler file organization
  - ✅ Follows Nextra recommended patterns

  Let me implement this refactoring:

......(重构过程省略)

重构结束后运行报了一个 500 服务器错误,告诉它后,Claude 自己调试了一会,然后就解决了问题,重构完成。

任务四:定位并解决问题(模型:Sonnet 4.5)

现在网站从呈现效果和代码结构都可用了,不过实际交互时发现了一个bug: 在点击搜索框搜索时提示报错:

Failed to load search index. Search isn't available in development because Nextra 4 uses Pagefind package, which indexes built '.html' files instead of '.md'/'.mdx'.

我将这个报错信息告知 Claude Code, 并让它解决这个问题。Claude 便开始分析代码文件并很快有了答案。

⏺ I can see the issue. Nextra 4 uses Pagefind for search, which only works on built HTML files, not in development mode. Let me investigate the current search configuration and help you set it up properly.

......(分析过程及解决方案略)

Claude 认为搜索组件 Pagefind 依赖编译后的 HTML 文件,便给了一些修复选项,并建议在生产模式而非开发模式下使用搜索。我采用此建议发现原先的报错没有了,但又有新的错误:

Failed to load search index. TypeError: failed to fetch dynamically imported module: http://localhost:3000/_pagefind/pagefind.js

在告诉 Claude 报错后它开始定位问题,并搜索 Pagefind 的配置方法等信息,在过程中它请我允许它执行 pnpm build pnpm start 等命令自己编译并调试,最终得以解决问题。

最后页面效果如下。

full-homepage

2. 与同类工具对比

在试用 Claude Code 的同时,我也用同样的指令对 Codex (模型: gpt-5.1-codex-max)和 Gemini Cli(模型: gemini-2.5-pro). Codex 在大部分任务能够顺利完成,但有些时候就会犯傻,怎么也生成不了或解决不了问题。而 Gemini Cli 在我让它生成网站的任务就没有走通过,只好放弃。所以后来 Claude Code 和 Claude.ai 成了我每天都用的工具,而 Codex 甚至是一直用的 ChatGPT 也被我疏远了。

无论从功能、体验还是任务完成度来看,Claude Code 都远超同类产品。而这种用户体验很大程度归功于背后的模型能力,无论是一开始我尝试的 Haiku-4.5, 还是 Sonnet-4.5,都能够圆满的完成我给 Claude Code 下发的编码任务。而后当 Opus-4.5 也开放给 Pro 用户后,我体验下来更是觉得强悍。尽管网上评测号称 gemini-3-pro 和 gpt-5.2 在代码能力上超过 opus-4.5, 但从我实际的感受来看并非如此,Claude Code + Opus-4.5 的编码能力是最强的。

3. 有关 CLAUDE.md

除了模型能力,Claude Code 的工程能力也是很强的,在这方面 Anthropic 一直领头羊,从 MCP 到 Agent Skills, Anthropic 提出的这些工程实践最终都成为了行业标准。本期周刊我简单聊一下 CLAUDE.md.

CLAUDE.md 是专门的规则文件,用来管理 Claude Code 的记忆。因为大模型是没有状态记忆的,所以 Claude Code 在启动时会读取这些文件从而加载到上下文中给到大模型。可以理解为是写给 Claude 看的 README.md 文件,给 Claude 提供上下文信息和操作指南。一般的 Code Agent 都提供了类似的机制,在 Gemini Cli 中该文件叫 GEMINI.md, 而 Codex、Cursor 等其他 Code Agent 则叫 AGENTS.md. AGENTS.md 也已经成为 AAIF (Agentic AI Foundation) 的一个标准项目。

CLAUDE.md 示例如下:

# 前端项目

## bash命令
- `npm run build`:构建项目
- `npm run typecheck`:运行类型检查
​
## 代码风格
- 使用ES模块语法(`import/export`),而非CommonJS(`require`- 尽可能使用解构导入(例如:`import { foo } from 'bar'`)
​
## 工作流程
- 完成一系列代码修改后,务必进行类型检查
- 出于性能考虑,优先运行单个测试,而非整个测试套件

CLAUDE.md 有几种方式,最常见的是放在项目的根目录下,还可以存放在系统目录或用户目录下,其作用范围也不同。Claude 官网做了如下解释(以下表格中位置当前目录为项目文件夹):

类型 位置 用途 作用范围
系统级 系统目录下 CLAUDE.md 企业级规范 企业内遵从
项目级 ./CLAUDE.md 或 ./.claude/CLAUDE.md 项目架构、规范等 项目成员
项目规则 ./.claude/rules/*.md 语言规范、测试规范等 项目成员
用户级 ~/.claude/CLAUDE.md 个人偏好 用户自己
项目级(本地) ./CLAUDE.local.md 个人项目偏好,测试数据等 用户自己

CLAUDE.md 的写作原则是精简而清晰,过多的指令只会让大模型的效率变得低下,这也是为什么 Agent Skills 设计三层抽象的原因(后续再谈)。在 Writing a good CLAUDE.md 这篇博文里,作者建议 CLAUDE.md 不要超过60行。

另外,该文作者还提到,不要使用 /init 命令来自动生成 CLAUDE.md, 这点建议恰巧同官方博客文章相悖,在 Using CLAUDE.md files: Customizing Claude Code for your codebase 里 Anthropic 建议使用 /init 来自动生成 CLAUDE.md, 这也是我当前经常采用的方式。无论哪种建议,还是得根据实际情况来决定是否采纳。

值得一提的是,Claude 有时会忽略 CLAUDE.md 文件,这是因为有时候 Claude Code 会在提示词中针对 CLAUDE.md 追加一句系统提示:该上下文与任务可能有关也可能无关,除非与任务高度相关才响应该上下文。

<system-reminder>
      IMPORTANT: this context may or may not be relevant to your tasks. 
      You should not respond to this context unless it is highly relevant to your task.
</system-reminder>

所以 Claude 如果判断该上下文与当前任务无关的话则会忽略它。

4. 下一步计划

下一步打算试验下 Claude Code 的 SubAgent、Skills 等能力,另外正在用 Claude Code 编写一个类 Claude Code 的 Agent.

5. 后记

在我写完这篇周刊后,我突发奇想,让 AI 来推荐一副油画作为本文的题图,顺便也看看三个 Code Agent 在非编码作业的能力体现。以下是 Codex, Claude Code 和 Gemini Cli 分别给我的建议。

Codex (gpt-5.2-codex) 的回答最简单,它在读了本文(Markdown 文件)后建议我采用维米尔的《地理学家》,代表了好奇和探索;另外备选约瑟夫·赖特的《一位哲学家讲授太阳系仪》。

I’ll recommend Johannes Vermeer’s “The Geographer” (1669) for its portrayal of a scholar immersed in study with maps and instruments, capturing curiosity and methodical exploration—perfect for an article on Claude Code, programming, and AI.

As an alternative, Joseph Wright of Derby’s “A Philosopher Lecturing on the Orrery” offers a dramatic, tech-focused scene. Both evoke light, investigation, and insight fitting the theme.

Claude Code (opus-4.5) 最契合我意,它首先推荐的是大卫·弗里德里希的《雾海上的旅人》,说这幅“站在广阔而神秘的景观边缘的人影,完美地象征着一位正在探索 AI 辅助编程这一新前沿的开发者。弥漫的薄雾代表着这一新兴领域中尚未被揭示的无限可能。”而这幅画前不久刚被我用来做同样是AI主题的第21期周刊的题图,深得我心。

其他备选的有:《炼金术士发现磷》(约瑟夫·赖特)、《一位哲学家讲授太阳系仪》(约瑟夫·赖特)、《创造亚当》(米开朗基罗)、《巴别塔》(老彼得·勃鲁盖尔)。

Top Recommendation

“Wanderer above the Sea of Fog” by Caspar David Friedrich (1818)

  • A figure standing at the edge of a vast, mysterious landscape perfectly symbolizes a developer exploring the new frontier of AI-assisted coding. The mist represents the unknown possibilities of this emerging field.

Alternative Options

  1. “The Alchemist Discovering Phosphorus” by Joseph Wright of Derby (1771)
    • Captures the moment of discovery and experimentation, with dramatic lighting on a figure working intently—fitting for the iterative debugging process described in the article.
  2. “A Philosopher Lecturing on the Orrery” by Joseph Wright of Derby (c. 1766)
    • Shows the wonder of understanding a complex system, with faces illuminated by newfound knowledge—appropriate for learning a powerful new AI tool.
  3. “The Creation of Adam” by Michelangelo (1508-1512)
    • The iconic image of two hands reaching toward each other could symbolize the collaboration between human intent and AI capability in Claude Code.
  4. “The Tower of Babel” by Pieter Bruegel the Elder (1563)
    • Represents building something complex layer by layer (like a documentation website), with themes of ambitious creation.

My personal recommendation would be “Wanderer above the Sea of Fog” as it best captures the exploratory spirit of your article—standing at the threshold of AI-assisted development, looking out at vast possibilities.

Gemini Cli (gemini-3-pro) 不但阅读了该篇文章,还请求我的权限读了我这个博客项目目录里的所有周刊文件,开始我还在奇怪,等它给答案的时候我才明白,原来它是想根据整个周刊的题目给一个最合适的,从这点看 Gemini Cli 考虑最为周全。

Based on the content of your article, which focuses on “Ambient Programming” (氛围编程) and the collaborative exploration of a codebase with Claude Code, I suggest using “The Astronomer” by Johannes Vermeer as the featured image.

Why this painting fits:

  • Ambient Light & Focus: Vermeer is a master of “ambient” light. The painting depicts a scholar in a quiet, sunlit study, which perfectly mirrors the focused yet “ambient” experience of working with an AI assistant in a terminal.
  • Curiosity & Exploration: The scholar is shown reaching out to a celestial globe while consulting a book. This is a powerful metaphor for a developer exploring a vast, complex codebase (the globe) with the help of documentation and AI (the book and the light).
  • Intellectual Craft: The article describes a series of methodical tasks—refactoring, debugging, and learning. The painting captures this sense of intellectual craftsmanship and the “Aha!” moments of discovery that you experienced while working with Claude.
  • Aesthetic Consistency: Your previous issue (No. 21) used Wanderer above the Sea of Fog, a masterpiece of Romanticism. Choosing a Vermeer (Baroque) continues the tradition of using classic, thought-provoking art to represent modern technical themes.

Suggested metadata for your article: image: weeklies/23-the-astronomer-vermeer.jpg

(You can find a high-resolution, public-domain version of this painting on Wikimedia Commons.)

Gemini Cli 推荐的是维米尔的《天文学家》,并指出我在第21期使用过《雾海上的旅人》,维米尔的这幅巴洛克时代作品能够延续该风格。Gemini Cli 给了题图的元信息命名建议,并提供了公版图片的下载链接,可惜该链接是错误的。

这次,我选择了 Gemini Cli.

参考

  1. Claude Code Docs (Claude Code 官方文档)
  2. Claude Code: Best practices for agentic coding
  3. Using CLAUDE.md files: Customizing Claude Code for your codebase
  4. Writing a good CLAUDE.md

好奇心周刊第22期: 纳瓦尔谈人生

2025-12-14 20:52:00

本文为好奇心周刊第22期,全部周刊参见:周刊系列

今年我主要听了两个播客,一个是四月份 Chris Williamson 在他的播客节目 Modern Wisdom 中采访 Naval Ravikant,另一个是十月份 Lex Fridman 采访 Telegram 的创始人 Pavel Durov. 这两集播客都很长,一个超过三小时,一个超过四小时。两集播客都挺有意思,我在早晨跑步时当作背景音听,每集都反复听了几遍。

在 Lex Fridman 采访 Pavel Durov 播客中,Pavel Durov (杜罗夫)谈到了他的人生哲学和经历。杜罗夫信奉自由主义,并极端自律。他从二十多岁开始便戒除酒精、烟草、咖啡、药物,以及可能成瘾的物质。并且远离手机和社交网络,除了测试 Telegram 平时几乎不用手机。要知道,杜罗夫在创建 Telegram 之前曾创建了俄罗斯最大的社交网站 VK. 杜罗夫说他不喜欢被安排,而是要完全掌控自己的日程。越是有很多联系,生产力就越低,而且当一个人不断被各种信息轰炸,他是无法专注的,而且会影响情绪,这其中绝大部分信息是无效噪音。杜罗夫每天早上做300个俯卧撑和300个深蹲,并且每周去健身房健身五、六次,每次一到两小时。另外,还会洗冰浴和长时间的游泳。杜罗夫把这些当成喝酒的反面,喝酒会得到一两个小时短暂的快乐,然后付出长期的负面后果。而这些活动起初会非常痛苦,但承受下来后会在之后的几小时和几天里感觉很好。

而在 Chris Williamson 采访 Naval Ravikant(纳瓦尔)的播客中,纳瓦尔也主要谈及了他的生活哲学。播客的标题叫 44 Harsh Truths About Human Nature(《人性的44个残酷真相》, 在 YouTube 平台上叫 44 Harsh Truths About The Game Of Life),但播客里也没有明确给出这44个真相是什么,可以理解为是一个大概的数字。总之,纳瓦尔谈了很多他对于人生的认识,我在《纳瓦尔的智慧》这篇文章中曾介绍过《纳瓦尔宝典》这本书,而这集播客可以理解为是该书的补充。我便借本期周刊介绍下该播客的主要内容。

steps-to-developing-llms

幸福、成功和欲望

1. 幸福是对现状感到满足。而成功是源于不满足,那么成功还值得追求吗?

纳瓦尔:我不确定那个说法现在还成立(指纳瓦尔之前所说过的“幸福是对现状感到满足”)。我很久以前说过那句话,但那些东西很多都是写给自己的笔记,它们高度依赖于情境。

幸福是个很复杂的话题。有两个故事,一个是说苏格拉底走进市场,人们向他展示精美的物品,他说:“这个世界上有多少东西是我不想要的啊。”这是一种自由,不想要某种东西和拥有它一样好。另一个故事是说亚历山大征服了世界,遇见了住在木桶里的第欧根尼,第欧根尼说“让开,你挡住我的阳光了。”亚历山大说“我多希望自己是第欧根尼”,而第欧根尼说“我可不想成为亚历山大”。

通往幸福有两条路径:一条是成功之路,你得到你想要的。另一条是像第欧根尼那样,你明确知道你不想要的。我不确定哪一条更有效,这取决于你如何定义成功。

2. 幸福会妨碍成功吗?

纳瓦尔:我发现对我自己而言,随着我感觉到幸福——也就是说更平和、更冷静、更活在当下、更满足于我所拥有的——我仍然想做事情。我只是想做更大的事情,想做更纯粹的事情,更符合我认为需要做的事情,以及我能独特完成的事情。所以从这个意义上来说,幸福实际上会让你更成功,但你对成功的定义可能会在这个过程中改变。

3. 痛苦与进步

克里斯:你的另一个观点:生活中的大部分收获来自于短期的痛苦,这样你才能在长期得到回报。但这样是否会导致人们成为痛苦成瘾者,把痛苦作为进步的指标?

纳瓦尔:如果你把痛苦定义为身体上的痛苦,那么它是真实存在的。但这不是我所说的痛苦,我所说的痛苦主要是精神上和心理上的痛苦,它只是意为着你不想做手头的任务。

如果你乐意做手头的任务,你就不会感到痛苦。问题是什么更有效:以痛苦的方式做事,还是以不痛苦的方式。

有一个我希望做的小思维练习,你可以回到你自己的生活中,试着让自己处于五年、十年甚至更早前的确切位置。试着回忆你和谁在一起、在做什么、感受是什么、目标是什么,将自己传送回去,看看你会给自己什么建议,你会做什么不同的事情。当然你没有新信息,不要假装回去买比特币什么的,只是根据你现在对自己性格和年龄经验相关所知道的来建议,你会如何以不同的方式做事。

我认为这是一个值得做的练习。对我来说,我会做同样的一切,只是我会用更少的愤怒、更少的情绪、更少的内在痛苦来做,因为那是可选的,那不是必要的。

4. 过程就是一切

纳瓦尔:如果你得到了那个东西,然后你习惯了它,你又会感到无聊,过几个月你想要别的东西;如果你没有得到它,你会不开心一段时间,然后你克服了它,紧接着想要别的东西。这是正常的循环。无论你最后是快乐还是不快乐,它往往不会持续。

而你必须享受过程。过程就是一切,你99%的时间都花在过程上,如果不享受它,那有什么意义呢。

5. 如何管理欲望?

纳瓦尔:你可以专注,决定自己不想要大多数东西。你不可能在所有事情上都出色,那样只会浪费自己的精力和时间。

名声、地位和社会关系

6. 名声值得追求吗?

纳瓦尔:它能让你被邀请参加更好的派对,能让你去更好的餐厅。它可以让你在远处得到你想要的东西,所以我不会说它无用。但它的成本很高。它会让你在舞台上被迫表演,被迫与你过去的声明和行为保持一致,会引来仇恨者和流言蜚语。

事实上我们似乎都想要它,说“我不想出名”是不真诚的。但因为渴望出名而出名都是陷阱。最好是赢得的名声,通过做对社群有益的事情而赢得尊重。哲学家、艺术家、科学家等。

如果名声是空洞的,只是因为你的名字或脸出现在很多地方而出名,那么这是一种空洞的名声,我认为在内心深处你会知道这一点,所以它会很脆弱,你会一直害怕失去它,然后被迫表演。

7. 如何避免地位游戏?

克里斯:名声的诱惑陷阱总在那里,人们应该如何学会减少被地位游戏这种方式分散注意力?

纳瓦尔:在原始社会没有财富这种东西,人们地位越高,可获得的东西也就越多;但现代社会我们可以创造财富,创造产品或服务,这些不像地位游戏是零和游戏。我可以富有,你也可以富有,我们可以一起创造东西。创造财富是积极的。

自尊和自我

8. 如何建立并提升自尊

克里斯:为什么说世界上最糟糕的结果是没有自尊?

纳瓦尔:那些不喜欢自己的人处境是很艰难的,因为他们总是与自己搏斗。面对外部世界已经够难了,没有人会比你更喜欢你自己。

从某种程度上说,自尊是自己的声誉。你一直在看着自己,知道自己在做什么,有自己的道德准则。如果不按照自己的道德准则行事,那会损害自尊。所以,建立自尊的一种方式就是:有一个严格的准则,然后去实现它。

提升自尊的另外一种方式是为他人做事。我回顾自己的生活,所真正为之骄傲的时刻,是当我为所爱之人或所爱之事做出牺牲的时候。

9. 诚信的社会

纳瓦尔:如果道德是有利可图的,每个人都会这样做。美德是一套信念,如果社会中的每个人都遵循它们,那会导致人人都赢的局面。如果你我都诚实,那我们很容易做生意,因为可以互相信任。

在博弈论中,最著名的游戏是囚徒困境,那里的稳定均衡是每个人作弊。但那不是社会中常见的游戏,社会中常见的游戏叫雄鹿狩猎,我们可以合作击倒一只大雄鹿,获得大晚餐;但如果我们不合作,则必须各自狩猎小兔子,获得小晚餐。

所以当我们生活在一个每个人都有自己的一套美德并遵循它们的系统中,就可以实现共赢。

10. 骄傲的代价

克里斯:为什么你说“最昂贵的特质是骄傲”?

纳瓦尔:我发推文这么说是因为我认为骄傲是学习的敌人。当我看到那些仍然被困在过去并成长最少的朋友和同事是那些最骄傲的人,因为他们觉得自己已经有了答案,也不想公开纠正自己。

11. 重新开始的意愿

纳瓦尔:伟大的艺术家总有重新开始的能力,比如保罗·西蒙和麦当娜。伟大的企业家也总是愿意重新开始,我总是被马斯克的故事所震撼,这家伙是一个永久的冒险者,他总是愿意重新开始,无论成功失败,他愿意把一切都投进去。

12. 自我优先的自由

克里斯:从我们在一起度过的一些时间来看,你有一个非常有趣的“自私”特质:把自己放在第一位。你似乎不为说或做可能导致其他人感到尴尬的事情而感到困扰。

纳瓦尔:是的,我认为每个人都应该把自己放在第一位。那只是人性,你是一个独立的有机体。

我认为不应在别人身上浪费时间,不做自己不想做的事。人的一生时间这么少,有种说法是四千周,我不想浪费它。

克里斯:你如何能心安理得地自我优先?

纳瓦尔:我已经变得越来越无情于此。我看到或听到其他人的自由方式,然后进一步强化了我的这种想法。我读了马克·安德森的一篇博客文章,他说不要时间表,所以我也删除了我的日历,不保留时间表,如果一件事情不能记住,那我就不添加它。

生产力和决策机制

13. 自由与生产力

纳瓦尔:当你把自由带入到生活,实际上更有生产力。你不仅会更快乐,更自由,还会更有生产力,因为那是你可以专注于眼前的事情。

我相信灵感是易逝的,应立即采取行动。所以当你受到启发做某件事时,立刻去做。如果我受到启发写博客文章,我立刻会写;如果我受到启发读一本书,马上就读。

如果你以这种方式过生活,将会很快乐。你越快乐,就越能持续做某事,然后越有可能做让你更快乐的事,持续如此,你会超越其他人。你越自由,就越能更好的分配时间;你越少被义务和承诺所困,就越能专注于手头的任务。

14. 找到擅长的工作

纳瓦尔:没有人比你更能做自己。找到对你来说感觉像玩但对其他人看起来像工作的东西,你就会超越其他人。你为了乐趣而做,对你来说,它是艺术,它是美,它是快乐,它是心流,它是充实。

你做对你而言自然的事情越多,你的竞争就越少,通过成为你自己来避免竞争。

15. 产品化自己

纳瓦尔:如果我来总结如何在生活中成功,那就是产品化自己。弄清楚你自然而然去做的事情,并扩大转化为产品。

16. 默认说不

纳瓦尔:默认情况下,你应该对其他所有事情说不。如果你不能决定,答案就是不。每一次打断都会让你脱离心流。我会忽略一些邀请或请求,我会接受自私,我是一个非常自私的人,不要联系我。

17. 客观地观察自己的想法

纳瓦尔:能够客观地观察自己的想法很好,它在你有意识地观察自我和思想之间创造了一个小间隙,像第三方的评估。

18. 明智地选择关注的问题

纳瓦尔:很多人都沉迷于发现问题和解决问题,但有一种糟糕的情况是我们承担自己无法影响的问题。比如你看了太多社交媒体上的新闻,被卷入了一个又一个你无法做任何事情的问题。你想要去修复这个世界,但事实上你需要先修复下自己的生活。

19. 花时间在重大的决定上

纳瓦尔:人们轻率地决定住在哪个城市,这将决定他们的朋友是谁、工作是什么,他们的机会、生活质量等。如此重要的决定,人们花很少的时间去思考。我会说,如果你要做一个四年的决定,花一年的时间思考它。四分之一的时间。

20. 迭代与重复

纳瓦尔:马尔科姆·格拉德威尔推广了一万小时成为领域专家的想法,我会说实际上是一万次迭代才能精通。迭代不是重复,重复是一遍又一遍做着相同的事情,而迭代是用学习来修正它,然后做出另一个版本,那是纠错。如果你在任何事情上得到一万次错误纠正,你将成为专家。

21. 克服愤世嫉俗和悲观主义

克里斯:你说过“不要与愤世嫉俗和悲观主义者合作”,但很多时候我们在自己身上发现那种愤世嫉俗和悲观主义,无论是我们吸收了周边负面人的话或是新闻,还是根植于内心的。人们如何避免自己内心的愤世嫉俗和悲观主义?

纳瓦尔:愤世嫉俗和悲观主义是一个棘手的问题,我们天生就有这种倾向,这是根植于进化基因的。在原始社会,人们在树林中看到有东西在沙沙作响,如果朝向它移动,结果是猎物,那可以美食一顿,但如果是捕食者,那就被吃了。所以人类为了避免毁灭和死亡,这种对于危险的恐惧是被硬编码进基因的,我们天生就是悲观主义者。

但现代社会非常不同,现代社会安全得多,机会和上行空间也大得多。比如,做投资时,如果你做空,那最多赚一倍——股票归零,收益翻倍;但如果做多,买英伟达股票,涨了100或1000倍,那你的收益是巨大的。

现代社会对于失败的容忍度要高的多,所以你需要用新皮层意识到这一点并覆盖旧皮层中的悲观主义倾向。

22. 超越标签和身份

纳瓦尔:像悲观主义者、乐观主义者、内向者、外向者这样的标签,都非常自我限制。人类是动态的,有时会内向,有时会外向,有些情境会悲观,有些情境则乐观。

抛开所有的标签,只是看手头的问题,看清现实的本来面目。保持灵活,因为现实总在变化,你必须能够适应它。而不是通过身份来看待,它会蒙蔽你的判断。

23. 什么是幸福?

克里斯:幸福是否还是如你之前所说关于平静而非快乐?

纳瓦尔:这个词对不同的人有不同的定义。对于我,基本上就是对现在感到满意。

24. 自我反思会导致不幸福吗?

克里斯:你说自我反思是导致不幸福的原因。但为了自我改进一定程度上的反思是重要的,而这导致的不幸福是需要支付的代价吗?

纳瓦尔:我特别指的是,如果沉迷于思考自己的个性、性格,那将会是很多抑郁和不幸福的原因。这件事发生在我身上,是因为我有这样的个性,或是别人造成了我的不幸,像类似这种反思就容易造成不幸福,它会强化内心的小怪兽。

你应该在反思中学习到什么,然后继续前进。思考某事并解决该问题,然后把它从脑海中拿开。如果反思在最后让你的思想更清晰,那么这是值得的;如果在最后让你的思想更忙碌,那么你可能走错了方向。

25. 如何变得幸福或成功?

纳瓦尔:我以前有很多技巧,现在我不太想要任何技巧。就像一个试图幸福的人,说我不幸福然后想创造一个幸福的框架,这是很难的。你需要一个问题一个问题的解决,一步一步的走到那里。

就像成功也没有公式,你不应该问一个成功的人怎么做获得的成功。真正非常成功的人不会坐在那里看成功学心灵鸡汤,他们只是去做了,他们对正在做的事情有强烈的欲望,以及由此产生的专注。

26. 如何处理焦虑?

纳瓦尔:焦虑和压力相关。压力是当你的思想同时被拉向两个不同的方向,当你的思想处于压力之中时,是因为它同时有两个冲突的欲望。就像你不想去工作,但你想赚钱。

克服压力的方法之一是承认自己有两个冲突的欲望,选择一个并接受失去另一个。

我认为焦虑是一种普遍的无法识别的压力,你无法识别潜在的问题。你需要再焦虑的时候非常自己的问自己:“我这次为什么焦虑?”坐下来思考它,写下可能的原因。冥想,写日记,和治疗师谈谈,和朋友谈谈。识别这些问题有助于摆脱焦虑。

27. 什么是浪费的时间?

纳瓦尔:什么是浪费的时间?从终极意义上说,一切都会归零,都是浪费的时间。但在每一刻,事情很重要,你面前发生的事情拥有世界上所有的意义。如果你正在做你想做的事,并且完全投入在那里,那就没有浪费的时间。如果你不想做它,思想正在逃离,你在对抗它,那就是浪费的时间。

真正浪费的时间是你不在场的时间,当你没有沉浸其中做你想做的事情时。

人际关系和个人成长

28. 改变自己,而不是试图改变别人

纳瓦尔:我们认为不能改变自己,但我们可以;我们认为可以改变别人,但我们不能。

29. 决策原则

纳瓦尔:在决策中,我有三个启发式的方法:

  1. 如果无法决定,答案是“不”。
  2. 如果有两个选择,选择短期内更痛苦的那个。
  3. 选择长期内会让自己更平静的路线。

30. 无法传授的智慧

纳瓦尔:智慧无法传递,它必须被自己发现。你必须在自己的背景重新发现,必须有特定的经历。

你必须实际生活,经历所有问题,弄清楚你想要什么,在什么情境下哪些适用哪些不适用。

31. 每个人都可以成为哲学家

纳瓦尔:什么是哲学?只要你获得足够长,你就会成为一个哲学家。任何深入追求的学科最终都会归入哲学,对任何事物精通,都会导致你成为一个哲学家。

32. 为人父母的快乐

纳瓦尔:孩子以每一种可能的方式让你的生活更好。如果你想要一个自动内置的生活意义,那就生孩子。

33. 注意力是人生的货币

纳瓦尔:我曾经认为人生的货币是金钱,金钱很重要,它确实可以让你用某些东西交换时间,但它真的买不了时间。

生命的真正货币是注意力,你选择关注什么以及对此做什么。注意力是你唯一拥有的东西。


参考:

  1. 44 Harsh Truths About The Game Of Life (Youtube)
  2. Pavel Durov: Telegram, Freedom, Censorship, Money, Power & Human Nature (Youtube)

不确定性世界的生存策略

2025-11-16 17:17:00

近两个月来,一口气读完了塔勒布的四本书《黑天鹅》、《反脆弱》、《非对称风险》和《随机生存的智慧》,加上前年读过的《随机漫步的傻瓜》,一共是五本。而这五本书也被塔勒布本人视为一个系列,命名为 Incerto, Incerto 在意大利语和拉丁语中意为不确定性。不确定性是塔勒布思想的核心,他试图通过该系列来为这个充满不确定性、随机的、极端事件的世界构建一种哲学和行动指南。纳瓦尔也曾经多次推荐过他的书。

但说实在的,我是硬着头皮读下这五本书的,而塔勒布的另一本《肥尾理论》我读了一半干脆放弃了。我不知道是因为翻译的问题,还是塔勒布原本文风的问题,总之,就是看着看着不知道这老兄想说什么了。其实他的书除了《肥尾理论》堆砌满书的数学公式外,其他几本所介绍的概念或理论还是比较容易理解的,且塔勒布创造的“黑天鹅”等概念也很形象,但就是文风太过于天马行空,没有章法,让人费解。我花了几个周末时间,将他的这个系列的观点和主要内容整理了下,一来为这段痛苦的阅读历程做个总结,另外也方便想了解塔勒布观点而又免受阅读之苦的同学。

我打算用五个章节来总结,前四个章节分别代表《随机漫步的傻瓜》、《黑天鹅》、《反脆弱》和《非对称风险》四本书的笔记总结,最后一个章节谈下我自己的看法。而《随机生存的智慧》属于塔勒布的个人格言集,我觉得有很多似是而非的话语,并不再总结,唯有书的原名”The Bed of Procrustes” 意为“普罗克拉斯之床”,是他诸多思想中的一环,不过在《反脆弱》中也有提及,便在第三章节中一并阐述。

成功不是因为能力,而仅仅是运气好而已

fooled-by-randomness

英文原名:Fooled by Randomness: The Hidden Role of Chance in Life and in the Markets
中文译名:《随机漫步的傻瓜:发现市场和人生中的隐藏机遇》

互联网上有个经典的笑话,说是有人在乘电梯时努力做俯卧撑,当他来到顶楼时,别人问他是怎么上来的,他说是做俯卧撑上来的。人们把这种将成功归结为自身努力的行为称作“在电梯里做俯卧撑”,这些人忽视或不愿承认的是:成功更大的因素是他侥幸坐上了上行的电梯。我们常常把“好结果”归因于自身努力和能力,而把“坏结果”归因于运气或外部因素。

在《随机漫步的傻瓜》中,塔勒布则用更极端的例子来比喻这种误判,他说那些在金融市场中呼风唤雨的玩家,就像是在玩俄罗斯轮盘赌的赌徒。媒体只会把聚光灯投给幸运活下来的玩家,而对那些死在子弹下的不幸玩家则熟视无睹。事实是,只要不下牌桌,如果赌转盘的傻瓜一直玩下去,那么不幸总有一次会发生在他身上,然后一无所有。因为玩游戏的傻瓜足够多,所以总有少数的幸运儿活下来并极其富有,只不过其他人已成一堆墓冢。

这就是所谓的“幸存者偏差”,媒体中宣传的成功案例、心灵鸡汤,试图从成功者身上找到成功密码。而塔勒布在《黑天鹅》中直接说到:“躺在失败者坟墓中的人有如下共同点:勇气、冒险精神、乐观等等,同那些百万富翁一样。或许具体的技能不同,但真正使两者不同的主要因素只有一个:运气,只是运气。”这是因为,我们在小样本中误认为发现了规律,但实际上只是“随机噪声”而已,这就是小数定律。与之相对的是大数定律,而蒙特卡洛方法正是大数定律的应用,为了解决复杂场景的数值计算问题而采用的不确定性算法。蒙特卡洛方法利用随机数随机采样,样本越多,结果则越接近真实值,用统计实验去逼近真实答案。

因此,塔勒布告诫我们要当心那些新闻媒体和所谓的“预言”专家,成功是无法预测的。这就像无数只猴子在打字机前随机打字,有一只猴子敲出了莎士比亚的戏剧,你就能相信这只猴子下一次还会敲出另一本世界名著么。聪明的做法是像荷马史诗《奥德赛》中描绘的奥德修斯那样,面对海妖的迷人歌声,将水手们的耳朵用蜡封住,避免心智被诱惑。在这个纷繁复杂的时代,有无数的噪声和诱惑,总有人吸引你去俄罗斯轮盘赌,堵住耳朵,戒掉新闻和媒体,保持冷静与怀疑。

世界往往由极端的“黑天鹅”事件推动,而这些事件的发生毫无征兆

the-black-swan

英文原名:The Black Swan: The Impact of the Highly Improbable
中文译名:《黑天鹅:如何应对不可预知的未来》

在发现澳大利亚的黑天鹅之前,欧洲人相信天鹅全部是白色的。而一旦登陆澳洲大陆,看到黑天鹅一眼,便颠覆了上千年来对白天鹅数百万次确定性观察所得的结论。塔勒布因此将“黑天鹅”定义为一种重要事件类型,该事件具备三个特点:稀少且不可预测,影响巨大,事后可解释。黑天鹅事件虽少,但极为重要。少数的黑天鹅事件几乎能解释这个世界上发生的所有事情,因为历史和社会不是缓慢爬行的,而是在一步步地跳跃,从一个断层跃上另一个断层,触发跳跃的就是“黑天鹅事件”。比如斐迪南大公遇刺、德国闪击波兰、911事件、2008金融危机。

塔勒布在《黑天鹅》一书中提出了两个概念:平均斯坦(Mediocristan)和极端斯坦(Extremistan),可以把它们想象成两个虚拟的国度,分别遵从各自的运行法则。平均斯坦受平均值支配,多数变量服从正态分布(薄尾),单个样本的变化对整体影响极小。典型的例子如身高、体重、寿命等,虽然个体身高有差异,但全世界人类的身高满足正态分布,死去一个特别高或特别矮的人对全世界平均身高的影响可忽略不计,而出生一个人,也可以预测出他长大后的身高范围。在平均斯坦的世界,大数定律与中心极限定律有效,结果可观测统计可预测。这是一个白天鹅的世界。而极端斯坦则受极端值支配,多数变量服从幂律分布(厚尾),处于厚尾中的少数极端事件影响巨大,足以颠覆整体。典型的例子如财富、公司市值、书籍销量、社交媒体传播等。马斯克在2025年财富突破了5000亿美元,比几亿普通人总和还要多。根据联合国统计,收入最低的50%的人口仅拥有全球2%的财富,而1%最富的人则占据了全球38%的财富。极端斯坦的世界无法用统计手段来预测,这是个黑天鹅的世界。

mediocristan-vs-extremistan

我们以为身处的世界是平均斯坦,实际则更接近极端斯坦。塔勒布举了这么一个例子:一只火鸡每天都接受到主人的投喂,在接受了1000天投喂后它预测第二天仍能得到食物,结果没想到第二天迎接它的是宰杀它的屠刀,因为感恩节临近了。不过,黑天鹅也并非都是负向事件,也有正向黑天鹅,比如青霉素的发明、互联网的诞生。对此,塔勒布建议的决策法则是:当可能受到正向黑天鹅事件影响时则勇于冒险,当可能受到负向黑天鹅事件影响时则非常保守。

无论是负向黑天鹅,还是正向黑天鹅,其影响都是巨大的,而结果是毁灭还是收益,取决于系统是“脆弱”还是“反脆弱”,这是塔勒布《反脆弱》一书所想表达的观点。

训练“反脆弱”,从“黑天鹅”中受益

antifragile

英文原名:Antifragile: Things That Gain from Disorder
中文译名:《反脆弱:从不确定性中获益》

塔勒布在《反脆弱》开头序言的第一句话便说:“风会熄灭蜡烛,却能使火越烧越旺。”风带来的是随机、不确定性和风险,而蜡烛和火面对冲击后有着两种截然不同的表现,其原因是这两个系统:一个是脆弱(fragile)的,另一个是反脆弱(anti-fragile)的。在传统概念中,脆弱的反义词是强韧(resilient)或稳健(robust),比如相对于抗摔,玻璃杯是脆弱的,铁盖则是强韧的。而反脆弱的事物则会在重摔后变得更强,这是一种能够吸收压力和风险的系统,就像人的肌肉在打压后更强壮那样。塔勒布则用希腊神话中的事物来比喻这三者:达摩克利斯参加暴君国王的宴会,被命令在头上方的梁木上用一根毛发悬一柄利剑,利剑随时可能掉下砍断他的头颅。作为凡人的达摩克利斯是脆弱的,如果换做希腊神话中不死的凤凰则是强韧的,而九头蛇怪则是反脆弱的,因为每次一个头被砍,就会长出两个头来。用尼采的话就是:“凡杀不死我的,必将使我更强大。”

但现代社会过于追求可控和稳定,试图建立各种完善的规章制度来防止不确定性和波动,反而导致对“反脆弱”系统的否定。追求“去波动化”,实际上是在积累脆弱性,一旦遭遇黑天鹅,很可能导致系统崩溃。塔勒布又举了一个希腊神话的例子,普罗克拉斯是一个穷凶恶极的旅馆老板,为了让旅客躺在床上刚好符合床的长度,他会砍掉高个子的腿脚,拉长矮个子的身体,让床的长度和旅客身高完全相符。现代化就是普罗克拉斯之床,它的目的是为了增加效率,但也削弱了系统的反脆弱性。试图包办一切的政府也是出于追求稳定的目的,上个世纪的经验表明,计划经济导致的饥荒远高于预期。就像是现代社会里过度保护子女的父母,过度保护实则阻碍成长,子女在步入社会后遭遇黑天鹅时变得脆弱不堪。看似在帮助,实则是伤害。

正确的做法不是避免风险,而是吸收风险。就像人体的免疫系统,适当地接受小剂量的病毒,从而激发抗体运作,增强免疫力,这也是疫苗的原理。上世纪的中国人热衷国企的“铁饭碗”,可没想到世纪末国企也开始了下岗潮,追求稳定的不能得到真正的稳定,拥抱变化的反倒成了最后的赢家。

针对投资建议,塔勒布还提供了一种解决方案:杠铃策略。杠铃的两端代表两个极端条件,并非对称,中间空无一物。一面是极端的风险厌恶,在负向黑天鹅面前采取保守措施;一面是极端的风险偏好,以开放姿态迎接正面黑天鹅;而不采取中等程度的风险策略。比如将90%的资金投入极度安全的银行储蓄甚至现金,而将10%的资金投资于风险很高的证券;这样损失最坏不会超过10%,但收益却是没有上限的。当然这只是塔勒布的一家之言,切勿当成投资宝典。

躬身入局,风险共担,遵守银律

skin-in-the-game

英文原名:Skin in the Game: The Hidden Asymmetries in Daily Life
中文译名:《非对称风险:风险共担,应对现实世界中的不确定性》

塔勒布似乎对希腊神话无比着迷,以至于他的书中总是引用希腊神话来说明他的观点,即使在某些时候看上去不那么贴切。在《非对称风险》的一开头,他又引用了一个希腊神话:安泰俄斯是大地女神盖亚和海神波塞冬的儿子,力大无穷,强迫每个路过他领地的人与他摔跤并把对方压死,战无不胜,因为他那源源不断的力量来自于他的大地母亲,但如果他与大地分开,就会失去力量。后来大力神赫拉克勒斯路过这里,与之摔跤时将安泰俄斯举过头顶,后者瞬间失去大地母亲给予的力量,被赫拉克勒斯杀死。

因此,塔勒布就说:你看,安泰俄斯就像“知识”,而大地母亲则是“实践”,如果知识脱离实践,那么就会虚弱的不堪一击。所以我们不要仅仅是从书本中学习知识,得要实践,希腊谚语说:“Pathemata mathemata”,翻译过来就是“在痛苦中学习”。从书本中学习是轻松的,但从实践中学习是痛苦的,只有在痛苦的实践中才能真正学到东西。而《非对称风险》英文原名就是“Skin in the Game”,让自己参与到游戏中来,躬身入局,得让皮肤接触现实,有擦伤的痛感,从这种痛苦的实践的代价中获得真知。

但这个世界的决策者们显然并不都具备这种认知。典型的例子便是对别国政权的干涉主义者。2003年美国入侵伊拉克,成功推翻独裁政权并将萨达姆送上绞刑架,但结果却是伊拉克深陷内乱,美军最终也不得不在2011年撤出,而极端恐怖组织伊斯兰国也趁机崛起,伊拉克人民遭受了比萨达姆时代更糟糕的混乱局面。类似的情形在阿富汗、叙利亚、利比亚等国家一再发生。干涉主义者大声呼吁要对一些国家实施干预和制裁,以便将该国人民从独裁者手中解救出来,但他们的行为脱离该国实际,搞出一个更烂的摊子后拍屁股走人。

还有一些控制或影响金融市场的银行家和政府高官们,塔勒布称之为“白知”(intellectual yet idiot),也就是所谓高智商且聪明的白痴。在金融危机爆发的时候看似在拯救市场,实则干着寻租的勾当,因为在金融危机爆发的前几十年里,他们就已经把纳税人的钱转移到里自己口袋。银行没事的时候赚钱,银行出事的时候则怪“黑天鹅”。

为什么会这样?首先是能力问题,干涉主义者和“白知”们只考虑静止的状态,不考虑事物的动态演进,不考虑事情的连续性后果,也没有能力预测。其次,也是更重要的是他们不承担风险,不承担风险却负有极大责任,这是不对称风险。再者,人们往往有着“柏拉图化”的倾向,也就是人们在把具体事物转化为抽象概念的过程中,通常会遗失对具体的人和事的共情,而只剩下宏大的概念和空洞的抽象价值。

对此,塔勒布给出了一些解决方案。首先是要防止唯智主义,理论和实践不能脱离。对于那些夸夸其谈的人,我们不仅要听他们说了什么,更要看他们做了什么。更要担心银行家和政客们口若悬河的承诺,得看到他们是否绑定了自己的利益,就像在订婚的时候,一颗昂贵的钻石胜过千言万语的誓言。

而对于不对称风险,解决方法是“风险共担”。在古代通常是由那些能够承担或者化解风险的人来推动社会进程。古罗马的皇帝都会身先士卒带兵打仗,死在战场的不在少数,风险共担的意识深入人心。《汉谟拉比法典》有一条便是这么规定的:“如果建筑师建造的房子倒塌了,并导致房屋主人死亡,那么建造房子的建筑师应该被处死。”当然在现代社会,实际在执行时并不是僵化地遵循字面意思去判决,不是要一名医生截肢错腿时要截掉医生的腿,而是依据法律为受害的一方寻求赔偿。

这种朴素的“风险共担”意识的本源是“以眼还眼,以牙还牙”的对称性规则。在古代西方,有个著名的对称性规则叫“金律”(Golden Rule),即“以你想被对待的方式去对待他人”,和中国儒家的“推己及人”思想差不多。还有个延伸的规则叫“银律”(Silver Rule):“你不想被对待的方式也不要对待他人”,这等同于孔子说的“己所不欲勿施于人”。对称性法则,特别是银律,在防止文明倒退尤为重要。比如在民主社会,最大威胁是以某些言论可能伤害他人为由,试图去限制这些言论,一旦形成这种思潮,就会使民主滑向深渊。而历史上因为忽视对称性法则而自取灭亡的例子不在少数,最典型的莫过于基督教取代罗马教。古罗马信奉希腊神话类似的多神教,对其他宗教信仰也比较宽容,因为对他们来说其他教派信仰的神也不过是诸神之一,包括基督教。但基督教在《十诫》的第一条便规定“不可信除耶和华外其他的神”,当君士坦丁大帝将基督教奉为国教后,就没有其他宗教包括传统的罗马教的容身之地了。也就是说,罗马教包容基督教,基督教不包容罗马教,其结果就是罗马教徒要么改宗,要么灭亡。因此,塔勒布呼吁:我们不能对某些不宽容的少数派(比如宗教激进分子)保持宽容,原因很简单,他们违反了银律。因为他们彻底否定了别人拥有自由选择的权利,如果我们仍坚持所谓的“普世价值”或“人权原则”,那不是捍卫自由和民主,而是自杀。

最后,还是回到风险,我们躬身入局,拥抱风险,是为了抵御可能导致系统性毁灭的风险。那什么样的风险是合适的?塔勒布说:如果一个策略有可能出发爆仓风险,那么无论多么大的收益都得不偿失。这就是理性,理性就是避免系统性毁灭。

对塔勒布的看法

塔勒布全名纳西姆·尼古拉斯·塔勒布,是黎巴嫩移民,其家庭在黎巴嫩属于名门望族,父母两系都出过不少政府高官,其外祖父和曾祖父都担任过黎巴嫩副总理,家族拥有大片土地和资产,但1975年开始的黎巴嫩内战结束了这一切,年少的塔勒布亲眼目睹了由盛转衰的过程。可能是年少时这段经历的关系,塔勒布便将这种认知转化成了他未来人生的指南。后来他到华尔街担任对冲基金经理,凭借其对不确定性的理解在1987年股灾中对冲美元空头而获得财富自由,其后又分别在2000年纳斯纳克互联网泡沫和2008年次贷危机中因反向操作而获利颇丰。2001年他在发表的“不确定性系列”第一本《随机漫步的傻瓜》中开了一个脑洞:设想有一天飞机可能撞进办公室。而后没过几天,911事件发生,两架飞机撞进纽约双子塔的办公楼里。

nassim-taleb

塔勒布以其独特的视角向人们揭示了一个全新的世界模型,世界充满了不确定性和随机事件,我觉得这一点是非常值得学习和理解的。在这种模型的认知下,那就要考虑随机性下最差的结果会是什么,如果最差的结果是系统性奔溃,那么不管可能的收益多诱人,都要坚决抵制。正如老子所说的“贵大患若身”,首先得惜身,不要动不动就All-in,把全部身家性命都赌上去,那些看上去风光的人物只是在俄罗斯轮盘赌枪口下的幸运儿。在随机性的“黑天鹅事件”里等待机会,同样如老子所说的“祸兮福所倚,福兮祸所伏”,危中有机,只要活得够久,就能等到机会。

具体执行层面,我很认同塔勒布提出的吸收风险的反脆弱方法、“风险共担”和对称性法则这几个建议。首先,关于反脆弱,塔勒布曾在书里举了个健身的例子,他认为最有效和最省时的方法是专注于能承受的最高重量的训练,每次训练以尝试超越纪录一两次为限,而不是把时间花在重复轻松的力量范围内。这种方法映射到塔勒布的观点就是让肌肉吸收重量带来的冲击风险,而我觉得这同样可以对应“学习区-舒适区”的理论:让肌肉在学习区练习,而非在舒适区重复。我尝试了一段时间该方法,果然比之前的方式更奏效。其次,“风险共担”用更通俗的话说就是“责权对等”,对于自己,承担更重的责任才能获取更多的权利,而对于他人,敢于承担风险的人也才能够被信任。最后,对称性法则很重要。在社会交往中,我们不仅要自己做到“推己及人”和“己所不欲勿施于人”,也得当心那些“双标”的人。而在更大的文化层面,要防范“不宽容”的文化,它们会反噬宽容的文化,进而使得文明倒退。

但我对塔勒布的观点也有些不赞同的意见。首先是塔勒布太过于执着他的“黑天鹅”理论,以至于无视概率论。他把很多人类事物都归纳为幂律分布,由于马太效应,诸如财富等确实如此,但还有很多并非如此,比如学历、专家分布等。塔勒布在《非对称风险》中举了个例子说外科医生应该看上去不像外科医生:有两位医生,一位医生外表干练、衣着整齐、办公室显眼位置摆着名校毕业文凭;另一位医生看上去像屠夫、举止粗俗、衣着邋遢、办公室里也没有挂任何文凭证书。塔勒布说如果让他选择给自己手术的主刀医生,他会选择像屠夫的那一位:因为如果一个人看起来不像是干这一行的,却又在这一行干了很长时间,这说明他需要比别人克服更多的困难,也就是说他可能能力更强。初看塔勒布的解释似乎是逆向思维,但他犯了严重的概率性错误。挂出文凭比不挂文凭有就医资质的概率更高,表面注重卫生和细节的人比表面不注重的人实际上做到的概率要高很多,而医生是需要重视卫生和细节的职业。

这个例子也代表了塔勒布的另一种偏见,即对专家的偏见。塔勒布不信任专家,他给专家取名为“白知”。我觉得对于那些打着权威名号寻求“寻租”机会的专家给与此评价无可厚非,但不能谋杀一个行业的所有专家,在专业领域,如果一定觉得民间有高人、专家都不如大众的话,那就有些反智和反常识了。

另外,塔勒布在《反脆弱》中建议吸收风险,以试错来建立反脆弱能力;试错在某些系统成立,但在某些系统也会带来巨大的成本。总之,我觉得塔勒布提供了独特的视角、模型和解决方案,但也过于偏激。这个世界是复杂的,不是一个模型可以解决所有问题。在具体执行过程,还是得应用中国传统的中庸之道:过犹不及。

参考:

  1. 《随机漫步的傻瓜》 纳西姆·塔勒布[著] 盛逢时[译] 中信出版社 2012/06
  2. 《黑天鹅》 纳西姆·塔勒布[著] 万丹、刘宁[译] 中信出版社 2011/10
  3. 《随机生存的智慧》 纳西姆·塔勒布[著] 严冬冬[译] 中信出版社 2012/07
  4. 《反脆弱》 纳西姆·塔勒布[著] 雨珂[译] 中信出版社 2014/01
  5. 《非对称风险》 纳西姆·塔勒布[著] 周洛华[译] 中信出版社 2019/01

只有当你可以自由地做事情,不需要明显的目的、理由和别人的要求时,你才算是真正存在于这世上。 You exist if and only if you are free to do things without a visible objective, with on justification and, above all, outside the dictatorship of someone else’s narrative.

———— 塔勒布《随机生存的智慧:黑天鹅语录》

好奇心周刊第21期: 推理模型的构建与未来

2025-10-28 21:56:00

本文为好奇心周刊第21期,全部周刊参见:周刊系列

前不久,我在北京参加了ML-Summit 2025技术大会,其中有个议题是《推理模型的历史、现在与未来》,演讲者是 OpenAI 的研究科学家 Lukasz Kaiser, 他曾在 Google 工作,是 Transformer 发明人之一,也是《Attention is All You Need》论文的作者之一。他在 OpenAI 主要负责推理模型(Reasoning Models)的研究,是 OpenAI o1 的早期研究开创者。Lukasz 在这次演讲中回顾了 Transformer 的发展历史及当前的推理模型,并推测推理模型可能的未来。听这篇演讲之余,我同时也学习了 Sebastian Raschka 的博客文章 Understanding Reasoning LLMs(《深入理解推理模型》),整理本期周刊,一起了解下什么是推理模型,以及如何构建推理模型。

一、什么是推理模型

推理模型是大语言模型的一种,相对于普通的对话模型,它能够进行多步逻辑推理、中间步骤思考、以及自我验证。有些数学、逻辑、代码等类型的问题需要用到推理能力。比如,像“若一列火车以每小时60英里行驶3小时,它行驶了多远?”这样的题目就需要一定的简单推理。在 OpenAI o1出来之前的大语言模型也能回答这类问题,但答案会比较简单,OpenAI o1、DeepSeek R1 等推理模型能够用推理过程来回答问题。这种推理中间步骤有些模型会显示在答案中,将详细的推理步骤给出。像 DeepSeek 则会将这些中间思考过程呈现在思考过程区域显示给用户,与答案区别开来。而 ChatGPT 则干脆不显示,只显示模型正在思考,可能需要花费一些时间。

在《周刊第16期: Andrej Karpathy 讲 AI》这一期周刊里介绍了 LLM 的训练过程。预训练阶段训练出来的是基础模型,用户场景不能直接使用,需要进行 SFT 后训练成对话模型(如 ChatGPT 的 instruct 模型)。而推理模型则需要进行更进一步的专业化训练阶段,或者称为领域定制化(specialization). 在这个阶段,将面向特定领域场景对 LLM 进行更精细化的调整。而推理模型则是让 LLM 在中间推理步骤的复杂任务中表现出色,以应对数学、编程等复杂推理任务挑战。如下图示。

steps-to-developing-llms

二、什么时候用推理模型

并不是所有问题都需要用到推理模型。一些简单的或是摘要、翻译、或是基于知识的问答任务并不需要用到推理模型,不是因为推理模型回答不了这类问题,而是推理模型在推理时通常计算成本更高,耗时也会更长,而输出内容也相对较复杂,甚至有时还会因为“过度思考”而导致错误。一般来说,推理模型适合数学、编程等逻辑性较强的问题。

三、如何构建推理模型

通过对 DeepSeek R1 论文的解读,以及对 OpenAI o1 的推测,Sebastian 总结了四种构建推理模型的技术。

1) 推理阶段扩展(Inference-time scaling)

一般是在推理阶段通过提示词工程(Prompt Engineering)来实现,比如“思维链提示词”(CoT),在输入提示词中增加让大模型“逐步思考”(think step by step)等词语,鼓励大模型在生成过程中输出中间推理步骤。这种方法往往会在一些需要演算策略等类型问题上奏效,如下图所示:

example-of-classic-cot-prompting

除此之外,还可以采取其他推理阶段的扩展方法,比如让LLM生成多个答案通过投票来选出最佳结果,或采用“集束搜索”(beam search)等搜索算法来生成最优答案。

2) 纯强化学习(Reinforcement Learning, RL)

早在ChatGPT时期,强化学习便被用来作为 ChatGPT 背后 Instruct 模型的训练方法,而 DeepSeek R1 论文中也显示:推理能力可以从强化学习中自发涌现。与 ChatGPT 所使用的“基于人类反馈的强化学习”(RLHF)不同,RLHF 侧重于基于人类偏好来调整 LLM,而 DeepSeek R1 所用的强化学习则设计了另外两种奖励机制:“准确性奖励”(accuracy reward)和“格式奖励”(format reward)。准确性奖励使用确定性系统评估数学类等问题的回答,比如通过LeetCode编译器验证代码类问题的正确性。格式奖励则以来另一个大模型作为评判者,以确保回答符合预期格式,比如将推理步骤放置于 <think> 标签内。

DeepSeek 基于 DeepSeek V3 671B模型,采用纯强化学习训练得到 DeepSeek-R1-Zero 模型,如下图示:

development-process-of-DeepSeek-R1-Zero-model

3) 监督微调与强化学习结合(SFT + RL)

DeepSeek-R1-Zero 并非是 DeepSeek R1 系列性能最好的模型,DeepSeek 在此模型基础上增加了额外的监督微调(SFT)和强化学习(RL),训练得到 DeepSeek R1 模型,如下图示:

development-process-of-DeepSeek-R1-model

DeepSeek 团队先是用 R1-Zero 生成 SFT “冷启动”(cold start, 相当于初始化)数据,用这些数据基于 DeepSeek V3 做指令微调,然后又进行一轮强化学习,在 R1-Zero 使用的准确性奖励和格式奖励基础上,增加了“一致性奖励”(consistency reward),这种奖励机制是为了防止模型在回答中混用多种语言。然后用这种训练出的中间过程模型生成约60万条“思维链”(CoT) SFT 样本数据,另外再用 DeepSeek V3 基础模型生成20万条基于知识的 SFT 样本数据。

这两种共计80万条 SFT 样本数据被用于对 DeepSeek V3基础模型进行指令微调,之后再进行一轮强化学习。在这轮的强化学习阶段,DeepSeek 使用基于规则的方法为数学、编程等问题提供准确性奖励,而对于其他问题则引入人类偏好奖励。最终得到的 DeepSeek-R1 模型在性能上总体超越了 R1-Zero, 如论文中所附的下表所示:

benchmark-comparison-of-OpenAI-O1-and-DeepSeek-R1-models

4) 监督微调(SFT)与知识蒸馏(Distillation)

DeepSeek R1 系列还发布了一系列通过所谓“蒸馏”(distillation)训练得到的较小模型。蒸馏的方法就是用大型模型(如 DeepSeek V3 671B)生成的SFT样本数据,对较小的模型(如 Llama 8B)进行指令微调。DeepSeek 蒸馏模型所用的 SFT 数据如上述 R1 所用 SFT 数据一致,即 DeepSeek R1 中间版本模型生成的60万思维链数据和 DeepSeek V3 生成的20万知识数据。只不过不是基于 DeepSeek V3 而是在 Llama 3 和 Qwen 2.5 上训练,得到 DeepSeek-R1-Distill-Qwen-32B、DeepSeek-R1-Distill-Llama-70B 等蒸馏模型。如下图示:

development-process-of-DeepSeek-R1-Distill-models

蒸馏模型性能虽然不如 DeepSeek R1,但是相比 R1-Zero,性能却要好很多。而且模型参数相对较小,运行成本也更低。

benchmark-comparison-of-distilled-versus-non-distilled-models

四种训练方案小结

简要回顾下这四种训练方法。第一种推理阶段扩展无需额外训练,在推理模型实际应用中都或多或少有使用,只不过会显著提升推理成本。而后三种训练方法在 DeepSeek R1 系列模型的训练都有体现。纯强化学习能够让大模型出现推理能力的涌现,这中方法被用来构建 R1-Zero, R1-Zero 不仅用来验证强化学习的效果,也被用来生成 R1 的冷启动数据。监督微调+强化学习的结合是训练推理模型的首选方案,这种方法也被用来构建 DeepSeek R1 模型。而蒸馏方案则用来构建较小的推理模型,适合低成本场景。

development-process-of-deepSeeks-three-different-reasoning-models

四、推理模型的未来

在了解了推理模型的构建过程后,可以看到,强化学习是大模型涌现推理能力的关键;而强化学习和 SFT 结合,可以得到性能更强的推理模型。Andrej Karpathy 说“强化学习很糟糕,但其他方法更糟。”在当前阶段,强化学习虽然存在一些效率问题,但却是让大模型学会推理决策的最优方法。

回到 Lukasz Kaiser 的演讲议题《推理模型的历史、现在与未来》,其英文原名是 Reasoning Models: What’s Great and What’s Next? . Lukasz 回顾了 Transformer 的历史,在 Transformer 之前,AI 业界研究的是循环神经网络(RNN),它无法并行处理词语序列,记忆力有限,Lukasz 形容它就像是一只在词语序列上行走的蜗牛。而 Transformer 的诞生解决了这严重的效率问题,它就像一只把过往知识都背在壳里的蜗牛,通过并行处理和注意力机制,极大的增强了模型的性能。

不过面对数学、编程等复杂任务领域,仅依赖记忆是不够的,还需要学习推理策略。这就是推理模型要解决的问题。演讲中举了个例子,问旧金山动物园几点开门?Transformer 模型的做法是在训练时记住了所有动物园的开门时间(信息可能会过时),而推理模型则是学会了查询搜索引擎的策略能力,调用搜索引擎并分析查询结果而给出答案。从 Transformer 到推理模型是从“知识记忆”到“方法学习”的本质转变。

为了与 Transformer(转换器)对应,Lukasz 把推理模型叫作“Reasoner”(推理器),而他预测推理模型的下一个进化方向便是 “Researcher”(研究器)。关于这个 Researcher, Lukasz 是这样描述的:“想象一下,一个模型不再是单一的思考者,而是能够并行启动成千上万个‘思维线程’的庞大研究系统,它能从任意信息中学习,而不仅仅是那些我们能够事先验证的数据。”这并非空想,实际上,Lukasz 的 OpenAI 同事已经在刚发布的 GPT-5-Pro 上验证,他选取了一篇今年的数学论文,使用 GPT-5-Pro 尝试解决其中一个明确且尚未解决的开放问题,17分钟后,GPT-5-Pro 给出了证明,且比论文中的方法更优。

我并非AI或大模型专家,在这里仅将学习 Sebastian Raschka、Lukasz Kaiser 的博客和演讲做个笔记总结。至于推理模型的未来是否如 Lukasz Kaiser 所预言,我不得而知。而至于未来的推理模型应该怎么构建,我就更不得而知。我只是隐隐约约地联想到强化学习之父 Richard Sutton 在《苦涩的教训》一文中的观点:人们总是试图为AI构建逻辑规则,这种方法在短期内常常有效,而看起来相当“聪明”,但当计算能力提高、数据增多、学习算法更强时,依赖数据和学习的通用方法总能超越人类的“聪明”设计。我们应该从痛苦的教训中学到,通用方法的力量是巨大的,那是随着计算量的增加而持续扩展的方法。目前看来能够无限扩展的两种方法是搜索和学习。

参考

  • Understanding Reasoning LLMs, Sebastian Raschka, 2025/02
  • 《万字解密ML 2025大会首日最强思辨现场》 CSDN, 2025/10
  • The Bitter Lesson, Richard Sutton, 2019/03

我思,故我在。

—— 笛卡尔