Skip to main content
客户案例

400 万行 + 50 万行,3 周完成巨型应用大重写

用 Qoder 开发 Qoder——在 400 万行存量工程上新增 50 万行代码,3 周交付的完整方法论

这不是从零开始

今年我们对外发布过一个案例:5 人团队用 7 天,用 Qoder 开发出 QoderWork,传统方式得 20 人花数周才能交付。 那个案例是从零到一的新项目——干净的代码库,规则自己定,架构自己设计,AI 在白纸上写代码,没有历史包袱。 这篇文章要讲的是另一个故事——这次 AI 面对的不是白纸,而是一个跑了多年、横跨多个仓库、几百万行代码堆起来的存量工程。 我们要升级的是 Qoder 自身。Qoder 的工程是一个真实运转中的复杂系统:前端是 VS Code IDE 扩展代码,后端是 Go 编写的 Agent 调度、知识引擎和多模型调用系统,前后端独立仓库,总代码量约 400 万行。历史架构决策散落在代码各处,模块间的隐性依赖从未被完整文档化,任何大改动都可能引发连锁反应。 我们要在这个系统上新增一个 50 万行级别的全新功能模块——Qoder V1.0 的 Quest 全面升级,包含:
  • 全新 Quest 独立视窗:像派活一样指挥 AI,彻底重新设计的交互范式
  • Editor 全面焕新:编码体验的系统性升级
  • 知识引擎:代码沉淀为知识,对话中提炼记忆,让智能体越用越聪明
  • 多工作区多任务并行:跨项目协同,多任务并行交付
  • 专家团协同 + 自定义专家:并行分工,灵活配置
交付时间:3 周。 我们用 Qoder 开发 Qoder,趟出一套专门给存量巨型工程用的 Agentic Engineering 和 Autonomous Engineering 方法。下面是完整记录。
400 万行 + 50 万行,3 周完成巨型应用大重写

地基先行:让 AI 真正读懂 400 万行代码

把 AI 引入存量工程,第一个拦路虎不是"AI 不够聪明",而是 AI 根本不知道这个系统里发生过什么。 LLM 的 context window 是有限的,400 万行代码不可能全部喂进去。更难的问题是,即使能喂进去,AI 也不知道哪些是重要的架构约定,哪些是历史遗留的妥协,哪些接口看起来可以改但实际上有十几个调用方在依赖它。 一个对存量工程一无所知的 AI,写出来的新代码就是"外来物"——风格不统一,接口不兼容,悄悄违反了几条从未写在文档里的潜规则,然后在联调时爆炸。 我们的解法是在动手写代码之前,先把"AI 的认知基础设施"搭起来。一共三层:前两层是 Qoder 自带的产品能力——Repo Wiki 给宏观架构视图,代码知识图谱给精确的调用关系。第三层是我们自己补的工程实践——把每次重大变更的 Spec 和决策原文留在仓库里,让 AI 不只能看到现在长什么样,还能往回查为什么变成这样。我们用 Qoder 开发 Qoder,正好把这三层做透了。

第一层:Repo Wiki(Qoder 内置能力)

基于代码自动生成、会跟着代码变更一起更新的仓库级文档,覆盖项目整体架构、模块边界、核心数据流以及跨模块的引用关系图谱。它把分散在 400 万行代码里那些散落的结构关系整理成一份能直接读的项目文档——代码本身能告诉你单个文件在做什么,但说不清系统整体是怎么组织的,Repo Wiki 正是补上这一层全景视图。 Repo Wiki 相当于给 AI 配了一份"项目地图"。新来的 AI 不需要逐文件爬取去拼装系统结构,直接读这份地图就能上手,知道模块怎么划分、依赖怎么走、关键路径在哪里。

第二层:代码知识图谱(Qoder 内置能力)

通过静态分析结合 AI 理解,对整个代码库做结构化建模:模块依赖关系、接口契约、数据流向、核心数据结构的读写路径。这不是简单的调用关系图,而是一个可查询的知识库。 AI 在生成新代码时,可以实时查询:"这个接口目前有哪些调用方?"、"这个数据结构在哪些地方会被修改?"、"新的 Quest 视窗如果要复用这个组件,会影响哪些已有功能?" Repo Wiki 让 AI 看到项目大致是个什么样子,知识图谱让 AI 能查到具体每个接口的调用情况。一粗一细,是 Qoder 自带的两面。

第三层:历史 Spec 档案(工程实践沉淀)

