AI 赋能开发流程革新
节假日期间,我撰写此文,皆因先前之承诺。日后若逢佳节仍需劳作,当坚辞不受!
言归正传。
接下来,我将深入探讨如何将 AI 有效整合至项目开发的全过程。我以个人业余项目“历史上的今天”为例进行阐述。
此款 iOS 应用发布于 2023 年 2 月,最初采用原生 SwiftUI 构建。八个月前,我对其进行了全面的推翻重构,转而使用 Kotlin Multiplatform(KMP)。重构的动因有二:其一,相较于 IDEA,Xcode 的自动补全及使用体验在我看来宛如两个时代的产物(此乃个人之见,不喜勿喷,您说的都对);其二,我仍期望实现跨平台开发(然而最终此念作罢,盖因国内应用商店对个人开发者而言实在过于不友好!)。最终,该应用仅在 iOS 平台上线。
此次借 KMP 技术栈进行的重构,是我首次与 AI 展开深度编程协作。起初,我令 AI 详尽分析了原项目的逻辑,包括各 Tab 页面、页面内具体功能、相应逻辑及布局样式。在此过程中,AI 协助我生成了大量项目相关的文档。之所以是“大量”而非“一份”,是基于实际测试:生成单一完整文档时,篇幅受限,功能描述不够详尽;或后续持续沟通修改时,会致已撰内容面目全非;抑或 AI 会遗忘对话早期反复强调的事项。总之,上下文过长导致信息丢失是不可接受的(据闻 DeepSeek 目前支持 1M 上下文,我尚未尝试,但有必要一试)。鉴于此,我采取了分步骤、分模块的策略。经过我与 AI 多轮沟通、审阅与调整,最终依据原项目生成了数份 Markdown 格式的项目详情文档。
随后,我创建了一个 KMP 初始化项目,并设定了基础的包名等信息,然后将上述 Markdown 文档输入 AI,要求其据此生成代码。不可否认,首次完整生成一个项目耗时良久!据我回忆,Agent 至少运行了四五个小时。我承认,项目最终得以运行,但由于部分逻辑关系复杂,并非一小段代码即可解决,它涉及到多界面的用户交互、状态流转、数据更新等问题,因此该项目仍存在诸多不足。
无奈之下,我只得继续与 AI 沟通,使其理解我的意图及自身不足之处。此过程虽显单调、乏味且繁琐,却也最快地让我洞悉了 Agent 的能力边界。例如,初期某些修改可能导致编译失败。我要求其每次修改后进行编译检查,于是它便将编译与 Lint 检查列为 TODO List 的最后一项,最终执行完毕后,项目基本能通过编译。
再者,执行某些操作时,若我要求其修改某个变量名,它不仅会修改该变量,还会一并调整相关的其他变量,以实现整体命名风格的统一,并同步更新所有引用之处。它并非仅仅执行我的指令,还具备一定的扩展能力。此方面可通过调节 Agent 的发散性参数来获得不同表现,目前主流大模型均支持相应设置。
又例如,我要求其升级某些依赖库。当发现升级后存在问题时,它并未尝试解决,而是直接撤销了升级操作,无论如何劝说均无效。最终我不得不手动修改。此时我亦不解其为何如此固执。
在此过程中,我并非直接告知 AI 要开发何种应用或功能,而是先基于原项目生成 Markdown 文档,再令其根据文档重新实现。这实际上使得第一版重构能够基本完整地复现原有功能与界面。若是我一点一滴地向其描述如何操作,恐怕将是一场灾难(此言略带英文语感)。
此后,我对此应用进行了多次迭代与修改。我发现,大模型由于只能通过逻辑分析,无法真实地在界面中运行并观察最终效果,因此对于潜在问题,你需要明确指出其具体表现,它方能进行修改。这一点,我尚未找到特别有效的解决方案。
附注:将问题视频上传至 ChatGPT,并直接要求其分析问题原因,有时会产生意想不到的奇效。随后将分析出的问题根源告知 Agent,往往能迅速解决问题。
此外,Agent 在代码重构方面,尤其擅长处理小型模块、高内聚、重构思路清晰的任务,效率极高且速度飞快。例如进行模块抽象化处理、重复代码重构优化等,它甚至能提出一些出人意料却极为出色的重构思路。
接下来,我将分享在工作中如何与 AI 协作完成需求的具体实践。
首先,产品经理(PM)的需求质量参差不齐。有的遗漏诸多细节,有的则冗长空洞,重点寥寥。更有甚者,需求仅有大致方向,缺乏具体细节。当然,条理清晰、主次分明的 PM 亦属凤毛麟角,可遇而不可求。
若我决定最终依靠 Agent 完成具体的编码工作,我通常会先将需求交给 AI 进行分析,令其将其转化为一份详尽、清晰、可执行的需求说明文档。此文档需尽可能精确地描述需求,并包含技术边界与实现细节。在此过程中,我也需要多次核验文档内容的准确性。
输入给 AI 的信息,可能是直接下载需求文档后进行修改再上传;也可能是利用 Skill 从需求卡片中读取。具体方式取决于需求本身的质量。总之,此环节的输出是后续 AI 具体执行的根本依据。此处若有偏差,后续工作将徒劳无功。
接下来,我一般会开启一个新的 Session 会话,以避免先前信息干扰和上下文过长的问题,让 Agent 基于新的输出进行实际的编码操作。此过程免不了各种修改与调试,这与普通的直接编码并无二致。
Claude Code 的确强大,但价格不菲。GLM 速度稍慢,但基本能胜任工作。其他模型我使用较少,在此不作评价。
再次重申我的“暴论”:当前模型的能耐,已不再是编码的瓶颈!
此处需明确指出:对于规模较大的项目,Agent 尚无法完全理解,至少现阶段如此。项目越大,效果可能呈指数级下降。因此,如何在现阶段让模型在不完全理解整个项目的情况下完成功能,是亟待解决的重要课题。
附上我曾答应他人的内容:拿到一个需求,到完成开发,AI 在此过程中的具体实践记录。
五四青年节快乐!以上!