AI 辅助编程中沉淀的六个核心洞见

经过一年多的日常实践,AI 辅助编程在我的工作流中从”辅助工具”演变成了”核心协作伙伴”。这个过程沉淀出了一些认知——它们不追求新奇,只追求准确。这篇文章记录的是截至 2026 年中,我个人认知框架中的六个核心洞见。

引言:认知的演化路径

过去一年半,我在 AI 辅助编程中的角色经历了三次转变:

  1. 工具使用阶段:把 AI 当成更聪明的搜索引擎和代码补全1
  2. 流程重构阶段:围绕 AI 重新设计自己的工作流,从”写代码”转向”引导 AI 写代码”2
  3. 范式反思阶段:开始区分不同场景下 AI 的最佳使用模式,意识到”单人”和”多人”模式下 AI 的角色截然不同

这篇文章属于第三阶段的产物。它不是操作指南,而是一个仍在演进中的认知框架——关于 LLM 能力边界、协作模式选择,以及技术和人的关系。

洞见一:LLM 能力是地基,但上下文窗口同样关键

模型本身的能力决定了理解和生成的天花板——这是一个常识,但在实践中容易被低估。不同模型在同一任务上的表现差距是系统性的,prompt 工程能优化但无法跨越这个差距。

但真正影响日常工程体验的,还有另一个因素:稳定且足够长的上下文窗口

一个在单项得分上略低但能稳定处理 200K token 上下文的模型,在跨项目重构场景中的实际体验,往往优于一个单项得分更高但上下文窗口受限的模型。原因在于:多项目重构的决策不是孤立的——修改包 A 的接口时,需要同时理解它在包 B、C、D 中的调用模式。只有能一次性消化这些关联代码,才能做出不”短视”的方案。

这涉及到 LLM 的一项基础能力——长上下文中的”注意力持久性”。相关研究表明,模型在长上下文中的信息检索和推理能力会随位置衰减3。稳定的大上下文窗口意味着这种衰减被控制在了可接受的范围内,使得跨文件的语义理解成为可能。

所以更准确的表述是:模型能力决定上限,上下文窗口决定这个上限在真实工程中能被兑现多少。

洞见二:Plan 的核心价值是理清人的思路

在 AI 辅助编程的讨论中,”Plan”经常被理解成”让 AI 按步骤执行”的手段。但我逐渐发现,Plan 的最大受益者不是 AI,而是人自己

原因有两点:

第一,Plan 是外挂工作记忆。 复杂任务涉及大量上下文——文件依赖关系、接口契约、状态迁移路径。把这些结构化成 Plan 写在 prompt 里,相当于给思考过程加了一个”外挂存储区”。这与人脑的工作记忆限制有关——我们同时能追踪的信息量是有限的4,Plan 把这个限制放大了。

第二,Plan 是人和 AI 之间唯一的可追溯沟通证据。 在长对话中,AI 的行为可能因为上下文压缩、模型更新等因素产生漂移。一份结构化的 Plan 是判断”AI 是否偏离了原定方向”的锚点。当 AI 生成的代码和预期不符时,不是凭感觉重来,而是对照 Plan 指出”你在第 3 步偏离了方向”。这让调试协作过程变得可操作。

这个概念和 Chain-of-Thought Prompting5 有相似之处——显式的推理步骤能显著降低模型在长上下文中的错误率。但 Plan 在工程中的意义不止于此:它从”推理工具”变成了 “通信协议” ,让人和 AI 共享一个可参照的路线图。

洞见三:Monorepo 让 AI 跨项目整体提交成为可能

这是实践中沉淀出的一个很具体的观察:单仓库(Monorepo)结构天然适合 AI 主导的跨项目修改。

Google 在 2016 年发表的论文中详细阐述了 Monorepo 的优势——统一的依赖管理、原子化的跨项目变更、简化的分支策略6。这些优势在传统开发中体现为”减少沟通成本”,在 AI 辅助开发中则体现为“让 AI 能看见全局”

举个例子:当你修改一个共享库的接口时,在 Monorepo 中,AI 可以同时看到:

然后 AI 可以一次性完成:修改接口定义 → 更新所有调用方 → 调整测试用例 → 验证编译通过。这个完整的原子提交在 Monorepo 中是一个自然的操作,在多仓库(Polyrepo)中则需要跨仓库协调,AI 目前难以胜任。

