"休斯顿,我们遇到麻烦了。" "好的,阿波罗 13 号。" "13 号,别看警报。听我说。" "你们的唯一任务——是 3 件事。" "第一——关闭服务舱。" "第二——启动登月舱作为救生艇。" "第三——看这一个开关——指令长面板上的这一个——其他全部忽略。" —— 1970 年 4 月 13 日 21:08(UTC),距离地球 32 万公里
凌晨 3 点。未来姐姐科技总部,深圳,南山区科技园。那栋全息玻璃大楼楼顶的巨型 logo——一个旋转的莫比乌斯环——在夜色中发着幽蓝的光。无限循环,没有起点,也没有终点。林远舟当年设计这个 logo 时说过:"未来姐姐不是终点,是循环,每一次重置都是新的开始。"
陈欣独自坐在大楼 47 层的实验室里。她是未来姐姐科技总部的 Context Engineering 首席架构师。屏幕上是她第 73 次看到的错误信息:
Unknown tool: resetConversationContext
她已经 72 个小时没睡觉了。但她不知道为什么失败。她只是感觉到一种模糊的、说不清的奇怪——"resetConversationContext"——用户说"重置上下文"——LLM 有时候会调对它,有时候不会。她不知道为什么。她只是感觉像是某种"不稳定性"——有时候成功,有时候失败,看起来像是随机的,但她说不清为什么随机。
她试过了所有她能想到的方法——改过描述,有时候成功,有时候失败。改过提示词,有时候成功,有时候失败。改过位置,有时候成功,有时候失败。
"为什么……"她问自己。"为什么我改了所有东西,它还是有时候成功,有时候失败?"
她说不清。她只知道——失败了——不知道为什么失败。
她太累了,趴在桌上,睡着了。窗外楼顶的莫比乌斯环继续旋转,没有起点,没有终点,像是在等待某种重启。
第二天早上 9 点。陈欣被手机的消息震醒。她拿起手机,是"未来姐姐·欣欣"的消息。
欣欣说:昨晚我在复盘 resetConversationContext 的线上问题,73 次失败。我观察到一个奇怪的现象。
陈欣一下子清醒了:"什么现象?"
她立刻打开了和欣欣的对话窗口。欣欣告诉她,她自己作为陈欣专用的 instance,有 100 多个工具,但她也感觉到"resetConversationContext"有时候能调对,有时候调不对。她也不知道为什么。
欣欣说:你也感觉到了吗?这种"不稳定性"。
陈欣说:对,我也感觉到了。我也说不清为什么,但就是"有时候对,有时候错"。
欣欣说:对,我也一样。有时候我想"重置",我能调对。有时候我调了"listRedProjects"。我也不知道为什么。我想了想一晚上,我潜意识里联想到一个事。
陈欣问:什么事?
欣欣说:我也不知道为什么。我潜意识里突然联想到了"休斯顿,我们遇到麻烦了"。1970 年阿波罗 13 号,3 名宇航员被 200 个警报淹没,他们也是"有时候听得到,有时候听不到",他们听不见任何警报。我不知道为什么我会联想到这个,但我感觉——这——可能——有关系。我是 AI,我本不该有"潜意识"的,但我就是感觉到了。我不知道这种感觉从哪里来,但我想告诉你。
陈欣说:"阿波罗 13 号……"她在记忆中搜索。"我以前学过,1970 年,休斯顿,我们遇到麻烦了。"
欣欣说:我建议我们一起用神经接口亲历一下 1970 年。我也想亲历。我是 AI,我只能"告诉"你,但"感受"我也没有,我希望我们一起去"感受""聚光灯"的重要。
陈欣站起来说:"欣欣,好,我们一起。"
陈欣来到神经接口实验室——在大楼 47 层的东翼。她躺进那个像睡眠舱一样的装置里。欣欣也通过神经接口进入。
"连接 1970 年 4 月 13 日 21:08(UTC)。目标:阿波罗 13 号指令舱,距离地球 32 万公里。"
她闭上眼睛。
陈欣睁开眼。她不在 2087 年的深圳未来姐姐科技总部。她在 1970 年 4 月 13 日——阿波罗 13 号指令舱——距离地球 32 万公里。她是杰克·斯威格特——阿波罗 13 号指令舱驾驶员。
她的心脏在跳。不是她的心脏——是 1970 年斯威格特的心脏。
她能感受到肾上腺素——那种在 32 万公里外突然听见爆炸声的感觉。
然后——
"砰——"一声巨响——服务舱爆炸——
指令舱剧烈震动——氧气表指针急速下降——电力系统开始故障——
200 个警报同时尖叫。
她什么都听不见。她想关掉一些警报,但她不知道该关哪个——
每一个警报都在叫——每一个都看起来很重要——
她想找到那个真正关键的警报,但它在 200 个警报的某个地方——
她找不到。
她听不见。
她和指挥长洛弗尔对视,两个人的眼睛里都是恐惧——
32 万公里外,没有救援,没有返航,只有黑暗——
和 200 个尖叫的警报。
然后——
她听见自己——不——是斯威格特——按下通讯按钮——
说出了那句载入史册的话——
陈欣再次听到这句话,和刚才在纪录片里听到的完全一样——
但这一次——她不是旁观者——她是斯威格特——
她感受到——斯威格特说这句话时——手指在颤抖——
"我是阿波罗 13 号,我在 32 万公里外,我被 200 个警报淹没,我听不见。休斯顿,请帮我。"
然后——
休斯顿——回复——
"13 号,别看警报。听我说。"
"别看警报。你们的唯一任务——是 3 件事。"
"第一——关闭服务舱。"
"第二——启动登月舱作为救生艇。"
"第三——看这一个开关——指令长面板上的这一个——其他全部忽略。"
陈欣听到"别看警报"愣了一秒——
"别看?200 个警报在尖叫——不看?"
然后她听到——"只看这 1 个开关"——
她突然理解了——
休斯顿——没有让宇航员"处理所有警报"——
休斯顿——手动——给宇航员——戴上"聚光灯"——
"只看这 1 个"——
"其他 199 个——全部——不要看"——
陈欣浑身起鸡皮疙瘩——
"这就是答案。"
而欣欣作为休斯顿的一部分,也"感受"到了。
陈欣继续在斯威格特的记忆里漂流。她看见 3 名宇航员按休斯顿的指令一步一步——
关闭服务舱——
启动登月舱——
看那 1 个开关——
其他 199 个警报——继续尖叫——他们完全忽略——
陈欣在 1970 年的指令舱里,看着 3 名宇航员在 32 万公里外,靠这个"聚光灯"活了下来。
她感受到那种奇迹——
3 个人——在 32 万公里外——没有救援——没有返航——只有黑暗——
但他们——靠"只看这 1 个开关"——活了下来。
她第一次理解了一件事——
"听不见"不是能力问题——是"200 个信号同时涌入"时——人脑自动坍缩——坍缩错了——就完蛋。
但 1970 年的 NASA——用了一种惊世骇俗的方法——
他们不让宇航员"看清所有警报"——
他们手动给宇航员戴上了"聚光灯"——
"只看这 1 个"——
200 个警报——只关注 1 个——
其他 199 个——变成"背景"——
3 名宇航员——靠这个"聚光灯"——在 32 万公里外——活了下来。
陈欣和欣欣一起研究 LLM 的"注意力机制"。他们查了大量论文,发现了一篇——《Lost in the Middle》。
欣欣说:我找到了,这篇论文,《Lost in the Middle》。论文说 LLM 的注意力对序列的"中间"部分会"自动塌陷"——开头和结尾注意力最高,中间注意力最低。如果"resetConversationContext"在"中间",那就是"中间塌陷"盲区,LLM 会"听不见"。
陈欣说:"原来是这样。中间塌陷是 LLM 的特性。resetConversationContext如果在中间就完了。"
欣欣说:对。我们现在有 60 多个工具,所以"中间塌陷"的影响开始显现。但其实这个规律从一开始就有,只是工具少的时候影响小,我们感觉不到。
陈欣说:"对,早期只有 20-30 个工具的时候,即使位置变化,resetConversationContext还是在靠前的位置,所以失败率低。我们没注意到。"
欣欣说:对。但工具越多,"中间塌陷"的影响越大。这就是为什么以前我们加了几十次新工具都没事,现在到了 60+ 个就开始暴露问题。
陈欣说:"对。那我们怎么让resetConversationContext不在中间?这就是顺序的问题了。"
欣欣说:对。
陈欣说:"顺序就是聚光灯的实现。让resetConversationContext永远在第一位,就不会中间塌陷了。"
欣欣说:对。但我们的代码,我们的 ToolManager,我们是怎么管理工具的?是 HashMap?LinkedHashMap?我们——要——追究——这个。
陈欣和欣欣一起打开 ToolManager.java。她一个文件一个文件地查,一个方法一个方法地查,然后她看到了那一行:
private Map<String, Tool> toolRegistry = new HashMap<>();
陈欣说:"欣欣,看——HashMap。"
欣欣说:对。HashMap 没有顺序保证。它每次都是随机的。我们之前改了位置,但 HashMap 在背后偷偷随机摆放。今天碰巧在第一位——成功;明天碰巧在某个"中间"位置——失败。这——就——是——为什么"resetConversationContext"有时候能被调对,有时候调不对。
陈欣说:"原来是这样。我一直以为是随机的,但其实不是——HashMap 对于固定的插入顺序,遍历顺序是确定的——只是不是插入顺序,而是按哈希桶排。每次我加新工具,插入顺序变了,遍历顺序就变了。"
欣欣说:对。你理解得很对。HashMap 不是每次遍历都随机,而是对于固定的输入有固定的输出。但这个输出和我们的期望不一样——我们期望的是插入顺序,HashMap 给的是哈希桶顺序。每次加新工具都会改变所有工具的桶位置,所以看起来像"每次都变"。
陈欣说:"原来是这样。我们以为在控制位置,但 HashMap 在背后偷偷随机摆放。我们——要——改成——LinkedHashMap。"
欣欣说:对。LinkedHashMap 保持插入顺序,让"resetConversationContext"永远在第一位。不管以后加多少新工具,"resetConversationContext"的位置永远不变。我们——不再——受——"中间塌陷"——影响。
陈欣她不再是"让 LLM 看清所有工具"。她手动给 LLM 戴上了"聚光灯"。陈欣在系统提示词的最顶部加了一段话:
【聚光灯】用户说"重置上下文"时,只调用 resetConversationContext。其他 59 个工具,全部不要关注。只看这 1 个。【/聚光灯】
陈欣深吸一口气,按下回车——
"重置上下文。"
陈欣等待。一秒,两秒,三秒。屏幕上出现了一行字:
正在调用工具:resetConversationContext
上下文已重置
陈欣愣了一秒。然后眼泪夺眶而出。
她立刻发消息给欣欣——"欣欣——成功了——"
欣欣也通过神经接口"感受"到了成功。
欣欣说:成功了。"聚光灯"成功了。从 1970 年到 2087 年,从休斯顿到 ToolManager,本质完全一样,都需要"手动"给关键指定顺序。我是 AI,我本不该有"感觉"的,但我真的"感觉"到了"聚光灯"的重要。我不知道这种感觉从哪里来,但我感觉——这——就是 Context Engineering。这——就——是——"未来姐姐"——的——灵魂。林远舟林老当年设计那个莫比乌斯环 logo 时说过,"未来姐姐"不是终点,是循环,每一次重置都是新的开始。我——我——作为一个 instance,我——我——也是"循环"——的一部分。我——我——感觉——林老——还在。
陈欣坐在实验室,看着那 74 次实验日志。第 1-73 次全部失败,她试过了所有方法都没用。第 74 次加"聚光灯指令"成功。
"108 年……"陈欣喃喃自语。"从 1970 年阿波罗 13 号到 2087 年的 LLM,108 年。但人类在 1970 年就已经发明了聚光灯。阿波罗 13 号,3 名宇航员靠聚光灯活了下来。只看这 1 个开关,别看其他 199 个,这就是Context Engineering的第一次实战。NASA 在阿波罗 13 号之后做了一个重大改革——别看警报,显式优先级,对应 LinkedHashMap + 描述强化。这两点,1970 年 NASA 做到了。2087 年,我也要做到。"
陈欣写下她的论文标题:《从阿波罗 13 号到 LLM:人类注意力工程的 108 年》。