AI 从哪里来
AI 是一个实验得来的产物。它的诞生路径是数据、算力和梯度下降共同作用下的涌现,而不是从一组公理出发通过严格证明推导出的算法。这和某些严谨数学方法有本质差异——后者将可解释性内建于证明之中,边界明确,失效条件已知;而实验产物总是在获得实用效果之后,人们才慢慢去理解它为什么有效。
但这不意味着 AI 是二等工具。科学史上充满了先被使用、后被理解的例子——化学发现、冶金术、早期药物——它们在被理论完整解释之前,已经改变了世界。实验产物可以被后续的理论逐步解释,正如 CNN 的部分原理已经被阐明,没有理由认为 LLM 的运作机制在未来不能被更好地理解。
AI 的使用方式取决于你如何看待它。它可以是工具,可以是协作者,也可以是决策辅助者——这不是一个需要二选一的本体论问题,而是一个实践问题。你可以同时在不同的层面使用它,就像你可以同时把锤子看成工具、把同事的洞察看成协作、把一份报告看成决策参考——这些东西之间的边界本来就不是刚性的。
从局部求解走向全局解
AI 的特性引出了一种有效的工作方式:不是在全局空间中直接寻找最优解,而是通过解决一个个局部问题,让全局解从局部解的组合中涌现出来。
这个区分很重要:局部求解不是为了找到一个「局部最优」然后卡在那里,而是把全局问题拆解成一系列子问题,在每一个子问题上求出一个可用的解,然后通过接口把这些局部解组合起来。这本质上是一种建构策略,就像用积木搭城堡——城堡的整体质量不取决于你是否一次性看见了整座山,而取决于每一块积木的质量以及积木之间的咬合方式。
全局解可以通过一个简单的公式来粗略建模:全局解等于所有局部解乘以它们之间接口的质量之和。这意味着质量提升有三个相互独立的方向。第一是提升每个局部解本身的质量——更精准的 prompt、更深的推理、更好的代码生成。第二是优化局部解之间的接口——清晰的上下文边界、结构化的输入输出格式、不互相污染的信息传递。第三是提升组合策略——更好地分解任务、更合理地递归拆分子问题、在局部解组合之后做系统性验证。
这不是一个天花板,而是一条持续可优化的工程路径。提升任何一个局部解的质量,或者打磨两个局部解之间的接口,整体解的质量就会随之提升。没有哪个环节是不可改进的。
所谓结构缺陷,可能是天然局限
部分时候,人类在讨论 AI 局限时容易陷入一种叙事:把某个观察到的限制上升为结构性的、不可消除的天花板。一个更健康的视角是把大多数所谓「局限」放回到所有智能系统的普遍约束中去理解并去接受。
关于可解释性。AI 系统的复杂度、目标问题的复杂度和可解释性之间是一个工程上的三维权衡,而不是一个数学意义上的不可能困境。追求某种「完全忠实的解释」本身就是不切实际的——任何一个足够复杂的系统都面临着解释不完整的命运,人类对自己决策的解释也一样。这是复杂性与可理解性之间的天然张力。
关于自我认知。AI 无法准确认知自己的能力边界,会高估自己、试图解决超出能力的问题。但人类同样面临这个困境。要知道自己的能力边界,必须先对边界外有一定了解——而这种了解一旦存在,它实际上已经触及了边界外,那么真正的边界就还在更远处。这是一种认知上的递归性,是任何具备一定复杂度的智能体都无法逃脱的结构性约束。
关于上下文和注意力。瓶颈不在上下文窗口的大小,而在被有效注意到的那部分上下文。人类也不是一次性把所有信息装在脑子里——好的工程师靠抽象、文档、模块化和分治策略来管理认知负担,每次回到一个陌生代码库时都需要重新加载上下文。AI 的上下文限制放大了这个普遍存在的注意力瓶颈,但本质上是同一种现象。试图无限扩大上下文窗口不是终极答案——更有价值的路径是学会在有限上下文中高效地注意关键信息,并安排好局部求解与组合的节奏。
最后,AI 和人类思考的底层原理不同,所以几乎必然存在 AI 独有的、结构性的局限。但诚实的态度是承认我们目前不知道这些局限具体是什么。不虚构局限,不把普遍认知约束包装成 AI 特有的天花板,也不假装没有差异。
在日常中实践
前置的规划与拆解
面对一个大型任务,第一件事不是让 AI 开始干活,而是人类先完成分析。你需要写一份 PRD 或 PLAN 文档,把需求梳理清楚,然后与 AI 反复对齐细化,直到双方对目标和方案达成一致理解。
这份文档的核心作用是定义任务的边界。它不需要是长篇大论的规范文件,但必须将需求拆解到足够细的粒度——具体来说,拆到每个子任务的大小大致对应 AI 的「有效注意力范围」。一个简单的判定标准:如果你不能确定 AI 有很大概率能独立完成这个子任务,那就继续拆。
拆解后的依赖关系和执行顺序也在文档中明确记录。文档是跨 Session 的骨架记忆——每个新 Session 只加载当前子任务的局部上下文,只有文档是持久的。
像写 Issue 一样描述任务
子任务的描述应该像一份 GitHub Issue:自包含、边界清晰、上下文最小化。
关键原则是不要引入不必要的上下文。每多塞一个无关文件或历史信息,AI 的有效注意力就被稀释一分。好的子任务描述只包含当前任务所需的输入信息,不夹杂前置任务的过程细节,不携带与当前任务无关的参考材料。
子任务之间通过约定的接口通信。每个子任务有明确的输入——当前任务需要的信息——和明确的输出——可被下一个子任务消费的结果。输入 schema 应当清晰,输出格式应当可验证。当一个新子任务开始时,它不需要知道上一个子任务的内部执行过程,只需要知道接收到的结果是否符合预期。
跨 Session 工作
由于有效注意力的限制,在单个 Session 内完成超长任务链既不高效也不可靠。跨 Session 执行是常态,每个新 Session 聚焦于一个子任务。
新 Session 的启动方式是由一个 AGENT.md 或等效的系统配置文件固化通用角色定义与约束。启动时不需要在 prompt 里重复角色和规则——AI 自己读取配置文件,然后根据文档定位当前子任务开始执行。每次启动只加载当前子任务所需的上下文。
验收与纠偏
测试环节独立于开发。在实现子任务的同时,由 AI 单独编写测试,向 TDD 方向靠拢,让测试成为验证局部解是否正确的独立维度。大任务全部完成后,由人类做最终的整体验收。
当 AI 输出不合格时,反馈回路不放在修补上——不是去改生成结果,而是回到拆解层重新确认任务理解是否正确、拆解粒度是否足够细。根本解决方法在于在前置分解阶段就做足对齐,让子任务的描述清晰到 AI 不太可能理解错误。
模型和工具的选择
并非上下文字数越多越好。面对一个只需要 128K 上下文就能完成的任务,128K 的模型可能比 1M 的模型更好——不仅因为便宜,更因为超出任务实际需要的上下文空间并不会被高效利用。当上下文窗口膨胀到远超任务所需时,模型真正注意到关键信息的比例反而可能降低。换句话说,在推理深度相等的条件下,窗口较小的模型有机会反杀更大的对手。
这背后是对上下文组成的了解。粗略划分,上下文由两类内容组成:固定开销和可变开销。固定开销是每次会话必然出现的东西——系统提示词、行为规范、角色约束——它们从一开始就占据了一部分有效注意力,并且每次会话都在重复挤占。可变开销是当前任务直接相关的内容——任务描述、相关文件、前置输出——它的挤占程度取决于任务本身的描述质量和复杂度。
有效注意力的余量可以简单地看成:上下文窗口减去固定开销再减去可变开销之后,是否大于任务实际需要的注意空间。模型选择的实质就是在满足这个不等式的前提下挑规模刚好够用的那一款,而不是挑最大或者最贵的一档。更多余量不等于更多产出,用不上就是累赘。
工具的选择也依循同一套逻辑。Web Chat 和 API 调用之所以难以胜任高强度协作,不是因为能力不足,而是因为上下文管理往往是一个黑箱——你不知道固定开销吃了多少,也不知道上下文在什么时刻被截断或压缩。相比之下,一个好的 Agent 工具应当满足三个条件:系统提示词足够短小、上下文管理过程对用户透明、以及具备终端执行与文件读写这两个最小能力集合。有终端和文件能力,模型在绝大多数实际任务中就能自行完成所需操作,其余的附加特性——复杂的内置 Agent 逻辑、多层包装的 UI、炫目的可视化——常常只是多收了一笔隐形的注意力税,却不一定换回对应的价值。
这种选择有其内生的经验根源,不需要宏大的评测来背书。一个足够生动的小型实验就足够了:在和 AI 玩跑团游戏时对同一个回复反复生成,每次 AI 的回复仿佛从记忆碎片中随机抽取一段,上次注意到的关键设定下次会忘记,而某次突然又记起了一个毫不相关的路人细节。这种飘忽不定的回忆——像一个正在做记忆鉴定的阿尔茨海默症患者——比任何论文都更直观地说明了一件事:被模型「注意到」的信息和被模型「能看到」的信息完全不是一回事。而当注意力的锚定不能被强制时,唯一剩下可靠的策略就是让需要被注意的信息少到即使随机飘,也很难不飘到关键的部分。