乐于分享
好东西不私藏

AI原生开发:ClaudeCode与国产大模型协同实战 第6章:解剖祖传屎山——让替你吃下读懂烂代码的苦

AI原生开发:ClaudeCode与国产大模型协同实战 第6章:解剖祖传屎山——让替你吃下读懂烂代码的苦

老兵们,欢迎来到最扎心的一章。在你漫长的职业生涯里,一定遇到过这种时刻:接手了一个三年没动过的核心模块,原作者早已离职,代码里没有任何注释,满屏的 if-else 像意大利面条一样纠缠在一起,全局变量满天飞,魔数(Magic Number)比天上的星星还多。你盯着屏幕,想杀人的心都有了。但今天,我要教你一个魔法——让AI替你吃下这口屎,并且让它把里面的营养(逻辑)给你提炼出来。

6.1 祖传代码的救星:没有注释?逻辑套娃?让AI来画图

人类读烂代码是极其痛苦的,因为我们的短期记忆容量有限。你需要在大脑里压栈:这个变量是干嘛的?那个判断分支去了哪?栈一深,人就崩溃了。但大模型不一样。大模型没有短期记忆衰退的问题,它的上下文窗口就是它的内存。 特别是像Kimi-K2.6这样具备超长上下文的模型,你把几千行烂代码全塞给它,它也不会像人一样看串行。所以,对付屎山代码的第一原则:不要自己读,让AI读;不要自己猜,让AI画图。

6.2 【实操】利用Kimi-K2.6的超长上下文进行全模块无损重构

光说不练假把式。我们来造一段经典的”屎山代码”,然后看看怎么用ClaudeCode + Kimi把它驯服。假设你接手了一个电商的订单状态处理模块,原作者写了一段极其反人类的代码:📁 legacy_order.py (典型的屎山,千万别学)

# 严重的状态耦合、魔数、面条逻辑global_db = {}def process_order(oid, op, ext):    o = global_db.get(oid)    if not o:        if op == 1: # 创建            global_db[oid] = {'s'1'amt': ext.get('amt'0), 'paid'0}            return 100 # 成功        return 404 # 找不到    if o['s'] == 1: # 待支付        if op == 2: # 支付            if ext.get('pay_amt'0) >= o['amt']:                o['s'] = 2                o['paid'] = ext.get('pay_amt'0)                return 100            else:                return 501 # 金额不足        elif op == 5: # 取消            o['s'] = 5            return 100        else:            return 500 # 非法操作    elif o['s'] == 2: # 已支付        if op == 3: # 发货            o['s'] = 3            o['track'] = ext.get('track''')            return 100        elif op == 6: # 退款            o['s'] = 6            return 100        else:            return 500    elif o['s'] == 3: # 已发货        if op == 4: # 确认收货            o['s'] = 4            return 100        else:            return 500    return 500 # 兜底异常
看懂这段代码了吗?s=1是啥?op=3又是啥?如果让你在此基础上加一个”部分退款”功能,你是不是得把这几百行从头到尾默念十遍?现在,打开ClaudeCode,切换到Kimi-K2.6模型,输入以下Prompt:
# Role你是一个精通重构的代码外科医生。# Task我接手了一段祖传Python代码 legacy_order.py,里面充满了魔数和面条逻辑。我需要你帮我:1. 梳理出这段代码的完整业务逻辑,列出所有状态(s)和操作(op)的含义。2. 使用 Mermaid 语法画出状态流转图。3. 使用状态模式重构这段代码,消除 if-else 和魔数,要求代码分层、可读性极佳。# 原始代码(把上面的 legacy_order.py 代码完整粘贴在这里)# Directive- 重构后的代码必须保持原有的业务逻辑100%不变。- 必须使用枚举类替代魔数。- 必须使用状态模式。- 必须保证我能直接运行,包含测试验证逻辑不变。
当你把这段Prompt扔进去,Kimi-K2.6会展现出极其恐怖的长文本理解能力。它不会遗漏任何一个分支,它会给你输出完美的解析和重构代码。下面是我验证过的、AI输出的重构版本,看看什么叫”从地狱到天堂”:📁 modern_order.py (AI重构后的工业级代码)
from enum import Enum, autofrom dataclasses import dataclassfrom typing import DictOptional# ================== 1. 消除魔数,定义清晰枚举 ==================class OrderStatus(Enum):    PENDING = 1      # 待支付    PAID = 2         # 已支付    SHIPPED = 3      # 已发货    COMPLETED = 4    # 已完成    CANCELLED = 5    # 已取消    REFUNDING = 6    # 退款中class Operation(Enum):    CREATE = 1       # 创建    PAY = 2          # 支付    SHIP = 3         # 发货    CONFIRM = 4      # 确认收货    CANCEL = 5       # 取消    REFUND = 6       # 退款class ResultCode(Enum):    SUCCESS = 100    NOT_FOUND = 404    AMOUNT_INSUFFICIENT = 501    INVALID_OPERATION = 500# ================== 2. 定义数据结构 ==================@dataclassclass Order:    oid: str    status: OrderStatus = OrderStatus.PENDING    amount: float = 0.0    paid: float = 0.0    track_no: str = ""# ================== 3. 状态模式:将每个状态的行为封装 ==================class OrderContext:    def __init__(self):        self.db: Dict[str, Order] = {}    def process(self, oid: str, op: Operation, ext: dict) -> ResultCode:        # 创建逻辑特殊处理        if op == Operation.CREATE:            if oid in self.db:                return ResultCode.INVALID_OPERATION            self.db[oid] = Order(oid=oid, amount=ext.get('amt'0))            return ResultCode.SUCCESS        order = self.db.get(oid)        if not order:            return ResultCode.NOT_FOUND        # 路由到具体的状态处理方法        handler = {            OrderStatus.PENDING: self._handle_pending,            OrderStatus.PAID: self._handle_paid,            OrderStatus.SHIPPED: self._handle_shipped,        }.get(order.status)        if not handler:            return ResultCode.INVALID_OPERATION # 终态无法操作        return handler(order, op, ext)    def _handle_pending(self, order: Order, op: Operation, ext: dict) -> ResultCode:        if op == Operation.PAY:            if ext.get('pay_amt'0) >= order.amount:                order.status = OrderStatus.PAID                order.paid = ext.get('pay_amt'0)                return ResultCode.SUCCESS            return ResultCode.AMOUNT_INSUFFICIENT        elif op == Operation.CANCEL:            order.status = OrderStatus.CANCELLED            return ResultCode.SUCCESS        return ResultCode.INVALID_OPERATION    def _handle_paid(self, order: Order, op: Operation, ext: dict) -> ResultCode:        if op == Operation.SHIP:            order.status = OrderStatus.SHIPPED            order.track_no = ext.get('track''')            return ResultCode.SUCCESS        elif op == Operation.REFUND:            order.status = OrderStatus.REFUNDING            return ResultCode.SUCCESS        return ResultCode.INVALID_OPERATION    def _handle_shipped(self, order: Order, op: Operation, ext: dict) -> ResultCode:        if op == Operation.CONFIRM:            order.status = OrderStatus.COMPLETED            return ResultCode.SUCCESS        return ResultCode.INVALID_OPERATION# ================== 4. 验证逻辑一致性 ==================if __name__ == "__main__":    ctx = OrderContext()    # 测试正常流转    print("--- 正常流转测试 ---")    assert ctx.process("O1", Operation.CREATE, {"amt"100}) == ResultCode.SUCCESS    assert ctx.process("O1", Operation.PAY, {"pay_amt"100}) == ResultCode.SUCCESS    assert ctx.process("O1", Operation.SHIP, {"track""SF123"}) == ResultCode.SUCCESS    assert ctx.process("O1", Operation.CONFIRM, {}) == ResultCode.SUCCESS    print("正常流转通过!")    # 测试异常拦截    print("\n--- 异常拦截测试 ---")    assert ctx.process("O2", Operation.PAY, {}) == ResultCode.NOT_FOUND  # 不存在的订单    ctx.process("O2", Operation.CREATE, {"amt"100})    assert ctx.process("O2", Operation.PAY, {"pay_amt"50}) == ResultCode.AMOUNT_INSUFFICIENT # 金额不足    assert ctx.process("O2", Operation.SHIP, {}) == ResultCode.INVALID_OPERATION # 未支付不能发货    print("异常拦截通过!")

6.3 【深挖】增量修改的安全边界:如何利用Git Hook + ClaudeCode确保AI只改该改的?

让AI重构代码很爽,但现实工程中有一个致命的隐患:牵一发而动全身。你让AI重构订单模块,它顺手把公共库里的工具函数签名也给改了,结果其他10个微服务全挂了。这种事故,轻则背P0,重则拿N+1。资深工程师用AI,最核心的底线是:控制爆炸半径。 我们绝不接受AI进行不受控的全局修改。我们必须建立一套增量修改的安全边界。流程如下:

怎么落地这套流程?这里教你两招极其管用的实战技巧。

技巧1:ClaudeCode的”圈地运动”(局部指令)

在给ClaudeCode下重构指令时,绝对不要说”重构一下这个项目”。你必须明确划定文件边界。错误的Prompt

“重构支付逻辑,把魔数替换掉。” (AI可能会乱改上下游文件)正确的Prompt“仅针对 @legacy_order.py 文件进行重构,消除魔数。禁止修改 @db_utils.py 或其他任何接口的签名。如果需要新的工具函数,请在 legacy_order.py 内部实现。”使用 @ 符号锁定文件,并在Directive里加上”禁止修改”的强约束,能挡住90%的越界修改。

技巧2:用Git Hook构建最后防线

不管你在Prompt里怎么强调,AI依然有可能在代码里”夹带私货”。这时候,我们需要工程手段兜底。我们可以写一个简单的 Git pre-commit 钩子,监控AI的修改范围。一旦它修改了白名单以外的文件,直接拒绝提交。在你的项目根目录创建 .git/hooks/pre-commit 文件(记得 chmod +x 赋予执行权限):

#!/bin/bash# 防止AI越界修改核心文件的 Git Hook# 定义允许修改的文件白名单(比如我们只允许重构这个订单模块)ALLOWED_FILES=("legacy_order.py" "modern_order.py" "test_order.py")# 获取本次提交修改的文件列表CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)for file in $CHANGED_FILESdo    echo "检查文件: $file"    allowed=false    for allowed_file in "${ALLOWED_FILES[@]}"do        if [[ "$file" == *"$allowed_file"* ]]; then            allowed=true            break        fi    done    if [ "$allowed" = false ]; then        echo "❌ 错误: 尝试修改受限文件 '$file'!"        echo "AI可能越界了,本次提交被拦截。请检查代码!"        exit 1    fidoneecho "✅ 文件检查通过,允许提交。"exit 0

有了这个钩子,就算ClaudeCode脑子一热,把你的公共配置文件 config.py 给改了,在 git commit 的那一刻,也会被强制拦截。你就可以及时发现问题,让AI回退修改。这就叫工程化地使用AI。我们不仅要利用它的能力,更要用系统级的手段防范它的失控。


🏆 第6章代码角斗场:悬崖勒马

轮到你来给AI设套了。

  1. 用上面的 legacy_order.py 初始化一个Git仓库。

  2. 安装我提供的 pre-commit 钩子,白名单里只写 modern_order.py

  3. 让ClaudeCode重构屎山,但故意在Prompt里不加”禁止修改其他文件”的约束,看它会不会顺手创建一些奇怪的辅助文件。

  4. 尝试 git add . && git commit,体验一下Hook拦截AI越界修改的快感!下一章,我们要把这种严谨性推向极致——聊聊AI驱动的TDD(测试驱动开发)。怎么让AI写出不仅跑得通,而且防不胜防的单元测试?我们接着战!