sequenceDiagram
    participant Human as 开发者
    participant AI as AI Agent
    participant Repo as Monorepo

    Human->>AI: 重构共享库接口
    AI->>Repo: 读取接口定义(包 A)
    AI->>Repo: 扫描所有调用方(包 B、C、D)
    AI->>Repo: 读取对应测试代码
    AI->>AI: 制定修改方案
    AI->>Repo: 修改接口定义
    AI->>Repo: 更新包 B 调用
    AI->>Repo: 更新包 C 调用
    AI->>Repo: 更新包 D 调用
    AI->>Repo: 调整测试用例
    AI->>Repo: 编译验证
    AI-->>Human: 提交完整变更

这个模式在多仓库环境下很难复制——AI 需要同时打开多个仓库、理解它们的依赖关系、协调跨仓库的提交顺序,目前的主流工具链对此支持有限。

洞见四:TAO 模式的关键在于可验证的闭环

“TAO”指的是 Task(任务分解)→ Action(执行)→ Observation(反馈观察) 的结构化提示范式。它并非一个全新的概念,与 ReAct(Reasoning + Acting)模式7有共同的理念基础——让 AI 不是一次性输出最终结果,而是在”思考 → 行动 → 观察结果”的循环中逐步逼近目标。

但在工程实践中,TAO 的关键不在于 T 和 A,而在于 O——Observation(观察)

graph LR
    T["Task<br/>分解任务"] --> A["Action<br/>执行"]
    A --> O["Observation<br/>观察反馈"]
    O -->|"未达到预期"| T
    O -->|"达到预期"| D["Done<br/>完成"]

    style T fill:#87CEEB
    style A fill:#90EE90
    style O fill:#FFD700
    style D fill:#90EE90

为什么 O 是最关键的?因为没有 Observation 的闭环,TAO 就退化成了”让 AI 一步一步做”的简单链式调用,和普通的 prompt 没有本质区别。TAO 的真正价值在于让 AI 每一步的产出都被检验——检验结果反馈到下一步的任务分解中,形成一个可验证的闭环。

这和软件工程中的闭环反馈原则是一致的:每次修改都应该有对应的验证手段(测试、lint、类型检查),验证结果决定下一步方向。TAO 只是把这个原则应用到了和 AI 的协作过程中。

在单人高效模式下,这个闭环可以非常紧凑:AI 执行 → 人肉眼验证 → 反馈修正 → AI 再执行。但在多人场景下,这个闭环需要被编码为更正式的流程——代码评审、CI 门禁、契约检查——每一个都是 Observation 环节的工程化实现。

Observation 环节的数据基础设施

要让 Observation 真正可操作,需要建设一套覆盖 AI 全链路的数据基础设施。仅仅依赖”看 AI 的输出”是不够的——因为很多错误的根因不在最终输出,而在中间某个环节的状态。具体来说,需要关注以下数据源:

从 TAO 到 Harness Engineering

当 Observation 环节从”人眼看一下”升级为上述这套数据基础设施时,TAO 模式就超越了 prompt 技巧的范畴,进入了工程化的层面。我把建设这套基础设施的实践称为 Harness Engineering——它关注的不是”怎么写 prompt”,而是”如何构建支撑 AI 稳定运行的工程体系”。

这套体系的关键组件包括:

Harness Engineering 的核心思想是:不要依赖 AI 的可靠性,而要通过工程手段把 AI 的不可靠性控制在可接受的范围内。 这和传统软件工程中防御式编程的逻辑相通——你不能假设输入永远合法,所以用类型系统、契约测试、降级策略来兜底。Harness Engineering 就是对 AI 的”防御式工程”。

这套思路也与之前文章中讨论的”LLM 工程化的自举迭代框架”9一脉相承——两者都强调用系统能力而非人工干预来管理 AI 行为的不确定性。

洞见五:AI 拉平了技术壁垒,但拉不平决策与责任

AI 确实在拉平一些长期以来区分小团队和大团队的壁垒:

  1. 知识壁垒被拉平了——以前大团队才养得起专门研究 Monorepo、形式化验证、性能分析等领域的专家,现在小团队一个人 + AI 就能达到相当的高度
  2. 执行力差距被拉平了——大团队靠人多并行推进,但 AI 可以让小团队的单人具备”伪并行”能力(一个上午同时在多个方向上推进)
  3. 规范落地难度被拉平了——大团队靠制度强制统一风格,小团队靠 AI 自动遵循规范,甚至比人更一致

