PS:本文的适用场景是:中大型老旧系统、大量的相同技术栈应用,即可以通过构建工具来获得规模化效应,进而在 ROI 的成本上获得更可观的收益。 并不适用于单个小型系统,小型系统直接使用 Augment、Cursor 之类的工具就可以转换完成。
在过去,老旧系统、遗留系统的现代化是一项高度复杂、割裂且重复的工程,需要大量人工操作。而 AI 编程工具的完善与 Vibe Coding 的兴起,为我们带来了一种全新的可能性:它将这些碎片化的任务连接成一个智能协同的工作流,助力我们跨越理解、转换、重构、部署的每一步。
现在你可以,用生成式 AI 来:
如此,我们便可以打造出基于 workflow + Agent 的自动化迁移工具。这就是,我想在这篇文章中介绍的主要内容。
尽管大模型的能力一直在提升,但是,它还没有达到我们能放心的地步。因此,在现阶段(2025.08,毕竟模型能力还会继续提升)而言,我们更多的还是关注 在使用 AI 来提升在迁移的不同阶段的提升,即在迁移的 workflow 中引入 AI 来提升效率。因此,使用 AI 辅助改造之前,我们有必要对基本的 AI 辅助 老旧系统改造有基本的认知,再结合 AI 来进行学习。
在云迁移与应用现代化的典型路径中,我们(结合 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 策略往往不是互斥的,而是可以组合使用的。大型系统通常由多个子系统、模块或服务组成,彼此在技术债务、 业务重要性、生命周期等方面差异显著,因此更适合采用差异化、多策略并行的迁移方式。
以下是一个 SAP 系统现代化的实践示例,展示了如何组合多种策略:
通过这种“按模块施策,组合应用 6R 策略”的方式,企业可以降低整体迁移风险、分阶段控制成本,并灵活适应数字化转型节奏 。系统现代化并非一次性重构的短跑,而是一个不断演进的长期过程,因此合理规划和动态调整迁移路径,是实现现代化价值最大化的关键 。
为了实现这种渐进式的演进,我们建议采用了经典的 “绞杀模式”(Strangler Fig Pattern)。这一模式模拟了热带植物绞杀榕树,逐步包裹旧树的方式 ——在旧系统周边逐步构建新系统功能,最终实现替代和淘汰。正如图示所展示的过程:
通过这种与 6R 策略高度兼容的绞杀模式,企业可以降低迁移风险、控制技术债累积、保持业务连续性,并实现架构的逐步演进。 这也体现了现代化的本质:不是一蹴而就的“重启”,而是一场可管理、可度量、可演进的“技术生态更新”。
如下图所示,其展示了从遗留系统到现代化应用的完整改造路径,可以分为九个阶段:
简单来说,我们需要设计好目标的系统架构、迁移应用的模板,再结合不同的场景来寻找、设计、构建不同的工具来加速我们的迁移,减少人天在这个过程中的 工作量。在没有 AI 的时代,我们优先会考虑:
而在有了 AI 之后,它可以更快地完成这部分的工作流。
配合上上述提供的基础知识,你可以很容易利用诸如 Gemini DeepResearch 工具,结合你提供关键的上下文信息,AI 就能针对互联网上类似的场景或者 已有的知识(虽然大部分不靠谱)来给你设计一个相对靠谱的方案。
尽管如些,你还是需要关注以下几个点:
诸如此类的,常见的觉得需要思考的问题,也可以让 AI 去调研。
基于过往丰富的遗留系统迁移经典,我们会加 AI 加速放在两个主要的领域:
与现有的 AI 编程是相似的,我们可以借用大量的 AI 工具来帮助设计迁移。
理解 AI 遗留系统代码,和我们在 AI 编程助手中使用的解释代码本质是一样的,就是 AI 将代码转为文本。只是,受限于上下文长度,我们往往需要裁剪上下文; 并且由于上下文是有关系的,所以需要构建出对应的图来表示概念间的关系。因而,对于遗留系统而言,我们仍然需要上下文工程,以提供更方便的方式让普通人来理解。
与文档之类的弱关联性不一样,代码本身就是带有非常强的图属性:即基于类和函数的调用关系。再结合代码所表达的业务含义,我们就可以构建出适合于人类 理解的知识图谱。通常来说,因此它可以由如下的两部分组成:
一个详细的案例可以参考 Thoughtworks 所构建的 CodeConcise 工具的架构 示例:
将复杂的带有业务逻辑的代码转换为易于理解的知识图谱,能够帮助开发者更快地掌握系统架构、业务逻辑和数据流动。在重写系统的第一个阶段时,它可以提供 非常清晰的系统视图,帮助开发者快速定位关键模块和依赖关系。
在缺乏源代码或文档的情况下,我们仍然可以借助 AI 对系统进行“逆向理解”。比如,从字节码(如 Java ASM)出发进行伪代码生成,再借助大模型的推理能力还原业务逻辑。 又或者是对生成的 DLL 进行反编译,提取类型库(tlib)和字符串信息,进而分析系统的行为。
诸如于通过字符串搜索定位关键操作(如数据库表名、提交按钮),作为分析的起点,我们可以:将 ASM(汇编)转换为伪代码,再向大模型提供伪代码, 获取功能解释和控制流分析。
AI 在这里可以帮助我们:
这种方式尤其适合黑盒系统,如 DLL 无文档接口、遗留 UI 框架系统等,能够从三方面入手:
相似的,对于于其他语言的字节码(如 C# 的 IL、Python 的字节码),我们也可以采用类似的方式进行逆向工程。
代码分析与理解只是第一步,最终目标是实现可演进的新系统架构,以及借助 AI 实现自动化迁移和语法规则转换。
结合从数据库、代码和业务逻辑中提取的知识图谱,我们可以快速整理出每个业务模块的核心功能和依赖关系。在这时,我们需要创建出新的微服务应用模板、 前端组件库和前端应用模板等,就可以开始进行代码的迁移。然后,可以让 AI 来生成新的架构设计:
这种生成的方式与我们现有的 AI 编程助手使用是相似的,只是它的输入是来源于现有的代码、业务逻辑和数据模型,而不是从零开始。
迁移规则生成:AST 转换下的 + AI 实践
现代化迁移的一大基础是结构可靠的代码重写能力,即在保证语义等价的前提下进行大规模语法替换与代码升级。这类任务适合交由基于 AST(抽象语法树)的工具完成, 它们能够精确地定位语法节点,进行批量修改,并最大程度避免误伤。例如,在不同语言生态中都出现了成熟的 AST 工具:
createClass
到 ES6 class)、状态管理替换等。再配合 CLI 工具和 IDE 插件,可实现对不同语言的项目进行批量语法迁移。
尽管 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 来进行迁移。
在我们有了更加丰富的经验和足够储备之后,剩下的问题就非常简单了:将这些经验和工具结合起来,构建出一个自动化的迁移工具。
构建 AI Agent 工具并不是一件简单的事,因此我们建议你:
如下是一个我们设计的用来练习这一类场景的提示词示例:
项目目标:创建一个 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 能力。即在转完码之后,自动化地进行测试、修复等工作。如下是一个示例的工作流:
只需要基于此编写,我们就可以让 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 在其中扮演两大关键角色:
最终,我们的目标是打造一个闭环的 AI 迁移 Agent。它不仅能执行代码转换,还能自动测试、捕捉错误、并调用 AI 服务进行自我修复,从而实现从分析、迁移到验证的端到端自动化。这种"AI 生成 AI 迁移工具" 的自举模式,让我们看到了一个更加智能化的未来:工具不再是静态的,而是能够根据实际场景持续演进和优化的智能体。
围观我的Github Idea墙, 也许,你会遇到心仪的项目