AI × 旧系统:Vibe Coding 构建 AI 迁移工具,实现端到端智能迁移

PS:本文的适用场景是:中大型老旧系统、大量的相同技术栈应用,即可以通过构建工具来获得规模化效应,进而在 ROI 的成本上获得更可观的收益。 并不适用于单个小型系统,小型系统直接使用 Augment、Cursor 之类的工具就可以转换完成。

在过去,老旧系统、遗留系统的现代化是一项高度复杂、割裂且重复的工程,需要大量人工操作。而 AI 编程工具的完善与 Vibe Coding 的兴起,为我们带来了一种全新的可能性:它将这些碎片化的任务连接成一个智能协同的工作流,助力我们跨越理解、转换、重构、部署的每一步。

现在你可以,用生成式 AI 来:

  1. 生成针对性方案。借助 DeepResearch 来研究已有的互联网案例,针对我们提出的问题,给出更加详细的问题解答。
  2. 辅助进行分析。使用 AI 编码工具的 AI Agent 结合代码现状来评估方案是否靠谱,并改进原来的方案。
    • 上下文分析服务。老旧系统经常面临上下文过长的问题,需要经过预处理,以满足模型的窗口,而 AI 编码工具可以针对性解决此类问题,再将其转换为 MCP 服务。
    • 转换为图结构。编码以将代码转换为图结构,方便人类更好地理解老旧系统的业务。
  3. 辅助进行新应用设计。结合已有的文档、代码等信息,结合 DDD(领域驱动设计)来生成新的架构设计。
  4. 辅助置换旧应用。即 AI 生成 AI 迁移工具,以大大加速现有应用的迁移,并尽可能少破坏现有的业务逻辑。

如此,我们便可以打造出基于 workflow + Agent 的自动化迁移工具。这就是,我想在这篇文章中介绍的主要内容。

从经典路径到 AI 辅助:现代化演进路径

尽管大模型的能力一直在提升,但是,它还没有达到我们能放心的地步。因此,在现阶段(2025.08,毕竟模型能力还会继续提升)而言,我们更多的还是关注 在使用 AI 来提升在迁移的不同阶段的提升,即在迁移的 workflow 中引入 AI 来提升效率。因此,使用 AI 辅助改造之前,我们有必要对基本的 AI 辅助 老旧系统改造有基本的认知,再结合 AI 来进行学习。

谋定后动,6R 策略与演化布局

现代化策略与评估:6R 方法论与收益对比

在云迁移与应用现代化的典型路径中,我们(结合 Gartner 与 NTT Data)将其归纳为 6R 策略:Rehost(重托部署)、Replatform(重构平台)、 Repurchase(替代购买)、Refactor(重构代码)、Retire(淘汰)、Retain(保留)

策略名称 英文名称 说明
Rehost 重托部署 将系统迁移到新的基础设施(如云环境),不改动应用代码
Replatform 重构平台 对平台进行最小改动,使系统能更好运行在新环境中
Repurchase 替代购买 用 SaaS 或商用软件替代原有系统
Refactor 重构代码 修改代码以提升可维护性与性能,不改变功能
Retire 淘汰 停用不再需要的系统或模块
Retain 保留 保持系统原样运行,无需变更

相比于简单的云迁移(如“搬迁与迁移”模式,Lift & Shift),遗留系统现代化对业务的影响更深远,能够为企业带来显著更高的价值。 在所有选项中,重构架构(Re-architecting) 是最具回报的方式,不仅能带来 超过 50% 的成本节省,还提升了生产效率和业务敏捷性。 而相比之下,重托部署(Rehosting) 仅能实现 约 25%-30% 的成本节省。综合来看,重构架构(Re-architecting)不仅具备成本优势, 还能带来生产力和业务敏捷性的双重收益。

组合 6R 策略设计迁移路径

在实际的系统现代化过程中,6R 策略往往不是互斥的,而是可以组合使用的。大型系统通常由多个子系统、模块或服务组成,彼此在技术债务、 业务重要性、生命周期等方面差异显著,因此更适合采用差异化、多策略并行的迁移方式

