AI编程实测-上下文衰减问题及解决方案
一开始,让AI生成基础框架,还行。数据模型不统一:前面用SwiftUI的@State,后面突然变成Combine架构混乱:一开始说用MVVM,到后面代码全写在ViewController里命名不一致:同样的概念,AI一会儿叫"userId",一会儿叫"user_id"重复造轮子:AI忘了前面已经实现了某个功能,又写了一遍偏离设计决策:之前说用Core Data,后面AI用了UserDefaults
AI编程实测:上下文衰减问题及解决方案
2026年,AI编程已成趋势,但你真的会用AI开发App吗?本文分享一个资深iOS工程师的真实踩坑经历。
本文首发于掘金,同步发布于CSDN。如果你也在用AI编程,这篇文章可能会帮你省很多坑。
一、AI编程的现状:真的能自动开发App吗?
前段时间,斑马内部发起了一个AI挑战赛:完全不懂技术的人员,只通过与AI对话,开发出一个可用的App。
结果:有人2小时做出了一个待办事项App。
作为一名有10年+经验的iOS工程师,我的第一反应是:我快失业了吗?
过去6个月,我深度体验了各种AI编程工具——Claude、Cursor、GitHub Copilot、Xcode AI Assistant……我想搞清楚:AI到底能做到什么程度?
先说结论:AI能生成30%的代码,但70%的核心逻辑、架构设计、复杂问题解决,仍然需要人类。
更重要的是,我遇到了一个致命问题:上下文衰减。
这篇文章,专门讲这个问题,以及我的解决方案。
二、什么是"上下文衰减"?
问题表现
一开始,让AI生成基础框架,还行。
然后添加功能模块,AI开始"变蠢":
- 数据模型不统一:前面用SwiftUI的@State,后面突然变成Combine
- 架构混乱:一开始说用MVVM,到后面代码全写在ViewController里
- 命名不一致:同样的概念,AI一会儿叫"userId",一会儿叫"user_id"
- 重复造轮子:AI忘了前面已经实现了某个功能,又写了一遍
- 偏离设计决策:之前说用Core Data,后面AI用了UserDefaults
问题根源
因为AI的上下文窗口有限。
随着对话越来越长,AI"记不住"最初的设计决策,开始"自己发挥"。
更糟糕的是:当你发现问题时,已经偏得太远了,回不去。
具体案例
我让AI开发一个待办事项App:
第1-5轮对话:
我:帮我开发一个待办事项App
AI:好的,用SwiftUI + MVVM + Core Data
第6-10轮对话:
我:添加列表功能
AI:好的,列表用@State管理
我:等等,我们不是用Core Data吗?
AI:哦,那我用Core Data...
第11-15轮对话:
我:添加编辑功能
AI:好的,编辑功能用UserDefaults存储
我:又变UserDefaults了?...
问题越来越严重,代码越来越混乱。
三、我的解决方案:模块化AI开发
经过反复尝试,我总结了一套"模块化AI开发"的方法。
核心思路
错误做法:让AI做整套流程
开发者:帮我开发一个待办事项App,要有列表、详情、编辑、删除功能
AI:好的,开始生成...
(30轮对话后)
开发者:不对,数据模型应该用Core Data,你用了UserDefaults
AI:好的,我改...但是前面的代码都改不了了
正确做法:人工拆解,AI做模块
第1步:人工拆解(资深工程师的价值)
- 确定技术选型:SwiftUI + Core Data + MVVM
- 确定数据模型:TodoItem(id, title, isCompleted)
- 确定架构分层:View层、ViewModel层、Model层
第2步:AI做模块1 - 数据层(5轮对话)
开发者:用Core Data实现TodoItem的数据存储,包括CRUD操作
AI:生成数据层代码...
第3步:AI做模块2 - ViewModel(5轮对话)
开发者:基于TodoItem数据模型,实现TodoViewModel
AI:生成ViewModel代码...
第4步:AI做模块3 - View层(5轮对话)
开发者:实现TodoListView,基于TodoViewModel
AI:生成View层代码...
第5步:人工组装(资深工程师的价值)
整合三个模块,调整细节,优化体验
为什么这样有效?
- 每个模块的上下文很短(5轮对话),AI不会"遗忘"
- 模块边界清晰,每个模块有明确职责
- 人工把控方向,AI负责执行,不会偏离
- 出问题容易定位,某个模块有问题,重新生成即可
四、具体实施步骤
Step 1:人工拆解
这是资深工程师的核心价值。
你需要做的是:
-
确定技术选型
- SwiftUI还是UIKit?
- MVVM还是MVC?
- Core Data还是Realm?
-
确定数据模型
- 有哪些实体?
- 实体间的关系是什么?
- 数据如何持久化?
-
确定架构分层
- View层:UI组件
- ViewModel层:业务逻辑
- Model层:数据模型
- Network层:网络请求
- Storage层:数据存储
Step 2:AI做模块1 - 数据层
// 向AI提需求
"用Core Data实现TodoItem的数据存储,包括:
1. TodoItem实体:id(UUID)、title(String)、isCompleted(Bool)
2. CRUD操作:创建、读取、更新、删除
3. 错误处理:Core Data操作可能失败,需要处理错误
4. 请使用Swift语言"
AI会生成:
- Core Data模型文件
- TodoItem实体定义
- CRUD操作方法
- 错误处理代码
5轮对话内完成,上下文不会丢失。
Step 3:AI做模块2 - ViewModel
// 向AI提需求
"基于TodoItem数据模型,实现TodoViewModel:
1. 使用Combine框架管理状态
2. 包含待办事项列表:@Published var todos: [TodoItem]
3. 添加待办方法:func addTodo(title: String)
4. 删除待办方法:func deleteTodo(id: UUID)
5. 标记完成方法:func toggleComplete(id: UUID)
6. 从Core Data加载待办列表:func loadTodos()"
AI会生成:
- TodoViewModel类
- Combine订阅逻辑
- 业务方法实现
- 与Core Data的交互代码
5轮对话内完成,上下文清晰。
Step 4:AI做模块3 - View层
// 向AI提需求
"实现TodoListView,基于TodoViewModel:
1. 使用SwiftUI构建UI
2. 显示待办事项列表
3. 支持添加待办(TextField + Button)
4. 支持删除待办(Swipe手势)
5. 支持标记完成(Toggle)
6. 使用@StateObject管理ViewModel生命周期"
AI会生成:
- TodoListView结构体
- UI布局代码
- 用户交互逻辑
- ViewModel绑定代码
5轮对话内完成,上下文一致。
Step 5:人工组装
// App入口
struct TodoApp: App {
var body: some Scene {
WindowGroup {
TodoListView()
.environmentObject(TodoViewModel())
}
}
}
人工组装三个模块:
- 创建ViewModel实例
- 传递给View
- 测试完整流程
- 优化细节(UI、动画、性能)
五、模块化AI开发的优势
1. 避免上下文衰减
每个模块独立开发,上下文短(5-10轮对话),AI不会"遗忘"。
2. 开发效率高
- AI生成代码快
- 人工Review快
- 出问题定位快
- 重新生成快
整体效率提升3倍。
3. 代码质量好
- 每个模块职责单一
- 架构清晰
- 易于维护
- 易于测试
4. 可复用
- 数据层模块可以复用
- ViewModel模块可以复用
- View层组件可以复用
六、其他实用技巧
技巧1:使用代码模板
为常见功能创建代码模板:
- 列表模板
- 详情页模板
- 网络请求模板
让AI基于模板生成代码,更符合你的规范。
技巧2:保存AI生成的好代码
把AI生成的高质量代码保存起来:
- 代码片段
- 整体架构
- 最佳实践
下次直接让AI参考之前的代码。
技巧3:定期总结
定期总结AI开发的最佳实践:
- 如何向AI提需求
- 如何Review AI代码
- 如何优化模块划分
形成你自己的AI开发方法论。
七、总结
AI编程不可怕,关键在于:
- 不要让AI做整套流程,会上下文衰减
- 人工拆解成模块,每个模块独立开发
- AI负责执行,你负责架构、Review、优化
- 模块组装,调整细节
你的经验+AI的速度 = 超级个体。
八、关于作者
资深移动端研发工程师,10年iOS开发经验,擅长SwiftUI、React Native、性能优化、架构设计。
目前正在探索AI辅助开发的最佳实践,每周分享实战经验。
相关文章:
标签:iOS开发、AI编程、SwiftUI、Core Data、MVVM、Combine、人工智能
分类:移动开发、AI应用
发布时间:2026年3月29日
更多推荐




所有评论(0)