先辅助,再自治
先让 AI 给方案和草稿,再执行受约束的小任务。只有当任务可自动验证、可快速审查、可安全回滚时,才逐步提高自动化程度。
AI 负责理解、整理、生成、检查和反馈;人负责目标、业务语义、架构取舍、风险判断与最终责任。核心系统中的确定性规则和交易仍由 Core 执行。
先让 AI 给方案和草稿,再执行受约束的小任务。只有当任务可自动验证、可快速审查、可安全回滚时,才逐步提高自动化程度。
AI 越早参与需求和方案,纠错成本越低;AI 参与越深,测试、审查、安全扫描、权限控制和回滚机制越要前置。
不做一次性重写,不用大提交掩盖不确定性。每轮只解决一个明确问题,留下计划、变更、验证和复盘证据。
现有技术体系适合“人驱动”的标准化交付,但不天然适合 AI 协作。参考当前 Vxlink 架构,系统包含 19 个 Spring Boot 微服务,并深度依赖低代码平台、跨服务调用、配置中心和分布式中间件。
所以第一步不是采购更多 AI 工具,而是让工程变得可理解、可修改、可验证。
AI Coding 不能只停在 IDE 补全。团队要把 AI 放进从业务问题到线上反馈的每个环节,同时明确人、AI 和系统各自的责任。
线上结果回流到需求模板、规则文件、测试资产和知识库,形成下一轮更准确的上下文。
汇总反馈、日志、工单和数据异常,归类高频问题与可能原因。
确认是否值得做、业务价值和优先级。
问题陈述、证据、影响范围。
补齐场景、规则、边界、反例、异常流和验收标准。
确认业务语义、非目标、合规要求和成功标准。
结构化 PRD、规则表、验收清单。
阅读调用链和历史决策,给出方案、影响面、风险与回滚路径。
决定架构边界、数据方案、兼容策略和长期成本。
ADR、接口契约、数据变更与风险清单。
定位文件和依赖,拆成可独立验证的小任务,生成测试计划。
确认范围没有遗漏,也没有无关扩张。
任务计划、文件清单、测试点。
按现有风格修改代码、补测试、解释变更,并保持提交小而清晰。
开发者拥有代码,处理业务判断、复杂异常和关键取舍。
代码、测试、迁移脚本、变更说明。
运行单元、契约、集成、回归、安全和性能检查,分析失败原因。
按风险等级决定测试深度,确认真实场景与历史兼容。
测试报告、覆盖证据、残余风险。
生成 diff 摘要、风险提示、发布步骤、监控项和回滚方案。
Reviewer 对语义、安全和可维护性负责;Owner 批准上线。
评审记录、发布单、回滚预案。
监控指标和日志,辅助定位异常,整理事故时间线和改进项。
判断是否回滚,主持复盘,并决定规则如何更新。
复盘报告、新用例、新规则、新知识。
AI Coding 要真正介入测试环节,第一个要解决的不是"AI 怎么写测试",而是"AI 拿什么来测"。测试环境的数据如果太假,自动化测试只是一场自欺欺人;直接用生产数据,又踩上合规红线。核心矛盾是:测试既要尽可能逼真生产,又绝不能暴露真实个人信息。
很多团队的测试库长期用几条手工 INSERT 的"张三李四"就算完事。这样的数据测个流程通不通还行,但遇到金额边界、日期计算、状态流转、批量压力和异常路径,假数据根本覆盖不到。AI 生成的代码如果只在假数据上通过验证,上线后第一笔真实交易就可能出问题。
字段长度、金额分布、空值比例、编码格式与生产不一致。测试全绿,上线就挂。
手机号、身份证、银行卡、地址一旦进入测试库,就是数据泄露的源头。监管和审计都不会手软。
表结构改了测试库没跟上,或测试数据长期不刷新,AI 验证通过的代码在真实环境完全不可用。
币种、码值、产品码、机构号、费率表、参数表等不依赖个人的参考数据。
客户、账户、合同、卡号等核心实体,用程序按生产规则批量生成:相同字段格式、相同校验规则、相似的分布特征,但内容虚构。
从生产库抽取有代表性的样本子集(如某地区某产品近三月),再对敏感字段做不可逆脱敏:姓名、手机、证件号、地址、邮箱等。
在脱敏样本基础上,用生成模型或统计模型放大数据量:保持分布特征、相关性和边界,生成用于压力和回归测试的扩充集。
任何从生产到测试的流动,都必须经过脱敏网关;禁止 DBA 手动 mysqldump 后直接导入测试库。
使用哈希、格式保留替换、区间泛化或假名化;禁止可逆加密当作脱敏。
同一身份在所有表、所有层级中必须映射到同一个脱敏 ID,否则关联查询和外键校验会失真。
测试数据集要版本管理,能按标签重建;不能只靠"当前测试库那堆不知道谁改过的数据"。
金额、账龄、地区、产品、状态的比例应接近生产统计,否则 AI 优化的 SQL 执行计划在真实环境会走偏。
CI 流水线启动测试环境时,自动拉取对应版本的测试数据集,避免环境差异带来的"我这好好的"问题。
测试环境的最终目标不是"数据越多越好",而是让 AI 每次验证都在接近生产的土壤上进行,同时保证没有任何真实个人信息进入测试链路。把这层做好了,AI 参与测试才有意义;做不好,AI 生成的测试通过得再漂亮,也只是给生产事故写好了剧本。
不能让所有需求走同一套流程,也不能因为 AI 看起来“很有把握”就降低审查。质量门禁应由业务风险和变更半径决定,而不是由谁写代码决定。
文案、样式、内部工具、无状态小改动。
AI 可完成实现与基础验证,人做快速确认。普通业务逻辑、查询接口、非关键流程。
必须有单测、代码评审和可回滚发布。资金、账务、权限、租户、批量任务和数据迁移。
双人评审、集成回归、灰度和专项核对。核心交易规则、不可逆操作、监管与重大资损场景。
架构评审、人工审批、演练、审计和明确责任人。模型能力只是上限,工程环境决定实际产出。团队要把隐含经验变成机器可读、流程可执行、结果可验证的公共资产。
领域词典、模块边界、接口契约、数据字典、历史决策和运行手册有唯一来源。
把代码规范、架构约束、安全红线、测试要求和提交规则写成 AI 可读取的仓库规则。
提供一键启动、稳定测试数据、分层测试和快速 CI,让 AI 每次修改后立即得到反馈。
通过受控 Tool、MCP 或函数调用访问代码、日志、文档和环境,按角色授权并完整审计。
评审意见、线上故障、用户反馈和优秀实践持续回写规则、用例与知识库。
流程、上下文和评测不绑定单一模型;用任务结果选择模型,而不是用模型品牌定义流程。
越靠前越接近真实运行状态。知识库负责解释“为什么”,代码和测试负责证明“现在是什么”。
最终目标不是把 19 个微服务原样交给 AI,而是逐步收敛为更简单的工程体系:Agent 负责理解、规划和编排,AMC Core 负责确定性规则与交易。
先统一仓库、构建、测试和本地运行,再按业务事务合并强耦合服务,减少跨服务上下文。
19 个服务 → AMC Core + 少量边界服务冻结新增生成代码,把 auto 逻辑和隐含插件约定迁移成清晰、可维护、可测试的领域代码。
平台生成 → 自主领域代码补齐领域知识、规则文件、契约测试、一键环境、快速 CI、权限和评测闭环。
AI 能理解、修改、验证把稳定领域能力封装成 Tool,增加规划、记忆、知识检索、人工审批、评测和审计。
AI Coding → AMC AgentPlanner / Orchestrator、领域 Agent、Tool Registry、Memory、Knowledge、Guardrail 与 Human-in-the-loop。
模块化单体,承载资产、项目、案件、登记、还款、账单、支付、档案、征信、权限、流程和审计。
统一连接银行、征信、电子签章、支付、渠道和文件存储,隔离外部系统变化。
统一业务库、对象与档案存储、事件与审计日志、向量知识库和模型评测数据。
不从“全员买工具”开始,也不从“重构所有系统”开始。先选一条真实业务链路跑通闭环,再把有效规则复制到团队和架构。
选一个低到中风险、边界清晰、可度量的真实需求;补齐需求模板、仓库规则、测试命令和人工审批点。
交付:一条端到端 AI 辅助链路 + 第一版团队规范。把 AI 接入需求、设计、开发、测试、评审、发布和复盘;上线风险分级、CI 检查、权限审计和知识回写。
交付:团队可重复使用的研发工作流,而不是个人技巧。统一构建与本地环境,优先合并强耦合服务,逐步迁移平台生成逻辑,补齐契约测试和领域知识。
交付:AI 能完整理解、修改和验证的核心工程。从只辅助研发,扩展到辅助资产分析、案件运营、档案处理和风险判断;高风险动作继续由 Core 和人工门禁控制。
交付:可评测、可审计、可运营的 AMC Agent 能力。第二阶段不是直接让 AI 重写系统,也不是把飞速中心能力一股脑抛弃。先把入口、代码、数据、身份、权限、租户、流程和外部依赖画清楚;之后分别决定保留、隔离、迁移或下线。
一个核心代码库、一个领域模型、一条主发布链;模块边界清楚,不等于把所有代码搅在一起。
页面、路由、状态和接口契约逐页迁移。
按业务模块收口接口、规则和数据访问。
环境、发布、日志、监控和回退同步建设。
有稳定价值、替换成本高的数据库、缓存、消息队列、对象存储,以及成熟的认证、组织、审计等平台能力,盘点后可以继续保留。
无明确用户、无使用数据、长期无人维护的功能。站内信若可被钉钉 / 企微通知替代,就停止新增能力,只保留必要历史查询。
需求清楚但代码质量差、测试缺失、改一次坏一次的模块,先补行为测试,再让 Coding Agent 在新边界内重写。
长期卡住的下载等关键链路,先加监控,再做新旧双路由和灰度迁移,稳定后才关闭旧实现。
菜单、按钮、定时任务、消息消费者、开放 API 分别从哪里进入?
涉及哪些仓库、模块、生成代码、公共包和配置中心?
读写哪些表、缓存、索引、文件和消息主题?是否需要历史迁移?
飞速中心、流程中心、企微、对象存储或其他服务调用了什么?失败如何表现?
近 30 / 90 天调用量、活跃用户、失败率、峰值和人工兜底次数是多少?
保留、砍掉、重构还是迁移?负责人、窗口、验收证据和回退开关是什么?
共同基线:OpenAPI / 接口样例、错误码、事件结构、数据口径、状态机、Feature Flag 和验收用例必须版本化;任何一侧修改都要触发另外两侧检查。
要去掉的是核心业务对平台实现细节的强耦合,不是把成熟的用户、认证、组织、租户和审计能力全部重写一遍。每项能力必须先确认价值、边界、数据归属和替换风险,再决定保留还是迁移。
成熟、稳定、非业务差异化能力,暂时不动。
继续使用飞速中心,但通过 Adapter、同步表或事件解耦。
与本项目业务规则强相关,平台已成为迭代瓶颈。
没有真实价值、可以被现有渠道替代,且无合规保留要求。
| 平台能力 | 初步处理建议 | 具体怎么处理 | 下刀前必须查清 |
|---|---|---|---|
| 用户中心与登录认证A / B | 认证能力优先保留,先隔离调用,不急着自建密码、MFA、找回和会话安全。 | 核心系统建立 Identity Adapter 和内部稳定的 user_id;登录仍可走飞速中心,但业务表不直接保存平台临时 Token 或 SDK 对象。 |
账号唯一键、登录方式、禁用与离职流程、Token 生命周期、MFA、单点登录、账号合并和历史用户映射。 |
| 用户资料与组织架构B | 保留权威数据源,在核心系统建立只读投影或缓存。 | 通过事件或定时任务同步部门、岗位、上级和状态;核心业务读取本地快照,平台短时不可用时不应拖垮全部查询。 | 组织数据由谁维护、变更延迟要求、离职删除规则、跨组织兼职、历史部门以及企微通讯录是否也是数据源。 |
| 权限管理B / C | 认证与通用角色可以保留;订单、档案、审批等业务权限逐步迁回核心系统。 | 先盘点角色、菜单、接口、数据范围和对象级权限,再建立统一 Authorization Adapter。平台提供身份和基础角色,核心系统负责领域权限判定。 | RBAC / ABAC 规则、角色继承、部门数据范围、本人数据、临时授权、超级管理员、前后端校验差异和越权审计。 |
| 多租户控制B / C | 租户主数据可以暂时保留,但租户隔离必须在核心系统内可独立执行和验证。 | 统一 Tenant Context,让 tenant_id 贯穿请求、数据库、缓存、消息、定时任务、文件目录、搜索索引和日志;不能只依赖飞速中心在入口处过滤。 |
租户创建与停用、用户跨租户、数据隔离模式、共享数据、缓存键、消息消费、批处理、文件路径、导出和运维查询是否会串租户。 |
| 审计、登录日志与安全策略A / B | 合规链路优先保留;若要迁移,必须先双写并完成审计验收。 | 核心系统补充业务操作审计,平台继续保留登录和账号安全日志。统一关联用户、租户、请求和业务对象,避免两边日志无法串联。 | 法定保存期限、日志防篡改、敏感字段脱敏、查询权限、告警策略以及历史日志能否迁出。 |
| 代码自动生成C | 优先剥离,因为它直接限制研发能否独立修改和交付。 | 冻结生成基线,把结果、模板或替代脚本收进仓库;确认不依赖平台也能新增字段、接口和页面。 | 生成输入、模板版本、覆盖规则、二次手改区域、隐藏公共包和发布阶段是否仍会调用平台。 |
| 流程中心B / C | 先通过 Workflow Adapter 隔离,再按流程复杂度决定保留引擎还是迁移具体流程。 | 通用审批可继续保留;与核心领域强绑定、频繁卡住迭代的状态机,逐条影子运行后迁回。 | 节点、条件、角色、回调、超时、撤回、加签、抄送、历史实例和在途流程如何处理。 |
| 企微与消息渠道B | 保留渠道能力,但核心业务只能调用统一通知接口。 | 登录、通讯录、消息、机器人和审批分别封装;通知使用 Outbox、幂等键、重试和降级渠道。 | Token 刷新、限流、回调验签、重复消息、失败补偿、敏感信息和企微不可用时的业务影响。 |
必须有统一上下文、默认数据过滤、跨租户显式授权和自动化隔离测试。任何新链路只要数据库、缓存、消息、文件、搜索或日志中有一处没有租户边界,就不能切生产流量。
调用方、数据、负责人和风险没有"未知"。
契约测试、影子流量、监控和回退开关齐备。
小流量稳定,数据核对通过,故障演练完成。
观察期结束、无调用、文档与资产完成归档。
去中心依赖不是重写所有基础能力,而是先决定什么继续复用、什么需要隔离、什么必须迁回,再用可观察、可灰度、可回退的方式一点点下刀。
AI 很擅长沿着当前任务继续加代码,却不一定会主动确认旧页面、旧接口、旧配置和兼容逻辑是否已经退出。项目连续迭代后,最容易出现的不是功能完全重复,而是新实现上线了,旧实现仍留在仓库里。
检查无引用文件、误提交缓存、废弃 API 导出、重复小工具和长期隐藏入口。
产物:候选清单,不改代码重点检查路由、接口、模型、配置、任务状态机和启动入口是否存在双栈。
产物:退役计划与兼容期限统计超大文件、重复基础设施、跨模块拷贝和职责不断膨胀的服务。
产物:重构候选与成本评估新页面、新流程、新配置或新任务体系上线后,确认旧入口是否真的停止使用。
产物:删除证据与观察期记录code-health-audit Skill所有项目使用同一套审计维度、优先级和证据格式。项目自己的 AGENTS.md 只补充目录、架构边界、测试命令和"哪些双实现是刻意保留的",避免不同 Agent 每次用不同标准得出完全不同的结论。
请在当前干净的 master 分支上,对项目做一次"只读静态审计"。
先不要修改、删除、格式化或提交任何文件。
目标:回答"当前项目有没有哪些冗余的设计?"
重点不是泛泛评价代码质量,而是找出多次迭代后没有完全退出的旧实现。
请检查:
1. 当前路由、菜单和真实生产入口;
2. 没有生产引用的页面、组件、服务、API 和测试;
3. 同一业务能力的新旧两套命令、模型、配置或状态机;
4. 重复的轮询、重试、路径校验、状态转换和设置存取逻辑;
5. 超大页面、超大服务是否承担了过多职责并制造重复;
6. 启动脚本、跨平台入口、缓存、编译产物和生成代码;
7. 看似重复但实际上承担兼容、快照、审计或领域隔离职责的设计。
每个结论必须提供:
- 文件路径与行号;
- 当前生产入口和调用方;
- 已经替代它的新实现;
- 为什么判断为冗余;
- 删除或合并可能影响什么;
- 建议归类:直接删除 / 标记废弃 / 逐步迁移 / 暂时保留;
- 建议优先级:P0 / P1 / P2。
最后输出:
1. 总体判断和优先级表;
2. 每项冗余的证据与建议;
3. "不应误判为冗余"的设计;
4. 分批清理顺序;
5. 本次实际检查过的命令,以及未运行的测试。
没有文件和调用证据时,不要下结论;不确定时标记"待人工确认"。
尤其是权限、租户、审计、规则快照、兼容查询表和领域 Job,看起来重复并不代表可以合并。AI 必须先证明它理解这些结构为什么存在。
下面是某档案管理项目在干净的 master 上执行只读静态审计后的结果。它的价值不在具体文件名,而在于输出同时包含数量、生产入口、替代方案和清理风险。
| 优先级 | 冗余点 | 审计判断 | 下一动作 |
|---|---|---|---|
| P0 | 无生产入口的旧页面、组件和测试 | 明确冗余,约 1907 行生产代码和 2333 行陈旧测试 | 再次核对动态引用后分批删除 |
| P0 | Git 中误提交的缓存和编译产物 | 明确冗余,会持续制造无意义 Diff | 从 Git 索引移除并核对忽略规则 |
| P1 | 新旧两套 PDF 拆分命令链并存 | 业务架构双栈,旧前端函数已无生产调用方 | 先废弃旧入口,再收口到新 Job 服务 |
| P1 | LlmConfig 与 ModelProviderConfig 双配置体系 | 一次性迁移逻辑已经变成长期运行时负担 | 正式迁移数据,删除查询期兼容 |
| P1 | 多套前端任务轮询实现 | 间隔不同合理,但生命周期和并发控制重复 | 抽取统一 useJobPolling |
| P1 | 多个超大页面和超大服务 | 不属于死代码,但职责过多,持续制造隐性重复 | 按业务用例和领域边界拆分 |
| P2 | 执行模式、路径校验和状态转换函数重复 | 规模较小,但安全策略可能逐渐不一致 | 统一基础机制,保留业务语义 |
审计先从 frontend/src/router/index.ts 建立当前页面清单,再反向检查组件引用,发现 FileInspector.vue、ArchiveTray.vue、CabinetRuleSettingsDialog.vue、旧任务列表和详情页等已经没有生产入口。
旧页面、旧组件和没有入口的设置面板。
仍在验证已经退出生产路径的旧实现。
删除前先把仍有价值的行为测试迁到当前组件。
不能机械删除:某设置面板虽然没有入口,但运行时仍读取它对应的配置。此时必须决定"恢复编辑入口"还是"取消可配置设计",不能只删 UI 留下半套能力。
旧的 SPLIT_PDF/start、summary、results 和前端 startSplit 等函数仍留在仓库。
当前 UI 已使用独立 Job、详情页、文件、分段、页面决策和日志模型。
正确处理不是一次删除所有旧模型,而是先停旧命令入口、检查外部调用方,把执行统一到新服务;仍被文件详情使用的 PdfSplitResult 可以暂时作为结果关系表保留。
旧的 LlmConfig 和新的 ModelProviderConfig 同时存在,新配置查询还会尝试从旧表自动迁移。原本应该执行一次的数据库迁移,因此变成了长期兼容路径。
多个页面分别实现启动、停止、终态判断、卸载清理、静默刷新和异常处理。建议统一成可配置的 useJobPolling,至少处理页面隐藏暂停、请求互斥、任务切换取消和终态自动停止。
useJobPolling({
load,
shouldContinue,
interval: 2000,
immediate: true,
pauseWhenHidden: true
})
示例项目中五个最大文件合计超过 1.5 万行。扫描服务同时处理发现、OCR、额度、进度、暂停恢复和失败重试;生命周期服务同时处理清单、计划、执行、复核、质检和交付物。
审计结论不应只是"文件太长",而要给出按用例拆分的目标,例如 coordinator、discovery、progress、checkpoint、recognition pipeline 和 retry service。
路径校验、文件 ID、状态转换和枚举设置存取等辅助函数适合收口,尤其路径安全策略不能存在多个略有差异的版本。但档案整理和 PDF 拆分仍应拥有各自的执行模式、默认 Agent 和请求模型。
跨平台脚本并不天然冗余,但统一入口必须符合平台语义。macOS / Linux、Windows 和 make dev 可以分别保留,Makefile 应按系统分发,而不是在所有平台固定调用 PowerShell。
已经被 Git 跟踪的 SQLite 缓存、__pycache__ 和 .pyc 即使后来写进 .gitignore,仍要从 Git 索引中主动移除。
一次合格的自检不是"AI 说代码有点乱"。它必须能回答:哪里冗余、证据是什么、为什么形成、什么不能删、先清哪一批、如何验证以及怎么回退。
真正的全流程 AI 开发,不是让 AI 一口气写完整个系统,而是让每个环节都有可靠的 AI 副驾,每次变更都有清晰边界、自动验证、人工责任和知识回流。
先把团队流程变成 AI 可执行的流程,再把核心系统变成 AI 可理解的系统,最后才把稳定业务能力变成 Agent。
理解了 AI 开发的核心逻辑之后,让我们换一个领域——
看看 AI 如何应用于具体的金融场景,解决个贷不良资产的处置难题。