以下是一个 SAP 系统现代化的实践示例,展示了如何组合多种策略:

  1. Rehost(重托部署):将现有的 SAP 应用以“搬箱式”方式迁移至云端,主要改动在基础设施层。这种方式能在短时间内实现上云,但如果业务流程和架构不随之优化,投资回报率(ROI)往往较低。
  2. Replatform(重构平台) + Refactor(重构代码):在已经迁移上云的 SAP 系统基础上,引入云原生架构的外围服务,如通过 CI/CD 管理新增功能、以微服务或 API 分层替代原有模块,提升系统的灵活性、可维护性和扩展性。
  3. Retire(淘汰)+ Refactor(重构代码):借助现代化契机剔除冗余的自定义代码,清理脏数据和重复逻辑,提升主数据质量。这一过程中需重点解决三大挑战:
    • 复杂的遗留系统结构(60%);
    • 高度定制化导致迁移难度高(59%);
    • 主数据不完整或冗余严重(51%)。
  4. Retain(保留) + Repurchase(替代购买):部分模块可部署在 IaaS/PaaS 环境中保留运行,保持自主控制;而非核心系统可直接替换为 SaaS 方案,提升效率,降低维护成本。

通过这种“按模块施策,组合应用 6R 策略”的方式,企业可以降低整体迁移风险、分阶段控制成本,并灵活适应数字化转型节奏 。系统现代化并非一次性重构的短跑,而是一个不断演进的长期过程,因此合理规划和动态调整迁移路径,是实现现代化价值最大化的关键

步步为营,渐进式拆解与迁移路径

渐进式迁移演进遗留系统

为了实现这种渐进式的演进,我们建议采用了经典的 “绞杀模式”(Strangler Fig Pattern)。这一模式模拟了热带植物绞杀榕树,逐步包裹旧树的方式 ——在旧系统周边逐步构建新系统功能,最终实现替代和淘汰。正如图示所展示的过程:

  1. 在初始阶段(Stage 0),企业规划与准备现代化路径,并通过 CDC(变更数据捕获)技术,将旧系统的数据同步到新的读取接口中,为后续替代做准备。
  2. 随后进入并行运行阶段(Stage 1),新旧系统共存,旧系统仍处理写入操作,而读取可以逐步转向新系统,通过事件总线等方式保持数据一致。
  3. 在替代阶段(Stage 2 → N-1),系统将功能模块逐个迁移到新架构中,客户端调用被 API Gateway 接管,内部通过 Command 和 Query 模型与微服务通信。部分模块可选择双写、数据同步或反向代理等方式平滑过渡。
  4. 最终,在所有关键模块替代完成后(Stage N),旧系统被完全停用,遗留生态被安全“绞杀”。

通过这种与 6R 策略高度兼容的绞杀模式,企业可以降低迁移风险、控制技术债累积、保持业务连续性,并实现架构的逐步演进。 这也体现了现代化的本质:不是一蹴而就的“重启”,而是一场可管理、可度量、可演进的“技术生态更新”。

经典的落地迁移 Workflow

如下图所示,其展示了从遗留系统到现代化应用的完整改造路径,可以分为九个阶段:

  1. 遗留系统:识别需要改造的老系统。
  2. 改造目标:明确现代化的业务与技术目标。
  3. 系统评估:从技术、流程、架构等角度全面评估当前系统。
  4. 系统拆分:进行资产分析、依赖识别与模块划分,必要时采用逆向工程。
  5. 改造方案设计:基于现状制定现代化路径,结合团队能力设定优先级。
  6. 增量式交付:以小步快跑方式开发目标领域功能,降低风险。
  7. 内部发布:在组织内部先行验证系统改造成果。
  8. BETA发布:小范围上线,收集用户反馈。
  9. 现代化应用:全面上线,系统完成转型。

简单来说,我们需要设计好目标的系统架构、迁移应用的模板,再结合不同的场景来寻找、设计、构建不同的工具来加速我们的迁移,减少人天在这个过程中的 工作量。在没有 AI 的时代,我们优先会考虑:

  • 结构树提取:
    • 将字节码构造成 AST(抽象语法树)/Control Flow Graph,方便分析调用链
    • 使用诸如于 Antlr 直接来分析不同的语言源码,来分析跨语文关联关系
  • 图增强/语义增强:结合字节码 + 反编译源码 + 注释进行混合建模
  • 可视化工具链:将 Bytecode → AST → 前端可视化
  • 转换代码:结合 AST 分析到的关键类信息,直接置换为代码

