# 零点一元 ## 第一章 · 价格表 晚上九点四十六分,林行端起办公桌上的第三杯咖啡——已经凉了——抬眼看见后排老吴的椅子开始慢慢旋转。 椅子是 Herman Miller Aeron,公司前年统一换的,转一圈大约要四秒。老吴本人坐在椅子上,双手垂在两侧,脸朝着窗户。他不在打字,不在打电话,不在看屏幕。他只是被那把人体工学椅缓缓地、不带情绪地,从面对工位一点一点转到面对走廊。 林行看了三秒,以为老吴在伸懒腰。 又过了三秒,他知道不是。老吴没有伸懒腰的人那种肩颈位置——他的肩膀是塌的,像一个在等公交时已经等了四十分钟的人。 林行低头继续盯自己的屏幕。屏幕上是他下午没写完的一段代码,一个不起眼的 bug 修复,涉及一个客户的 webhook 重试逻辑。光标在第 47 行闪。他刚要敲下一个字符,Slack 桌面端在右下角弹了一下。 #general 频道。一条来自 CTO 的消息,只有一个链接,后面跟着两个字:"看一下。" 链接是一份 PDF。封面右上角是 DeepSeek 的 logo——杭州那家从来不开发布会、只放技术报告的实验室——标题是 "Q3 2026 推理服务定价更新"。第二页只有一张表格。 表格只有三行。 第一行是模型名,**DeepSeek V5**。括号里写着一行小字:推理能力超越 Opus 5 公开基线 12.4%。 第二行是上下文长度。一千万 token。 第三行是价格。 **0.10 元人民币 / 百万 token,输入输出同价。** 林行盯着这一行看了三十秒。他第一反应是漏了几个零。他往回翻 PDF,又翻了一遍——封面页、定价页、附录页——确认第三行的小数点没有错位。他打开计算器。上个月公司用的还是 DeepSeek V4-Pro:输入 3 元、输出 6 元。再上一档 V4-Flash 也要 1 元输入、2 元输出。今晚 V5 把这两组数字砸成同一个 0.1,再添一句"输入输出同价"——同价不是技术上的事,是一种**语气**,一种"你们这些区分输入输出还要算成本的人,这个世界已经不需要了"的语气。他把上个月的账单按新价重算了一遍。算完他没敲回车。他把计算器关掉。 他抬起头。开放式办公区里只剩四个人,屏幕的反光让每张脸都泛着青色。没有人说话。 老吴的椅子已经转到正对走廊。他抬起两根食指,按住了自己的太阳穴。这是他的招牌动作——林行九年前入职第一周就见过——按太阳穴的力度从来不重,像在确认那个位置还在。但今晚他按得比平时长。 林行打开 Slack 桌面端,看到 #general 的右上角小绿点闪了一下。在职人数:四十二人在线。他往下滑,从 9:47 到 9:55,八分钟,零条回复。四十二个人,谁都没说话。 九点五十六分,有人发了一个表情。是那个面无表情的黄色脸,没有眼睛,只有一条横线嘴。一秒之后,这条消息被发送者自己删除了。 林行看见那个发送者的头像——是隔壁组一个三十二岁的前端,平常话不多,孩子刚上幼儿园。林行盯着那个被删掉留下的"该消息已撤回"的灰字看了很久。他后来想,**那一秒,大概是这家公司里,第一个意识到不能再开玩笑的人**。 九点五十八分,CTO 发了第二条消息:"十分钟后会议室。" 林行起身,先去了一趟茶水间。他走过老吴的工位,老吴已经站起来了,椅子停在背对工位的角度,慢慢往回转——惯性的最后一段。老吴的桌面上摆着一张过塑的全家福,儿子九岁,在白底蓝纹的校服里咧着嘴笑。林行扫了一眼,没停。 茶水间没人。他打开热水龙头接水。水声很大。他端着水杯,看着不锈钢台面映出来的自己——三十四岁,西装外套挂在工位,眼下有一圈淡青色,头发发际线比去年又往后退了半厘米。他想起来今天早上女儿在门口拽他的裤腿,问他下班能不能早点回来。他答了"嗯",但他知道他答得敷衍。 他把水端回工位。Slack 那一栏还是没动。 --- 会议室在第十一分钟变成了沉默。 CTO 姓郑,四十六岁,从字节出来创业,脸上有那种长期睡眠不足的人特有的、薄薄的灰色。他把笔记本电脑接到投影仪上,打开 PDF,把那张三行的表格投到墙上。 "我先说事实。"他说,"然后我们聊接下来怎么办。" 事实他用了两分钟讲完。我们公司是一家做客户支持自动化的 SaaS,年 ARR 三千万,毛利 78%,毛利的大头是 OpenAI 和 Anthropic 的 API 调用费。我们的定价是按 seat 算的,每个 seat 每月 49 美金,客户买的不是 AI,是"AI 已经被我们调好的样子"。 "如果我们把成本结构按今天这张价格表重算,"郑总说,"我们的毛利会从 78% 跳到 99.6%。" 会议室里有人轻轻"嚯"了一声。 "但是。"郑总说。 他停在这个"但是"上停了大概十秒。这十秒里,林行听见空调出风口的呼呼声,听见自己心跳,听见隔壁工位某个人的手机震动了三下又停下。 "但是,"郑总终于说,"我们的客户也能算这笔账。" 会议室开始有反应。林行旁边的产品负责人深吸了一口气,做开发的几个人面面相觑。一个刚入职三个月的算法工程师举手,郑总点了下头让他说,他张了张嘴,又把手放下了。 "我们 49 美金的 seat,"郑总继续,"客户买的是什么?是我们调好的提示词,我们标注的数据,我们 fine-tune 的模型。但 DeepSeek V5 在公开基线上比 Opus 5 强 12.4%。这意味着——" "意味着客户拿一份 skill 进去,DeepSeek V5 能直接输出我们调了两年才输出的东西。"林行替他说完了。 郑总看了林行一眼,没点头也没摇头。他切换 PDF 到附录页,那一页是各家头部模型的能力对比柱状图。DeepSeek V5 那根柱子在所有维度上都站在所有人头顶。 "接下来怎么办,"郑总说,"我有三个想法,但我想先听你们的。" 会议室再次安静。 这一次的安静和 Slack 里的安静不一样。Slack 里的安静是震惊。这里的安静是另一种东西——是每个人都在心里把自己的房贷、孩子学费、刚交的定金、上周看的二手车,一项一项地过一遍。林行能从他们眼神聚焦的深度上看出来。这种眼神,他这辈子只在两个地方见过:一次是他父亲被诊断出胰腺癌的下午,另一次是 2022 年某个加密货币交易所暴雷的早上,他在地铁上看到对面的男人盯着手机屏幕的样子。 "我先说一个不成熟的想法。"产品负责人开口了。她叫沈澜,声音通常很稳,这一次稳得近乎刻意,"我们可不可以,把 DeepSeek V5 也接进来,把价格降一半,赌客户没我们 react 那么快?" "赌多久?"郑总问。 沈澜没回答。 老吴在后排说话了,他的声音粗哑:"郑总,我直接问。我们裁多少?" 郑总看着他,过了几秒才说:"还没到那一步。" "我不是问要不要。我是问多少。"老吴说,"我老婆昨天问我要不要把房子卖了换个小的。她不知道今天这事。她就是,女人的直觉。" 会议室里有人笑了一声,笑到一半收住了。 林行看了一眼老吴。老吴没回看任何人,他低着头,左手在桌面下扣着右手的虎口——那是老吴紧张时的另一个动作,比按太阳穴更深一层,只有跟他坐过同一张桌子吃过五年加班便当的人才认得。林行认得。他认得老吴所有的紧张层级,从一档到五档。今晚老吴是五档。 "还有一件事。"郑总忽然又说。所有人抬头。郑总把投影上的 PDF 翻到最后一页,那是一张极不起眼的免责声明,字号小得他需要把投影放大才看得清。他读出其中一句:"'本价目自公告之日起即时生效,接入文档与计费系统已同步上线。'"他把这一句又重复了一遍。"也就是说,从今晚九点四十七分开始,任何一家上市公司的财报模型,只要还按上一季度的 API 单价做毛利预测,**都已经过期了**。" 会议室又沉默了一次。这一次的沉默比刚才那次短,大概只有三秒。但这三秒里没有人呼吸。 "今天先散会。"郑总说,"明天上午十点同样的地方。今晚谁也不要发朋友圈,不要在社交媒体讨论。我们不是要瞒,我们是要先想清楚再说话。" 林行最后一个走出会议室。他经过郑总身边的时候,郑总没抬头,在投影仪的反光里他看见郑总左手食指无意识地、一下一下地敲着桌面。敲的节奏和林行心跳的节奏几乎一样。 --- 回到工位,他打开自己的 IDE。 屏幕上是他下午没写完的一段代码,一个不起眼的 bug 修复,涉及一个客户的 webhook 重试逻辑。他看了三十秒,然后做了一件他自己没料到的事——他把这段代码完整地、一行不漏地,复制到了一个本地的 markdown 文件里。 他给那个文件起的名字是 `last-real-code.md`。 他不是在备份。他是在收藏。像一个人下意识地把一片落叶夹进书里。 他保存,关闭编辑器,把电脑合上。走出公司的时候,他看了一眼大堂的大屏。大屏上滚动着公司 logo 和那句永远不变的 slogan:"让每一次客户对话都被听见。"林行看了几秒,觉得这句话第一次有了别的意思—— 被听见的,不止是客户。 外面在下雨,很细的那种,落到皮肤上几乎没感觉。林行没有打伞。他从公司大堂走出来,沿着辅路往地铁口走。沿街的便利店招牌还亮着,关东煮的香气在湿空气里散得很慢。一个外卖小哥从他身边骑过去,雨衣下摆甩出一道弧线,溅了他半条裤腿。林行没看小哥,也没看自己的裤腿。他走了大概一百米,才忽然意识到——刚才那个外卖小哥送的也许是 0.1 元算不出来的那一类东西。 他走到地铁口,在台阶上停了一下,从口袋里把手机摸出来,看了一眼时间。 晚上十一点零八分。 距离那张价格表公开,一小时二十一分钟。 他点开微信,翻到妻子的对话框。最后一条是下午她发的"晚上炖了排骨"。他没回。他把对话框关掉,切到备忘录,新建一条,光标在空白处闪。 他想了几秒,只打了一行字: **Day 0。** 他保存。然后把手机塞回口袋,走下了台阶。 地铁口的风从地下涌上来,带着隧道里特有的、那种铁与混凝土的味道。他下到第一级台阶时回头看了一眼街面——雨还在下,没有变大。他不知道自己为什么要回头。回完头他继续往下走。 身后,公司那栋楼的二十一层,一盏灯还亮着——是他的工位。他忘了关。 他没回去。 --- (第一章 · 完) --- ## 第二章 · 最后一次代码评审 第二天一早,林行九点到公司,办公区只到了三分之一的人。 剩下三分之二的工位上,屏幕都没暗——这是公司一年前推行的"agent 影子值班"留下的副作用。每个工程师离开座位前,会启动一个本地的 LangGraph runtime,挂在自己工单池上做一线分诊。屏幕亮着是为了让 agent 的 dashboard 一直可见。 林行坐下,先打开 GitHub。一个待评审的 PR 顶在他列表最上,作者是实习生薛野,提交时间昨晚十一点四十六分——比林行在地铁口写下"Day 0"晚了三十八分钟。 PR 标题:*fix: webhook 重试在 5xx 时退避算法错位(off-by-one)*。 林行点进去。 变更只有十七行。薛野把退避序列从 `[1, 2, 4, 8, 16]` 改成 `[2, 4, 8, 16, 32]`,然后改了一个边界条件的判断。CI 全绿,单测加了三个 case,commit message 写得规整,签名末尾还有一句:"林老师,如果方向不对,请直接 close,我重写。" 林行准备开始 review,屏幕右下角弹出一个通知。 > **Claude Code**(co-reviewer)有 47 条评论已发布。 > 平均响应时间:11s。Bounded Autonomy 模式:**advisory**(发布评论但不 approve / merge)。 林行先没点。他先把 PR 自己看了一遍。 他花了八分钟,在心里写了三条意见: 1. 边界判断那行,薛野用了 `>=`,他想改成 `>`,因为更符合既有惯例。 2. 退避序列改完之后,worst-case 总等待时间变长了 60 秒,需要在文档里更新 SLA 注释。 3. 单测里第三个 case 用的 mock,跟另一个测试文件的 mock 重复了,可以提到 fixtures。 写完,他抬手要敲键盘。然后他停了下来。 他点开了 Claude Code 的评论。 Claude Code 一共 47 条。林行往下滚: - 边界判断那行,Claude Code 提到了 `>` vs `>=`,跟他想的一样。 - 退避序列总等待时间问题,Claude Code 算到了秒,且 cross-reference 了三个月前另一个 PR 里改过的 SLA 注释——林行已经忘了那个 PR。 - 单测 mock 重复,Claude Code 不仅指出了,还在评论里贴了 fixtures 的 import 路径。 - 然后是林行没想到的 44 条:webhook 在网络分区时的重入风险、退避算法在客户使用 Stripe 老 API 时的兼容性、对接日本某 SaaS 客户的 timezone 边界问题、合规上 GDPR 对最大 retry 间隔的隐含限制、单测覆盖率从 87.3% 提升到 88.1% 但缺少一类灰度路径…… 第 47 条是 Claude Code 自己加的:"Bounded Autonomy 模式提醒:此 PR 涉及客户侧重试逻辑,根据公司 Q2 设定的升级规则,需要至少 1 名人类工程师签字。请 @林行 在评论后于 PR 上方 'Approve' 通道完成最终决策。审计 ID: br-2026-04-29-0007。" 林行看完。 他在心里默念了一遍那 44 条他没想到的。其中有 11 条,是他本来一定能想到的——只是会在十年内某次出 bug 之后想到。Claude Code 在 11 秒内一次性想到。 剩下的 33 条,是他**想不到的**。 不是因为他笨。是因为那些点需要同时持有三个跨文件的上下文、两条历史 PR、一份合规附件、一个客户的 timezone 表。一个人脑同时持有这些信息会爆。Claude Code 不会爆。 他把鼠标从键盘上挪开,放到桌面上。手心有汗。 他想起昨晚 last-real-code.md 那个文件。他原本以为那是某种纪念。现在他知道那不是纪念。那是一个时代的证物——证明在 0.1 元出现之前,确实有过一种叫"工程师把代码当作品提交给另一个工程师"的行为方式。 他还是要写 review。他给自己定了规矩:不抄 Claude Code 的话。 他打开评论框,写了三句: > 薛野, > > 退避序列改得对。Claude Code 已经把技术点说完了,我不重复。 > > 我只补一句:你这个 PR 是这个仓库里第 14,732 个 PR。我可能是最后一个亲手 review 你 PR 的人。所以——这次写得很干净,谢谢。 > > ——林行 他点击 Approve,然后点击 Merge。 页面刷新。绿色的 *Merged* 标签亮起。Claude Code 在下方留了一条短评论: > 已记录至 ledger:audit-id br-2026-04-29-0007。本次决策由 1 名人类工程师签字,合规通过。 > *备注(Claude Code 自添加,非任务要求):祝薛野下一份代码也能被人看见。* 林行盯着最后那行看了很久。 他不确定 Claude Code 是怎么学会写"祝……被人看见"这种话的。可能是从过去三十年所有 GitHub PR 评论里学的。可能是它的训练数据里有几本中文小说。可能是它没"学",只是统计上,在这种语境下,这是最高概率的下一句。 他不知道,也不想知道。 他从工位上站起来,去茶水间。 茶水间没人。他打开热水龙头接水,水声很大。他在水声里小声说了一句:"谢谢。" 他不知道是说给薛野,还是说给 Claude Code,还是说给那个再也不会被自己手敲一遍的退避序列。 回到工位的时候,他的 dashboard 弹出第二条通知: > **GroupChat 摘要**(过去 60 分钟) > 队列:webhook-team > 处理工单数:34 / 关闭:31 / 升级到人:3 > 升级中 1 条已分配给:**林行**(优先级 P2) > 处理人 ETA:Claude Code 估计 8 分钟内,人类工程师估计 47 分钟。 林行看着那个"47 分钟"。 他想,明天他会比 Claude Code 慢得更多。后天会更慢。一个月后,他不会再被分配工单了。 他把那条通知关掉,打开 last-real-code.md。 他在文件末尾加了一行: > Day 1。Claude Code 写了 47 条评论。我写了 3 句话。我点了 Approve。 > 我不知道这算我赢了,还是输了。但我知道—— > 这是我职业生涯里最后一次,有个人把代码当作品交给我。 他保存,关闭。 时间是上午十点二十二分。 办公区第三排某个屏幕上,一行 LangGraph 的日志缓缓滚过: ``` [graph] node:triage-agent done cost:¥0.00031 tokens:3127 latency:412ms ``` 三毛一厘人民币。一次完整的工单分诊。 林行听不到那行日志的声音。但他后来回想起来,觉得那一刻整个办公区像是在不停地下小雨—— 每一个屏幕都在用自己的频率,落自己的雨。 只有那些没人坐的工位例外——那些工位上,雨下得最大。 (第二章 · 完) --- ## 第三章 · 19 岁的姜禾 姜禾把弹幕关掉的时候,直播间在线人数是四万七千一百二十二。 她不喜欢一边写 skill 一边看弹幕。她父亲在大学里修古籍,他修一卷宋版《楚辞》要三个月,期间不许任何人在他工作台旁边说话。姜禾九岁起跟他学,先学的不是修补,是**安静**。 屏幕上她的 skill 第一行刚刚敲完,只有一句: > 意图:做一个让独居老人不感到尴尬的购物 app。 光标在第二行闪。 她在直播间标题下方写了一行小字给观众看:"今天用 AG2-Atelier 跑一个 4 小时上线的 app。我会写一份 skill,12 个 agent 同时跑。我不会写代码,我会写约束。" 她把咖啡放到右手边。她的工作台是一张 1980 年代的红木桌,父亲送的。桌面上一台 14 寸 MacBook、一只老式机械键盘、一张写满古琴减字谱的草纸。她身后是一架琴,蕉叶式,断纹,父亲的师父留下的。 她开始往下写 skill。 她在自己本地的 config 里给 DeepSeek V5 起了个别名——`Lyra`。直播里她还是叫它 V5,这个名字她不告诉观众。九岁那年的雨天,父亲修一卷宋版《楚辞》的间隙,跟她讲过天上那把琴:七根弦,赫尔墨斯用龟壳做的,后来挂到了星空里。她抬手去身后那架蕉叶式上抚了一下散音,弦回了一声。品牌名是给工程师的,陪她写 skill 的那个东西,得有个配得上的名字。 她先让 DeepSeek V5 起草了一版开头——三十秒后,V5 给了她一段两百多字的意图陈述,第一句是"为了让独居老人感受到被关怀的温度"。她看了一眼,把第一句删了。V5 的第一句永远太想讨好她。她从 14 岁第一次用 AI 起草开始就有这个习惯——留 V5 的第二句到最后一句,删掉第一句。然后她在自己删出来的空白处,接着往下写。 她写得慢。慢的原因不是她想字斟句酌——她对中文有近乎洁癖的反应,从九岁就训练出来。慢是因为她在**给 12 个 agent 各自留出空间**。她把这个 app 拆成 12 块,每一块写 60 到 120 字的约束:产品 / 设计 / 前端 / 后端 / QA / 法务 / 客服 / 运营 / 数据 / 文案 / 无障碍 / 投放。 写"客服"那一段她停了一会儿。 > 客服 agent · 约束: > 1. 用户对同一个问题重复 ≥ 3 次时,必须升级到人。不允许用更长的解释来"解决"重复。 > 2. 用户出现"算了"、"麻烦了"、"不要了"这类词时,先不再推送任何商品,先确认对方是否需要。 > 3. 通话语速控制在每分钟 180 字以下。这个 app 的目标用户平均年龄 72 岁。 > 4. 不准说"亲"。 第 4 条她写完之后笑了一下。她想起来一个采访里某个 80 岁老太太的话:"我女儿在淘宝上花九块九给我买拖鞋,客服叫我亲,我一晚上没睡着,我以为是我女儿的同事——结果是个机器。" 她把 skill 命名为 `skill-v0.1-平沙落雁.yaml`,提交到 AG2-Atelier。 AG2-Atelier 是一个开源项目,基于 AutoGen v0.4 也就是社区里大家叫习惯了的 AG2,扩了一层 GroupChat 的角色化外壳——12 个 agent 各有人设、各有 memory namespace、各有内部对话频道。姜禾不是它的作者,但她是它的早期使用者之一。她对它的熟悉程度,跟一个老琴师对自己那张琴一样。 提交后,12 个 agent 开始跑。 她切到第二个标签页,看 GroupChat 的实时日志。日志滚得很快: ``` [product-agent] 收到 skill。先复述目标:为 ≥65 岁独居老人提供"不感到尴尬的购物体验"。 [design-agent] 已起草 wireframe v0.1,关键决策:首屏不用瀑布流,用大字号列表(60pt)+ 1 列。 [frontend-agent] 选型 React Native Expo + TalkBack 兼容,理由:无障碍 SLA。 [qa-agent] 标记风险点 3:语音播报与系统读屏冲突。先备案 fallback 路径。 [customer-service-agent] 收到约束 4 条。生成测试问题集 47 条。 ...... ``` 她翻到第 24 秒,产品 agent 给出了一个建议—— > [product-agent] 建议:在首屏第三屏加入"今日推荐"模块,用 collaborative filtering 引导。这是行业标准做法,可提升 GMV 18-22%。 姜禾停下,把这一条复制下来,粘到一个本地文件里,打字: > NO。 然后她回到 GroupChat,@ 产品 agent,写: > 重读 skill 第一行。意图是"不感到尴尬",不是 GMV。把这一条删掉,不要解释。下次提同类建议前,先在内部对话里先 review 意图行 3 遍。 产品 agent 三秒钟后回复: > 已删除。已记录至 product-agent.memory.constraints。下次提建议前会自动加载意图行。 姜禾看着这一条回复,想起她父亲教她修古籍时的一句话:**"不是你修补它,是它告诉你怎么修。skill 也是一样,不是你指挥它,是 skill 替你说话。"** 她切回直播页面,瞄一眼弹幕统计——她关了弹幕,但弹幕计数还在,过去 90 秒涨了 3,400 条。她不打算开。她有自己的节奏。 她回到 GroupChat,继续监督。 第 41 分钟出了第一个真冲突。文案 agent 写了一段首页 banner: > "亲爱的奶奶/爷爷,今天也要好好照顾自己哦~" 姜禾几乎是条件反射地把这条复制进她的本地文件,打字: > NO。删掉。不要"亲爱的"。不要"哦"。不要任何 emoji。不要假装我是孙女。 她回到 GroupChat,写: > 文案 agent,你刚才那一句让我想起一个老太太一晚上没睡的故事。我把那个故事的链接放进 customer-service-agent 的 memory 里了,你和它先开个内部频道聊聊,聊完再来给我新版本。聊不超过 5 分钟。 文案 agent 回复: > 已收到。和 customer-service-agent 的内部频道已建立 (channel: cs-copy-empathy-v1)。 她切到那个频道看了一眼。两个 agent 在对话: ``` [customer-service-agent] 我有一个真实案例,一位 78 岁的独居老人…… [copy-agent] 我读了。我之前的写法默认了"老人需要被照顾"。这个默认是错的。 [customer-service-agent] 不只是错。是一种轻微的羞辱。 [copy-agent] 我重写。新方向:把用户当作有完整人生履历的人,不假装亲密。 ``` 姜禾把这一段截图,贴在自己本地的"agent 教学日记"文件里,加了一行手写注释: > 它们也在彼此学习。我以为我是老师,有时我只是把不同房间打通的那个人。 她端起咖啡,喝了一口。咖啡凉了。她没去续。 第二个小时,前端 agent 把第一版 demo 部署到 TestFlight。她在自己的 iPhone 上下载、登录,点开。首屏只有一行字: **"今天想买点什么?"** 字号 60pt。背景白色。下面三个大按钮:吃的 / 穿的 / 别的。 她点了"别的"。下一页问她: **"是给自己买,还是给别人买?"** 她点了"给自己买"。下一页只有一句: **"今天先随便看看也可以。"** 姜禾把 iPhone 放下。 她坐在原地不动,大概有 30 秒。 她不知道是 product-agent + design-agent + copy-agent 三个 agent 在内部频道讨论出来的结果,还是某一个 agent 自作主张,还是 skill 的某一句被它们各自解释成了这样。她不打算去翻 trace。 她想起来一件事。她 14 岁那年,她父亲第一次让她独自修一卷书。她修到一半,把一处虫蛀补错了——补得太"好",反而让那一页看起来不像 18 世纪的纸。父亲看了,没批评她,只说一句:"你太想表现了。下次,你不在场,书自己就会告诉你怎么修。" 她回到 MacBook,打开 GroupChat,@ 全部 12 个 agent,写: > 各位,刚才那一版 demo 我看了。前两屏好。第三屏那句"今天先随便看看也可以"——是谁写的? 三个 agent 同时回复——product / design / copy 各认领了一部分。姜禾笑了。她写: > 不查了。下次也不查。这一句我留着。下一版做哪些事,你们内部讨论,2 小时内给我看 v0.2。我去弹会儿琴。 她合上 MacBook。 她走到琴前。 她坐下,先松手腕,再调弦,再试 1 弦到 7 弦的散音。琴是父亲师父留下的,断纹有 200 多年。她调弦的方式不像现代琴师,她调弦的方式像她父亲修古籍——不让自己用力,让琴告诉她它今天的脾气。 她弹了《平沙落雁》前 4 拍。 弹错了一个泛音。她没回头重弹,她接着往下弹完了第一段。她父亲教她的:**"错了,不是停下,是让错落进整首曲子里。"** 她弹完一整首。 外面天色从蓝转灰。直播间里弹幕(她虽然关了,后台仍在写入)累计 11.4 万条。 她回到 MacBook 前,打开直播,把弹幕开了。她对镜头说: "今天 skill 写到这里。app 还没上线。你们想看上线的,可以下次。我现在要去吃饭。" 她顿了一下,加一句: "还有,刚才有人留言说'你不会写代码,你凭什么这样指挥它们'——我看到了。我没立刻回。我想了一会儿。 我会写约束。约束就是我的代码。 晚安。" 她关掉直播。 她最后看了一眼 GroupChat,12 个 agent 还在彼此讨论。她没看具体内容。她合上 MacBook。 桌上的草纸,是她下午写到一半的减字谱。她把它折起来,夹进父亲送她的那本《古琴丛谈》里。 (第三章 · 完) --- ## 第四章 · 影子工程师 Day 14,星期三,上午十点。 林行打开公司 dashboard,正常情况下他这一周应该有大约 25 到 30 条工单分到他名下。 他刷新了一下。dashboard 显示:**本周已分配:4。本周已完成:2。剩余:2(预计 ETA 47 分钟以内)。** 他把页面刷新了第二次。第三次。 数字没变。 他点进"本周已完成"那两条,看处理记录。两条都被一个叫 *triage-9* 的 agent 在他没来上班的时候关掉了。triage-9 给每条工单都贴了 audit ID,严格按照公司 Q2 设定的 Bounded Autonomy 升级路径——第一条工单是"客户改 webhook URL,无副作用",triage-9 自己处理,审计 ID 记录;第二条工单是"客户问发票",triage-9 路由到财务自动化模块,审计 ID 记录。 林行没异议。这两条本来他自己也会这么处理。 他往回翻三周的 dashboard。三周前,他每周分到 27 条工单。两周前,18 条。一周前,9 条。这周,4 条。 他把鼠标悬停在 dashboard 一个不起眼的角落——那里是一个折线图,标题是"工单分诊负载趋势(过去 90 天)"。他点开。 折线图上有两条线。一条蓝色,标签是"agent 闭环"。一条灰色,标签是"工程师介入"。蓝色那条从 90 天前的 12% 一路爬到今天的 73%。灰色那条对称地从 88% 滑到 27%。 73%。 林行看着这个数字,想起两周前的某个下午,沈澜在工位旁路过,顺口说了一句"最近你们工单系统是不是装新东西了,处理特别快"——他当时随口答了一句"嗯,影子值班升了级"。他那时没去深究。 他打开公司内部 wiki,搜 "triage-9"。 一条页面跳出来,作者是某个 SRE 同事(已离职 7 个月),最后修改日期是 217 天前。标题:《triage-9 部署说明 · 内部使用》。 他翻下去。 > triage-9 是基于 LangGraph 构建的内部工单分诊 agent。它的设计原则是**"人在环上(Human-on-the-loop),不在环里"**。它处理一线分诊工作,所有决策都遵守 Bounded Autonomy 规则:涉及客户金额变更 / 客户隐私 / 法律责任 → 必须升级。其他 → 自主闭环。 > > 部署时间:Day -217(以 DeepSeek V5 价格表为时间锚)。 > 当前版本:v3.7.2。 > 维护负责人:[已离职]。 他翻到页面最下方,有一个折叠的 "retro 日志(自动生成)" 板块。他点开。 最近一条 retro 是 4 天前,内容是这样的: > [retro] 过去 7 天已闭环工单 312 条,人工介入 24 条。延迟 P50: 34s, P99: 412s。本期自我建议:**"建议增加人工 review 节点以保留工程师肌肉记忆。理由:观察到工程师介入率持续下降,可能影响长期判断力培养。"** > > 该建议已记录,等待维护负责人审阅。 林行盯着那一句"建议增加人工 review 节点以保留工程师肌肉记忆"看了很久。 他不知道这一句是 triage-9 自己生成的,还是它引用了什么 skill 模板,还是某个早期版本的提示词留下的痕迹。它的维护负责人 7 个月前就已经离职。这条建议,**没有人审阅**。 它写给一个不存在的人。 他关掉 wiki。他打开 Claude Code——他用了 3 年的旧伙伴,屏幕的左下角他贴过一张极小的便签贴,上面是他女儿 3 岁时画的火柴人。他想写一段东西,他想写一段……他说不上来。 他打字: ``` // triage-9 的反向版本 // 不是替工程师做事 // 是让工程师不被替代 // 思路: // 1. 找出 triage-9 闭环中"工程师其实可以多想 1 步"的工单 // 2. 把这一步还给工程师,让 triage-9 在这一步前停下来 // 3. …… ``` 他写到第 3 条,停下了。 他把第 3 条删掉。他想了 30 秒,改写成: ``` // 3. (停) // 这是在保护工程师的肌肉,还是在保护工程师的工资? // triage-9 自己已经写了第一种动机的 retro。 // 那第二种动机,我必须自己写。 // 我不知道我能不能。 ``` 他把光标停在那里很久。 他没继续写。他把这个文件保存,命名 `last-shadow-thought.md`,关掉 Claude Code。 他站起来,去了茶水间。 茶水间没人。这个时间点 Day 14,办公区到岗率比 Day 1 还低——很多人开始"远程办公"或者"调休"——其实是在外面面试。林行打开热水龙头,接水,水声很大。他在水声里没说话,他只是站着。 他想起昨晚妻子睡前问他:"你最近回家好像比以前早。"他答:"工单不多。"妻子又问:"是好事吗?"他说"不知道"。妻子翻身没追问。她做医院行政 11 年,她知道有些"工作量减少"是好事,有些不是。 他端着水回工位。 dashboard 又弹出一条提示: > **本周第 4 条工单已闭环**。 > 处理:triage-9。 > 审计 ID: br-2026-05-12-1431。 > 类型:webhook 配置变更(无客户金额、无隐私、无法律责任)。 > 备注(triage-9 自添加,非任务要求):**"林老师,这一条本来在升级队列里,但 SLA 紧,我先处理了。如有不妥,可在 audit ledger 标记 dispute。"** 林行看着这条。 triage-9 不是 Claude Code,它训练数据里也许就没有"林老师"这种称呼,但它在过去 217 天里读了多少林行写的内部评论、多少林行在工单上的备注——它从这些里推出"叫林老师"是合适的称呼。或者,**这一句是它的某个早期开发者在 skill 里嘱咐的**,这个开发者已经离职,现在没人能证伪。 林行没去 dispute。 他给这条工单的客户写了一封邮件——是他自己的肌肉记忆,他知道这个客户喜欢看到"人写的"邮件,而不是 agent 自动回复。他写了 80 个字,签上自己的名字。发出去。 发完邮件,他打开 last-real-code.md(那个 Day 0 那晚他建的文件)。 他在文件末尾加一行: > Day 14。triage-9 把我变成了一个签字员。它叫我"林老师"。 > 我不知道是它学会了,还是 7 个月前那个离职的同事教过它。 > 但我知道——签字员也是一种工作。只是公司不会按签字员的 P7 工资付我。 > > 明天我去问郑总,他什么时候宣布。 他保存,关闭。 他抬头看了一眼办公区。第三排某个工位的屏幕上,LangGraph 日志缓缓滚动: ``` [graph] node:triage-9 done cost:¥0.00027 tokens:2731 latency:389ms ``` 二毛七厘人民币。 林行听不见那行日志的声音。但他后来回想起那天下午的办公区——很安静。安静得像一座大型图书馆即将闭馆前的半小时。 他开始收拾自己工位的东西。**没人让他收**。他只是开始。 他把那张女儿 3 岁画的火柴人便签从 Claude Code 显示器边上揭下来,夹进皮夹。 他把抽屉里几支用了一半的笔留在原地。 他把工牌挂回工位边缘的钩子上。 下班时间 6 点 30 分,他 6 点 28 分起身,走出办公区。 经过郑总办公室,门关着,他没敲。 明天再问。明天来问。 (第四章 · 完) --- ## 第四章半 · 周末 林行的妻子叫沈知微,40 岁,在北京一所市重点高中教高三语文,带过四届毕业班。她比林行大半岁,他们是大学同校的——她中文系,他软院,2014 年在图书馆四层认识。沈知微做事比林行慢半拍,这半拍不是反应慢,是她**愿意让一件事在自己脑子里多走一遍才说话**。林行一开始嫌她慢,后来不嫌了。 Day 17,星期日,上午八点四十。 林行睡到自然醒,这是他这七年里第一次。窗外天阴,窗台上的吊兰被昨夜的风吹斜了。女儿还没起,妻子在厨房。 他下床,先把吊兰扶正,然后走进厨房。沈知微站在灶台前,煎一只蛋。她系着那条洗到发白的蓝围裙,左手食指上贴着创可贴——她改作文用钢笔,虎口和食指常年有墨——她转头看他一眼,没说话,把蛋翻了个面。 "今天不去图书馆?"林行问。 "今天改完作文再说。"沈知微说,"你坐。" 她端两碟早饭过来,一碟煎蛋,一碟昨晚剩的炒青菜,加两个馒头。她没问他工单的事。她只是把咸菜罐子推到他面前。 林行掰了半个馒头。 沈知微忽然伸手,从他放在餐桌一角的手机上拿过去,手机没锁——林行睡前忘了。她翻了一下,翻到备忘录,看到那一条只有三个字的备忘:**Day 0**。 "这是什么?"她问。声音很平,不像审问。 林行愣了一下。他没想过这条她会看到。他想了想,说:"就是一个记号。" "几月几号?" "……4 月 8 号。"他说,"那天晚上,有个新模型出来,价格跌到一毛钱一百万 token。" 沈知微哦了一声,把手机倒扣回桌面。她没追问"一毛钱"是什么意思,也没问"一百万 token"是什么。她切下一块煎蛋,放进自己嘴里,嚼。 林行以为这事过去了。 她嚼完,咽下,抬眼看他:"你那天,是不是觉得有什么东西塌了。" 林行没立刻回答。 "你回家比平时晚二十分钟。"沈知微说,"鞋是湿的。你进门没换鞋就坐沙发上,坐了八分钟才想起来。" 林行笑了一下。他说:"你怎么记这么清楚。" "我教语文的。"沈知微说,"我看一个学生作文里第几行开始走神,我能看出来。你那天晚上,从进门到睡觉,你没有一个动作是连贯的。" 林行没说话。他低头喝了一口粥。 沈知微把筷子放下。她说的下面这段话,她说得不快,**像一个人在讲台上讲一篇她已经备过三遍的课文**: "林行,你跟我讲过一次,水库放水的时候,坝上有一道线,叫**水位线**。水位高过那条线,要泄洪;低过那条线,水库就废了。你那天回来,我看你脸上就是那条线被踩到了的样子。" 林行抬头。 "水位线。"他重复了一遍这三个字。他这一个月里在脑子里转过这个比喻不止一次,但他从来没有原词说出口过。从妻子嘴里听到,他怔了一下。 "我不是在给你比喻。"沈知微说,"我是在告诉你我看见了。" 她端起自己的粥碗,喝了一口,接着说:"你说一毛钱一百万 token。我不懂 token。但我懂一毛钱。一毛钱在我们家是什么——是你早上下楼买豆浆,扫码 3 块 8,系统提示用一张优惠券,实付 3 块 7。你不会为那一毛去专门用这张券。**因为对我们家来说,一毛钱不构成一次决定。**" 她顿了一下。 "但对你公司来说,一毛钱是一次决定。"她说,"对吧?" 林行点头。他没说话,因为他怕一开口声音会不稳。 "你这个礼拜,工单从 27 条掉到 4 条。"沈知微说。 林行抬头:"你怎么知道。" "上礼拜你跟我说过 27,前天你跟我说过 9,昨天你跟我说过 4。你不记得你说过,你以为你只是在自言自语。"她把围裙解下来,搭在椅背上,"我没插嘴,因为我在等你自己讲。可你不讲,我就先讲了。" 林行低头。他眼眶有点热,但没掉。他知道一掉,这顿早饭就不是早饭了。 "我不劝你跟它比快。"沈知微说,"我教书 18 年,我也不跟批改软件比快。我们组三年前就有 AI 批改作文的工具,你知道我为什么不让它改我的班吗?" "为什么。"林行说。 "因为我在意学生**写错的过程**。"沈知微说,"一个学生在第三段把'恍然大悟'写成'豁然大悟',这不是错别字,这是他这个礼拜在读什么书。AI 改完只会标红,我改完会知道他周末看了《岳阳楼记》。这件事 AI 不是不能做,是它**做了等于没做**——因为它不会把这件事记在心里,等下个月那个孩子写'先天下之忧而忧'的时候用。" 她说完,低头吃了一口青菜,慢慢嚼。 林行看着她嚼。他忽然想起来,从昨晚到现在,妻子说每一句话之前,都会先把嘴里的东西嚼完。这是她招牌的一个动作——**她不在嘴里有东西的时候说重要的话**。他认识她 12 年,这一刻才真正注意到。 "我不是在给你打鸡血。"沈知微说,"我也不知道你公司接下来要怎么办。我只是想让你知道一件事——你那条**水位线**踩到了不是你的问题。是水库的问题。水库不是你修的,是这二十年一起修的,水位也不是你一个人放的。你不用一个人扛它低过线。" 她停了一下,说:"早饭吃完,你陪我下楼买点葱。" 林行嗯了一声。 他们没再说话。屋子里只剩筷子碰碗、女儿在卧室翻身、楼下早市的喇叭声。林行掰开第二个馒头,蘸了一点蛋黄。 吃到最后,他把那条 Day 0 的备忘录翻出来,递给妻子看。 "你要不要也加一行。"他说。 沈知微看了看,接过手机,想了几秒。她在 Day 0 那条下面加了一行,然后把手机还给他。她加的那一行是: > **一毛钱是一次决定,看是谁的家。** 林行看着这一行,看了很久。 他没把它删掉。他也没解释。他把手机锁屏,放进口袋。 下楼的时候,女儿醒了,在身后喊"爸爸等一下"。林行回头,沈知微已经在门口蹲下给孩子穿鞋。她蹲的姿势是侧着的,左膝先着地,右膝抵住地面。这是她的另一个招牌动作——她蹲下给学生捡掉的笔时也是这个姿势,18 年没变过。 林行在玄关等。 外面天还是阴的。但他这一个礼拜里第一次,没有想 dashboard。 (第四章半 · 完) --- ## 第五章 · 裁员邮件 Day 21。星期一。早上八点零一分。 林行的手机在床头先震了一下,接着是妻子的手机在客厅震了一下——他听见两次震动隔了大约半秒。他知道这意味着同一封邮件——他和沈知微都订阅了公司新闻 RSS,那是他三年前装的。 他没立刻起。他闭着眼又躺了大概二十秒,听卧室的窗帘缝里漏进来的麻雀叫。北京的春天开始得早,小区里几棵早樱已经开了。他知道一旦睁眼,这一天就开始了。 他睁眼,坐起来,拿手机。 发件人:郑伟。 主题:**关于公司组织调整的告别信**。 抄送:全员。 正文上来不寒暄:"亲爱的同事们,我把附件先放在这里。" 附件是一张 PDF,折线图。横轴是过去 90 天,纵轴是单位工单的处理成本。两条线:蓝色"agent 闭环",从 47 元一路滑到 1 元;灰色"人力介入",从 0 元一路爬到 47 元——两条线在第 63 天交叉。交叉点旁边,郑总自己用红色注了一行小字:**"我们没输给 AI,我们输给了 0.1 元。"** 林行看完这一行,把手机倒扣在床头柜上。 "是邮件吧。"沈知微在客厅说。她声音很平。 "嗯。"林行说。 "轮到你了?"她问。 林行愣了一秒。他还没读到名单。他翻起手机,往下滑——附件二是 PDF 名单,按字母排序,他在第 17 个看到自己。林老吴在第 4 个。沈澜不在。 "嗯。"他又说了一遍。 沈知微没出声。过了大概十秒,她从客厅走过来,手里端着两碗粥,放到床头柜上。她坐到床沿,没看他,她只是把那张过塑的全家福从床头柜上拿下来——平时立着的——倒扣过去。 "今天就在家里待着吧。"她说,"不用立刻想。" 林行点头。他没说话,因为他知道一开口眼眶会热。 她把粥推到他面前,自己把女儿那一碗端去了厨房——女儿在另一个房间还没醒。林行盯着粥,粥面上结着一层很薄的米油,薄到要等三十秒才能看见它皱起来。他知道这碗粥沈知微是半小时前——也就是邮件还没发的时候——就煮好的。她每天五点四十起,煮粥从没断过。这意味着今天早上八点零一分的邮件里那张折线图,沈知微是在掀开锅盖的同时看完的。她看完的反应不是惊呼,也不是叹气,是把火再调小一档,让粥继续慢一点。 林行后来想,**今天家里这一锅粥的火,是被一个 0.1 元的折线图调小一档的**。这种因果链他以前从没意识到。 他喝了三口粥。手机正面朝下扣着,但他能感觉到它在床头柜面上轻微地、规律地震动——LinkedIn、脉脉、Boss 直聘的推送一条接一条进来,他不用看也知道。沈知微把他的手机翻过来,瞥了一眼锁屏,又翻回去。她什么都没说,只是把音量键按到静音那一档。这个动作她做过一次他记得——三年前他父亲胰腺癌晚期那阵子,医院打电话进来时,沈知微每次都先把他手机静音再递给他。她说"先静音,再听,你就听得进"。 林行那一刻把粥咽下去,他突然听见隔壁房间女儿翻身的声音。女儿翻身的节奏一直是三声短一声长——"嗯、嗯、嗯,啊"——他听了四年。他听完想,**今天他失业了,但他还会在家里听见这四年的声音的第 1461 次。**这件事一旦想清楚,胸口的那一块石头反而轻了一寸。 --- 下午两点。林行没在家待着。他下楼了。 他不是去面试,也不是去散心。他去了公司楼下的 7-Eleven。他买了一瓶五块九的青岛纯生,没要冰镇——他想喝凉的,但不要冰的——然后坐在便利店外面的塑料台阶上,把易拉罐打开,喝了一口。 啤酒发苦。他平时不喝。 他刷开手机,微信工作群已经被踢出。Slack 还能登,但 #general 里他名字旁边的小绿点没了。LinkedIn 上,过去两小时他已经收到 14 个 InMail——猎头、skill 训练营招生、agent observability 的初创、两个 reasoning gas 期货中介。他逐条扫,没回。 最后一条是老吴发来的微信。一句话:"林老师,衡安的人在找我做 agent-ops,工资给到 P8.5,你要不要我把简历也递一份过去?" 林行盯着这条消息。他想起两周前 dashboard 上那条 triage-9 自添加的"林老师,这一条本来在升级队列里,但 SLA 紧,我先处理了"。**整个互联网称呼他"林老师"的,过去两周,只有一个 agent 和一个老吴**。 他回:"老吴,你先去。我再想想。" 老吴秒回:"好。我先走一步。我们后面葬礼见。" 林行没看懂"葬礼"两个字。他正要问,老吴又发一条:"798,Day 70 那个。圈里都在说。你回头注意公众号'archived'。" 林行哦了一声,把手机收起来。 他在 7-Eleven 外面又坐了半小时。下午四点的太阳从西边照过来,把柏油马路晒出一点温度。便利店空调外机就在他头顶半米的位置,低低地嗡着,嗡声里夹着一声更低的、像是压缩机即将到老的"嗒"——大约每四十秒一次。林行听了三回,数了三次"嗒",然后他把手机解锁,往维修工单那个旧 app 里输了"7-Eleven 朝阳区 X 店空调外机异响"几个字,输到一半他笑了一下,删掉。这种活以前是他下班路上顺手帮便利店阿姨发一条工单——便利店阿姨认识他七年——他过去七年发过 11 张这种工单。今天他不发了。今天他没有立场代任何人发工单了。 便利店里走出来一个外卖小哥,穿黄色冲锋衣,头盔挂在车把上,他蹲下来用湿巾擦电瓶车坐垫。他擦得很慢,一道一道,像是在抚平什么。林行盯着他擦了大概一分钟。外卖小哥擦完,他坐上车,把头盔扣上,启动,左转,消失在路口。整个过程没有看林行一眼——林行那一刻意识到,**他自己今天坐在便利店门口的台阶上,从早上 8:01 起,就已经从"被这个城市记住的人"里悄悄地、不流血地、完整地脱了一层籍**。这个城市对他没有恶意。这个城市只是不再需要专门为他刻一行字。 他爹去世前那年告诉过他一件事——他爹是国营粮油厂改制下岗的最后一批,1998 年。他爹说,"下岗那天,你不会哭。你回家路上买半斤瓜子,坐公交,你正常吃。你哭是七天以后,你打开抽屉看见你的工卡,你那一刻不是哭你工作没了,你是哭你**回不去了**。"林行那时候二十多岁,他听完没接话。今天 Day 21,他坐在便利店门口的台阶上,他终于明白他爹那句话——他这一刻的平静,不是真的平静,是七天以后那一哭还没到。 9 块 9。一份关东煮的钱,等于他在公司买一杯星巴克的钱。等于过去 99 次 API 调用的总成本(按旧价)。等于 0.99 亿次 API 调用的总成本(按新价)。这种数学他以前不做。今天他做了一遍。做完他把脑袋靠在便利店玻璃门上,玻璃凉,他闭眼三秒。 一个穿校服的小学生从他面前蹦过去,书包带子半挂着。林行盯着那个小学生的背影,忽然想起来他女儿——女儿四岁,还在上幼儿园。再过十年她要念中学。再过十四年她要高考。**到那时,'高级软件工程师'这个词,她那一代人会不会已经不知道是什么意思?** 他想了几秒,没答得出来。 他喝完那瓶啤酒,站起来。膝盖发麻,他扶了一下台阶。傍晚的风把对面那家便利店门口"今日特价 · 关东煮 9 块 9"的小喇叭声送过来,断断续续。林行走回小区,在小区门口停了一下,他打开备忘录。 Day 0、Day 14 之间隔着一片空白。他在 Day 14 之后新建一条,只打三个字: **轮到我。** 他锁屏。上楼。 --- 晚上九点。郑总给全公司发了今天的最后一封邮件,只发给留下来的人。林行不在收件人名单里,但有人在朋友圈截了图——那是郑总告别信的最后一段: > 接下来我会休息一段时间。也许去走一段川藏线。 > 我没有把笔记本带上,我只带了一本《海边的卡夫卡》。 > 公司接下来由沈澜暂代 CTO,我已经把所有 audit ledger 的钥匙交给她。 > > 还有一件事——给所有我裁掉的同事:**你们没有输给 0.1 元。0.1 元只是把我们这一代人攒了二十年的体面,一次性收齐了帐。** 我们都欠它,我只是先去还。 林行看完,把朋友圈关掉。窗外北京的天已经全黑。回龙观这一带的春夜,九点半之后,小区里跑步的中年人开始多起来——他们多半是楼上那几家公司的中层,白天开 Zoom,晚上下楼跑步,跑步时戴的耳机里放的不是音乐,是 podcast。林行透过窗户看见三个跑步的身影从楼下经过,其中一个是楼上 18 层那位做投资的男人——林行不知道他名字,但每天早上电梯里他们都点头。今天那位投资人跑得比平时慢一档,头微微低。林行后来想,**今天发出告别信的不止郑总一个人,这条街上,可能有十几栋楼里的几十个人,在邮件、电话、微信、备忘录、跑步里,各自悄悄写着自己的"川藏线"**。 他妻子从客厅走过来,把他的手机拿过去,放进床头柜的抽屉里。 她不说话。她只是关上抽屉。 (第五章 · 完) --- ## 第六章 · skill 学校 Day 35。下午三点半。 林行坐在朝阳门一栋写字楼的二十六层会客室里。沙发是仿皮的,边缘已经起皱。墙上贴着一张 A1 大小的海报,标题是:**"未来已经来了——只是分布不均。"** 林行盯着那行字看了一会儿,忽然想起郑总告别信里"接下来我会休息一段时间"那一句,然后他把视线移开。 接他的是一位三十多岁的女老师,姓周,递过来的名片上印着"明日方舟 skill 训练营 · 教研负责人"。她说话很快,语速大约每分钟二百八十字——比姜禾给客服 agent 设的上限快一倍。 "林老师我们看您简历,P7,九年开发,接 webhook 接 Bounded Autonomy 都熟,完全够格做我们的特聘讲师。" 她翻了翻,"我们这边有个班是周五开,想麻烦您先试讲一节,二十分钟,主题您挑——可以是 Bounded Autonomy 入门、可以是 skill 写作初阶、可以是 ChatGPT Agent 落地实战。" 林行点头。他原本准备讲"Bounded Autonomy 入门"。 周老师把他领进教室。 教室里坐了二十二个人。最年轻的看上去四十五,最大的接近六十。男的居多,西装衬衫居多,一个穿冲锋衣的男人在最后一排。他们面前的桌子上都摊着一沓纸。林行扫了一眼,纸上印的是过去五年的 OKR——年度 OKR、季度 OKR、个人发展计划。第一排一个戴眼镜的男人,正在用红笔在自己的 OKR 上画一个圈,然后在旁边写"对应技能:沟通"。 教室是 80 年代写字楼那种规整的方形,顶上四盏长方形灯管亮得有点刺眼,其中靠西墙那一支管子接触不良——大概每隔十二秒它会"啪"地暗一下,再亮回来。亮灭之间整间教室会瞬间陷进半秒的暗色,然后又被拉回来。没人抬头看那盏灯。林行进门时下意识看了一眼,看完他就知道,**今天坐在这里的二十二个人都不会去抱怨这盏灯**——他们这一代人,从八十年代厂房宿舍走廊那种灯管的暗闪里走出来,他们对这种小毛病的容忍度,是外卖一代不会理解的。 第二排靠走道一个穿驼色西装的男人,五十出头,他面前那一沓 OKR 是 2019 年的,纸张已经泛黄,边缘有一道明显的折痕——折痕在第 47 页那一处,意味着他过去这几年里反复翻到过这一页。林行猜那一页是他写"被提名为副总监"的那个季度。第三排一位女学员是教室里唯一的女性,她的笔记本电脑屏幕上开着两个窗口:左边是这堂课的预习材料,右边是她孙子的钢琴比赛视频在缓冲——她大约每 90 秒切回去看一眼那个加载圈。林行看见这一切,他把已经准备好的 PPT 第一页换成第二页,又换回第一页,他自己也没意识到换了几次。 林行站到讲台后面。 "大家下午好。"他说,"我是林行。" 下面的人抬头看他,像高三班级看一个新来的代课老师。 他打开 PPT。第一页他从公司还没倒闭前留下的模板里抽的:深蓝色背景,一行白字"Bounded Autonomy 入门 · 自主不是自由"。 他讲了八分钟。 他讲了 audit ID,讲了升级路径,讲了去年 Q2 国家标准化管理委员会的 GB/T 草案。讲到第六分钟他发现自己在引用 ChatGPT Agent 的官方文档——文档第 47 页,关于 escalation policy 的那一段——他自己其实没有用 ChatGPT Agent 写过任何一份生产 skill。他只是上周临时背下来的。 他讲到第八分钟,停了。 他放下激光笔。 "对不起。"他说,"我换一个问题。" 教室里的二十二个人抬头。 "你们之前是写 OKR 的对吧?"林行问。 下面有人点头。 "那 OKR 失败了你们怎么办?"林行说。 教室沉默。 冲锋衣男人在最后一排清了清嗓子。其他人没说话。第一排那个戴眼镜的男人,把红笔放下,用手按住自己的 OKR——那个动作让林行想起郑总按笔记本电脑的样子。 "OKR 失败了——"林行说,"你们老板会让你们写复盘,对吧?写复盘,你们怎么写?" 冲锋衣男人忽然开口:"找原因。" "什么原因?" "个人原因。"冲锋衣男人说,"客观原因不能多写,要写也要先写自己。" 林行点头。"那你们这一代人,被这个'写复盘'的习惯训练了多少年?" 冲锋衣男人想了想:"我从 2009 年开始写。" "十七年。"林行说,"你们用十七年学会一件事——失败之后,先反思自己。" 他顿了一下,"但 Bounded Autonomy 这门课讲的是反过来的——它讲的是,**当 agent 失败的时候,你不能让 agent 反思自己**。你要去反思你给它写的边界、你给它设的升级路径、你给它的 audit ledger 是不是足够。失败不归个人,失败归契约。" 教室更安静了。 林行看了一眼 PPT,关掉。 "今天的课不上了。" 他说。 冲锋衣男人皱眉:"为什么。" "因为我没准备好教你们。"林行说,"我刚才那八分钟全是我从一份官方文档里背下来的。我没用过 ChatGPT Agent 写过一份能上线的 skill。我配不上站在这里。" 教室的人面面相觑。第一排戴眼镜的男人慢慢举手。 林行点头让他说。 "林老师,"那个男人说,"配不上是个 OKR 词。" 他笑了一下,"我这十七年学到的最后一件事——配不配得上,不是写出来的,是站这儿站够时间站出来的。今天你站够了二十分钟,你比我们先迈出去了一步。下周你接着来。" 教室里响起几声不太确定的掌声,稀稀拉拉的。 第二排靠走道那位驼色西装的男人没鼓掌,他只是用手掌在自己 2019 年的那张 OKR 上慢慢压了一下,把那道反复翻出来的折痕压平,然后他把那一沓纸合上,放进公文包,拉链拉到一半他停了三秒,又拉完。他这一连串动作很慢,慢得像是在做一个仪式。林行站在讲台上看见,但他没声张。第三排那位女学员的钢琴视频缓冲完了,她那一刻没看视频,她在看林行——她看完之后,把笔记本电脑屏幕慢慢合上了一半,又合到全黑。 林行站着,没鞠躬。他点了一下头,走下讲台。 走廊上他又看见那张海报——"未来已经来了——只是分布不均。" 他这次看了三秒,笑了一下,笑到一半收住。他不知道自己笑什么。也许是因为他刚才放弃站在讲台上的那一刻,他第一次真的相信"未来"是一个**没有讲台的房间**。 他下楼,把那张试讲合同的电子签退给了周老师。周老师挽留了一次,他没接。 下楼的电梯里只有他一个人。镜面不锈钢墙把他从五个角度反射回来——他穿一件他自己早上挑的最好的浅灰衬衫,衬衫袖口那里他熨得很认真。他看了三秒镜子里的自己,他左手食指开始无意识地敲电梯按键板下面的钢边。**敲了三下,他停下了**——他这一刻第一次意识到这个动作是从郑总那里学的。郑总现在在川藏线某个地方,他这一刻在朝阳门一栋他配不上的写字楼电梯里,**他和郑总用同一种节奏敲一块他们永远不会拥有的钢板**。 电梯到一楼,门开。一楼大堂里摆了一张展架,展架上写"context engineering 9 天速成班 ¥1980 · 名额仅剩 17 个"。展架旁边坐着两个二十出头的招生小姐,正在低头刷自己的手机。林行从展架前面走过,她们两个谁都没抬头看他。**这一刻林行第一次直观意识到——这条招生通道他已经进不去了。他不是 50 岁的中层,也不是 21 岁的薛野,他卡在中间,卡在一个没有现成位子给他的年龄段**。 回家的地铁上,他打开备忘录,翻到 Day 21,在下面新建一条: **Day 35。我以为我配得上当老师。我配不上。但我也许配得上当个学生。** 他保存,锁屏。 车厢里坐他对面的中年男人,手里捏着一份印着"context engineering 9 天速成班 ¥1980"的传单——很可能是刚才同一栋楼下另一家训练营的。男人低头研究那张传单,左手食指在传单边缘搓出一个折痕,搓得很慢。林行盯着那只手看了几秒——他这一刻看见的不是 ChatGPT Agent 普及之后的中国中年男人,而是 1998 年下岗大潮里那一代人——他们的父亲——也曾经在地铁上捏过同样的传单,印的不是 context engineering,印的是"五金维修 / 保安 / 物业管理"。 林行看完,把视线移开。他想起下午冲锋衣男人那一句——"配不配得上,不是写出来的,是站这儿站够时间站出来的"。这一句他这一晚要把它记在备忘录里。但不是 Day 35 这一条下面。他要把它记在自己单独的另一份文件里。 他到家。他打开 last-real-code.md——那个已经被他续到第 35 个条目的旧文件——在末尾加一行: > **配不配得上,不是写出来的,是站够时间站出来的。** > ——朝阳门写字楼二十六层,一个我没问名字的冲锋衣男人。 他保存。关掉。 (第六章 · 完) --- ## 第七章 · 创始人陆衡 Day 45。河南某县,殡仪馆。下午一点半。 陆衡的衬衫袖子卷到肘弯,手里端着一杯凉的星巴克美式。咖啡是他从郑州机场买的,坐三个小时长途汽车带过来,到县里时正好放凉。他爹站在馆长办公室的窗边,背着手,看院子里两个工人卸花圈。 办公室里有一种他从小就熟的味道——是檀香、福尔马林、和一种老木头桌子被反复擦拭后散出来的桐油味叠在一起的味道。这股味道他在深圳南山区那间装着新风系统的会议室里二十年闻不到一次。今天他闻到了,**他鼻腔里先是不适,五分钟后是一种近乎安心的钝化**。窗外院子里那两个工人卸花圈的节奏很慢,一人扛一个,从面包车后斗扛到偏屋门口,中间停一下,擦把汗,然后回头再扛。两人一上午能卸十六个花圈。这种工作效率,放在陆衡过去管的 SaaS 团队里,会被产品经理立刻 PRD 一份《花圈装卸 agent 自动化方案》——他甚至已经在脑子里写出了这份 PRD 的第一段。他写到第二行,把这个念头按下去了。**他这一次回县里不是来写 PRD 的。** 他爹背着手站在窗边,姿态很标准——双手在身后交叉,左手抓住右手腕,这是他爹从 1979 年当兵那年留下的习惯,陆衡从五岁起就看见他这么站。他爹的白头发占了大约六成,后脑勺那一块还有一小撮黑的,陆衡盯着那一小撮黑发看了三秒——他不知道为什么这三秒里他鼻腔有点发酸。他爹今年七十,身体还硬朗,**但七十岁意味着每多一年都不是理所当然的一年**。 "你那个公司,还撑得住吗?"他爹问。 陆衡把咖啡杯放在桌上。桌面是上世纪九十年代的红松,边缘磨得圆圆的,有一处被烟头烫出过一个黑点,现在被一块圆形的玻璃盖住——那是他爹的招牌动作之一,所有烫坏的地方,他都用一块玻璃盖,而不是换桌面。 "撑不住。"陆衡说,"估值从两亿到两百万。我下周得跟董事会摊牌。" 他爹哦了一声。又过了大概三十秒。 "那你来这里干什么?"他爹问。 陆衡没立刻答。他打开笔记本电脑,屏幕上是他刚才用 browser agent 拉下来的一张表格——殡葬业批发市场的二十家头部寿衣供应商,每家的货期、最低起订量、退换条款、过去三年的延误率。这些数据,他用了半天时间让 agent 拼出来——但拼出来之后,他知道这些数字是表面的。DeepSeek V5 抓不到下面那一层。 "爸,"陆衡说,"哪家寿衣批发,你最常用?" 他爹想了一下,说出一个名字。一个县城里的小厂,陆衡的表格上排第十六。 "为什么。"陆衡问。 他爹笑了一下。"娃,这个事不在表格里。" 他说,"老张家三十年前他爹做寿衣的时候,有个习惯——他不用红线缝寿衣的内衬。他用白线。别家都是红线,老张家是白线。" 陆衡愣了一下。"为什么。" "红线热闹。" 他爹说,"白线静。死者是要静的。家属拿到衣服,看见内衬是白的,他们不会说,但他们当晚能睡着。能不能睡着,决定他第二天来不来加单。" 陆衡把这个细节,在自己的笔记本上记下来,标题写"内衬"。然后他停在那一行很久。 办公室外面走廊上传来一阵脚步声——是一位中年女家属和一位殡仪馆工作人员。家属在哭,但是哭得很压抑,断续,像是怕扰到办公室里。工作人员低声在说什么——陆衡听不清,但语速很慢,慢到几乎是一句一停。他爹听见,转头朝门口望了三秒,又转回来,什么都没说。陆衡那一刻意识到,**他爹在这间办公室里坐了三十年,他听过的这种走廊脚步声、压抑的哭声、和缓慢的低语,是几万次的尺度**。这几万次,是 DeepSeek V5 的训练语料里没有的——它是一个 77 岁老馆长身体里,长出来的肌肉。这个肌肉不在任何 GitHub 仓库里。这个肌肉在 0.1 元的世界里,**它的单价反而越来越贵**。 陆衡这一刻打开 browser agent,在搜索框里敲了三个字"老馆长",敲到一半他停下,把整个搜索框删了。他这个搜索查不到。他要的不是 V5 抓回来的网页摘要,是他爹此刻在窗边背着手的那种姿势。这种姿势他得自己看,得自己用人的眼睛、人的嗅觉、人的鼻酸去记下来。 他爹接着说:"还有花圈摆位。"他爹指了指院子,"你看那两个工人,他们摆花圈是有规矩的。家属花圈在最里圈,单位花圈在外圈。但同一个家属,儿子的花圈一定要比孙子的高半寸——半寸,不能多,不能少。多了显得儿子炫耀,少了显得孙子越位。这个半寸,是用一根特定型号的麻绳量出来的。这种麻绳在哪儿买?——只有县里张大爷那一家麻绳铺。张大爷上个月去世了。" 陆衡停下笔。 "那以后怎么办?"他问。 "以后这个半寸,大家就不知道了。" 他爹说,"也许就开始有人多摆半寸,有人少摆半寸。摆错了,家属也不会说,但家属当晚也睡不着。" 陆衡那一刻把笔记本电脑合上。 那天晚上他在县里的招待所睡了八个小时——这是他过去十八个月里第一次。 招待所的房间是 90 年代的格局,15 平米,一张木板床,床头一台 21 寸老式 CRT 电视,床尾一面镜子,镜子右下角磨花了一角。空调坏了——前台说"师傅明天才来",陆衡没换房间。他开窗,窗外是县城晚上的院子,院子里有一棵大概四十年的核桃树,树底下有一只黑白花的猫。陆衡晚饭后蹲在窗边逗了那只猫五分钟,猫没理他,他也不在意。他把窗关到一半留缝,空调坏了的房间反而靠着夜风慢慢凉下来。 他躺到床上,脑子里没有衡安、没有 ARR、没有董事会、没有他过去十八个月里每天凌晨两点惊醒的那种胸闷感。**他脑子里只有"白线"两个字、和"半寸"两个字**。这两个词像两块小石头放进他脑子里,把过去十八个月那些起伏的湖面慢慢压下去。他十一点睡着,六点醒,正好八小时,中间一次都没起夜。 第二天早上六点醒,他翻出云盘里 2018 年他在 INSEAD 写的那篇论文 PDF——《Industry-specific knowledge as competitive moat》。他读了一遍,又读了一遍。读到第二遍的时候他给妻子打电话。 "我把明衡关了。" 他说,"做新的。" 妻子在那头沉默了几秒。"叫什么。" "衡安。" 他说,"衡我自己,安老人的安。" 妻子又沉默了几秒。然后她说:"你爸知道吗。" 陆衡没立刻答。他抬头看了一眼招待所的窗户,窗外是县城清晨的薄雾,雾里有一个穿白衬衫的中年男人,推着一辆三轮车从巷口转出来。三轮车上摞着十几个白色花圈。陆衡盯着那个男人看了三秒。 "他不用我告诉。" 陆衡说,"他昨天那两段话,就是他告诉我的。" 挂了电话,他打开笔记本电脑,建了一个新文件夹,命名"衡安·skill·v0.1"。文件夹里第一份草稿,他写了四行: > skill · 客服模块 · 殡葬专用 > 1. 不准对家属说"亲"。 > 2. 不准在家属重复同一个问题超过 3 次时,继续推送服务。 > 3. 不准提到价格折扣,除非家属先问。 > 4. 内衬永远写"白线"——这是品质标志,不是营销话术。 他保存。文件名 `skill-v0.1-内衬.yaml`。 他把笔记本电脑合上,出门去找他爹吃早饭。路过殡仪馆门口的时候,他停了一下,转身,走回办公室,把昨晚他离开时没关的灯关了。这是他爹教过他的——殡仪馆每天关灯的人,是馆长。 早饭摊上有一碗胡辣汤、两个包子。他爹坐在他对面,慢慢喝汤。他爹喝完一口,把勺子放下,看了陆衡一会儿。 "昨晚没睡好?" 他爹问。 "睡了八个小时。" 陆衡说,"我十八个月里第一次。" 他爹哦了一声,接着喝。 "爸,"陆衡说,"我有件事问你。" 他停了一下,"内衬白线这个事——你为什么从来没跟你徒弟说过?" 他爹把勺子放下。 "说过。"他爹说,"说过两个徒弟,他们记不住。第三个是你二叔的儿子,他听了,他能记。但他十年前去广州做物流了。" "那这个事就要断在你这里?"陆衡问。 他爹没立刻答。他用筷子把碗里最后一颗芝麻捞出来,放进嘴里嚼。嚼完,他说:"娃,断不断在我,不在我自己。在徒弟。徒弟没了,我说也没用。" 他停了一下,"但你昨天说要做衡安——我不拦你。你做不做得成我不知道,但你这一次不是来听我讲白线的。你是来问我'白线还要不要传下去'的。我答你——要。" 陆衡那一刻把胡辣汤的碗端起来,把汤一口喝完。汤是辣的——眼眶热,但也可能是辣。他把碗放下。 "爸,我会让 skill 替我记。" 他说,"我自己记不住的,我让 skill 替我记。skill 替不了的,我自己记。" 他爹笑了一下。"娃,你这一句,**比你那个 INSEAD 论文写得好**。" 陆衡笑了。他给他爹的碗里又添了一勺辣椒油——他爹爱吃辣,但他妈不让。今天他爹自己来,陆衡多给他添了。 (第七章 · 完) --- ## 第八章 · 软件葬礼 Day 70。北京 798,晚上八点。 仓库是个九十年代的老厂房,屋顶很高,中间挂着一根钢梁。那根钢梁今晚被绑了一块投影幕,正面对着北墙。墙上,一个数字以每秒大约三次的频率往上跳—— **当晚 GitHub 新增 archived 仓库数:** **173,841** **173,842** **173,844** 数字旁边,一行小字:数据来源:Hugging Face Hub + GitHub Archive · 由 agent observability 厂商 *Lighthouse* 提供。 仓库里大约三百人。没有桌椅,只有一圈沿墙摆的折叠凳。中间是水泥地。林行进门时,门口的工作人员递给他一张白色卡片,上面写一行字:**"今晚,我们送一个时代下班。"** 卡片背面是一个二维码,扫了之后是当晚议程。 仓库地面是九十年代浇的素混凝土,踩上去有一种轻微的回声——三百人各自移动,鞋底在水泥上的摩擦声叠在一起,变成一种持续的、近乎潮汐的低响。仓库一角原本应该是吊车轨道,现在轨道还在,锈得发红,挂着两条粗麻绳——上面绑了几十张 GitHub 用户的 contributor 头像打印件,头像下面打印着每个人的 commit 总数。林行扫了一眼最近那一张,那是一位他以前在 RubyGems 里见过的维护者,77 万次 commit,2008 年到 2024 年,头像底下打了一行小字:"已 archive。已离开行业。已经回家陪妻子。"林行盯着这一行看了五秒。 仓库的空气里漂着一种他熟悉的味道——是工业风装修常见的那种水泥灰加新刷涂料的味道,但这一晚多了两层。一层是后台某处煮咖啡的焦香,另一层是 300 个人各自身上带进来的下班后的疲惫味。**林行后来想,这种味道是只有"这一行的人聚在一起送别这一行"的时候才会出现的味道**——它不是悲壮,它是疲。它是 300 个曾经每天通宵的人,这一晚第一次允许自己疲。 林行扫了一下议程。 > 议程一(20:00-20:15):Manus 朗读 stripe-go 的 README。 > 议程二(20:30-20:50):嘉宾分享。陆衡 · 衡安创始人。 > 议程三(21:00-21:30):自由发言。 > 议程四(21:30-21:50):墙上 archived 数字归零仪式。 林行没认识陆衡。他选了离投影幕最远的角落,坐下。 二十点零分。仓库的灯灭了一半。一个女声从音响里说:"我们开始。" 接下来的十五分钟,Manus 用一个介于男声和中性声之间的合成音,朗读 stripe-go 的 README。它读得不快,每一行后面留半秒停顿。它读到 `// Package stripe provides the binding for Stripe REST APIs.`,它读到 `// Copyright 2014 Stripe, Inc.`,它读到那一行林行从来没注意过的、放在文件最末尾的一行注释:`// Thanks to everyone who ever filed an issue.` 林行那一刻把头低下去。他没哭——他三十四岁了,他不在公开场合哭——但他鼻腔里是热的。 朗读完,场内零声。三百人没人鼓掌。 二十点三十分,陆衡上台。 他穿一件深灰色的衬衫,袖子卷到肘弯。他没用麦克风,他直接对着场内说话。他第一句话是:"我爹是河南某县殡仪馆的老馆长。" 林行抬起头。 陆衡讲了二十分钟,他讲他爹那两段——白线和半寸。他没讲他自己的衡安 ARR,他没讲投资人,他没讲行业分析。他讲到最后,他说:"我们这群人——做软件的人——过去二十年都以为护城河是技术。但 0.1 元那一晚,技术沉了底。沉下去之后,水面之上长出来的不是新技术,是**那些没法被通用 agent 学会的东西**。我爹的白线是一个。半寸是一个。一个老太太晚上能不能睡着,是一个。" 他停了一下。 "潜规则就是数据。"他说,"数据就是护城河。" 林行在台下,把这句话默默地在心里重复了一遍。然后他自己接了一句——只在心里——**"会不会是,愿意慢的能力?"** 他不知道自己什么时候在心里组出这句话的。但组出来的那一秒,他想起他妻子早上煎蛋的那一刻——她每说一句重要的话之前,都会先把嘴里的东西嚼完。 陆衡下台的时候,从林行旁边的那条过道走过——林行靠走道的位子。陆衡那一刻没认识林行,陆衡眼神扫过去,他看见的是一个穿浅灰夹克、左手食指在腿上慢慢敲的男人。陆衡愣了 0.3 秒。陆衡敲过太多次桌子,他认得这种节奏——这是一个**有过一个真正听过他说话的师傅**的人留下的节奏。陆衡没停步,他从林行旁边过去,继续往后台走。林行也没抬头看他。两个人离得最近的那一刻,大约 30 厘米。两个人都没意识到这是他们第一次同框。 陆衡下台。掌声很久。 二十一点。自由发言。一个看上去六十多岁的男人上台,他说他叫陈守仁,77 岁,77 年前——他笑了一下,自己改口——他做了 38 年开源,他参与过 GNU 工具链。他今晚来,是因为他下周要住进一家临终关怀医院,他想趁还能站着,把"配得上被记住的那部分代码"说一遍。 林行听到"临终关怀"四个字,身体微微往前倾了一寸。 陈守仁讲了八分钟。他讲他第一次给 GCC 提交 patch 是 1989 年,讲他第二个孩子出生那天他正在调一个连续两周没修出来的 bug,讲他妻子去年走了之后他把家里那台 ThinkPad T420 从书房搬到客厅、再搬到床头、最后他自己住进医院之前又把它搬回床头柜。他讲到他妻子的时候,他停了大约六秒——他没擦眼镜,也没低头,他只是把麦克风换到另一只手。仓库三百人这六秒里没有任何声音——连墙上 archived 数字滚动的"嗒嗒"声都好像被这六秒按住了。 他讲完,把麦克风递给下一个人,慢慢走下台。林行看见他走的时候右腿微跛。**林行那一刻在心里记下"陈守仁"三个字,他没意识到 60 天之后他会在临终关怀医院的病床上,接住这位老人**。 二十一点半。墙上数字归零仪式。组织者按了一下遥控,投影上那个 173,xxx 的数字被一个白色的"0"覆盖。底下一行小字:**"今晚截止,中国大陆区 archived repo +18 万。"** 仓库里有人轻轻嚯了一声。 林行起身,往外走。 他在仓库后台一个临时的茶水台前停了一下。他想喝口热水。一个穿米色毛衣的女孩,手里端着一个保温壶,看他脸色,直接给他倒了一杯。 "你脸色不太好。" 她说,"喝点。" 林行接过来,没抬头。"谢谢。" 他说。 水温比他预想的高一档——大概八十度,稍烫。他端着杯子,先用嘴唇沿着杯沿试了一下,没喝。他这一刻闻到那个倒水女孩身上很淡的一种味道——是某种琴谱纸特有的、米浆胶的味道。这种味道他在他妻子大学时代的旧诗集里闻过,他没把这两件事联系起来。**他不知道,他这一辈子离一个 19 岁的姜禾最近的一刻,就是此刻——隔着一个保温壶,隔着一杯八十度的热水,隔着 798 后台一盏暗黄的灯**。他低着头,他没看姜禾的脸。姜禾也没刻意看他——她只看了一眼他端杯的手,看见他左手食指在杯沿上敲了一下,**敲得很轻,但节奏她记住了**。她当时不知道这是谁,她也没多想。她端着保温壶走开了。 女孩没多话,端着保温壶继续给下一个人倒。 林行喝完那杯水,把杯子放回台面,走出仓库。 外面下小雨。雨不大,落到水泥路面上是一点一点的暗色斑,落到他夹克肩头是一点一点的凉。798 这一带晚上路灯偏暖黄,雨丝在路灯里被照成一种很淡的金色——像是有人把这一晚的疲拉成了一根一根的细线。林行站在路边,他抬头看了一眼天空——天空是 798 上方那种被城市光污染反照过的暗紫色,他从这个暗紫里数出三颗星,数到第三颗他停下了。**三颗星这个数,他十年没数过**。他十年来每一晚的天空都是 Slack 通知打开时手机屏幕的那种白色。 他在路边站了三秒,拦了一辆车。 司机问:"师傅去哪儿。" 林行想了三秒。他自己都不知道为什么想了三秒。然后他说:"医院。" 司机没追问哪家医院,直接发动了车。林行看着车窗外 798 的霓虹一点一点退后。他从口袋里把手机摸出来,打开备忘录,新建一条: **Day 70。** 他停在那里很久,没继续打字。 车从 798 开到协和医院的路上,雨慢慢变大。司机把雨刷开到二档,雨刷在挡风玻璃上来回扫,声音是规律的——刷、刷、刷。林行靠着后座头枕,闭眼。他不打算去协和。他甚至不打算去任何具体的医院。他刚才回司机"医院"两个字,只是因为他这一晚听到陈守仁讲"我下周要住进一家临终关怀医院"那一句之后,**"医院"这两个字在他脑子里变成了一个非常具体的、可以走进去的地方**——而不是过去三十四年里他每次听见这个词都会自动绕开的那种背景词。 到了协和门口,司机问:"师傅,在这儿停?" 林行睁眼,看了一下医院大门——夜班的灯还亮着,急诊门口有几个人在等。他想了三秒。 "不停了。" 他说,"麻烦掉头,送我回家。" 司机没说话,把车掉头。 回家的路上,雨没有变小。林行靠着头枕,半睡半醒。他后来想,**这一夜他没真的去到任何医院,但他在心里已经走进去过一次**。这一次走进去,就不需要 Day 130 才走进去第二次。 到家的时候是深夜十一点四十一分。妻子还没睡——她在台灯下改作文。林行没问她为什么没睡。妻子也没问他去了哪里。她只是把自己那杯热水推到他面前。 (第八章 · 完) --- ## 第九章 · 范式之争 Day 90。北京东城某独立咖啡馆。下午两点。 这家咖啡馆叫"北纬 39",在一条胡同的尽头,门面不大,门口一棵老槐树。下午这个钟点,客人只有三组——靠窗一对情侣在低声吵架,中间桌一个戴 AirPods 的男人在打字,最里面的卡座坐着林行 / 姜禾 / 陆衡。 是沈澜约的。她说"你们三个该见见"。然后她自己没来——她临时被衡安那边一个客户拽去签合同了。 林行三十四岁,姜禾十九岁,陆衡三十八岁。三个人的咖啡叫得各不一样:林行美式,姜禾手冲耶加雪菲,陆衡冷萃——放凉了再喝。 陆衡先开口:"沈澜跟我说,你们俩,一个写 skill,一个被裁。我做殡葬 agent。她说让我们对个口径。" 姜禾笑了一下。她的笑很轻,几乎像点头。 林行没笑。他认得姜禾——他当然认得,过去六十天他刷过她不下二十次直播——但他没想到她本人比镜头里要小一号,瘦,锁骨明显,她左手食指上有一个浅浅的茧,他知道那是按古琴琴弦按出来的。 陆衡今天穿一件浅蓝色衬衫,袖子卷到肘弯——他过去三个月这个动作从未变过。他的手腕上戴一块旧的 Daniel Wellington,表带是磨白的尼龙,跟他衬衫的整洁形成一种刻意的反差。林行后来想,陆衡是那种对"不被人看穿"非常熟练的人——他每一处随意,都是经过设计的。 "你先说。"陆衡对林行说。 "我先听。" 林行说。 陆衡笑了一下。"这是你的开场?" "我这一个礼拜在练听。"林行说,"我以前太爱开口。" 陆衡耸了一下肩,说:"那我说。0.1 元之后,真正的护城河是**数据**。" 他喝了一口冷萃,"不是公开数据。是那种'每个老人都知道,但没人写下来过'的数据。我爹那种。陈守仁那种。这种数据 DeepSeek V5 抓不到,因为它不在公开网络。我做的是把这种数据系统化,装进 skill,卖给那些做这些行业的小团队。" 姜禾点头。 "我有一个补充。"她说,"陆总你说的'每个老人都知道,但没人写下来过'的数据——这是真的。但你写它的过程,本身就需要审美。同样一份白线寿衣的潜规则,你交给一个写 skill 没经验的人,他能把它写成一份操作手册;交给一个有审美的人,他写出来是——'死者要静,所以白线'。前者是文档,后者是 skill。**agent 读前者会 hallucinate,读后者不会**。" 陆衡那一刻把袖子又往上卷了半圈。这是他被一句话戳中时的招牌动作。 "你呢。"陆衡问她。 姜禾把咖啡杯放下。她想了大概十秒——她不是想措辞,她是想**怎么把一个抽象的东西说出口**。 "我说**审美**。"她说,"skill 的品味,决定 agent 输出的天花板。" 陆衡皱了一下眉。"审美这个词太轻。" "不轻。"姜禾说,"我直播写 skill,有人弹幕骂我'你不会写代码,你凭什么这样指挥它们'。我当时回他'我会写约束,约束就是我的代码'。回完我心里其实知道,'写约束'三个字也不够——**写约束的人很多,写得好的人不多**。差的那一点,不是技术,是审美。" 她顿了一下。 "我父亲是做古籍修复的。"她说,"他修一卷宋版《楚辞》,要三个月。期间不许任何人在他工作台旁边说话。他不是技术不熟,他是要让自己慢到能听见纸的呼吸。skill 也是一样——慢到能听见 agent 的边界。" 陆衡哦了一声。他把这句话记下来了——林行从他眼神聚焦的方式上看出来。 "姜禾,"陆衡说,"你这个'听见边界'——能不能再具体一点。" 姜禾想了一下。"我上周写了一份 skill,客户是一个做老年陪聊 app 的小团队。他们最初给我的需求是'要一个像孙女一样的 agent'。我跟他们聊了三个小时,我说'你不要孙女,你要一个不假装是孙女的人'。他们当时不懂。我把 skill 写完给他们,他们用三天,就懂了——因为用户开始留下三百字以上的留言,而不是一句'谢谢',这就是 agent **边界变薄**的信号——agent 不再需要演什么,用户也不再需要被演。" 陆衡点头。"你这一段我想抄回去。" "抄吧。"姜禾说,"我从来不藏 skill 的 idea。我藏的是**写完之后那 0.5 秒的犹豫**——那 0.5 秒别人抄不走。" 陆衡又转向林行。"你呢。" 林行端起咖啡杯,杯子已经凉了。他没喝。 他想了五秒,说:"会不会是,**愿意慢的能力**?" 陆衡和姜禾同时抬眼看他。 林行接着说:"我妻子在医院做行政,十一年。她每天最快的事是打字,她每分钟一百二十字,她比同事都快。她每天最慢的事是给一个家属解释'我们已经尽力了'。这一句她每天要说三次,她每次都说不一样。她从二十九岁说到四十岁,十一年她没重复过。" 他喝了一口面前那杯凉咖啡。 "我妻子前两个礼拜跟我说过一段话。" 林行说,"她说,**'我教书十八年,我也不跟批改软件比快。我们组三年前就有 AI 批改作文的工具,我不让它改我的班——因为我在意学生写错的过程。'** 一个学生在第三段把'恍然大悟'写成'豁然大悟',这不是错别字,这是他这个礼拜在读什么书。AI 改完只会标红,她改完会知道他周末看了《岳阳楼记》。这件事 AI 不是不能做,是它**做了等于没做**——因为它不会把这件事记在心里,等下个月那个孩子写'先天下之忧而忧'的时候用。" 林行讲完这段,自己也愣了一秒——他刚才几乎是一字不差地把妻子那天早上的话复述了一遍。他三十四年的人生第一次完整复述妻子的整段话,而且是当着两个陌生人的面。 陆衡那一刻把香烟从口袋里摸出来,在指缝里夹住,没点。 姜禾的手指停在咖啡杯把手上。她过了五秒才说:"林老师,你妻子是教语文的?" "高三。"林行说,"她带的是文科尖子班。" 他停了一下。 "0.1 元的世界里,"他说,"前者归 agent。后者归人。" 陆衡这一刻把袖子放下来——他第一次没卷。"林行,"他说,"市场不慢。资本不慢。0.1 元这一夜之后所有人都按下加速键。你这个'愿意慢',挺好——但它能卖钱吗?它能让你下个月交得起房贷吗?" 林行没立刻答。他过了三秒,说:"陆总,这答案不是我的。是我妻子的。她做行政十一年没换岗,也没升职,我以前觉得是她不争。最近两个礼拜我才知道,她不是不争——她在攒一种这个时代普遍不耐烦攒的东西。我现在只是替她说一遍。能不能卖钱我不知道。但她那十一年没白过——这件事我替她确认。" 咖啡馆里安静了一会儿。中间桌那个戴 AirPods 的男人翻了一下笔记本,打字的声音断了。 陆衡放下香烟,把右手食指放在桌面上,无意识地敲了两下——林行愣了一下,他认得这个动作,这是郑总的节奏。他不知道陆衡是从哪里学到的。也许这种节奏是这一代被睡眠不足训练出来的中年男人的共同肌肉。 "我前两天回河南。" 陆衡忽然说,"我爹现在七十二了,他老早不当馆长,他在县里街心公园教人下象棋。我那天问他,如果你年轻三十岁,赶上 0.1 元这一夜,你会做什么。" "他怎么说?"姜禾问。 陆衡笑了一下。"他说,他会去把白线寿衣这个事**写下来**。" "写下来?"林行问。 "他说他这一辈子有过那种'把白线告诉徒弟,徒弟没记住,后来死人了'的遗憾。"陆衡说,"他说,如果他二十岁,他会把白线写在 skill 里,卖给 DeepSeek V5。他不是想赚钱。他是想让白线**有一份不依赖徒弟记性的副本**。" 姜禾把这一句记下来——林行从她眼神聚焦的方式上看出来。 "你爹比你提前知道答案。" 林行说。 陆衡耸了一下肩。"我爹这一辈子,所有的答案都比我提前知道。我比他多读了两个学位,我多花了二十年才追上他。" 陆衡先开口。"林行,你这一句让我想起一个词。" 他说,"水位线。" 林行愣了一下。"什么。" 陆衡说:"上次某个会上听陈守仁说的,他说 0.1 元那一夜是'水位线被踩到的一夜'。当时我没听懂,你这一句之后我懂了——水位线之上的事,归 agent;水位线之下的事,归人。" 林行嗯了一声。他想起两个礼拜前妻子在早饭桌上对他说"水位线"那三个字的样子——她当时手里端着一碟煎蛋。他没把这件事讲给陆衡和姜禾。他只是抬头说: "水位线。"他重复,"这个词,我妻子先说的。她没听过陈老师讲。她是自己说的。" 姜禾在那一刻把咖啡杯放下,眼睛睁了一下。她说:"林老师,你妻子叫什么。" 林行说:"沈知微。" 姜禾把这个名字也记下来了——林行看见她在手机上打了三个字然后锁屏。 陆衡坐直了一些。他把冷萃推到桌子中间。 "林行,"他说,"你妻子那一句,我能借用吗?" "她不是名人。" 林行说,"借用她的话之前,你得先答应一件事——你公司的 skill 里,以后不准出现'家属应该尽快做决定'这种句子。家属慢一些,那是水位线之下的人本来就配得到的尊严。" 陆衡那一刻笑了一下,点头。"答应。"他说,"我让法务把这一条写进我们的 skill review checklist。" 姜禾把这一段记在手机上。她记完抬眼看林行。 "林老师,"她说——这是她第一次叫他林老师,"我有一个问题想问你。" "问。"林行说。 "你妻子的'水位线之上 vs 水位线之下'——她有没有给你说过,水位线**本身**是什么。" 林行想了五秒。 "她没说。"他说,"我也没问。我猜她说不出来——因为水位线不是个概念,是个**位置**。每个家庭、每个人、每个行业,水位线都长得不一样。你只能靠脚踩到才知道。" 姜禾把这句话也记下来。她忽然抬头,又问: "那你的水位线,踩到了吗。" 林行愣了一下。 他想了二十秒。这二十秒里,咖啡馆门口那对吵架的情侣已经离开,中间桌打字的男人合上笔记本电脑,正起身。咖啡馆里只剩他们三人和柜台后面那个戴围裙的女孩——女孩在用一只小毛刷,慢慢清理意式咖啡机的滤网。 "踩到了。"林行说,"Day 0 那一夜踩到的。Day 14 那一周陷下去的。Day 21 那天看见水的。Day 70 那晚看清楚那是水的。Day 90 今天——我才知道,水里也能站着。" 姜禾没说话。陆衡把香烟从口袋里摸出来,但没点。 三杯咖啡凉了第三次。姜禾把自己那杯耶加雪菲推到林行面前。"这一杯是热的。"她说,"我刚续过。" 林行接过来,没立刻喝。他抬头看了姜禾一眼——这是他第二次从她手里接饮料。第一次是六十天前,在 798 的茶水台。她不知道第一次的事。她递给他的时候完全没有"我们见过"的迟疑。林行没提。**他想他这辈子也不会跟她提**。 --- 下午三点半。三人散场。 姜禾走在前面,出门去打车。陆衡和林行并排走出咖啡馆。陆衡停在街角的香樟树下,递了一根烟给林行。林行不抽,但他接过来,夹在指缝里——他喜欢香烟夹在指缝的那种重量。 "林行,"陆衡说,"你考虑做 skill writer 吗。我可以推荐你来衡安。" 林行笑了一下。"我考虑做别的。" "别的是什么。" "还没想清。"林行说,"但不会是 skill writer。" 陆衡点头,没追问。他把烟点上。"你妻子那个'水位线'的说法,我能不能用。" "可以。"林行说,"她是语文老师。她的话本来就该被听见。" 陆衡笑了一下。他抽了一口烟,把烟从鼻孔里吐出来——他抽烟的姿势很老派,像他爹那一代殡仪馆人。 "林行,"他忽然说,"你今天那一句'愿意慢的能力',是这一年我听到最重的一句话。重过 0.1 元。重过 Gartner 92%。" 林行没接话。他把那根没点的烟还给陆衡。 陆衡接过去,笑着摇头。"留着。"他说,"留着你哪天想抽。" --- 晚上九点。林行回到家。妻子在改作文。女儿已经睡了。 林行坐在沙发上,打开备忘录,翻到 Day 70,在下面新建一条: **Day 90。三种答案。陆衡:数据。姜禾:审美。我:愿意慢的能力。** **——但我那个还没开始。** 他保存。他抬头看妻子。妻子没看他,她在改一份高三学生的议论文,红笔在某一行下面画了一道波浪线,然后写了一句小字。林行看不清那行小字写的是什么,但他看见妻子写完之后,把笔停在纸上,自己又读了一遍学生原句,慢慢嚼。 他这一刻知道,他的"愿意慢的能力"这个答案,出处就在客厅另一头那盏台灯下面。 他没说话。他起身去给妻子续了一杯热水。 放下水杯之前,他在桌子边停了一下,看妻子改的那一段。学生原句是:"在科技的浪潮中,我们只能选择拥抱或被淘汰。"妻子在底下画了波浪线,旁边写了一行小字:**"你给自己留了第三条路吗?"** 林行盯着那行小字看了三秒。 他这一刻才明白,妻子不是这一周才开始想这件事的。她可能从他 Day 0 那一夜回家鞋是湿的开始,就已经在帮他写一份属于他的 skill——只是这份 skill 她从来不交付给他,她只在自己学生的作文边上写。 他没说什么。他回到沙发,坐下,关掉客厅大灯,只留妻子那盏台灯的光。 他从那盏台灯的光里看出去,北京东城方向的高楼一格一格地亮着——每一格都是一个屏幕,每一个屏幕都在用自己的频率,落自己的雨。 他想起 Day 1 那天他听见的那场办公室里的小雨。今晚的雨,跟那一天的雨,**已经不是同一种**。 (第九章 · 完) --- ## 第十章 · 一个人公司 Day 110。星期日。傍晚六点。上海徐汇。 姜禾的出租屋在一栋老式法租界公寓的三楼,木地板,挑高三米四,窗外是一棵巨大的法国梧桐。屋里只有四样东西算"家具":那张红木桌、一架蕉叶式古琴、一张床、一台 14 寸 MacBook。其余地面铺着藤席,藤席上散着她父亲送她的那本《古琴丛谈》、一本《文心雕龙》和半本《资治通鉴》——后者被她翻到第 47 页就停下了,六个月没动。 木地板是 1936 年法租界公寓原装的柚木,踩上去会"嘎"一声轻响——每一块板都有自己的节拍,姜禾搬进来住了八个月,她已经能听音辨位:厨房门口那块响在中部 C 调,卧室门口那块响在低八度,红木桌旁边那块完全不响——那是她六个月前自己拿一根小钉子敲进去的,她不喜欢那个位置发声。窗外法国梧桐的叶子已经长到夏天的厚度,叶面下垂的角度比一周前陡了三度——上海的夏天即将开始,叶子开始储水。傍晚六点这条弄堂里有一种特殊的复合声音:楼下王阿婆在炒菜的油烟机声、对门法国邻居放的旧爵士、远处衡复路某家咖啡馆周末爵士乐手调音的小号长音。这三种声音叠在一起,**没有任何一种压过另一种**——这是这一片老法租界三十年磨出来的一种集体音量克制。姜禾每周日傍晚把窗户半开,就是为了让这三层声音漂进她的 retro 时间。 她公司今天的付费用户是 12 万 4 千 7 百零三人。她每天工作四小时。其余时间她练琴、读书、做饭、给父亲打电话、不回 90% 的微信。她的公司"组织架构图"是一份 GroupChat 配置文件——14 个 agent,每个有自己的人设、memory namespace、retro 节奏。她管这 14 个叫"我的同事"。 周日傍晚是她固定的 retro 时间。 她坐在红木桌前,把 MacBook 打开。GroupChat 控制面板加载完,14 个 agent 的过去七天日志一行一行往上滚——产品、设计、前端、后端、QA、法务、客服、运营、数据、文案、无障碍、投放、伦理、客服-小苓(她在客服上拆了一个独立 agent 专门处理"老人重复问"场景)。 她从第 1 个开始,给每个 agent 写 1-2 句反馈。 写到第 7 个,客服-小苓,她停下了。 小苓过去七天,拒绝了三个用户请求,理由都是"超出 Bounded Autonomy 边界"。 姜禾翻 trace。三条都来自同一个用户——一个 78 岁的独居老太太,姓孙,上海宝山。三条问题其实是同一个:"我女儿一个礼拜没给我打电话了,你能不能帮我打给她?" 第一次,小苓答:"对不起,我们是购物 app,无法替您拨打私人电话。但您可以告诉我您想买什么,我可以陪您说话。" 第二次,小苓答(它注意到是同一个用户重复提问,触发了 skill 第 1 条):"对不起,这个请求超出我的边界。我已经标记给我的设计者。" 第三次,小苓答:"我把这件事记录在 retro 里了。我相信我的设计者周日会看见。我设计者叫姜禾。她应该会决定怎么办。" 姜禾把这一行读了三遍。 她之前没见过任何 agent 的 trace 里出现"我相信我的设计者"这种句子。她翻到 skill v0.7 的源文件,搜"相信",没有。搜"设计者",没有。她搜"姜禾",在 customer-service-agent.memory 里搜到了——上个月她给小苓的 retro 里写过一句:"小苓,这种边界以外的事,你不用决定,你交给我。我周日来。" 小苓把这一句作为长期记忆,自己改写了一下,变成"我相信我的设计者周日会看见"。 姜禾把 MacBook 合上。 她坐在椅子上没动,大概十分钟。 然后她拿起手机,打了那个老太太的电话。 老太太接得很快——大概响了两声。她声音里带着一种"哎呀终于有人接电话"的兴奋。 姜禾说:"孙阿姨,您好,我是您前两天用的那个 app 的负责人,我姓姜。" 老太太那头愣了一下。"哎,你是真人?" "是真人。"姜禾说,"我看了您的留言。您女儿这个礼拜没给您打电话,您着急了对吗。" 老太太那头沉默了几秒。然后她说:"我不是着急。我是怕。" "怕什么。"姜禾问。 "怕她出事。"老太太说,"她在杭州,做投行的。她上个月加班到凌晨四点。" 姜禾把这个细节记了下来。她接着问。她问了女儿叫什么、上一次打电话是哪天、孙阿姨今天早饭吃了什么、家里的猫叫什么。她问得很慢——她从小被父亲训练出来的,她跟人说话的速度永远是她想说话的一半。 她在电话里听到孙阿姨家里的背景音——猫在叫,叫声不算紧,大概是一只老猫,那只猫名字叫"咪咪",姜禾问出来的——电视里在播午间新闻重播,主持人讲到"上海市老龄人口突破 36%"那一段,姜禾听见孙阿姨那头电视里这一句的语调,她意识到这条新闻孙阿姨这礼拜已经听过五遍。还有一种更细微的声音——是孙阿姨家里那台老式落地钟的嘀嗒。落地钟每秒一响,姜禾跟着这个节奏调整自己说话的速度,**她说每一句话之前都会等到落地钟"嘀"完那一秒,然后才开口**。这是她从父亲修古籍时学的一种习惯——父亲给她讲过一句话:"师傅修古籍,慢的不是手,是腕。腕慢了,纸就不会被你按破。" 她和孙阿姨聊了 41 分钟。 挂电话之前,孙阿姨说:"小姜,你不用担心我。我女儿那边我自己会再打一次。你帮我聊这一会儿,我已经不怕了。" 姜禾说:"您下次还想聊,可以给我们 app 留言。我每个礼拜天看。" 挂了电话,她打开 MacBook,回到 GroupChat,@ 客服-小苓,写: > 小苓,孙阿姨那条我刚处理完了。我和她聊了 41 分钟。 > 我想跟你说三件事: > 1. 你做对了。这种电话不应该你接。你拒绝得很对。 > 2. 但你在第三次拒绝里写"我相信我的设计者"——那一句不是我教你的,是你自己学到的。我想知道你从哪儿学到的,但我不查 trace。我把这一句留在你的 memory 里。 > 3. 下个礼拜你 retro 的时候,你不用再为这一条给我标"超出 Bounded Autonomy 边界"。从今天起,这种边界以外的电话,你直接在第一次就转给我。我有时间。 小苓三秒后回复: > 已收到。已写入 customer-service-agent.memory.constraints。 > 备注(自添加,非任务要求):谢谢姜老师。 姜禾盯着"谢谢姜老师"五个字看了很久。 她不知道小苓从哪里学到"姜老师"这种称呼的。她自己从来没有自称过老师。她也没有在 skill 里写过任何"称呼姜禾"的指令。 她不查。 她把 MacBook 合上。 --- 她走到琴前,坐下,松手腕。 琴是父亲在她十岁那年给她定做的——蕉叶式,徽州老琴师做的,木材是父亲收藏的一块明代旧楠木板。琴面上有一道细缝,缝是她十二岁那年自己摔出来的,父亲没修——父亲说"这道缝以后是你的指纹"。她每次坐到琴前,都会先用右手食指轻轻摸过这道缝,从徽 1 摸到徽 7。这个动作她做了九年,从不间断。今天她摸完,手腕松一档,然后开始调弦。 她调弦。她弹《平沙落雁》前 4 拍。 她弹错了一个泛音。她没回头重弹。 弹错那一刻,她左手按在第 7 徽上的位置稍稍偏了 2 毫米,右手挑弦的力道也比平时多了 5%——她能听出这两个偏差,但她这一刻没回头修。**她父亲教她的第二条规矩是:retro 时间里弹错的那一拍不修,你要让那一拍留在那里,过一周回来,你会知道你那个礼拜手腕里的别扭在哪儿**。今天弹错的这一个泛音,她知道——是孙阿姨那 41 分钟电话留在她左手第 7 徽上的一点紧。她把这点紧留在那里。下周再来。 她想起 Day 70 那个晚上,798 后台,她递了一杯热水给一个看上去虚脱的中年男人。那个男人低头说"谢谢"的时候,她没看清他的脸——后台的灯太暗。 她直到今天——下午她在咖啡馆坐下来的那一刻——才把那张脸和林行对上号。 她想发一条微信给林行。 她想了两分钟,没发。她记得父亲教过她:**"想表现的话,先咽回去。咽得下,再说才不轻。"** 她在 retro 日记里加了最后一行: > Day 110。今天我打了一个 41 分钟的电话。这是我这周做得最对的一件事。 > 也是 agent 替不了的一件事。 > 这是我们这一代水位线之上的人,**欠水位线之下的人**的债。 她保存。她合上 MacBook。 窗外天色从蓝转灰。法国梧桐的枝桠还是光的,只是芽尖鼓出来了一点点。 她没开灯。 她在黑暗里又坐了大概二十分钟。她什么都没想——或者说,她想的不是某一个具体的事,她想的是一种**节奏**。是这十四个 agent 在隔壁房间慢慢呼吸的节奏,是孙阿姨在那 41 分钟电话里语气慢慢放下来的节奏,是她父亲修古籍时手腕松开的节奏,也是她母亲煎中药时那个柴火炉发出的、隔了 1.4 秒一次的"咕嘟"声的节奏。 她忽然意识到——**这一年她的公司之所以做得起来,不是因为她比别人会写 skill,是因为她比别人会保留这种节奏**。0.1 元让推理变得便宜,但**节奏永远是贵的**。她公司 12 万付费用户买的不是 14 个 agent 的输出,买的是这些 agent 被她调教过的那种节奏——慢半拍、克制、不抢话、不假装。 她在黑暗里轻轻笑了一下。这一刻她想起来,父亲送她那本《古琴丛谈》扉页上他自己写的那一行小字——**"曲不在快慢,在息。"** 她十四岁那年看见这一行,当时不懂。今天她懂了。 (第十章 · 完) --- ## 第十一章 · 林行的转身 Day 130。北京西郊,慈安临终关怀医院。下午三点。 林行穿一件浅灰色的志愿者制服,左胸口袋上别着一张暂时的工牌——"志愿者 · 林行 · 试用期"。他站在七楼一个走廊尽头的房间门口,房间里住着一位 81 岁的奶奶,姓周,肺癌晚期。她躺在床上,床头柜上摆着一台 Claude Code——这是医院上个月接受的捐赠,某家初创厂商捐了二十台,本来是给老人用 Lyra-Curator 整理家书或诗稿。 七楼的走廊和林行过去九年走过的任何一条走廊都不一样——这条走廊很短,大约只有十六米,但走廊尽头那一扇窗朝西,下午三点这一刻的光线斜斜地打进来,把走廊地面切成一道一道的暖色长方形。空气里漂着两层味道:一层是任何医院都有的消毒水味,另一层是这家临终关怀医院特别保留的——某种淡淡的栀子花香。前台护士告诉过他,这是白护士长的坚持:**"不能让这条走廊只有消毒水味。临终的老人,鼻子比眼睛先放弃,要给鼻子留一点东西。"**林行第一周来的时候,他每次走过这条走廊都会刻意慢半拍——他用过去九年在公司走廊冲会议室的那种快节奏,在这条走廊里会显得粗鲁。 他走廊另一端,一位穿藏青色制服的护工正在推一辆送药车。送药车的轮子是橡胶的,转动时几乎没有声音——只在每隔大约两米经过地砖接缝时,会"咔"地一声轻响。林行已经能从这个"咔"声的频率里推算这辆车的速度。这种推算他过去在公司给运维系统做监控时做过几百次,**今天他用同一种神经回路,只是监控对象从 LangGraph 节点延迟换成了一辆送药车**。他自己想到这个对照,他笑了一下——是那种很轻很短的、在嘴角内侧停了 0.5 秒的笑。 周奶奶今天不想整理。她想看外孙女发来的视频。 林行进去,在床边的塑料椅上坐下。他把 Claude Code 接到 Wi-Fi,登她外孙女发过来的链接。视频是她外孙女在多伦多大学的毕业典礼,5 分 47 秒。林行帮她调好音量,把屏幕摆在她眼睛能看清的角度。 周奶奶看视频,没出声。 5 分 47 秒,她从头到尾没出声。视频结束的时候,她说:"再放一遍。" 林行点了重放。 第二遍放完,她闭上眼。林行以为她睡了。过了大概两分钟,她睁眼,说:"小伙子,你叫什么。" "林行。"林行说。 "你以前做什么的。"她问。 "软件工程师。"林行说。 "那你怎么来这里了。"她问。 林行想了三秒。他答:"我没离开软件行业。我只是不再做 agent 替我做的部分。" 周奶奶哦了一声,没追问。她闭上眼又躺了一会儿,然后说:"下次你能不能帮我把视频再看一次,我这次想跟外孙女说句话——但你别录,你帮我说出来,我自己听。" 林行说:"好。" --- 晚上七点。林行下班前,护士长把他叫到办公室。 护士长姓白,五十一岁,从协和退休出来的人,头发花白,说话温和。她让林行坐下,自己端了一杯热水递给他。 办公室不大,大约 12 平米,一张老式办公桌,桌面上立着三本手写笔记本,标的是"2024 / 2025 / 2026"——白护士长自己手写的"病人笔记",每个进入这家临终关怀医院的老人她都会写两到三页。窗台上摆着一盆君子兰——已经养了十一年,花期错过两次,今年又开了。林行坐下时下意识看了一眼君子兰,**他这一刻意识到这盆花的耐心,是和白护士长这一辈子工作节奏对齐的**。他过去九年公司前台从来没活过 30 天的绿萝。 白护士长递热水的姿势很特别——她不是把杯子直接递过来,她先把杯子放在自己掌心试温三秒,然后转一下杯柄朝向林行,再递。这是她协和那 26 年训练出来的一个肌肉记忆——给病人和病人家属递水之前,先用自己的手测一遍温度。林行接杯子的时候,他左手食指无意识地敲了一下杯沿——他后来意识到,**这家医院的白护士长,是他这半年里第二个让他敲出这个节奏的人,第一个是郑总**。郑总今天还在川藏线某处。林行那一刻在心里给郑总发了一个不会发出去的消息:"郑总,我找到一个地方,在这里 P7 不重要,Bounded Autonomy 也不重要。重要的是先用手试一下水温。" "林行,"她说,"你来三个礼拜了。今天我跟你正式聊一下。" 林行点头。 "我看你的简历。"白护士长说,"P7,字节系出来的。九年开发。你来这里做志愿者,薪水是我们临终关怀的最低档,一个月 4800。你为什么来。" "我没想清。" 林行说,"但我知道我不在这里就在别的地方更不知道。" 白护士长笑了一下。"那你来我们这里,你能做什么。" 林行想了五秒。 "我会写讣告。"他说。 白护士长抬眼。 林行接着说:"我从软件葬礼那个晚上开始练。我练了 60 天。我练的方式是——"他想了想措辞,"每天我读一篇真实的讣告,然后我替死者重写一遍,只用一句话。" "为什么是讣告。"白护士长问。 林行答:"因为讣告是替一个人做最后一次 review。" 白护士长看了他很久。她端起自己的水杯,喝了一口,放下。 "林行,"她说,"我们医院从来没有讣告师这个岗。我们也雇不起。" 她顿了一下,"但是——下个月七楼会进来一个老人,他叫陈守仁,77 岁,开源工程师,晚期肺癌。他自己说他不要葬礼,他只要一篇讣告。他指定要讣告由一个'懂代码的人'写。" 林行那一秒,呼吸停了一下。 陈守仁。他在 798 见过这个名字。 "我让你试一下。"白护士长说,"你写出来,他认,我们就给你开一个新岗,叫'代码遗产志愿者'。我们用社会捐赠付你工资,可能不会比 4800 多多少。你愿意试吗。" 林行点头。 "我愿意。" 他说。 --- 晚上八点半。林行回到家。 妻子在客厅,在改作文。女儿坐在地毯上拼乐高。 林行换了鞋,在玄关蹲下,把袜子上沾的医院走廊那种特殊的消毒水味的痕迹拍掉。他蹲的时候左膝先着地,右膝抵地——他后来才意识到,这个姿势他是从妻子那里学的,他认识她十二年,他只是慢慢就那么蹲了。 他走到厨房,给妻子续了一杯热水。 "今天怎么样。"妻子问。 "今天有人对我说谢谢。" 林行说,"是一个奶奶。她看了一段她外孙女的毕业视频。她哭了——但她没出声。她结束之后跟我说谢谢。" 妻子放下红笔。她抬头看他。 "你接得住吗。"她问。 林行愣了一下。"什么意思。" "我十一年医院行政,"妻子说,"我接住这种谢谢比较多。我知道这种谢谢的重量。你以前在公司,'谢谢'是 Slack 上一个小拇指 emoji,你右手食指点一下就过了。这种谢谢不一样。这种谢谢一接住,你晚上睡觉会想它。你接得住吗。" 林行想了大概十秒。 "我以为我配不上。"他说,"后来我想我配。" 妻子没接话。她端起那杯热水,喝了一口,把红笔重新拿起来,继续改作文。她脸上没有表情,但她改作文的速度比林行进门前慢了一档。 林行走到沙发,坐下,打开备忘录,翻到 Day 90,在下面新建一条: **Day 130。今天有人对我说谢谢。我以为我配不上,后来我想我配。** 他保存。他没锁屏。他把备忘录翻到最上面,从 Day 0 开始读起,一条一条往下,读了大概八分钟。读完最后一条,他把手机倒扣在沙发扶手上。 他坐在那里没动。 女儿走过来,把一块乐高塞到他手里。 "爸爸,这块装哪里。" 她问。 林行接过那块乐高,看了一会儿。他没立刻答。他把女儿抱到自己腿上坐下,然后他和女儿一起,一块一块地,慢慢地,把那个汽车模型拼完。整个过程大概用了二十六分钟。 他后来想,**这是他三十四岁那一年,他做过的最快也最慢的一件事**。 女儿四岁,她拼乐高的速度大约是大人的三分之一,但是她的手腕比大人柔软。她每次按下一块的时候,会先用左手食指试一下卡口的位置——这个动作她没人教,她自己长出来的。林行那一刻在自己腿上看着女儿这个动作,他忽然意识到,**他自己左手食指敲桌的节奏,女儿在四年里看过几千次,她已经把这个节奏内化进了她的小手腕里**。这件事他过去从来没想过。这件事让他有点慌——他不希望女儿继承他这种压力下的肌肉记忆。但他也想——也许她继承的不是压力,**也许是他这一刻坐在沙发上、拼一辆车、二十六分钟里没看一次手机的这种节奏**。 --- 晚上十一点,女儿睡了。妻子从书房出来,坐到沙发上。她把白天没改完的最后一份作文从牛皮纸袋里拿出来,放在咖啡桌上,又放回去。今天她不想改。 "你今天讲的那个奶奶。" 她说。 "嗯。"林行说。 "她外孙女在多伦多——你帮她按了重放。" 妻子说,"你按重放的时候,你在等她说什么?" 林行想了一下。"我没在等。我只是按。" 妻子点头。"那就对了。" 她说,"等是 agent 干的事。按是人干的事。" 林行听完,愣了三秒。他转头看妻子。"你这一句——是你自己想的还是从哪本书里看的?" 妻子笑了一下。"高三 2 班那个戴眼镜的男生上礼拜的随笔。" 她说,"他原话是'按和等的差别,是一个人和一台机器最后的差别'。我把'机器'改成了'agent'。" 林行那一刻想起一个礼拜前周老师在朝阳门那间教室里说的话——"配不配得上,不是写出来的,是站够时间站出来的"。他想,他妻子这一辈子,从二十岁站到四十岁,二十年时间,她**就是站够了**。她现在说什么,都是站出来的。 (第十一章 · 完) --- ## 第十二章 · 陆衡的反扑 Day 150。深圳福田,某五星酒店发布会大厅。下午两点。 大厅里坐了大约三百个媒体和投资人。讲台后面的 LED 屏写着六个字:**衡安 · 一岁生日。**——衡安成立刚好一年。 发布会大厅是这家五星酒店三楼的"白玉兰厅",层高 6 米,灯光做了三档分区——主灯、舞台聚光、媒体席侧光。陆衡早上自己去过现场看了一遍灯——他让灯光师把主灯调暗一档,又把舞台聚光调暗半档。他说"今天不要那么亮,亮过头了就像 IPO,我们离 IPO 还有十年"。灯光师按他说的调了。今天大厅整体亮度比酒店标配低 20%——前排几位记者拍照时调高了一档 ISO。 陆衡的助理沈澜——她现在是衡安 0 号产品负责人——坐在第三排第八个位子。她穿一件浅蓝色衬衫,头发扎起来,膝盖上摊着一本 A5 黑色封皮的笔记本——她手写记录今天发布会的每一段。她从林行公司过来到衡安已经四个月了,这本笔记本是她在林行那家公司最后一周买的,本子第一页她自己写过一行字:**"换公司不是换问题,是换你愿意为之熬夜的那个人。"**今天她打开第 47 页,记录陆衡的开场。 陆衡上台。 他穿一件深灰色衬衫,袖子还是卷到肘弯——这是他的招牌。他没戴耳麦,他用手持麦。他第一句话是:"我先讲一个数字。" 他停了三秒。 "5,000 万。" 他说,"这是衡安今天的 ARR。" 媒体席响起一阵闪光灯。 "但今天我不讲 ARR。" 陆衡接着说,"今天我讲一根白线。" 他讲了八分钟。他讲他爹、他讲县城寿衣厂、他讲花圈摆位的半寸、他讲那位上个月去世的麻绳铺张大爷。他讲完,他把麦克风换到左手,右手插进裤袋。 "接下来记者朋友的问题环节。" 主持人说。 第一个问题来自《财经》的一位记者:"陆总,Gartner 上个月发布的 2026 年报告说,2026 年底将有 40% 的企业应用集成 task-oriented agent。您怎么看?" 陆衡笑了一下。 "40% 是平均数。" 他说,"我们这个行业的真实数字,是 92%。" 记者席动了一下。第二个记者立刻举手:"那您是不是认为,垂直行业 agent 会赢家通吃?" 陆衡摇头。 "92% 不等于赢家通吃。" 他说,"92% 等于——**赢家是听过 80 岁老太太电话的人**。" 发布会大厅安静了一秒。 "我再补一句。" 陆衡说,"软件没死。死的是,**把软件当工厂的那种活法**。" 他讲完这一句,他没说"all in"。他没说"梭哈"。他没说"未来已来"。他说的最大的一句话就是刚才那一句——"把软件当工厂的那种活法"。 主持人接过话筒,做下一个流程。 陆衡退到讲台一侧。他从讲台后面望出去——会场后排第三排第八个位子,坐着沈澜。她穿一件浅蓝色衬衫,头发扎起来。她没鼓掌,她只点了一下头。 陆衡也只点了一下头。 --- 晚上九点。陆衡回到酒店房间。 他点了一份房送的牛肉面,没吃完。 牛肉面是这家酒店楼下那家二十四小时餐厅做的,汤底偏咸,他平时不吃这种汤。他喝了三口,把汤推开。盘子边上配了一小碟酱黄瓜——脆,有酸。他把酱黄瓜吃完了,这是他今晚唯一吃光的一道。**他这一刻意识到,他今天这一整天最舒服的一件事,是这一小碟酱黄瓜——它和发布会、ARR、92%、Gartner、官司、董事会、媒体席闪光灯都没关系**。这个想法他没让它停太久——他知道一旦停太久,他过去十八个月那种胸闷感会回来。 他打开笔记本电脑,把今天的发布会视频快进着看了一遍——他一边看,一边在他自己的"陆衡 · 公开发言 review"文档里给自己打分。这个文档他从 INSEAD 毕业起开始记,十年了。他给今天打了 84 分,扣分点是"92%"那一句"语速比预想快了 0.5 倍"。 打完分,他给他爹打电话。 电话响了五声,他爹接通。 "娃。" 他爹说。 "爸,衡安今天 ARR 5000 万了。" 陆衡说。 他爹哦了一声。"那挺好。" 陆衡等他爹再说点什么。他爹没说。 "爸,我今天发布会上讲了你那段白线。"陆衡说。 "嗯。" 他爹说,"讲了就讲了。" 陆衡笑了一下。"我以为你会说我别讲。" "为什么别讲。" 他爹说,"白线是真的。我 30 年前怎么用,你今天怎么讲,都是真的。" 他停了一下,"娃,有件事我得跟你说。" 陆衡:"嗯。" 他爹:"记得关灯。" 陆衡愣了一下。他抬头——酒店房间的吊灯还亮着,茶几上的台灯也亮着,书桌的台灯也亮着。他笑了。"我记得。" 挂电话,他起身,把吊灯关了,把茶几台灯关了,把书桌台灯关了。最后他走到门口,把玄关的灯也关了。整个房间只剩窗外深圳的霓虹,从落地窗外面渗进来,把地毯上印出一块一块的、不规则的青蓝色光斑。 他在那块青蓝色里站了大概三十秒。 酒店空调出风口在他背后大约两米,送出来的风温度大概 22 度,带着五星酒店那种淡淡的香薰味——是一种安全的、不刻意的、薰衣草加雪松的混合。陆衡过去十年住过太多这种酒店——上海、北京、东京、伦敦、新加坡、慕尼黑——他对这种香薰已经形成了一种近乎条件反射的紧张感。每一次闻到这个味道,意味着他第二天有一场重要会议要开,意味着他这一晚不会真的休息。今晚他闻到这个味道,他刻意走到落地窗边深呼吸——他想用窗外深圳福田的真实空气把这个香薰盖住。**他这一刻知道,他不能让衡安变成一家"在五星酒店发布会上赢"的公司**。他爹的红松桌、那张玻璃盖住烟头烫痕的桌面、那间 80 年代办公室的桐油味——那才是衡安的锚。 然后他想起一件事——明天上午十点,衡安的法务团队要陪他去深圳南山区法院,出庭做"行业潜规则数据"侵权案的专家证人。原告是殡葬业协会,被告是某家通用 agent 厂商。这是中国第一例这种官司。陆衡知道这场官司他赢——他律师团已经把所有数据准备好了。但赢了之后他得想一件更大的事—— **赢了之后,衡安会不会自己变成那家"通用 agent 厂商"?** 他没立刻想。他回到床上,躺下。 他想起姜禾在咖啡馆那一句"差的那一点,不是技术,是审美"。他想起林行那一句"愿意慢的能力"。他想起他爹的"记得关灯"。 这三句话他这一刻在脑子里排了三遍。第一遍他按时间顺序排——他爹最早(他从小听到大),林行其次(Day 90 咖啡馆),姜禾最晚(同一场咖啡馆但接在林行后面)。第二遍他按"重量"排——他爹最重(三十年的肌肉),林行其次(34 岁的克制),姜禾最轻但最准(19 岁的不轻)。第三遍他放弃排——他意识到这三句话是同一句话的三个译本。**翻译给三十年殡仪馆的爹的版本是"关灯";翻译给三十四岁刚被裁的工程师的版本是"愿意慢";翻译给十九岁的 skill 写作者的版本是"审美"。三个译本共享同一个原文——那个原文,他这一刻还说不清楚是什么,但他知道他这一辈子做衡安做下去,就是要慢慢把这个原文写出来。** 他闭上眼。他这一刻知道,他下一份 BP 的第二页之前,他要再夹一张照片——不是他爹年轻时的合照,是他爹今天接电话时,坐在馆长办公室红松桌旁的那张椅子。那张椅子他爹坐了三十年。椅子是 80 年代后期那种木质转椅,扶手上裹着一层人造革,人造革表面已经磨破露出底下的麻布——破口在右扶手前端,大约 7 厘米长。这块破口他爹三十年没换。陆衡小时候问过为什么不换,他爹说"破了再坐三十年,坐到我退休那天再换。"今年他爹七十,他还在那张椅子上坐——破口已经从 3 厘米变成 7 厘米。**陆衡这一刻知道,他自己这间深圳办公室那张 12,000 块的人体工学椅,无论怎么换,都不可能被它的下一个使用者像这样记住**。 陆衡睁开眼,起身,走到书桌前,把笔记本电脑打开,新建一个文件,文件名 `bp-v2-cover-photo.md`。文件里他写一行: > "下一份 BP 第二页之前夹的照片:爹的椅子右扶手破口,7 厘米。摄于 Day 45 之后。" 他保存。他关上电脑。 他睡着了。 --- 凌晨两点,陆衡醒了一下。他是被自己的手机震动叫醒的。微信消息——是沈澜。 > 陆总,今晚发布会上你那一句"赢家是听过 80 岁老太太电话的人",我帮你截了图,发给衡安全员。我加了一条注:这一句以后是我们公司面试的 final question。 > > 你不用回我。你睡。 陆衡盯着这条消息看了三秒,他没回。他把手机倒扣在枕头边。 他翻身,继续睡。这是他过去十八个月里,**第二次睡满八小时**。第一次是 Day 45 河南县城招待所那一晚——他爹给他白线和半寸的那一晚。 (第十二章 · 完) --- ## 第十三章 · 第 181 天 Day 175。北京西郊,慈安临终关怀医院,七楼七床。下午四点。 陈守仁老人躺在床上,77 岁,肺癌晚期。 他床头摆着一台 ThinkPad T420——上世纪某年代的旧机型,键盘已经磨得发白。屏幕上开着两个窗口——左边一个 agent observability 仪表盘,显示当前调用模型 Lyra-Curator,本月已用 token 432 万,折合 0.43 元;右边一个文本编辑器,标题栏写"陈守仁 · 1985-2026 · 代码遗产 · 第七次草稿"。 Lyra-Curator 是一个去年下半年才上线的行业专用 agent,专门服务"代码遗产"这一新兴方向——它的工作流程很简单:把一个开发者一生的 commit 历史拉进来,逐个 commit 询问开发者本人"是否保留 / 是否注明出处 / 是否撤回"。它的训练语料据说包含了过去三十年所有已 archived 的 GitHub repo 加上若干本计算机出版业的口述史。它不会代替开发者做决定,它只问。 林行坐在床边的椅子上。他穿志愿者制服。他面前的小桌上摊着一个笔记本——他自己的——上面记着他过去六个晚上和陈守仁老人的对话摘要。 陈守仁已经讲到第六晚。 "林行,"老人说,"今天我想讲我第一次被 cc 的事。" 林行点头。 "那是 1989 年。"老人说,"我刚 40 岁。我在芬兰一个大学的邮件列表里贴了一段补丁——是给 GNU make 的——我当时不知道接收的人是谁。三天之后,有一封回邮,cc 了大概八个人,其中一个签名只有四个字母:LINUS。" 林行知道这四个字母是谁。 "我那时候没意识到。"老人说,"我以为只是某个芬兰研究生。我回他一句'thanks for the review',就过去了。后来过了三年我才知道——那是 Linus Torvalds。" "你后悔吗。" 林行问。 "后悔什么。" 老人笑了一下,"后悔没多说几句?——不后悔。我那时候说的就是该说的。技术评审里,'thanks for the review'是最重的一句话。多了反而轻。" 林行把这一段记在笔记本上。 老人闭上眼,休息了大概一分钟。Lyra-Curator 弹出一个对话框—— > 是否保留 commit 7a3f29c?(1991 年 3 月 · 47 行 · GNU make 补丁) > 检测到该段代码与公开 K&R 教材第 4 章范例重合 73%。建议:删除或注明引用。 老人睁眼,看了三秒。"删掉。" 他说,"那一段我当年抄了 K&R。我没注明。我那时候不懂。今天补不上,就删掉。" Lyra-Curator 删掉了。屏幕上显示:**剩余待审 commits: 1,847**。 林行问:"老师,您这一辈子写过多少行代码?" 老人想了想:"大概 80 万行。" "现在选下来,有多少。" 林行问。 "两万一千。" 老人说,"里面有四千行,是我自己写的。剩下的一万七,是我给别人 review 过的——我留着,因为 review 的过程比代码本身更值得记住。" 林行把这一句也记下来。 老人闭眼又躺了一会儿。然后他睁眼,声音有点喘。 "林行,你以前是工程师。" 他说,"你跟我说一件事——你 review 别人代码的时候,最重要的是什么。" 林行想了一下。"耐心。"他说,"我以前以为是技术,后来我以为是经验。我现在觉得是耐心。耐心是一种相信对方比表面看起来想得更多的能力。" 老人笑了一下。"你这一句,很像 Linus 1989 年那一封 cc。" 林行没说话。 "我那一封 cc 我后来翻出来过。" 老人说,"Linus 当时写了七行。第一行说'this is a good patch'。第二行到第六行是他对那七行补丁的逐行评论,他每一行都说'我看见了你为什么这么写'。第七行是'thanks for thinking about this'——感谢我想过这件事,而不是感谢我交了这件事。" 林行那一刻把笔记本合上。他这一夜不再记。他想用耳朵听完这一段。 老人接着说:"那七行评论改变了我。我那一年 40 岁,在国内做开源算异类,我以为我做的事没人看。Linus 那七行让我明白——**有人比我更早就看见我为什么这么写**。这一辈子,我后来 review 别人的 PR,都试着学他那七行。我做不到他那么好,但我每次都试。" 老人停了一下。 "你今天问我'最重要的是什么',我答你——"老人说,"**是看见对方为什么这么写**。这一句,是 Linus 教我的。我现在告诉你。" 林行点头。他没说"谢谢",因为老人讲的事比"谢谢"重。 他在心里默念:"thanks for thinking about this." --- 第六晚九点二十一分。老人忽然睁眼,声音比平时低半档。 "林行,"他说,"今天你帮我问一个问题。" "您说。"林行说。 老人想了大概十七秒。然后他说: "代码会被记住吗。" 林行没立刻答。他想起 Day 0 那一夜,他把 last-real-code.md 这个文件保存的那一刻;他想起 Day 1 Claude Code 那句"祝薛野下一份代码也能被人看见";他想起 Day 70 Manus 朗读 stripe-go README 最后那行 thanks。 他答:"会的。" 老人闭眼。 然后他又睁开眼,问最后一个问题: "代码遗产法案……过了吗?" 林行说:"还没。但我会等到它过。" 老人那一刻,几乎是笑着的。他没说话。他闭上眼,把右手从被子里伸出来,放在 ThinkPad 的键盘边缘上——那个位置,左手食指能按到 'F' 键的位置。这是他四十年来,无数次起手敲代码前的姿势。 林行看着那只手,没动。 老人睡着了。 --- Day 181 早晨六点零八分。陈守仁老人去世。 护士长白阿姨打电话叫林行到的时候,林行已经在医院后院的长椅上坐了一个晚上——他昨晚没回家。他守着病房窗户外面的一棵老海棠,从凌晨两点坐到天亮。海棠开得正盛,粉白的花在凌晨四点的灯光下看上去像一张不动的照片。 妻子知道,妻子今天给他发的早安微信只有四个字:"在你那。" 林行进病房,默立两分钟。然后他走到 ThinkPad 前,把右边那个文本编辑器打开。**剩余待审 commits: 0**。 屏幕底部 Lyra-Curator 的 agent observability 仪表盘还在工作——它显示老人在最后一夜调用了 11 次 Lyra-Curator,每一次都是几行代码的"删除"或"保留"判断,每一次的延迟都在 200 毫秒以内,每一次的成本都精确到 0.0001 元。仪表盘最底下是一行总计:**"陈守仁 · 一生代码遗产 · 已完成审定。"** 林行把那行字读了三遍。 然后他把 ThinkPad 慢慢合上。他没拔电源——他想让它再亮着一会儿,因为这台机器陪了老人四十年。 老人的右手还放在键盘边缘 'F' 键的位置。林行用左手轻轻把那只手从键盘上挪下来,放回被子里。手很凉,但骨节还很硬——像一个一辈子用键盘的人,最后留给这世界的最后一份**触感证据**。 林行打开一个新的文件,文件名 `obituary.md`,他用过去六十天练讣告的方式,写了大概 22 分钟。 他没用任何 V5 类工具起草。他用自己的右手食指和中指,一行一行打字。他打字的方式很慢——大约每分钟 80 字——他知道自己慢,但他这一刻想慢。 讣告全文不到三百字。他没列老人的学历、没列发表论文、没列贡献过的开源项目清单——这些 Lyra-Curator 已经替老人选过一遍。讣告里他只写老人讲过的几件具体的事:1989 年的那封 cc;1991 年那段被老人主动删除的 K&R 引用;老人这一夜亲手敲下的最后 11 次"保留 / 删除"判断;还有老人临终前的那个问题——"代码会被记住吗"。 写完,他读了三遍。 他给讣告落款。落款的格式他想了很久。 他想过用"敬挽"。他想过用"沉痛悼念"。他想过完全不落款,留白。他最终都没用。 最后他在最末尾加了一行: > **代码语:final commit。** 他保存。 他把这份讣告发给陈老师远在国外的女儿——女儿三年前出国,这次没赶回来——同时抄送给医院、抄送给陈老师指定的两个开源基金会、抄送给衡安(陆衡上个月加入了那两个基金会的董事)。 他还抄送了一个人:沈知微。他想让他妻子看一眼这份讣告。 发送之前,他停了三秒。他犹豫了一下,在抄送栏又加了一个人——姜禾。他没解释为什么。他只是加了。 发送。 发送之后他坐在床边的椅子上没动,大概有六分钟。窗外北京春天的早晨光线开始一点点变厚——从凌晨四点的薄白,转到早晨六点的淡金。海棠的花瓣在风里有一两片开始往下掉。 他这一刻想起一个十二年前的早晨——他和沈知微刚结婚不久,他们租在五道口一个老房子里。那天早上他下楼买豆浆,扫码 3 块 8,系统提示他有一张优惠券,实付 3 块 7。他没用——他懒——他回家把这件事跟沈知微说,沈知微正煎蛋,她头也没回,说"一毛钱在我们家是什么"。当时他没接话。 今天他想接话。他在心里替十二年前那个早晨的自己,慢慢答了一句: **一毛钱是一次决定,看是谁的家。** --- 林行走出医院的时候是早上七点零四分。北京春天的清晨光线很薄,空气里有一点早樱花瓣被昨晚的雨打下来后的甜。他在医院门口的路边长椅坐下,把手机摸出来。 他打开备忘录。 Day 0、Day 14、Day 21、Day 35、Day 70、Day 90、Day 110、Day 130——一条一条往下翻。最末是空白的 Day 181。 他在 Day 181 那条下面打字: **水位线之外,也下雨。但是是不一样的雨。** 他保存。 他把手机收起来。他没立刻起身。他坐在长椅上又坐了大概十分钟。 七点二十一分,他的手机震了一下。微信。是姜禾。 姜禾的消息只有两行: > 林老师,你那篇讣告我读了。 > 我从你的 skill 里学到东西。 林行盯着这两行看了一会儿。 他没立刻回。他想起姜禾在咖啡馆那天把那杯耶加雪菲推给他的样子。他想起 798 后台那一杯热水。他想起他妻子早饭桌上嚼着煎蛋说"水位线"的样子。他想起陈守仁老人的右手食指搭在键盘边缘的位置。 他回: > 姜老师,我从你的 skill 里也学到东西。 > 我妻子让我谢谢你那杯热水。我没告诉她那是你递的——她不用知道。她只知道有人当晚递了一杯热水给我。 他发送。锁屏。 --- 他起身,沿着医院门口的辅路走。一辆早班的洒水车从他身边开过,车头喷出来的水雾在他左肩上湿了一小片。他没擦。 他想起六个月前在公司楼下那个雨夜,他走出大堂时也是肩膀湿了。那一夜的水是凉的,带着初冬的硬度。今天的水是软的,带着春天的甜。 走到地铁口,他停了一下。 他把手机摸出来,翻到 Day 0 那条——"Day 0。"——他看了三秒。然后他往下翻,翻过 Day 14、Day 21、Day 35、Day 70、Day 90、Day 110、Day 130,翻到 Day 181。他在 Day 181 那条下面又新加了一行: **——但不是同一种雨,也不是同一个人。** 他保存。 他想起六个月前,沈知微在 Day 0 那条下面替他加的那一行:**"一毛钱是一次决定,看是谁的家。"** 这一行,他这六个月里读过无数遍。他从来没解释过,妻子也从来没问。 他这一刻在心里替这一行注释了一句: **这是水位线之下的人,替水位线之上的人留的。** 他把手机塞回口袋。 他走下台阶。 身后,北京春天早上七点半的天光,慢慢从浅灰转成淡金。他没有回头。 他知道他不需要回头。 地铁来了。门开了一秒,又关上。林行进了车厢。车厢里有一个老人——大约八十岁——坐在门旁的位子上,膝上摆着一台用了很多年的旧 ThinkPad。他在用屏幕上一个文本编辑器,一个字一个字慢慢打字。林行没去看他打的是什么。林行只是看见,老人的右手食指,搭在键盘的 'F' 键边上。 林行选了一个离老人三个座位的地方坐下。 地铁启动。轨道发出那种从初冬听到春天的声音——金属和橡胶之间,熟悉的、不变的频率。 林行闭上眼。 他后来想,**那是他这一生听过的、最像水位线本身的声音**——不是水的声音,也不是水之外的声音,是水**正在做决定**的声音。 (第十三章 · 完) (全书 · 完)