前两层都来自 Qoder 自身的产品能力,能让 AI 看清"系统现在长什么样"。但还缺一层——这套架构是怎么演化到今天这样的。某个接口为什么被废弃、某个看似多余的兼容层是在应对哪次线上事故,这些决策的来龙去脉往往只存在于当事人的记忆里。人一走就彻底失联,下一波重构只能凭代码反推意图,把当年踩过的坑再踩一遍。 这一层不是产品功能能直接给的,得靠工程纪律把它沉淀下来。我们在仓库里把每次重大变更的 Spec 和决策原文一并留下来。AI 修 bug 或加新功能时,不只能看到"现在长什么样",还能回溯"为什么会变成这样"。仓库不只是当下代码的快照,还多了一份能往回查的工程档案。 两层产品能力加一层工程实践,地基才算齐。少了任何一层,AI 写的代码都是在沙地上盖房。

Ultra Spec:动手之前,先把 Spec 写透

地基打好之后,我们不急着写代码。QoderWork 那一波的第一步就是"不写代码、只写 Spec",放到存量工程里,这条原则要执行得更彻底——一旦 AI 开始生成代码,纠错的成本会急剧上升。我们把这个阶段叫做 Ultra Spec。 普通 Spec 描述功能是什么,Ultra Spec 描述功能的每一个维度,精确到 AI 能直接照着做,把会导致返工的问题在 Spec 阶段就摊开。它有一套固定维度:功能目标、I/O 契约、业务规则、边界 Case、安全边界、测试计划等。每一维都要写到机器可读——I/O 用 JSON Schema 而不是描述性文字,业务规则每条对应具体输入输出,安全边界用"必须做 / 先询问 / 严禁做"三级权限。 放到存量工程里,每一项还要再叠一层"存量视角":功能目标说明影响哪些存量模块,I/O 契约对齐既有接口、明确向前兼容,业务规则把存量系统的隐性规则显式写出来、不能靠 AI 猜,边界 Case 覆盖历史脏数据,安全边界列出不能碰的代码区,测试计划必带对存量功能的回归。少了这层视角,AI 写出来的就是外来物。 以知识引擎模块为例,它的 Spec 不只是"对话中提炼记忆"这句话,而是要精确定义:什么类型的对话会被提炼、提炼的触发时机、记忆的存储与检索结构、与现有代码索引系统的接口契约、记忆库过大时的降级策略、不同工作区之间记忆隔离的边界规则。每一条都要有具体的输入输出定义,不允许出现"视情况而定"。 Spec 写完不是终点,而是进入多 Agent 交叉 Review 阶段。我们会同时启动多个不同视角的子 Agent 独立审查同一份 Spec:架构师视角检查模块边界和接口设计,安全专家视角排查权限漏洞和数据泄露风险,性能专家视角预判慢查询和高频调用瓶颈,存量系统专家视角(基于知识图谱)检查与现有代码的兼容性。之后再走一轮验证:独立的验证者 Agent 对所有识别出的缺陷做反向推导,剔除幻觉产生的虚假问题。最终由人做决策授权,重点集中在涉及 SLO 定义和不可逆操作的部分。 Ultra Spec 阶段投入的时间是有杠杆的。这边多花一天,后面调试和返工能省下好几倍。

专家团协同:把 Spec 跑成可并行的工程

Ultra Spec 把一个模块的需求拆成了依赖清晰的结构化计划,但落地时还有一道关。像知识引擎、多工作区并行这样的单个模块就横跨前端 IDE 扩展、Go 后端、Agent 调度、模型调用链路几千到上万行的改动,如果仍然让一个 Agent 从头串到尾,Ultra Spec 花力气识别出来的可并行任务会被硬生生拉成单线程,长上下文下的注意力稀释还会让前期定下的约定在后半段悄悄丢掉。Qoder 早期版本里就出现过这种尴尬:一个 Agent 任务跑到后半程,明显感觉它已经"不记得"开头。 专家团模式(Experts Mode)就是为了补这一段做的。它由一个 Team Lead 和若干专项 Agent 组成。Team Lead 不写代码,只读懂 Ultra Spec 的任务清单、识别依赖、按 DAG 顺序把活派给后端、前端、测试、审查、调研等专家,每个专家跑在独立上下文里互相不挤占。这跟"同时开几个 Agent 窗口"的本质区别在于后者没有协调,专家团把 Ultra Spec 识别出的 DAG 直接翻译成执行计划,前后端能同时推进。遇到执行中的模糊选择(加密算法用哪个、兼容策略是降级还是报错),Team Lead 会抛候选项让人拍板再派工,不让 AI 按猜测闷头跑。 专家团也不强制所有专家都用同一款顶级模型。调研员、初始化通用工程师这类轻角色跑便宜快模型,架构关键决策的 Reviewer、复杂重构工程师跑顶配模型,整体成本降到全员用顶配的 1/2 到 1/5,而关键路径的智能水位没掉下来。三周跨度里跑了成百上千个子任务,每个都调最贵的模型账单会爆炸,全用便宜的关键节点质量没有保障,异构调度正好落在这条预算曲线上。 专家团还会把这次积累的经验留下来:每个专家沉淀 Expert Skill(某个模块的测试环境怎么起、某个接口有哪些历史坑),团队层面沉淀 Team Skill(哪类任务用哪种派工顺序最顺)。下一轮遇到同类活,这些经验可以直接接上。

