面对一个持续开发 10 余年、业务知识只存在于代码与数据中的内部信息系统:如何从零开始,用智能体工程的方法逐步重建一个功能完整、可被验证的新系统。
先纠正一个几乎必然走错的方向,再谈怎么做。
三个不可回避的事实,决定了整个方法论:
| 事实 | 推论(方法论必须回答的问题) |
|---|---|
| ① 业务知识只存在于代码和数据里。10 年的人员更替,文档早已失效,连"懂业务的人"也只懂自己经手的那一块。 | 唯一可靠的需求来源是代码本身。所以第一要务不是写新代码,而是建立一套从代码中批量提取业务知识的流水线。 |
| ② 你不懂业务。你自述没有业务背景,第一个练手模块(项目计划管理)因此无法验证"真实替代"是否可行。 | 不懂业务没关系,但验收标准不能依赖业务判断,必须设计"不依赖懂业务的验证机制"——答案是对账:让旧系统的数据输出当裁判。 |
| ③ "功能相同"不可言说,"数字一致"可以言说。"新系统做得对不对"在不懂业务时无法口头论证,但"新系统算出的金额、数量、状态与旧系统逐条一致"是机器可判定的。 | 替代性验证的唯一硬标准:平行运行 + 输出对账。做不到对账的模块,就不具备被验证替代的资格——这也是切片选择的准绳。 |
方法论不是空泛的,以下是从 old-src 实际清点出的结构事实,后续所有策略都以此为输入。
| 模块 | Java 文件数 | 推测业务域 | 重建优先级信号 |
|---|---|---|---|
contract | 928 | 合同管理(全系统最大模块) | 核心业务,复杂度最高,中后期切 |
operation | 623 | 运营管理 / 经营统计 | 报表口径密集区,替代难点所在 |
outsourcing | 453 | 外包管理 | 中大型业务域 |
purchasing | 375 | 采购管理 | 单据流完整,适合作为对账切片候选 |
marketing | 306 | 市场 / 营销 | 中大型业务域 |
humanresources | 195 | 人力资源 | 含考勤、人事等高频子域 |
finance | 173 | 财务 | 金额对账价值最高,但口径最敏感 |
general | 94 | 通用 / 基础功能 | 基础支撑,先行 |
core | 79 | 核心框架 / 公共组件 | 含 reed 内部框架依赖,迁移第一道坎 |
dailylog | 65 | 工作日志 | 简单闭环,可作为早期练手切片 |
externalorganization | 46 | 外部单位 / 客户供应商 | 主数据类,先行 |
reimbursement | 40 | 报销 | 单据 + 审批 + 金额,对账切片最佳候选 |
cost | 22 | 成本 | 口径敏感,依附于上游单据 |
operatingStatistic | 12 | 经营统计 | 报表型,最后切 |
r1 | 1 | War 打包聚合模块 | 部署形态参考 |
| 事实 | 对重建的影响 |
|---|---|
| Spring 3.2 + JDK 1.7 + JSP(仅 54 个 JSP)+ MyBatis + Oracle | 典型 2012–2015 年代企业 Java 单体。JSP 少说明大量页面逻辑可能由前端 JS 或 reed 框架渲染,重建时需另行清点前端资产。 |
依赖内部框架 reed(brick / pigeon / tiger / grail / tools 等 10+ 个构件,无外部文档) | 最大暗礁。很多"业务行为"实际藏在 reed 的注解、基类、拦截器里(权限、审计、事务、数据权限)。Phase 0 必须专门逆向 reed 的能力清单,否则新系统会漏掉隐形功能。 |
| Quartz 2.1.7 定时任务 | 定时任务是典型的"没人记得但每天在生产数据"的代码,必须全量清点,否则新旧系统对账时会出现"数据怎么多了一笔"的灵异现象。 |
| CAS 单点登录客户端(cas-client 3.2.1) | 账号体系与权限模型是横切所有的地基,属于第一批要重建的规格。 |
| SVN 管理,版本 1.2.4-SNAPSHOT | 建议迁移到 Git 并保留全量历史——git log/blame 是业务考古的重要线索(某段奇怪的逻辑是哪年、因为什么加的)。 |
含 ess(deprecated) 与 oracle.dmp | 已有废弃模块与数据库转储文件——后者是业务考古的另一半金矿(见 §11 对你 dmp 工具的评价)。 |
每个阶段都有明确的产出物和"完成判据",不允许裸奔进入下一阶段。
目标:让任何一个后续的问题("报销单谁审批" "这个金额怎么算的")都能在分钟级得到带代码证据的答案。
knowledge/),并作为后续所有 agent 任务的默认携带上下文。它们是本项目的"业务记忆",价值随时间递增。目标:把 Phase 0 的"结构清单"升华为"业务叙述"——领域词汇、单据生命周期、审批流、口径公式。
单个视角都会骗人,三个视角互相印证才能得到可信的业务叙述:
| 视角 | 看什么 | 回答的问题 |
|---|---|---|
| 数据视角 | 表名、字段、状态字段的取值分布(dmp 里有真实数据) | 系统里真实存在哪些业务对象?一个"状态"字段里 0/1/2/3 各出现了多少次、占多少比例? |
| 界面视角 | JSP/JS 页面、菜单、按钮文案 | 用户看到的业务概念叫什么?操作路径是什么?哪些字段是必填、怎么校验? |
| 逻辑视角 | Service / SQL / 状态变更代码 | 单据状态机怎么流转?金额公式是什么?什么条件下允许操作? |
目标:在写第一行业务代码之前,先完成可验收的规格层。
这个回路里,你的角色从"写代码的人"变成"写验收标准的人"——这正是"不懂业务也能主导重建"的制度基础。
目标:用一个切片回答"AI 重建的新系统,能否在真实业务数据上替代旧系统"。这是整个方法论中唯一"验证可行性"的环节,选错切片 = 白验证。
| 维度 | 为什么重要 | 高分特征 |
|---|---|---|
| 可对账性(权重最高) | 替代性只能靠数字一致来证明 | 有明确的金额/数量/状态输出,旧系统数据可直接导出比对 |
| 闭环完整性 | 半个流程验证不了端到端替代 | 从录入 → 审批 → 生效/出数,一个完整单据生命周期 |
| 业务核心度 | 验证结果要能让各方信服 | 是真实每天在用的流程,而非边缘功能 |
| 复杂度适中 | 第一场仗要赢得快、赢得清楚 | 1–2 个状态机、1–2 条审批路径,避开 contract(928 文件)这种巨兽 |
reimbursement(报销,40 文件)。单据录入 → 审批流 → 金额 → 财务凭证,天然全闭环,金额可对账,体量适中。备选:dailylog(工作日志,65 文件)作为纯练手,以及 purchasing(采购,375 文件)作为第二切片。避免首选:报表统计类(口径黑箱太多)与 contract(复杂度爆炸)。
strangler fig(绞杀榕)模式:新系统沿模块边界一圈圈长大,旧系统一圈圈枯死。
贯穿所有阶段的日常操作纪律。
按周排布,可直接执行。
| 周 | 动作 | 产出 / 判据 |
|---|---|---|
| W1–W2 | Phase 0:代码索引与六张底表;SVN → Git 迁移保留历史 | 链路表、权限清单、定时任务清单、口径 SQL 清单、数据字典、reed 能力清单;5% 抽查通过 |
| W3–W5 | Phase 1:按"数据/界面/逻辑"三视角对 reimbursement、purchasing 做深度考古,其余模块做广度考古 | 词汇表 v1、报销/采购状态机、审批流清单、口径文档首批 |
| W6–W7 | Phase 2:报销切片的能力清单与验收陈述;新系统脚手架(鉴权/审计/数据权限/返回约定) | 报销单全量"可对账陈述"清单;脚手架可运行 |
| W8–W9 | 切片实现:agent 按陈述逐条实现 + 历史数据迁移 | 报销模块在新系统全生命周期可用 |
| W10–W13 | 平行运行 + 周末对账(把对账平台本身做成可复用工具) | 连续 4 周对账零差异或全部归因 → 可行性结论落地 |
每一条都来自同类项目的高频死法。
Big-Bang 翻译:让 AI 按文件逐个翻译 3412 个 Java 文件。产出物"像代码"但无人知道对不对,三个月后没人敢碰。
照抄 UI:把旧界面当规格。界面是十年前交互理念的化石,新系统应对齐业务目标而非对齐像素。
忽视 reed 隐形行为:权限、审计、数据权限、字段加密藏在内部框架里,不显式重建,上线后必然出事。
跳过考古直接开发:你目前的直觉("还没找到感觉")就是这条陷阱的警报——感觉缺失的本质是业务真相缺失。
选了不可对账的切片:没有数字裁判的模块做得再漂亮也证明不了替代性。
低估报表口径:统计数字背后的十年补丁条件是最深的知识,最后做报表 = 最后发现地雷。
定时任务与 Job 遗漏:没人记得的 Job 每天在生产数据,漏一个,对账就永远对不平。
agent 结论无证据:不带文件/行号锚点的"业务结论"是幻觉的温床,且会污染整个知识库。
没有业务用户介入:考古能还原 90%,剩下 10% 的"为什么"只存在于人脑——W6 起必须引入真实用户确认口径。
追新技术栈:重建的目标是再稳定跑 10 年 + 你自己和 agent 都熟,不是简历好看。
你说"不要受目前实践影响,还没找到感觉"——我的判断是:方向都不坏,但都停在了到达价值的一半路程上。
开发方法本身没问题,问题在命题选错:它只能验证"AI 能做出一个系统",验证不了"AI 能替代旧系统"。不需要推倒重来——把它当作脚手架与工程纪律的试验田保留,然后按 §6 换一个可对账的切片(报销)去回答真正的命题。
这个工具的直觉其实非常准——数据是业务真相的另一半,而且它比代码更诚实(代码说"应该",数据说"实际")。但不要停在"能查看",按本方法论的路线升级它: