
用 Claude Code 写完一段函数,测试跑通了,看着也没毛病——但心里就是有点犯嘀咕,又说不出哪儿不对。这种感觉我在做 AI 编程的这几年里遇到过太多次。作为 Claude Code 的重度用户,我越来越确信一件事:AI Coding 的生成速度早就把人甩开了,可"能跑"和"好代码"之间隔着一条沟。跨过这条沟,靠的不是堆更多 prompt,是判断力。
我最近重读《Python工匠》,作者朱雷(现任腾讯蓝鲸 PaaS 负责人)在开篇说得很直白:AI 能飞快吐出代码,人类工程师得靠对代码优雅性和健壮性的掌控保住竞争力。这句话正好戳中了我想聊的——怎么给 Claude Code 的输出建一套能落地的质量标准。下面这套方法,是我自己日常 AI 编程里跑通的,也推荐给了团队。
AI Coding 最爱在哪儿翻车
在动手写审查清单之前,得先搞清楚 AI 生成的代码通常烂在哪。我观察下来,Claude Code 也好,Codex、GPT 系的编程助手也罢,功能层面往往是对的,真正的问题集中在工程质量上。高发区就那几个:
- 命名语义模糊:
data、result、temp满屏飞,变量名压根不反映业务含义。 - 圈复杂度失控:为了兜住各种边界,嵌套 if 一层压一层,逻辑路径多到爆炸。
- 类型注解缺失:函数签名光秃秃的,读代码全靠猜。
- 异常处理过宽:一个
except Exception全吞了,出错信息也没了。
这四条,《Python工匠》十三章里都各有专门讨论,也恰好是 AI 代码最常见的违规点。跨语言、跨工具都成立,换成别的 AI 编程工具照样中招。
把工匠标准翻译成审查 Checklist
原则再好,落不到具体动作上也没用。我把它拆成了几组能直接对着代码打勾的检查项,日常审查就照着这个走。
命名与可读性:
- 变量名反映的是"是什么"还是"什么类型"(该写
user_id,别写id_str)。 - 函数名是不是动词短语,能一眼看出它在干嘛。
- 布尔变量有没有用
is_/has_/can_打头。
函数设计与复杂度:
- 一个函数是不是只干一件事。
- 有没有用提前返回来压掉嵌套层级。
- if-else 嵌套超过三层就得警惕,多半该重构了。
类型注解:
- 公开函数的参数和返回值有没有完整注解。
- 复杂结构是不是用了
TypedDict或dataclass,而不是甩一个裸dict。
异常处理:
- 有没有捕获得太宽泛。
- 捕获之后是真处理,还是
pass、print敷衍了事。 - 业务异常有没有自定义异常类,而不是硬套内置异常。
这套清单我在不同项目里复用了很久,越用越顺手。
分层审查:机器管机械活,人管判断活
纯靠人肉盯代码,效率太低,也盯不住。我的做法是分层:机械性的活扔给自动化,需要脑子的活留给人。
自动化这层,Claude Code 本身顶得上不少。它支持 Hooks 机制,代码一生成就能自动触发格式化脚本,这是质量防线的第一道闸。安全扫描针对 diff 跑,能覆盖 OWASP Top 10 里的高发项——SQL 注入、身份验证失效、XSS、敏感数据暴露、硬编码密钥。性能层面,自动审查也能顺手看看时间复杂度、内存使用模式和 I/O 是否合理。
人工判断这层,是机器暂时替不了的:
- 命名合不合当前业务语境。机器不懂你的业务,这个只能你来。
- 架构设计合不合理:类的职责怎么分、模块边界画在哪。
- 业务逻辑对不对:功能测试过了,不代表逻辑符合需求。
- 技术债怎么权衡:现在图快、以后难改,这笔账值不值。
安全审查:AI 生成代码的高危区
硬编码密钥,是我见过 AI 生成代码里出现频率最高的安全问题之一。Claude Code 的安全扫描会标出来,但有几个盲区还得靠人补:
# AI 可能生成的危险写法
def get_user(user_input):
query = f"SELECT * FROM users WHERE name = '{user_input}'" # SQL 注入
...
# 应该是
def get_user(user_input: str) -> dict:
query = "SELECT * FROM users WHERE name = %s" # 参数化查询
cursor.execute(query, (user_input,))
...
OWASP Top 10 里,注入和硬编码凭证是 AI Coding 最容易踩的两类坑。自动扫描能抓明显的模式,但逻辑层面的越权——某个 API 压根没验证当前用户有没有权限碰目标资源——扫描器是看不出来的,只能靠人判断。这也是我坚持保留人工复核的原因。
把审查标准固化进 Claude Code 工作流
审查标准写成文档,往往只用一次就压箱底了。真想让它长期起作用,得写成可复用的命令。
Claude Code 支持自定义命令:在 ~/.claude/commands/ 目录下丢一个 .md 文件,审查清单就变成了随手能调的命令。这是我个人觉得最实用的一条配置:
# 创建自定义审查命令
mkdir -p ~/.claude/commands
cat > ~/.claude/commands/py-review.md << 'EOF'
# Python 代码质量审查
请按以下维度审查当前代码:
## 命名规范
- 检查变量名是否有业务语义
- 检查函数名是否是动词短语
## 复杂度控制
- 检查嵌套层级是否超过 3 层
- 检查单函数是否只做一件事
## 类型注解
- 检查公开函数是否有完整类型注解
## 异常处理
- 检查是否有过宽的 except 捕获
## 安全检查
- 检查是否有硬编码密钥
- 检查是否有 SQL 拼接
EOF
之后每次让 Claude Code 生成完代码,直接敲 /py-review 就能审,标准一致,反复能用。
还有个值得一提的玩法:有人把 context7 和 perplexity 这类 MCP 接进来,让 Claude Code 查的是库的当前版本文档,而不是训练数据里可能早就过时的 API。这对可维护性影响挺大——能避免生成那种语法没错、却调用了废弃接口的代码。如果你在做 MCP Server 开发,或者想深挖 MCP 的接法,这个方向值得花时间。
顺便聊聊多代理并行审查
起三个 code-reviewer 子代理同时分析同一段代码,我也试过。在大规模代码迁移或批量变更的场景下确实有意义,不同代理各盯一个维度,汇总起来比单次审查更全。
但话得说清楚:三个代理是实践建议,不是硬指标。再多代理也替不了人工判断。架构合不合理、业务逻辑对不对,堆多少代理都问不出答案,最后还得你自己拍板。
顺带说说工具选择
经常有人问我 Claude Code vs Cursor 到底选哪个。我的看法是:工具各有长短,但这套审查方法论是通的。不管你用哪个编程助手,把质量标准固化下来、分层去审,收益都在。我个人主力是 Claude Code,主要是它的 Hooks 和自定义命令让工作流容易定制,Anthropic 在代码理解上的调校也对我胃口。
FAQ
Claude Code 的自动安全扫描能完全替代人工审查吗
不能。它针对 diff 跑,能揪出 OWASP Top 10 里的常见模式,比如注入、硬编码密钥。但逻辑层面的权限漏洞、业务绕过这类问题,还得靠人结合业务上下文判断。自动扫描是第一道防线,人工复核是最后一关。
一次 Claude Code 会话可以审多个模块吗
我的经验是"一个会话干一件事",别让上下文互相污染。会话拖得越长,Claude Code 对早期代码的记忆越糊,审查结论的可靠性也跟着掉。
国内开发者用 Claude Code 门槛在哪
网络访问和海外信用卡绑定是两道最常见的坎。如果你只想专注在代码质量本身,不想在账号和梯子上耗精力,我们 ECC 做的就是这件事——免梯子、低成本、快速稳定地帮你接上 Claude Code。真正的核心工具还是 Claude Code,我们只是让你少折腾。
《Python工匠》的标准适用于非 Python 代码吗
适用。命名语义、单一职责、类型约束、异常分层,这些跟语言无关。TypeScript、Go 一样吃得开。书里的语法示例是 Python 的,但判断标准可以直接搬。
写在最后
AI 写代码只会越来越快,但代码质量的把关,还是你的活。核心就三步:把工程原则拆成能打勾的 checklist(命名、复杂度、类型、异常);机械检查交给自动化的 Hooks 和安全扫描,判断的活自己留着;再把标准写进自定义命令,固化成能反复用的工作流。工具能干的事越来越多,工程判断力这东西,只会越来越值钱。
关于 Easy Claude Code
如果你想用上 Claude Code,可以试试我们 ECC(Easy Claude Code)的中转服务:免🪜、低成本、快速稳定,直连官方 Claude Code。企业定制化服务可详询。