而在有了 AI 之后,它可以更快地完成这部分的工作流。

AI 辅助迁移方案研究与设计

配合上上述提供的基础知识,你可以很容易利用诸如 Gemini DeepResearch 工具,结合你提供关键的上下文信息,AI 就能针对互联网上类似的场景或者 已有的知识(虽然大部分不靠谱)来给你设计一个相对靠谱的方案。

尽管如些,你还是需要关注以下几个点:

  • 迁移路径。能不能更小地影响业务上的影响,而去采用更稳妥的方案来进行。
  • 内部模型能否满足要求。受限于安全合规等问题,如果不能使用外部的模型时,内部的模型是不是可行的?
  • 是否存在非 AI 工具来转换。生成式 AI 生成的内容是存在幻觉的,所以需要借助于其调研有没有基于 AST 的工具来进行转换,再配合 AI 修复。
  • 安全防护网。如何针对于前后产生的流量、数据变更进行捕获,引入 CDC 等工具,来确保前后逻辑一致性。
  • ……

诸如此类的,常见的觉得需要思考的问题,也可以让 AI 去调研。

AI × Legacy Modernization:从增强语义理解到 10x 速度的重建

基于过往丰富的遗留系统迁移经典,我们会加 AI 加速放在两个主要的领域:

  • 加速对于遗留系统的分析与评估,如:AI 生成分析工具,生成符合业务语义的知识库,生成可视化的代码等。
  • 加速转换到目标的新应用架构上,如:在转换规则生成,基于业务语义生成代码,基于数据库 schema 生成代码等。

与现有的 AI 编程是相似的,我们可以借用大量的 AI 工具来帮助设计迁移。

加速逆向:增强语义分析与全面的系统评估

理解 AI 遗留系统代码,和我们在 AI 编程助手中使用的解释代码本质是一样的,就是 AI 将代码转为文本。只是,受限于上下文长度,我们往往需要裁剪上下文; 并且由于上下文是有关系的,所以需要构建出对应的图来表示概念间的关系。因而,对于遗留系统而言,我们仍然需要上下文工程,以提供更方便的方式让普通人来理解。

构建语义代码图谱:从依赖关系到知识生成

与文档之类的弱关联性不一样,代码本身就是带有非常强的图属性:即基于类和函数的调用关系。再结合代码所表达的业务含义,我们就可以构建出适合于人类 理解的知识图谱。通常来说,因此它可以由如下的两部分组成:

  • 依赖分析生成图关系
  • 基于 AST 的依赖分析
  • 基于 LLM 的依赖分析
  • 知识生成以增强语义。
  • 使用 TreeSitter 来进行代码 chunk,调用模型 t
  • 对文档进行 chunk 拆分

一个详细的案例可以参考 Thoughtworks 所构建的 CodeConcise 工具的架构 示例:

  • 利用 TreeSitter、Antlr 分析代码依赖。摄取(IngestionTool)工具利用加载器 (Loaders) 读取应用程序代码,并在图数据库中创建节点树。加载器可以根据预定义的拓扑结构,针对不同的编程语言进行定制。
  • 构建知识图谱并向量化 LLM 返回结果。增强功能通过特定操作提取代码的各个方面,并从大语言模型 (Completions LLM) 获取解释。来自大语言模型的每个响应都会附加到节点树上,从而丰富知识图谱,并创建一个关于代码的动态信息库。
  • 提供上下文切片与 Prompt 支持。包括通过标注过程识别出的各项功能、与其他文件的关系以及特定的函数。

将复杂的带有业务逻辑的代码转换为易于理解的知识图谱,能够帮助开发者更快地掌握系统架构、业务逻辑和数据流动。在重写系统的第一个阶段时,它可以提供 非常清晰的系统视图,帮助开发者快速定位关键模块和依赖关系。

逆向工程生成知识:从字节码到逻辑还原

在缺乏源代码或文档的情况下,我们仍然可以借助 AI 对系统进行“逆向理解”。比如,从字节码(如 Java ASM)出发进行伪代码生成,再借助大模型的推理能力还原业务逻辑。 又或者是对生成的 DLL 进行反编译,提取类型库(tlib)和字符串信息,进而分析系统的行为。

诸如于通过字符串搜索定位关键操作(如数据库表名、提交按钮),作为分析的起点,我们可以:将 ASM(汇编)转换为伪代码,再向大模型提供伪代码, 获取功能解释和控制流分析。

