3万行代码被AI写成15万行屎山?如何低成本重构与梳理海量代码
最近在社区看到一个特别真实的求助贴,引起了不少人的共鸣。一位做科研、非科班出身的大佬,用 CUDA C++ 写了一套 GPU 求解器。原本 3 万行就能搞定的事情,在 AI(主要是早期 Codex 和 GPT)的“辅助”下,一路膨胀到了将近 15 万行。
虽然代码跑得没问题,加速比也达标,但面对这 15 万行冗余、混乱甚至有些“屎山”意味的代码,作者是真的头大:想要一个最小实现,干净、整洁、带注释,以便长期维护和吃饭。
更有意思的是,作者还提到最近 GPT-4.1(原帖称 5.5)有些降智,GPT-4o(原帖称 5.4)写的东西又不那么“说人话”。预算在 1000 元左右,核心诉求是找一种“量大管饱”、能吃得下海量代码的优质 AI 方案来做代码梳理。
这其实是一个非常典型的问题:AI 提效带来的副作用——代码膨胀,以及如何用 AI 解决 AI 制造的问题。 今天我们就来聊聊,如果你也面临着类似的几万、十几万行代码需要梳理,应该怎么操作。
为什么会变成 15 万行?
AI生成的代码往往包含大量冗余逻辑,导致代码量急剧膨胀,形成难以维护的‘代码屎山’。
首先要理解,早期的 Codex 或者现在的通用大模型,在生成代码时往往倾向于“防御性编程”或“过度实现”。为了确保逻辑正确,它可能会把很多本可以抽象的函数写死,或者加上大量冗余的判断。
对于非科班出身的科研大佬来说,利用 AI 快速实现科研目标是第一位的,这就导致了过程中缺乏架构层面的约束。现在的任务,其实就是一场**“数字化减肥”**——把水分挤干,留下最硬核的逻辑。
核心策略:分而治之 + 拼长上下文
要在有限的预算(1000 元/月)内梳理 15 万行代码,直接把所有代码扔给一个模型肯定是不现实的,即使是 200k 上下文的模型也可能因为 token 耗尽或注意力分散而“断片”。我们需要一套组合拳。
1. 不要直接扔代码,先给文档
很多同学拿到 AI 就直接把文件夹拖进去,这是大忌。建议先花点时间(或者先用 GPT-4o 快速过一遍),生成一份项目的架构文档。
- 让 AI 分析文件夹结构和依赖关系。
- 提取核心算法流程图。
- 识别哪些是核心数学逻辑(必须保留),哪些是胶水代码(可以大幅精简)。
有了这份地图,后续重构才有方向。
2. 拥抱长上下文模型
既然预算尚可,就不要在短上下文模型上浪费钱重试。现在市面上支持 128k 甚至 200k+ 上下文的模型不少。
-
推荐尝试: Claude 3.5 Sonnet 或者是具备长窗口能力的国产大模型(如 DeepSeek Coder-V2 的长文版,或者 Kimi/月之暗面等)。这类模型处理长文本的逻辑连贯性很强,非常适合做“阅读理解”后的改写。
-
使用技巧: 将相关的代码文件合并为一个个大块。比如,把所有相关的 CUDA Kernel 文件合并成一个
core_kernels.cu上下文,告诉 AI:“这是核心计算部分,请分析其输入输出和数学逻辑,忽略中间的临时变量重命名,只保留关键逻辑。”
利用支持长上下文的模型(如 Claude 3.5 Sonnet),可以将多个相关代码文件合并处理,从而理解整体架构和依赖关系。
3. 逆向工程:从行为反推代码
原帖作者提到“正确性没有问题”,这是一个巨大的优势。这意味着我们不需要 AI 去理解“为什么这样写是对的”,只需要 AI 告诉我们“怎么用最少的代码达到同样的效果”。
可以尝试编写一套自动化测试脚本(如果还没有的话),确保重构后的行为与原版一致。然后,把测试用例 + 一小段原始代码喂给 AI,指令如下:
“这里有这段代码的输入和输出测试用例。请忽略原始代码的复杂结构,用最简洁、符合最佳实践的方式重写这段功能,要求代码风格现代,注释清晰。”
这种“黑盒测试生成白盒代码”的方式,往往能有效去除冗余逻辑。
实操步骤建议 (以 CUDA/C++ 为例)
重构代码需要分步进行:从环境隔离、模块拆分到去噪处理,每一步都需要明确的策略和工具支持。
针对原帖的情况,如果让我来操刀,我会按照这个节奏来:
- 环境隔离: 不要直接动主力代码。Copy 一份出来叫
refactor_branch。 - 模块拆分: 15 万行代码里,核心数学逻辑可能只占 10%-20%。先找到这部分,用最强的模型(比如 GPT-4.1 或 Claude 3.5 Sonnet)进行**“逻辑蒸馏”**。让 AI 用人类数学语言描述它在干什么,再根据描述重写代码。
- 去噪处理: 对于外围的初始化、IO、参数解析代码,这些是 AI 最容易写啰嗦的地方。甚至可以不用原来的 AI 逻辑,直接写一份需求文档给 AI:“帮我写一个 CUDA 内存管理类,实现 X, Y, Z 功能,要求高效且无泄漏。” 让 AI 重新生成一套干净的,替换掉旧的屎山。
- Token 省钱秘籍:
- 压缩 Prompt: 删除代码中的空行和大部分注释再喂给 AI,能省下不少输入 Token。
- 利用 API 而非网页端: 网页端有字数限制且不方便批处理。写一个简单的 Python 脚本,调用长上下文模型的 API,按模块批量处理。
工具推荐
除了直接对话模型,这里还有一些专门针对代码重构的“神兵利器”:
- Cursor / Windsurf: 这类 IDE 内置了 AI,支持
@Codebase功能。你可以直接问它:“在这个项目中,哪里有重复的代码模式?” 它会帮你定位冗余。 - AIDER: 这是一个命令行工具,非常适合处理大型项目。它能帮你把整个 git 仓库映射到上下文中,并在修改代码后自动跑测试。它对 Token 的利用率极高,非常适合这种“清理战场”的任务。
总结
15 万行代码确实让人绝望,但既然核心逻辑对了,这就只是一个体力活。
不要指望 AI 一次性帮你把 15 万行变成 3 万行。你需要做的是**“项目架构师”**,指挥 AI 像蚂蚁搬家一样,先拆分、再重写、最后合并。
与其纠结 5.5 降智还是 5.4 不说人话,不如换个思路:用长文本模型做架构理解和逻辑提取,用代码专用模型做具体实现。预算 1000 元完全足够跑完这个流程,关键在于别让 AI 闲聊,要把每一步都具体化、文档化。
毕竟,代码是写给人看的,顺便能给机器跑。把代码维护好,也是科研打工人的基本素养嘛。
评论已关闭