项目规则挖掘器 — 从后端遗留代码中自动提取编码规范、架构约定和已知坑点,生成 AI 可消费的规则文件,让 AI 编程助手(Copilot / Cursor

3 阅读7分钟

别再让 AI 在老项目里乱改了:推荐一个专门驯服遗留代码的 Skill

如果你接手过老项目,大概率都经历过这种场景:

  • 项目能跑,但没人说得清它为什么这么写
  • 改一个接口,牵出三层 service、两套返回结构、四个历史兼容分支
  • AI 看起来很聪明,但一落到遗留代码上,改法经常“逻辑正确,项目里不对”

真正难的,从来不是“把功能写出来”,而是:

在不破坏现有约定的前提下,把功能改对。

它是什么

Legacy Rule Miner 是一个专门面向老项目、遗留后端项目的 Skill。

它做的不是直接帮你写代码,而是先帮你做一件更关键的事:

把项目里那些没人整理、但实际每天都在约束改动的“隐性规则”挖出来。

比如:

  • Controller、Service、DAO 实际应该怎么分层
  • 返回结构到底是统一包一层,还是不同接口走不同 envelope
  • 哪些目录是给前端用的,哪些是给第三方开放平台用的
  • 项目到底习惯用哪套 ORM、异常处理、日志方式、事务写法
  • 哪些历史坑不能碰,哪些 workaround 看着丑但千万不能删

最后它会生成一份 AI 可直接消费的规则文件,让 Copilot、Cursor、Claude、Trae 这类工具在改代码前,先理解这个项目的“生存法则”。

它解决的不是“会不会写”,而是“会不会按这个项目的方式写”

很多团队对 AI 的真实顾虑,其实不是功能写不出来,而是下面这些问题:

1. AI 喜欢自作主张“优化”老项目

老项目明明全是字段注入,它给你改成构造函数注入。

项目还在用回调,它给你一把梭改成 async/await。

历史接口明明是 {code, msg, data},它顺手给你换成 REST 风格原生返回。

这些改法放在新项目里也许没问题,但在老系统里,风险极高。

Legacy Rule Miner 的核心价值,就是先把项目当前的真实模式总结出来,再约束 AI 按这个模式办事。

2. 老项目里最值钱的信息,往往不在文档里

真正影响改动成功率的,通常不是 README,而是这些东西:

  • 某个模块其实不能轻易重构
  • 某几个字段是跨表冗余同步的
  • 某些 API 虽然都叫用户接口,但一个给前端,一个给第三方
  • 某段代码看着重复,其实是历史兼容逻辑

这个 Skill 的思路很务实:

先扫描代码,再结合结构、命名、注释、路由、鉴权、中间件、响应格式,把这些隐含规则尽量还原出来。

3. 你不需要再手写一份“AI 使用说明书”

很多人已经意识到,AI 在复杂项目里需要规则文件。

问题是,手写规则文件太累,而且很容易写成空话:

  • “遵循现有风格”
  • “不要破坏兼容性”
  • “保持分层清晰”

这类话对 AI 几乎没有约束力。

Legacy Rule Miner 不是写口号,它会尽量输出具体规则,比如:

  • 新增接口应该放在哪个目录
  • 哪类 Controller 服务哪个受众
  • Service 是否允许直接调 Repository 以外的组件
  • 错误码、日志、事务、常量应该参考哪些现有文件
  • 哪些文件是迁移文件、编译产物,应该排除在风格分析之外

它适合哪些项目

如果你的项目符合下面任意一种情况,这个 Skill 基本都能派上用场:

  • 接手别人留下的老后端项目
  • 项目代码量不小,但缺少系统文档
  • 想让 AI 帮忙改代码,但又怕它“聪明反被聪明误”
  • 团队里有多种历史写法,希望先抽取主流约定
  • 想给 Copilot / Cursor / Claude / Trae 一份真正有约束力的规则上下文

目前支持这些常见后端栈:

  • Java:Spring Boot、SSM、Spring Cloud
  • PHP:ThinkPHP、Laravel、Yii
  • Python:Django、Flask、FastAPI、Tornado
  • Node.js:Express、Koa、Egg.js、NestJS
  • Go:Gin、Beego、Echo、net/http
  • .NET:.NET Core、.NET 5+

它最让我觉得对路的一点:不是让 AI 重写世界,而是让 AI 学会尊重现状

这个 Skill 的理念我很认同:

Forward-compatible > Rewrite

翻成大白话就是:

优先和现有项目兼容,而不是把项目改造成 AI 心目中的“更优雅版本”。

这对老项目特别重要。

因为很多时候,遗留系统最大的问题不是“不够先进”,而是“牵一发而动全身”。

你真正需要的,不是一个爱重构的 AI,而是一个知道边界、知道禁区、知道该模仿谁的 AI。

它会产出什么

Skill 会根据 IDE 自动把规则文件输出到对应目录,例如:

  • Cursor: .cursor/rules/
  • Trae: .trae/rules/
  • GitHub Copilot: .github/instructions/
  • Claude Code: .claude/rules/
  • 其他环境:.ruleminer/

主文件通常是:

legacy-rules.md

如果某些模块需要单独约束,还会继续生成类似:

legacy-rules-payment.md
legacy-rules-auth.md

而且它不是一次性生成完就完事。

如果规则文件已经存在,它会尽量做增量更新,并保留你手动维护的自定义规则区域。

怎么安装

最简单的方式:

npx skills add xiwen-haochi/legacy-rule-miner

安装完成后,在你的 AI IDE 里打开老项目,直接发一句类似的话:

分析这个老项目,生成 项目rule
这个 ThinkPHP 5.1 的电商后台项目太难维护了,500多个PHP文件,很多方法都上千行。我需要给它生成一套规则文件,这样用 Cursor 改代码时能保持和现有代码风格一致。只分析 application/api/ 这个模块就行

它就会开始做结构扫描、分层分析、规则提取,再根据不确定项和你交互确认。

一个很实用的使用场景

假设你接手的是一个典型电商后台:

  • Spring Boot 2.x
  • MyBatis
  • 一堆历史接口
  • 命名混乱
  • 部分模块还有祖传 workaround

这时候你最怕的不是 AI 不会写,而是它:

  • 乱改返回结构
  • 随便升级依赖
  • 引入项目从没用过的新写法
  • 把 admin 接口和 open API 的模式混在一起

有了这类规则文件后,AI 的行为会更像“先学习这个项目,再动手”,而不是“直接按通用最佳实践输出”。

对遗留项目来说,这个差别非常大。

为什么我觉得它值得推荐

我推荐它,不是因为它“功能很多”,而是因为它抓住了老项目协作里最痛的点:

AI 缺的不是编码能力,缺的是项目上下文。

而这个 Skill,正是在系统化补这个上下文。

它不是炫技型工具,而是偏工程化、偏落地、偏结果导向的工具。

如果你平时就会让 AI 参与老项目维护,那它很适合作为第一步:

先把规则挖出来,再让 AI 进场改代码。

这样成功率会高很多,返工会少很多,团队对 AI 的信任度也会高很多。

结尾

如果你也有下面这种感受:

  • AI 写新项目很快
  • 但一进老项目就容易跑偏
  • 团队不是不想用 AI,而是不敢让它随便改

那我建议你试试 Legacy Rule Miner。

它不承诺神奇,它做的是更有价值的事:

让 AI 在遗留代码里先学规矩,再干活。

仓库地址:

https://github.com/xiwen-haochi/legacy-rule-miner

Trae 安装失败时的手动安装方法

如果你在 Trae 中通过自动安装方式失败,可以使用手动方式安装。

  1. 先 clone 仓库
git clone https://github.com/xiwen-haochi/legacy-rule-miner.git
  1. 将它压缩为 zip
zip -r legacy-rule-miner.zip legacy-rule-miner
  1. 打开 Trae 的 Skill 安装入口,选择导入 zip

  2. 选择刚刚生成的 legacy-rule-miner.zip 完成安装