但”拉平”不等于”消失”。拉平的是技术实现层面的壁垒,拉不平的是三个更本质的东西:

维度 被拉平 没被拉平
知识 获取技术知识的速度 判断”该学什么、该信什么”
执行 编码实现的效率 决定”功能做不做、何时上线”
规范 代码风格的统一 架构决策的责任归属
质量 局部代码的正确性 长期维护成本和技术债务治理

技术壁垒的降低,反而让剩余竞争点——人的判断力——变得更加重要。 AI 可以写代码,但”这个接口要不要这样设计”、”这个依赖该不该升级”、”这个功能现在做还是以后做”——这些决策依赖的是人对业务逻辑、系统边界和长期成本的理解,不是 prompt 技巧。

这个观察和 Frederick Brooks 在《人月神话》中的观点有跨越时空的呼应:软件工程的本质困难不是”写代码”,而是”理解要写什么”10。AI 降低了”写”的成本,但”理解”的成本仍然由人承担。

洞见六:AI 作为执行者与辅助者的模式切换

这是所有认知中最根本的一个二分法。经过反复实践,我意识到 AI 和人协作存在两种截然不同的模式,它们对流程、信任和团队结构的要求完全不同:

维度 执行者模式(单人) 辅助者模式(团队)
AI 角色 自主规划、跨项目整体执行 代码补全、生成单测、解释代码
决策者 AI 出方案,人确认方向 人做所有决策
提交粒度 跨包原子的整体提交 按模块拆解的小粒度 MR
信任模型 人对 AI 的输出全盘审查 团队逐条归因、可追溯
适用团队 ≤5 人,高度信任 大团队,传统流程
协作协议 Plan + TAO 闭环 规范文档 + 人工评审

这两种模式对技术能力、流程、信任机制的要求不仅不同,甚至互斥——在执行者模式下建立的自动化流程,在辅助者模式下会变成噪音和负担。

团队规模的约束不是偶然的。Robin Dunbar 在 1992 年的研究中提出了一个认知上限:人类的社交网络规模受限于新皮层容量,稳定协作的群体很难超过 150 人11。虽然这个数字是针对原始社群的研究,但软件团队中的”认知开销”也有类似的规模效应——当团队超过一定规模(实践中大约是 7-8 人),成员之间需要记住的协作协议、响应预授权请求、理解变更影响报告的成本就会超过收益。

graph TD
    subgraph "执行者模式(≤5人)"
        A1["人定方向"] --> A2["AI 自主执行"]
        A2 --> A3["人审查结果"]
        A3 --> A1
    end

    subgraph "辅助者模式(大团队)"
        B1["人定方向"] --> B2["人写需求/设计"]
        B2 --> B3["AI 局部辅助"]
        B3 --> B4["人工评审/集成"]
        B4 --> B1
    end

    style A1 fill:#90EE90
    style A2 fill:#87CEEB
    style A3 fill:#FFD700
    style B1 fill:#90EE90
    style B2 fill:#FFD700
    style B3 fill:#87CEEB
    style B4 fill:#FFD700

这两种模式之间的切换成本,是很多关于 AI 生产力的讨论中被忽略的因素。单人场景下的高效模式(AI 接管、整体提交)一旦进入多人场景,就必须切换回更传统的辅助模式,而之前建立的那套自动化流程并不能平滑迁移。

没有银弹:认知闭环的终点

Fred Brooks 在 1986 年的经典文章《No Silver Bullet》中提出,软件工程中没有能够”在一个数量级上提升生产率”的单一技术突破12。这个判断在近四十年后被重新审视——LLM 带来的变化可能确实超出了 Brooks 当年的预测框架。但 Brooks 的另一句话在今天依然成立:软件的本质困难在于”概念结构”的复杂性,而不是”实现”的复杂性。

AI 解决了实现层面的复杂性,但概念结构的复杂性——需要做什么、为什么这么做、什么时候不做——仍然需要人的判断。