AI 在这里可以帮助我们:

  • 伪代码转自然语言:辅助理解复杂的汇编逻辑;
  • 推导分析路径:建议分析顺序、可能的行为入口;
  • 交叉验证:通过 SQL、类型库(tlib)、日志行为等维度增强解释可信度;
  • Prompt Engineering:通过开放式提示减少幻觉倾向,引导模型从数据出发,而非揣测目标。

这种方式尤其适合黑盒系统,如 DLL 无文档接口、遗留 UI 框架系统等,能够从三方面入手:

  • 前端分析:UI 元素识别、动态行为分析(JS + ASP);
  • 后端逻辑还原:数据库 schema 推理、反编译代码分析;
  • 程序集提取:DLL 类型库分析、字符串查找、子函数调用路径绘制。

相似的,对于于其他语言的字节码(如 C# 的 IL、Python 的字节码),我们也可以采用类似的方式进行逆向工程。

驱动现代化:自动化的翻译代码与校验自动化

代码分析与理解只是第一步,最终目标是实现可演进的新系统架构,以及借助 AI 实现自动化迁移和语法规则转换。

前向设计:打造可演进的新架构

结合从数据库、代码和业务逻辑中提取的知识图谱,我们可以快速整理出每个业务模块的核心功能和依赖关系。在这时,我们需要创建出新的微服务应用模板、 前端组件库和前端应用模板等,就可以开始进行代码的迁移。然后,可以让 AI 来生成新的架构设计:

  • 基于领域建模构建模块化系统
  • 推导 RESTful API 设计
  • 识别前端组件并构建设计系统

这种生成的方式与我们现有的 AI 编程助手使用是相似的,只是它的输入是来源于现有的代码、业务逻辑和数据模型,而不是从零开始。

迁移规则生成:AST 转换下的 + AI 实践

自动化翻译:AST 工具驱动的结构性代码变换

现代化迁移的一大基础是结构可靠的代码重写能力,即在保证语义等价的前提下进行大规模语法替换与代码升级。这类任务适合交由基于 AST(抽象语法树)的工具完成, 它们能够精确地定位语法节点,进行批量修改,并最大程度避免误伤。例如,在不同语言生态中都出现了成熟的 AST 工具:

  • Java – OpenRewrite:通过规则化的 recipe 文件实现对 Java 代码的批量迁移,适用于 Spring 升级、日志框架替换等场景。
  • Vue – gogocode:支持 Vue 单文件组件(SFC)中 script 和 template 的 AST 变换,能够识别 template 中的指令、事件绑定等结构。
  • React – jscodeshift:由 Facebook 提供的 codemod 工具,广泛用于 React API 升级(如从 createClass 到 ES6 class)、状态管理替换等。
  • 通用 – ast-grep:基于 Tree-sitter 的多语言 AST 查询与替换工具,支持结构化搜索、重写与 Playground 调试。

再配合 CLI 工具和 IDE 插件,可实现对不同语言的项目进行批量语法迁移。

迁移规则生成:用 AI 完成语义迁移的最后一公里

尽管 AST 工具在结构重写方面表现优异,但面对复杂的业务语义迁移,仅靠 AST 模式匹配往往力有未逮,这时就需要结合 AI 生成迁移规则、设计重写逻辑。 如下是通过 AI 生成 rewrite.yml:

type: specs.openrewrite.org/v1beta/recipe
name: MigrateSlf4jToPLogger
displayName: Migrate SLF4J Logger to PLogger Singleton
recipeList:
  - org.openrewrite.java.ChangeType:
      oldFullyQualifiedTypeName: org.slf4j.Logger
      newFullyQualifiedTypeName: com.phodal.PLogger

通过直接生成迁移规则,再配合 AI 生成测试用的代码,我们就可以在工具中校验迁移规则的正确性,再进行迁移。而除了生成规则的方式,我们也可以直接生成 迁移用的代码,比如直接使用 OpenRewrite 的 Java API 来进行迁移。

Vibe 自动化遗留系统迁移的 AI Agent 工具

在我们有了更加丰富的经验和足够储备之后,剩下的问题就非常简单了:将这些经验和工具结合起来,构建出一个自动化的迁移工具。

借助最好的 AI 编程工具 Vibe 原型

构建 AI Agent 工具并不是一件简单的事,因此我们建议你:

  1. 在外部/外网环境,可以使用 Claude 4 的 AI 编程工具,如 Augment 等来构建原型
  2. 选用和内部模型相当能力的模型来实现 AI 服务能力
  3. 结合大量的开源代码来测试工具,丰富工具的不足之处

如下是一个我们设计的用来练习这一类场景的提示词示例:

项目目标:创建一个 Java CLI 应用,自动将遗留的 JSP 项目转换为现代化的 Spring Boot 应用。

技术栈选择:
1. 构建系统:Gradle
2. CLI 框架:Picocli(命令行接口)
3. 代码生成:JavaPoet 或 Freemarker
4. 解析工具:
   - JavaParser:解析 Java 源码
   - jsp-parser:解析 JSP 文件
   - ASM:解析编译后的字节码(jar 包)
   - 需要将 JavaParser + ASM 结合,构建代码依赖图
5. HTML 处理:Jsoup(如需要)
6. 代码迁移:OpenRewrite(用于语言版本迁移)

通过反复的迭代和测试,这个原型可以帮助我们快速验证思路,并在此基础上构建更复杂的 AI Agent 工具。

构建端到端闭环的 AI 能力与 Agent 工具

当我们的原型可以实现代码的转换之后,我们就可以尝试构建端到端的 AI 能力。即在转完码之后,自动化地进行测试、修复等工作。如下是一个示例的工作流:

  • 自动启动应用(Spring 应用 mvn spring-boot:run)
  • 获取出错信息(过滤无关的内容)
  • 自动调用 AI Service 修复
    • 分析出错文件
    • 修复出错文件

只需要基于此编写,我们就可以让 AI 工具实现 AI 的修复与迁移支持。当我们有了足够的尝试和经验之后,我们就可以将其转化为 AI Agent 工具。 如下是一个示例的提示词:

我正在编写一个自动化的 xx 工具,采用“两阶段 AI 调用模式”:

- 第一阶段:根据错误信息生成工具调用,以决定需要读取哪些文件。
- 第二阶段:根据读取的文件内容和错误信息,生成实际的修复代码。
    - 工具包括:`read-file`、`write-file`、`str-replace` 和 `list-dir`

请参考你所使用的工具(GitHub Copilot/Cursor 或 Windsurf),实现这个 AI Agent。目前只需要代码,不用进行任何修改。

你就可以基于此来构建出一个 AI Agent 工具。它可以自动化地进行代码的迁移、修复等工作。

小结

本文深入探讨了如何利用生成式 AI,特别是通过构建自动化的 AI Agent,将传统上复杂、割裂的遗留系统现代化改造,转变为一个高效、智能的协同工作流。我们告别了纯粹手动的"小作坊"模式,迎来了一种" Vibe Coding"的全新范式。

最令人兴奋的是,这个过程本身就体现了一种AI 自举(AI Bootstrapping)的理念:我们使用 AI 来构建 AI 工具,让 AI 生成迁移规则、生成测试代码、甚至生成整个 AI Agent 的架构。这种"用 AI 来构建更强大的 AI 工具" 的方式,不仅提升了工具的智能化程度,更重要的是创造了一个持续学习和自我完善的闭环。

核心方法论是,将经典的现代化策略(如 6R 模型、绞杀榕模式)与 AI 的能力深度融合。AI 在其中扮演两大关键角色:

  1. 加速理解与分析:通过构建语义代码图谱、逆向工程还原业务逻辑等方式,AI 帮助我们前所未有地快速洞察旧系统的架构、依赖和业务内涵,即便是在文档缺失的情况下。
  2. 加速转换与重建:结合 AST(抽象语法树)工具的精确性与 LLM 的灵活性,我们可以自动化地生成迁移规则、转换代码,甚至在新的架构上进行前向设计,极大地提升了迁移效率。

最终,我们的目标是打造一个闭环的 AI 迁移 Agent。它不仅能执行代码转换,还能自动测试、捕捉错误、并调用 AI 服务进行自我修复,从而实现从分析、迁移到验证的端到端自动化。这种"AI 生成 AI 迁移工具" 的自举模式,让我们看到了一个更加智能化的未来:工具不再是静态的,而是能够根据实际场景持续演进和优化的智能体。

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806