Ultra Review:替人挖出 AI 代码里的细节问题

新矛盾随之而来:AI 生成代码的速度远远超过人工 Review 的速度。 Qoder 同时运行多个 Quest 并行执行任务——知识引擎、多工作区并行、专家团协同,这些模块可以同时推进,每个模块每天可能产出数千行代码。Review 如果还是线性的、单人的,立刻就是整条流水线的瓶颈,AI 跑得再快也被抵消掉。 我们的解法是 Ultra Review,把代码审查从单线程改成多 Agent 并行。 具体做法是给每个 PR 同时派一组 Agent 并行 Review。这些 Agent 从不同的代码起始位置开始扫描,采用不同的路径和上下文载入顺序,用来抵消 LLM 的 context window 偏置——单个 Agent 从头到尾读代码,容易在后半段注意力"稀释",漏掉问题。并行扫完之后再做一轮 Verify 和 Dedup:剔除幻觉产生的误报,把多个 Agent 重复发现的同一问题合并。 Review 聚焦几个核心维度:正确性、安全性、性能、架构一致性、可维护性等。其中架构一致性在这个项目里特别要命——50 万行新代码如果跟存量系统的架构风格脱节,技术债会指数级长。每一次 AI 生成的代码都要检查:命名是否符合存量约定?分层是否与现有模块一致?有没有绕过存量抽象层直接操作底层? Ultra Review 就一条原则:盯逻辑错误,别纠结样式。样式交给 Linter 和格式化工具,AI 的 Review 算力留给真正重要的事。

Computer Use 自动化验证:AI 长出了眼睛和手

代码写完、Review 通过,还需要验证功能是否真的正确。 传统自动化测试的问题是:写测试脚本本身就是大量工作,而且脚本往往只覆盖 Happy Path,边界 case 需要额外编写,维护成本随着代码量线性增长。 Computer Use 让这个环节换了思路。 Qoder 直接接管本地开发环境,通过截屏、坐标定位、模拟键盘鼠标,像真人一样操作。你不需要写测试脚本,只需要描述要验证的功能,剩下的交给 AI:
  1. 自动拉起 IDE,确认代码状态
  2. 运行项目,等待服务启动
  3. 打开浏览器或 IDE 界面,执行完整的业务流程
  4. 验证结果是否符合 Spec 中定义的预期输出
  5. 覆盖边界 case:空输入、权限边界、并发场景、存量数据兼容性
以多工作区并行功能为例,验证不只是"能不能打开多个工作区",而是:两个工作区同时执行 Agent 任务时是否会产生资源竞争?工作区切换时上下文是否正确隔离?知识引擎的记忆是否在工作区之间保持了正确的隔离边界? 发现问题时,AI 会自动走完整的"走单"流程:整理操作链路和截图,分析错误日志,给出初步根因判断,然后直接通过 API 在 GitHub 提交 Issue。提出的 Issue 不是简单的"功能不可用",而是包含复现步骤、错误上下文和初步的代码定位。 这个闭环覆盖三类触发场景:新功能开发完成后的主动验证、CI 流水线中的自动触发、日志监控发现异常后的自动触发。

Nightly Auto-Heal:让机器在你睡觉时工作

到这一节,方法的形态变了。前面那几节 AI 始终是协作者,人在环里把关——这是 Agentic Engineering。Nightly Auto-Heal 把人挪出闭环,让机器自己跑发现-修复-验证的循环,正式进入 Autonomous Engineering 的阶段。 验证发现的问题、人工测试发现的 bug、CI 失败、日志报警——所有这些 issue 会进入一个统一的处理队列。 晚上收工之后,Nightly Auto-Heal 流程自动启动。
Issue 进入处理队列

结合代码知识图谱,模型分析根因
定位相关代码文件和调用链路

生成修复方案 + 对应的 Spec 补丁

AI 执行修复,生成 PR

Computer Use 自验证
(跑完整业务流程 + 边界 case)

验证通过 ──→ PR 就绪,等待人工 Review & Merge
验证失败 ──→ 标记为需人工介入,白天优先处理
这个流程的关键不在于"完全自动化",而在于把人的时间重新分配。 早上上班时,队列里简单的 bug 已经有对应的 PR 在等待 Review,根因分析已经做完,修复方案已经经过自验证。工程师不需要从零开始排查,只需要做最终的判断和决策。 人不再卡在"找 bug、定位代码、写修复、手动验证"这条链路上,时间留给真正需要人判断的地方:架构决策、复杂 bug 的根因分析、Merge 前的最终拍板。 Nightly Auto-Heal 跟代码知识图谱配合的效果最明显。传统 bug 修复最耗时的部分往往不是"写修复代码",而是"找到问题在哪里"——在 400 万行代码里定位一个 bug 可能需要数小时。知识图谱让 AI 能快速追踪调用链路,把定位时间从小时级压到分钟级。

三周之后

三周,50 万行新代码,99% 由 AI 生成。 Quest 独立视窗、知识引擎、多工作区并行、专家团协同——这些功能全部集成进 Qoder V1.0 并对外发布。 但这篇文章真正想说的,不是这个数字。 数字背后更重要的是:我们跑通了两套相互衔接的方法——Agentic Engineering 让 AI 在人监督下高质量协作,Autonomous Engineering 让机器在人离场之后继续跑闭环。 存量巨型工程跟空白项目的区别,在于认知负担。空白项目的 AI 可以自由发挥,存量工程的 AI 必须先被"驯化"——它需要知道这个系统经历过什么,约定过什么,不能碰什么。 这套方法的五层结构,对应五个不同的作用:
层次工具作用
地基Repo Wiki + 代码知识图谱 + 历史 Spec 沉淀让 AI 看懂 400 万行存量代码的现状与演化
杠杆Ultra Spec + 多 Agent 交叉 Review在写代码之前,把会导致返工的问题先摊开
执行专家团协同(Leader + 专项 Agent + 工程知识引擎)把 Spec 的依赖图跑成可并行的工程交付
护栏Ultra Review 多 Agent 并行跟上 AI 的生成速度,挖出代码里的细节问题
飞轮Computer Use 验证 + Nightly Auto-Heal把发现-修复-验证跑成自动闭环
五层缺一不可。只用 Ultra Spec 而没有知识图谱,AI 写的 Spec 会漏掉存量系统的隐性约束;只有专家团而没有 Ultra Review,多专家并行写出来的代码之间会悄悄出现风格和边界分歧;只用 Auto-Heal 而没有 Ultra Review,修复的 bug 会源源不断涌现,因为代码质量在源头没把住。 还有一个值得说的:工程师的角色在两个阶段里都变了,但变法不一样。 Agentic 阶段,工程师是标准的制定者——定 Spec 的精度、划架构边界、决定哪些 Review 视角必须上、最后判断 PR 能不能 Merge。AI 写代码,人定方向。 Autonomous 阶段,工程师跟 AI 协同搭验证体系。机器要在人离场之后还能继续跑闭环,前提是它能自己判断"对不对"——这套可信的验证基础设施不是单靠人写出来的:Computer Use 的端到端业务流验证、单元测试、集成测试、CI 流水线、线上日志监控、回归数据集……每一层都是人和 AI 配合打磨——人定"什么算对"的判据和兜底逻辑,AI 把判据落成可执行的检查代码。验证体系搭得越扎实,机器能自主跑的范围才越大。 AI 能走多远,取决于你给它的认知基础设施和验证基础设施有多扎实。Spec 越精确,AI 偏离得越少;验证越完整,飞轮才能真的转起来。 AI 替代不了工程师,因为这场博弈里真正稀缺的从来不是写代码的能力,而是定义"什么算对"的能力。Agentic 阶段定 Spec 的精度,Autonomous 阶段定验证的边界,这两件事 AI 都帮不上忙,但它们决定了 AI 能在多大的半径里替你工作。 写代码这件事,正在从工程师的核心职责退成一种基础设施。真正的护城河,转移到了上游——能不能把模糊的需求拆成 AI 能执行的 Spec,能不能把"我觉得没问题"翻译成可被自动验证的判据。这两件事做得越好,AI 跑得越远,工程师的杠杆就越大。
产品概述
快速入门