关于 AI 编码未来的思考
关于AI编码未来的思考
AI 编码的未来,也许不是让模型理解整个项目。未来 AI 编码可靠性的提升,可能不只来自更强的模型和更大的 Context Window,更来自软件架构本身的改变:通过稳定底座、强契约、局部上下文和自动验证,把一个复杂软件系统拆解成 AI 可以独立完成并确定性验证的小问题。
从 Android Framework 得到的启发:我们真正需要的,可能是一个让 AI 永远只解决局部问题的软件世界。
AI辅助编码的演进
我曾经在智能电动汽车主机厂工作。套用一下关于智能驾驶分级的概念:
- L0 应急辅助:例如自动紧急制动(AEB)、车道偏离预警。
- L1 部分驾驶辅助:例如自适应巡航(ACC,只控制纵向)或车道居中(LCC,只控制横向)。
- L2 组合驾驶辅助:例如同时控制方向与速度的领航辅助(NOP)。
- L3 有条件自动驾驶:例如高速拥堵时系统可自行驾驶,但您需随时准备接管。
- L4 高度自动驾驶:例如限定区域内的无人出租车(Robotaxi),无需您接管。
- L5 完全自动驾驶:任何道路、天气下都无需人类干预(目前尚未实现)。
AI编码的演进,可能也是从辅助到完全自主的过程。
我认为你这个方向是成立的,而且它可以被提炼成一个比“AI 编码应该减少上下文”更有力度的观点:
AI 时代的软件架构,优化目标可能会从“让人更容易理解整个系统”,进一步转向“让 AI 完成一次变更时,只需要理解最小必要上下文”。
这和你作为 Android 开发者的直觉非常契合。
不过你初版里有几个地方需要调整,否则文章容易变成“因为 Transformer 不可靠,所以未来系统应该简单”这样略显跳跃的论证。
1. 先修正第一个前提:问题不只是 Transformer 的“不确定性”
你现在的表述是:
因为 Transformer 架构的特性,输出代码具有不确定性,上下文太长容易引入噪声,丢失注意力。
后半句基本成立。长上下文并不意味着模型能够同等有效地利用所有信息,“Lost in the Middle”早就观察到了随着相关信息位置变化,模型表现会明显下降。到了 Agent 场景,Anthropic 也明确把 context 视为一种有限资源,认为随着上下文不断膨胀,模型会出现注意力和信息利用效率下降的问题。(arXiv)
但前半句最好改成:
LLM 本质上是一种概率生成系统。即使模型越来越强,软件需求本身的歧义、上下文选择、推理路径以及生成过程,都会让同一个任务存在多个可能实现。
因为我们其实不需要追求:
同一个需求
↓
AI 每次生成完全相同的代码
真正应该追求的是:
┌→ 实现 A ─┐
需求 → AI生成 ─┼→ 实现 B ─┼→ Contract / Test / Rule → PASS
└→ 实现 C ─┘
代码可以不确定,结果必须确定。
我觉得这句话甚至可以成为你整篇博客的一个核心观点:
未来 AI 编码要解决的,并不是“生成的确定性”,而是“验证的确定性”。
这是一个非常重要的思想转变。
2. 你 Android 的类比其实非常好
你提到:
Android 应用程序员开发 App 时,不会想着修改系统源码,而是遵循已经实现的系统特性,在应用层做适配。
这个类比可以继续往下推。
今天一个 Android 工程师写:
context.getSystemService(...)
不会去理解:
Binder
AMS
PMS
SurfaceFlinger
Linux Scheduler
Binder Driver
Kernel
为什么?
不是因为这些东西不复杂。
恰恰相反。
是因为底层已经把复杂度封装掉了。
对于 App 开发者而言:
巨大复杂系统
↓
稳定 API / Contract
↓
有限问题空间
↓
App Feature
所以这里有一个非常关键的概念:
未来的软件并不是整体变简单,而是复杂性向下沉淀。
系统底层仍然可能极其复杂。
但 AI 不应该每次修改一个按钮,都重新理解整个系统。
3. 这可能是今天 AI Coding 最大的问题之一
现在 Codex、Claude Code、Cursor 这类工具,本质上仍然是在适配为人类设计的软件工程体系。
一个典型任务:
给设置页面增加一个 AI 开关。
Agent 开始:
搜索 Settings
↓
找到 SettingsActivity
↓
发现 Compose
↓
搜索 ViewModel
↓
找到 Repository
↓
寻找数据库
↓
寻找 DI
↓
查看 DataStore
↓
查看已有类似实现
↓
阅读 navigation
↓
阅读 build.gradle
↓
发现项目特殊规范
↓
阅读 AGENTS.md
↓
开始修改
这里有个有趣的问题:
真正新增的业务逻辑可能只有几十行。
但是为了安全修改这几十行代码,AI 可能需要阅读数千甚至数万行代码。
这其实是一个非常低效的比例:
Task Complexity ≪ Context Complexity
现在很多所谓 Context Engineering,本质上就是在解决:
怎么从巨大 repository 中,把当前任务真正需要的信息挑出来?
Anthropic 对 Context Engineering 的定义本身就是不断选择和维护模型当前真正应该看到的信息,而不是简单把越来越多 token 塞进去。(Anthropic)
4. 所以你的思想可以进一步升级
不要仅仅说:
未来 AI 应该只实现小功能。
因为别人很容易反驳:
那复杂需求怎么办?
真正应该说的是:
未来的软件系统应该具备一种能力:无论整个产品多复杂,都能把一次变更压缩成局部问题。
也就是:
全局复杂,局部简单。
这是软件工程几十年来一直追求的东西。
模块化、接口、SOLID、微服务、插件系统、Clean Architecture,本质上都在做类似事情。
但 AI 会让这个原则的重要性突然放大。
以前模块化主要是为了:
减少人类工程师的认知负担。
以后可能增加一个目的:
减少一次模型推理所需要加载的上下文。
这甚至可以形成一个新的架构指标:
Context Locality(上下文局部性)
例如:
修改 Feature A 时:
需要理解 100% repository
是一个 AI 极不友好的架构。
而:
Feature A
│
├── contract
├── state
├── ui
├── tests
└── capabilities
AI 只加载这里:
整个 repo:1,000,000 LOC
↓
任务 Context:2,000 LOC
可能才是真正的 Agent-friendly Architecture。
5. 事实上现在前沿 Coding Agent 已经在向你的方向收敛
这是你的文章可以加入的一些现实证据。
OpenAI 今年公开的 Harness Engineering 实践非常有意思。
他们描述一个几乎完全由 Codex 写代码的项目时发现,工程师真正需要做的已经不只是“告诉 AI 写代码”,而是:
设计环境、抽象、约束和反馈循环,让 Agent 能够可靠完成任务。
而当 Agent 做不好时,他们并不是简单地“换一个更强 Prompt”,而是思考:
系统缺少什么能力?怎样让这个能力对 Agent 可见并且可以被强制执行?(OpenAI)
这其实跟你的想法高度一致。
Anthropic 在长时间 Coding Agent 实验里也发现,如果直接:
给一个巨大目标
→ Agent 一口气实现
Agent 很容易试图一次完成太多事情。
更有效的方式反而是:
初始化环境
↓
Feature 1
↓
验证
↓
留下结构化状态
↓
Feature 2
↓
验证
↓
Feature 3
也就是Incremental Progress。(Anthropic)
甚至最新的软件工程 Agent benchmark 也暴露了类似问题。
2026 年 SWE-EVO 专门测试“长期演进大型项目”,任务平均涉及大约 21 个文件。实验中,Agent 在孤立问题上的能力远高于这种长期、多文件的软件演进任务。(arXiv)
所以你的观察并不是单纯的个人感觉。
目前整个 Agent Engineering 领域实际上已经逐渐发现:
让模型变得更强是一条路线,让问题本身变得更容易被模型解决,是另一条同样重要的路线。
6. 但是我会修改你“新的操作系统”这个概念
你现在说:
未来新的操作系统形式,需要是有利于 AI 编码的。
这里我认为“操作系统”可能稍微太底层了。
更准确的概念可能是:
AI-native Application Platform
或者:
Agent-native Software Runtime
它完全可以继续运行在:
Linux
Windows
macOS
Android
之上。
真正变化的可能是:
┌────────────────────────────┐
│ AI Generated App │
│ │
│ Feature A Feature B │
│ Feature C Feature D │
├────────────────────────────┤
│ AI Native Runtime │
│ │
│ UI / State / Storage │
│ Network / Auth / Media │
│ Navigation / Permission │
├────────────────────────────┤
│ Android / macOS / Windows │
├────────────────────────────┤
│ Kernel / Hardware │
└────────────────────────────┘
AI 真正频繁修改的:
AI Generated App
而 Runtime 是高度稳定的。
就像 Android 开发者不会修改 ActivityManagerService 一样:
未来 AI 写 App,也不应该每次去修改基础设施。
7. 更激进一点:未来 AI 甚至不应该写今天这种“应用代码”
这是我觉得你的思想继续推演之后最有意思的地方。
今天:
产品需求
↓
AI
↓
Kotlin / TypeScript / Swift
↓
Framework
↓
OS
未来可能变成:
产品需求
↓
AI
↓
Feature Specification
↓
AI Runtime
↓
OS
例如一个功能:
用户可以收藏文章,收藏数据需要持久化,并且登录用户可以跨设备同步。
AI 不一定生成:
Repository
Room DAO
Coroutine
ViewModel
UseCase
Retrofit
DTO
Mapper
Database Migration
它可能生成类似:
Feature: FavoriteArticle
State:
favorite: Boolean
Storage:
persistent
Sync:
cloud
scope: user
Actions:
favorite(article)
unfavorite(article)
UI:
FavoriteButton
然后系统 Runtime 自己解决:
数据库
并发
同步
生命周期
网络
缓存
权限
线程
序列化
此时 AI 真正需要思考的,只剩:
业务意图。
这其实才是你所谓“系统规则简单”的真正含义。
不是底层真的简单。
而是:
暴露给生成式 AI 的状态空间足够小。
8. 这里甚至可以定义一个非常重要的原则
我建议你文章里提出一个自己的概念。
例如:
Minimum Coding Context Principle
最小编码上下文原则
一个软件系统越成熟,完成一个局部业务需求所需要理解的系统信息应该越少,而不是越多。
传统项目经常恰恰相反。
五年前:
加一个按钮 → 改 2 个文件
五年后:
加一个按钮
↓
Design System
Navigation
AB Test
Analytics
Feature Flag
ViewModel
DI
Repository
Domain
Database
Remote Config
Permission
最后 AI 得读半个 repository。
这可以叫:
Context Entropy / 上下文熵。
软件演进越久:
历史约束 ↑
隐式知识 ↑
模块耦合 ↑
特殊逻辑 ↑
最终:
完成局部任务所需 Context ↑↑↑
AI Coding 的可靠性就下降。
9. 所以未来 AI-friendly 软件架构可能有六个非常明显的特征
我会预测是:
AI Feature
│
▼
┌────────────────────┐
│ 1. Local Context │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ 2. Typed Contract │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ 3. Capability API │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ 4. Sandbox │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ 5. Verification │
└─────────┬──────────┘
│
▼
Accept
也就是:
小上下文。 AI 不需要理解整个 repository。
强边界。 不允许 Feature 随便访问整个系统。
Capability 化。 数据库、网络、UI、权限等通过稳定接口调用。
声明式。 尽量描述 What,而不是 How。
Sandbox。 AI 修改范围天然受限制。
Executable Constraint。 最关键,架构规则不是写在 Wiki 里的:
“请不要跨层调用。”
而是系统直接:
跨层调用
→ compile failed
这其实就是从:
告诉 AI 应该怎么做
变成:
让错误的做法根本无法成立。
10. 我觉得这是你这篇文章真正有意思的地方
文章最后甚至可以提出这样一个判断:
过去我们一直在问:
怎样让 AI 理解越来越大的代码仓库?
于是:
32K Context
→ 128K
→ 1M
→ Repository RAG
→ Semantic Search
→ Memory
→ Sub-Agent
但可能还有另外一个方向:
为什么我们需要让 AI 理解整个代码仓库?
也许未来真正优秀的软件系统,是这样的:
Human
│
Intent
│
▼
┌────────────────┐
│ Coding Agent │
└───────┬────────┘
│
Minimal Context
│
▼
┌────────────────┐
│ Feature Capsule│
└───────┬────────┘
│
Contract
│
▼
┌────────────────┐
│ Stable Runtime │
└───────┬────────┘
│
▼
OS
AI 的职责不是:
理解并维护整个世界。
而是:
在一个被精心设计过的小世界里完成任务。
我会把你这篇文章的中心论点改成一句话
你现在的中心思想大概是:
为了提高 AI 编码可靠性,未来操作系统应该更加简单,让 AI 专注于局部功能。
我建议提升成:
未来 AI 编码可靠性的提升,可能不只来自更强的模型和更大的 Context Window,更来自软件架构本身的改变:通过稳定底座、强契约、局部上下文和自动验证,把一个复杂软件系统拆解成 AI 可以独立完成并确定性验证的小问题。
再激进一点,可以作为文章标题:
《AI 编码的未来,也许不是让模型理解整个项目》
副标题:
从 Android Framework 得到的启发:我们真正需要的,可能是一个让 AI 永远只解决局部问题的软件世界。
我觉得接下来我们最值得继续讨论的是一个更深的问题:**如果真的按照这个思路设计一套“AI Native Application Platform”,它究竟应该长什么样,以及 Kotlin/Compose/Android 现有架构为什么还不够 AI-friendly。**这个问题一旦推演清楚,你这篇文章就会从“AI 编程感想”上升成一篇真正有架构观点的文章。