PS:本文的适用场景是:中大型老旧系统、大量的相同技术栈应用,即可以通过构建工具来获得规模化效应,进而在 ROI 的成本上获得更可观的收益。 并不适用于单个小型系统,小型系统直接使用 Augment、Cursor 之类的工具就可以转换完成。
在过去,老旧系统、遗留系统的现代化是一项高度复杂、割裂且重复的工程,需要大量人工操作。而 AI 编程工具的完善与 Vibe Coding 的兴起,为我们带来了一种全新的可能性:它将这些碎片化的任务连接成一个智能协同的工作流,助力我们跨越理解、转换、重构、部署的每一步。
现在你可以,用生成式 AI 来:
- 生成针对性方案。借助 DeepResearch 来研究已有的互联网案例,针对我们提出的问题,给出更加详细的问题解答。
- 辅助进行分析。使用 AI 编码工具的 AI Agent 结合代码现状来评估方案是否靠谱,并改进原来的方案。
- 上下文分析服务。老旧系统经常面临上下文过长的问题,需要经过预处理,以满足模型的窗口,而 AI 编码工具可以针对性解决此类问题,再将其转换为 MCP 服务。
- 转换为图结构。编码以将代码转换为图结构,方便人类更好地理解老旧系统的业务。
- 辅助进行新应用设计。结合已有的文档、代码等信息,结合 DDD(领域驱动设计)来生成新的架构设计。
- 辅助置换旧应用。即 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 系统现代化的实践示例,展示了如何组合多种策略:
- Rehost(重托部署):将现有的 SAP 应用以“搬箱式”方式迁移至云端,主要改动在基础设施层。这种方式能在短时间内实现上云,但如果业务流程和架构不随之优化,投资回报率(ROI)往往较低。
- Replatform(重构平台) + Refactor(重构代码):在已经迁移上云的 SAP 系统基础上,引入云原生架构的外围服务,如通过 CI/CD 管理新增功能、以微服务或 API 分层替代原有模块,提升系统的灵活性、可维护性和扩展性。
- Retire(淘汰)+ Refactor(重构代码):借助现代化契机剔除冗余的自定义代码,清理脏数据和重复逻辑,提升主数据质量。这一过程中需重点解决三大挑战:
- 复杂的遗留系统结构(60%);
- 高度定制化导致迁移难度高(59%);
- 主数据不完整或冗余严重(51%)。
- Retain(保留) + Repurchase(替代购买):部分模块可部署在 IaaS/PaaS 环境中保留运行,保持自主控制;而非核心系统可直接替换为 SaaS 方案,提升效率,降低维护成本。
通过这种“按模块施策,组合应用 6R 策略”的方式,企业可以降低整体迁移风险、分阶段控制成本,并灵活适应数字化转型节奏 。系统现代化并非一次性重构的短跑,而是一个不断演进的长期过程,因此合理规划和动态调整迁移路径,是实现现代化价值最大化的关键 。
步步为营,渐进式拆解与迁移路径
渐进式迁移演进遗留系统
为了实现这种渐进式的演进,我们建议采用了经典的 “绞杀模式”(Strangler Fig Pattern)。这一模式模拟了热带植物绞杀榕树,逐步包裹旧树的方式 ——在旧系统周边逐步构建新系统功能,最终实现替代和淘汰。正如图示所展示的过程:
- 在初始阶段(Stage 0),企业规划与准备现代化路径,并通过 CDC(变更数据捕获)技术,将旧系统的数据同步到新的读取接口中,为后续替代做准备。
- 随后进入并行运行阶段(Stage 1),新旧系统共存,旧系统仍处理写入操作,而读取可以逐步转向新系统,通过事件总线等方式保持数据一致。
- 在替代阶段(Stage 2 → N-1),系统将功能模块逐个迁移到新架构中,客户端调用被 API Gateway 接管,内部通过 Command 和 Query 模型与微服务通信。部分模块可选择双写、数据同步或反向代理等方式平滑过渡。
- 最终,在所有关键模块替代完成后(Stage N),旧系统被完全停用,遗留生态被安全“绞杀”。
通过这种与 6R 策略高度兼容的绞杀模式,企业可以降低迁移风险、控制技术债累积、保持业务连续性,并实现架构的逐步演进。 这也体现了现代化的本质:不是一蹴而就的“重启”,而是一场可管理、可度量、可演进的“技术生态更新”。
经典的落地迁移 Workflow
如下图所示,其展示了从遗留系统到现代化应用的完整改造路径,可以分为九个阶段:
- 遗留系统:识别需要改造的老系统。
- 改造目标:明确现代化的业务与技术目标。
- 系统评估:从技术、流程、架构等角度全面评估当前系统。
- 系统拆分:进行资产分析、依赖识别与模块划分,必要时采用逆向工程。
- 改造方案设计:基于现状制定现代化路径,结合团队能力设定优先级。
- 增量式交付:以小步快跑方式开发目标领域功能,降低风险。
- 内部发布:在组织内部先行验证系统改造成果。
- BETA发布:小范围上线,收集用户反馈。
- 现代化应用:全面上线,系统完成转型。
简单来说,我们需要设计好目标的系统架构、迁移应用的模板,再结合不同的场景来寻找、设计、构建不同的工具来加速我们的迁移,减少人天在这个过程中的 工作量。在没有 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 工具并不是一件简单的事,因此我们建议你:
- 在外部/外网环境,可以使用 Claude 4 的 AI 编程工具,如 Augment 等来构建原型
- 选用和内部模型相当能力的模型来实现 AI 服务能力
- 结合大量的开源代码来测试工具,丰富工具的不足之处
如下是一个我们设计的用来练习这一类场景的提示词示例:
项目目标:创建一个 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 在其中扮演两大关键角色:
- 加速理解与分析:通过构建语义代码图谱、逆向工程还原业务逻辑等方式,AI 帮助我们前所未有地快速洞察旧系统的架构、依赖和业务内涵,即便是在文档缺失的情况下。
- 加速转换与重建:结合 AST(抽象语法树)工具的精确性与 LLM 的灵活性,我们可以自动化地生成迁移规则、转换代码,甚至在新的架构上进行前向设计,极大地提升了迁移效率。
最终,我们的目标是打造一个闭环的 AI 迁移 Agent。它不仅能执行代码转换,还能自动测试、捕捉错误、并调用 AI 服务进行自我修复,从而实现从分析、迁移到验证的端到端自动化。这种"AI 生成 AI 迁移工具" 的自举模式,让我们看到了一个更加智能化的未来:工具不再是静态的,而是能够根据实际场景持续演进和优化的智能体。
或许您还需要下面的文章: