Article

AI Vibe Coding 07:重构协同与风险隔离(分阶段替换,不爆主干)

路线阶段:AI Vibe Coding 第 7 章。
本章目标:把“想重构但不敢动”变成“可控推进、可随时止损”的工程实践。

学习目标

完成本章后,你应该能做到:

  1. 将大重构拆成可并行、可回滚的小步迭代。
  2. 用双轨运行验证新旧实现行为一致性。
  3. 为每一步重构建立可观测指标与回归门禁。
  4. 让 AI 在重构任务中稳定输出可审查结果。

为什么重构最容易翻车

常见场景:

  1. 一次改动跨太多模块。
  2. 新实现上线后缺少行为对照。
  3. 没有回滚开关,失败就只能紧急修补。

AI 会放大这个风险:它执行快,但如果边界不清,错误也会快速扩散。

重构四阶段模型

  1. Observe:先补可观测指标,记录旧行为基线。
  2. Parallel:新旧实现并行运行,输出对照差异。
  3. Switch:灰度切换到新实现。
  4. Clean:稳定后删除旧链路。

任务切片模板

[Slice-01] 抽离接口,不改行为
[Slice-02] 新实现最小可运行
[Slice-03] 双轨对照日志
[Slice-04] 灰度开关接入
[Slice-05] 全量切换与旧代码下线

每个切片都必须独立可回滚。

双轨运行模式

public interface IRewardEngine
{
    RewardResult Calc(StageResult input);
}

public sealed class RewardEngineDualRunner
{
    private readonly IRewardEngine _legacy;
    private readonly IRewardEngine _next;
    private readonly EventBus _eventBus;

    public RewardEngineDualRunner(IRewardEngine legacy, IRewardEngine next, EventBus eventBus)
    {
        _legacy = legacy;
        _next = next;
        _eventBus = eventBus;
    }

    public RewardResult Calc(StageResult input, bool useNew)
    {
        var oldResult = _legacy.Calc(input);
        var newResult = _next.Calc(input);

        if (!RewardResultComparer.Equals(oldResult, newResult))
        {
            _eventBus.Publish("RefactorDiffDetected", new RefactorDiffPayload(oldResult, newResult));
        }

        return useNew ? newResult : oldResult;
    }
}

差异对照指标

至少比较:

  1. 关键输出字段一致性
  2. 计算耗时差异
  3. 异常率差异
  4. 上下游副作用差异(事件、日志、写库)

灰度开关接入

public sealed class RefactorSwitch
{
    public bool RewardEngineV2Enabled;
    public int RewardEngineV2Percent;

    public bool Hit(string playerId)
    {
        if (!RewardEngineV2Enabled) return false;
        var h = StableHash(playerId) % 100;
        return h < RewardEngineV2Percent;
    }

    private static int StableHash(string s)
    {
        unchecked
        {
            var h = 17;
            for (var i = 0; i < s.Length; i++) h = h * 31 + s[i];
            return h & 0x7fffffff;
        }
    }
}

AI 在重构中的职责

Planner

  1. 产出切片计划
  2. 标注依赖关系
  3. 给每个切片配置验收断言

Builder

  1. 执行单个切片代码改动
  2. 不越界改动
  3. 补对应测试与对照日志

Reviewer

  1. 审查行为一致性
  2. 审查开关与回滚路径
  3. 审查旧链路下线时机

验收断言设计

每个切片必须有硬断言:

  1. 构建通过
  2. 核心测试通过
  3. 对照差异率 < 阈值
  4. 灰度指标无异常

常见坑

坑 1:新旧实现共享可变状态

会污染对照结果,必须隔离状态。

坑 2:差异日志没有采样

高频路径会产生海量日志,影响性能。

坑 3:旧代码长期不删

双维护成本高,最终变成新债务。

本月作业

选择一个高风险模块做“完整重构演练”:

  1. 拆 5 个切片并完成前 3 个。
  2. 接入双轨对照和灰度开关。
  3. 输出差异率和回滚演练报告。

下一章:AI Vibe Coding 08《知识库与规范中心:让AI始终按团队标准输出》。