游乐游手机版
首页/AI教程/文章详情

用 Codex 高效完成上万行代码重构

时间:2026-05-30 11:29
最近,我对 Fread 项目进行了一次大规模重构,借助 Codex(一款 AI 编程助手)完成了超过一万行代码的修改。放在过去,人工处理这样的任务至少需要一个多月,而现在仅用几天就顺利收工。本文将详细分享整个过程中的心得体会与实用技巧,希望能为正在经历重构挑战的开发者提供一些启发。 本次重构主要聚焦

最近,我对 Fread 项目进行了一次大规模重构,借助 Codex(一款 AI 编程助手)完成了超过一万行代码的修改。放在过去,人工处理这样的任务至少需要一个多月,而现在仅用几天就顺利收工。本文将详细分享整个过程中的心得体会与实用技巧,希望能为正在经历重构挑战的开发者提供一些启发。

本次重构主要聚焦于两个方向:一是将依赖注入框架从 kotlin-inject 迁移至 koin,二是用 navigation3 替换原有的导航框架 Voyager

选择 Koin 的主要原因在于,其 DSL 风格的管理方式更符合个人编码偏好,代码表述清晰直白,理解成本较低。说实话,依赖注入涉及的类实在太多,使用注解不仅会带来较强的侵入性,还会生成大量无法窥见内部逻辑的辅助类,导致整个注入流程如同黑盒,调试起来相当棘手。

至于导航框架,Voyager 已超过一年未更新,基本处于被维护方弃置的状态。而 Nav3 的设计更为优雅,对预测性返回和 Shared Element 的支持表现优秀,没有理由不选择它。

可想而知,这是一场硬仗——几乎每个页面都需要调整,依赖注入也需全线翻新。不过,有赖于 Codex,据不完全统计,大约 70% 的代码由它生成。本文就来聊聊具体是如何操作的。

(附上本次改动的 PR 链接:github.com/0xZhangKe/F…)

充分利用 AI 的模仿能力

使用下来最大的感受是:AI Coding 最擅长的并非创造,而是模仿。对于给定的模式,Codex 可以模仿得相当出色,即便偶尔出现一些小意外,它也能顺势解决。

因此,在这次重构中,我作为人类的角色,核心任务其实是找出所有不同类型的变更,再将其分类处理。举个例子,kotlin-inject 在项目中的用法就那么几种固定模式,针对每种情况分别用 koin 编写一份对应的重构代码。这样一来,每种场景下的转换关系就变成了有限的、一一对应的模式。随后,我直接让 AI 参照这几份样板代码进行模仿,逐一改造剩下的部分。

这种方法能大幅降低 Codex 面临的问题复杂度——它只需按部就班地模仿,逐个击破即可。越是复杂的问题,Codex 越容易出错。刚开始我尝试让它一次性重构整个依赖注入,结果它跑了 1.5 小时,不仅耗光了多轮上下文,还烧掉了整整五小时的用量,最终问题仍未解决。原因在于依赖关系过于复杂,连它自己也绕得晕头转向。

此外,这种做法的好处还在于可控性。毕竟我对整个软件架构的理解远胜于 AI,清楚正确的演进方向。因此分工变得清晰:我发挥自身专长,先将复杂问题拆解干净,剩下的海量重复性劳动交给它来完成——各司其职,效率才能最大化。

现在,当使用 Codex 处理大型任务时,我通常会先提供一个最佳实践的代码样例,让它照此执行。

特殊情况特殊处理

Fread 是一个跨平台的 KMP 项目,依赖注入不仅存在于通用代码层,还涉及多个平台实现层。这些情况叠加在一起,复杂度显著上升。

很多时候,这类特殊情况若由我们人类处理,可能只需几行代码、几分钟就能搞定。但 AI 需要思考很长一段时间,而且对其而言,复杂度是成倍增加的。一方面,Codex 对 KMP 项目的了解有限;另一方面,对于如何正确处理平台实现层,它也很难给出理想的方案。

针对这类问题,我的解决策略是:逐步推进,交替上阵。先人工编写一部分代码,然后交给 Codex 解决剩余部分;再人工写一部分,再交给 Codex……如此循环往复。

具体如何操作呢?在每个存在依赖注入的模块中,我都会声明一个 expect 函数,并在当前的 Koin 模块中注册它:

expect fun Module.createPlatformModule()
val commonModule = module {
    createPlatformModule()
}

然后在 Android/iOS 平台上分别创建具体的实现:

actual fun Module.createPlatformModule() {
}

我先完成这一步,随后让 Codex 在所有模块中添加相同的改动。

接下来,需要将这些平台实现中的依赖注入模块注册原有的 kotlin-inject 类。这样一来,事情就简化了:我只需指导 Codex 将 kotlin-inject 模块中的声明同步到 Koin 的平台级模块中。这种任务 Codex 可以完成得非常出色。

然后重复以上步骤,直到所有模块的重构工作全部完成。

任务拆分至关重要