这六个洞见最终指向同一个结论:AI 不会消除软件工程的困难,它只是把这些困难重新分配到不同的位置。 知识壁垒被拉平了,决策质量的门槛变高了;写代码变快了,但搞清楚”该写什么”变得更关键了。人和 AI 之间没有最优的协作模式,只有最适合当前场景的协作模式。

没有银弹,但有清晰的认知框架——这就够了。


References

  1. 一年多的实践总结:参见《One Year of AI-Assisted Programming: Insights, Practices, and Reflections》,2026-01-31。记录了从 AI 工具使用者到深度融入日常开发工作流的认知演化。 

  2. 角色转变的框架性论述:参见《AI Reshaping Software Development Workflow: From Code Writer to AI Conductor》,2026-02-10。提出了从”代码写手”到”AI 指挥”的角色转换模型。 

  3. 长上下文中注意力衰减的研究:Liu, N. F. et al., Lost in the Middle: How Language Models Use Long Contexts, arXiv:2307.03172, 2023。研究发现模型在长上下文中的信息检索能力随信息位置而显著变化——位于中间位置的信息被有效利用的概率最低。https://arxiv.org/abs/2307.03172 

  4. 工作记忆容量的经典研究:Miller, G. A., The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information, Psychological Review, 63(2): 81–97, 1956。提出了人类工作记忆同时处理信息量的有限性,是理解”Plan 作为外挂存储”重要性的认知心理学基础。https://doi.org/10.1037/h0043158 

  5. Chain-of-Thought Prompting:Wei, J. et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, NeurIPS 2022。提出在 prompt 中加入显式的推理步骤链能显著提升 LLM 在复杂推理任务上的表现。https://arxiv.org/abs/2201.11903 

  6. Google 的 Monorepo 实践:Potvin, R. & Levenberg, J., Why Google Stores Billions of Lines of Code in a Single Repository, Communications of the ACM, 59(7): 78–87, 2016。详细阐述了 Google 在单一仓库中管理数十亿行代码的经验、工具链和工程实践。https://doi.org/10.1145/2854146 

  7. ReAct 模式:Yao, S. et al., ReAct: Synergizing Reasoning and Acting in Language Models, ICLR 2023。提出在 LLM 中交错进行推理轨迹(Reasoning)和动作步骤(Acting),让模型在”思考 → 行动 → 观察结果”的循环中完成任务。TAO 模式在思路上与之相通,强调了观察反馈在闭环中的核心地位。https://arxiv.org/abs/2210.03629 

  8. 埋点数据驱动迭代的工程实践:参见《大模型工程化的自举迭代框架:从 Demo 到可持续生产系统的五层实践》,2026-05-04。其中的”埋点驱动迭代”和”强类型驯服 LLM 不确定性”两节详细讨论了全链路日志采集和 schema 校验的工程方案。 

  9. 自举迭代框架的整体论述:同上。该文提出的五层实践(流程固化、tmux 运行时、Compact 卡点解法、埋点驱动迭代、强类型驯服 LLM)构成了 Harness Engineering 在当前阶段的工程原型。 

  10. Brooks, F. P., The Mythical Man-Month: Essays on Software Engineering, Addison-Wesley, 1975(第二版 1995)。提出了 Brooks’ Law:”向一个已经延期的项目增加人手,只会让它更延期。” 本文引用的是其中关于软件工程本质困难(essential complexity)和附带困难(accidental complexity)区分的论述。 

  11. Dunbar, R. I. M., Neocortex size as a constraint on group size in primates, Journal of Human Evolution, 22(6): 469–493, 1992。提出了著名”邓巴数”——灵长类动物的新皮层体积限制了其社交网络规模,对人类而言这个上限约为 150 人。稳定协作的小团体(如狩猎采集群体)通常在 30-50 人,核心信任圈约 5-15 人。 

  12. Brooks, F. P., No Silver Bullet: Essence and Accidents of Software Engineering, IEEE Computer, 20(4): 10–19, 1987。提出了软件工程中”本质困难”(概念结构、规格、设计的复杂性)和”附带困难”(编程语言、工具、平台的限制)的区分,并断言没有单一技术能在一个数量级上提升软件开发的生产率。 

My Github Page: https://github.com/liweinan

B站视频: https://space.bilibili.com/21947620

Powered by Jekyll and Theme by solid