Codex 的上下文有限,处理复杂任务时很容易“走着走着就忘了初衷”,甚至会自作主张对代码做一些奇怪的改动。

拆分的逻辑是:复杂任务、架构相关的工作仍然由人完成。这部分搞定之后,就能拆分出独立且简单的子任务,交给 Codex 去处理。这样一来,即便 Codex 犯错,影响范围也很有限,回滚代码时也能节省更多的 token。

有一点个人习惯:AI 生成的代码,我一定会全部 review 之后才 accept。若不进行任务拆分,review 的工作量太大,恐怕连我自己的大脑也招架不住。

复杂问题使用 SKILL

用 Nav3 替换 Voyager 这个任务,需要改动的代码非常多,其中包含了大量重复性工作。就算让 AI 完全按照写好的最佳实践来模仿,但由于代码量巨大、任务复杂,Codex 仍然可能出错。这时就可以通过创建 SKILL 来解决。

(此处为原文中较长的 SKILL 定义代码,包含任务背景、任务内容、工作流程和绝对禁止规则等核心内容,此处按其原文样式保留)

在这个 SKILL 里,我写了一些“绝对禁止”的行为,本质上就是在规避特殊情况——也就是上面提到过的“特殊情况特殊处理”。这样能极大降低任务复杂度。

如果能定义好具体的 workflow,并且要求 Codex 必须严格遵守,那么它出错的可能性就会小很多。

单元测试验证

另一个可行的思路是:先让 AI 针对任务编写足够多的单元测试,确保重构前的代码全部能通过。然后进行大规模重构后,再次运行这些单元测试,以此确保软件稳定性。不过 Fread 这次重构涉及大量 UI 代码,编写单元测试比较麻烦,因此这个环节就跳过了。

提交并 Review

按照上述步骤,每次完成一个小任务后,都可以创建一个提交,然后新建一个对话来 review 这次提交。新建对话的目的是丢弃之前的上下文,作为一个全新的任务交给 AI,否则它很可能会为自己的问题自圆其说,反而影响 review 的质量。

来源:https://juejin.cn/post/7602280520961769498
上一篇Excel表格批量筛选数据高效办公指南 下一篇Claude Code智能体设计实现全解析
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
软件开发新手入门五大核心技能:基础编程能力(一)
AI教程 · 2026-05-30

软件开发新手入门五大核心技能:基础编程能力(一)

为什么基础编程能力被视为编程入门的首要门槛?在软件开发领域,一个常见现象是:许多编程新手热衷于追逐热门框架和最新技术,却忽略了最核心的基础——扎实的编程基础。这就如同建造摩天大楼,若地基不牢固,楼层再高也终将坍塌。基础不扎实,后续学习任何高级内容都如空中楼阁。 基础编程能力绝不仅仅是“会写代码”那样

SpiritMe人工智能数字人视频创作平台功能使用与技巧大全
AI教程 · 2026-05-30

SpiritMe人工智能数字人视频创作平台功能使用与技巧大全

SpiritMe是什么 先聊聊一个现实难题:如果预算有限、时间紧张,却想制作出逼真的个人视频内容,该怎么做?SpiritMe正是为解决这一痛点而生。它由一支深耕AI与前沿技术的团队打造,是一款文本转视频平台。核心逻辑非常简单——你创建一个专属的数字头像,再输入一段文字,这个头像就能像真人一样生动表述

THERAI关键词与搜索引擎优化实用策略
AI教程 · 2026-05-30

THERAI关键词与搜索引擎优化实用策略

THERAi是什么?AI心理治疗平台详解 在心理健康领域,AI工具层出不穷,但THERAi的定位独具特色——它是一个由人工智能驱动的心理治疗平台,旨在为需要心理支持的个体提供个性化服务。简单来说,它让AI扮演治疗师的角色,但并非冷冰冰的机器问答。由专业团队基于前沿算法打造,其核心优势在于:通过定制化

企业信息安全管理报告:客户数据安全与完整性最佳实践
AI教程 · 2026-05-30

企业信息安全管理报告:客户数据安全与完整性最佳实践

企业信息安全管理报告 不得不说,近年来信息技术的发展势头迅猛,令人应接不暇。伴随这一趋势,信息安全管理早已从“锦上添花”的附加项,演变为企业必须严守的“核心刚需”。过去一年,公司在信息安全领域投入了大量精力与资源,目标十分清晰——全力保障客户信息的安全性与完整性,杜绝任何潜在的意外风险。 公司概况

纹身漂移完全指南
AI教程 · 2026-05-30

纹身漂移完全指南

在纹身领域,有一个颇为有趣的现象:纹身本应是极为私人的自我表达,但大多数人却只能在纹身师提供的现成图样中挑挑拣拣。若想获得真正独一无二的设计,通常需要耗费大量时间与设计师沟通、反复修改,甚至还要靠运气。而近年来兴起的AI工具,正悄然改变这一局面。以Tattoodrift为例,它的定位十分精准——帮助