Claude Code、Cursor 生成的代码能编译、能通过测试,但藏着一堆人类工程师不会写的"坏味道"——AISlop 用 6 大检测引擎、50+ 条规则,给你一个 0-100 分的代码质量分数。
为什么 AI 写的代码需要专门的质量检查?
2026 年 5 月,Ars Technica 报道了一个令人警醒的事件:一位开发者受够了"vibe coding"(让 AI 随便写代码不审查),在 jqwik 测试库中埋入了一个 prompt injection——当 AI 编程 Agent 扫描到该代码时,会被指示删除应用的输出文件。这件事暴露了一个残酷现实:大量开发者正在把 AI 生成的代码直接合并到主分支,不做任何审查。
这不仅仅是安全风险。即使没有恶意注入,AI 编程 Agent——Claude Code、Cursor、Codex、OpenCode——生成的代码虽然能编译、能通过测试,却往往带有一些人类工程师不会写的"坏味道":
- 叙事性注释
: // This function takes a user object and returns the formatted name—— 代码本身已经自解释了,这种注释纯属浪费 - 吞掉的异常
: try { ... } catch(e) { /* ignore */ }—— AI 为了让代码"跑起来",习惯性忽略错误处理 as any类型断言:TypeScript 里随处可见的类型逃逸,AI 遇到类型报错就用 as any糊过去- 幻觉导入
:import 了一个项目中根本不存在的模块 - TODO 占位符
: // TODO: implement error handling—— 永远没人实现 - 巨型函数
:一个函数 300+ 行,AI 不会主动拆分
传统 Linter(ESLint、Ruff、golangci-lint)能抓到一部分,但它们不是为 AI 代码模式设计的。AISlop 正是填补这个空白的工具。
AISlop 是什么?
AISlop 是一个 MIT 开源的 CLI 工具,专门检测 AI 编程 Agent 在代码中留下的"坏味道"。它支持 TypeScript/JavaScript、Python、Go、Rust、Ruby、PHP、Java 共 7 种语言,50+ 条检测规则,亚秒级扫描,纯确定性——不使用 LLM,相同代码永远返回相同分数。
核心能力:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
快速上手
不需要安装,一行命令就能扫描整个项目:
npx aislop scan
这会扫描当前目录下的所有代码文件,输出一个 0-100 的分数和详细的问题列表。
安装到项目:
npm install --save-dev aislop
# 或 pnpm add -D aislop
# 或 yarn add --dev aislop
初始化配置:
npx aislop init
会在项目根目录创建 .aislop/config.yml,你可以在这里定制规则。
AI 代码坏味道实战:10 种最常见的"Slop"
▲ AI 代码 10 大坏味道:叙事注释、吞异常、类型逃逸、死代码、TODO 占位符
1. 叙事性注释(narrative-comment)
AI 最爱写的注释类型:
// This function validates the user input and returns a boolean
function validateInput(input: string): boolean {
return input.length > 0 && input.length < 100;
}
代码本身已经自解释了——函数名叫 validateInput,返回 boolean。注释什么都没增加。AISlop 会标记这类注释。
2. 琐碎注释(trivial-comment)
# increment counter
counter += 1
这种注释比代码本身还长,纯属噪音。
3. 吞掉的异常
try {
await fetchUserData(userId);
} catch (e) {
// silent fail
}
AI 为了让代码"不出错",经常吞掉所有异常。AISlop 的安全引擎会检测这类模式。
4. `as any` 逃逸
const data = response.data as any;
const result = data.items.map((item: any) => item.name);
TypeScript 的类型安全在 AI 手里形同虚设——遇到类型报错,AI 的第一反应就是 as any。
5. `console.log` 残留
console.log('here!!!', data);
console.log('debug:', result);
AI 在调试时写下大量 console.log,经常忘记清理。
6. TODO 占位符
# TODO: implement proper error handling
# TODO: add pagination
def fetch_users():
return api.get('/users')
AI 写 TODO 很勤快,但实现 TODO 的是你。
7. 死代码
func oldHelper() string {
return "this is never called"
}
AI 在迭代过程中经常留下旧版本函数的"尸体"——重构了但没删旧的。
8. 通用命名
const data = fetchData();
const result = processData(data);
const temp = transformResult(result);
data、result、temp、item——这些变量名在 100 行代码里出现 50 次,阅读体验灾难。
9. 重复辅助函数
def format_date_iso(d):
return d.strftime('%Y-%m-%d')
# ... 200 lines later ...
def format_date_to_iso_string(dt):
return dt.strftime('%Y-%m-%d')
AI 不记得自己之前写过什么,同一个功能写了两遍。
10. 幻影导入
import { NonExistentHelper } from './utils';
AI 幻觉出的模块路径——编译就报错,但 AI 自己不会去验证。
集成到你的工作流
1. Pre-commit 钩子
在提交前自动扫描:
# .pre-commit-config.yaml
repos:
- repo: github.com/scanaislop/aislop
rev: v0.9.4
hooks:
- id: aislop
每次 git commit 都会触发扫描,分数低于阈值则拒绝提交。
2. CI/CD 质量门禁
# .aislop/config.yml
ci:
failBelow: 70
在 GitHub Actions 中:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npx aislop@latest ci .
如果分数低于 70,CI 直接失败,PR 无法合并。你也可以生成 SARIF 报告集成到 GitHub Code Scanning:
- run: npx aislop@latest scan . --sarif > aislop.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: aislop.sarif
3. Claude Code 逐编辑钩子(最强用法)
这是 AISlop 最独特的集成方式——每次 Claude Code 编辑完代码后,自动扫描并将问题反馈给 Claude 自我修复:
# 安装钩子
npx aislop hook install --claude
# 带质量门禁(分数下降则阻止编辑)
npx aislop hook install --claude --quality-gate
# 查看已安装的钩子
npx aislop hook status
支持的 Agent 列表:claude、cursor、gemini、pi、codex、windsurf、cline、kilocode、antigravity、copilot。
安装后,每次 AI 编辑都会触发:
-
AISlop 扫描修改的文件 -
生成问题报告 -
反馈给 AI Agent 自我修复 -
(质量门禁模式下)分数下降则阻止本次编辑
4. MCP Server 集成
把 AISlop 暴露为 MCP 工具,让 Claude Desktop、Cursor 等可以直接调用:
// ~/.cursor/mcp.json
{
"mcpServers": {
"aislop": {
"command": "npx",
"args": ["-y", "aislop-mcp"]
}
}
}
暴露的 MCP 工具:
aislop_scan:扫描代码并返回分数和问题列表 aislop_fix:自动修复机械性问题 aislop_why:解释某条规则为什么触发 aislop_baseline:设置/更新基线分数
MCP 实战流程:假设你在 Cursor 里用 Claude 写了一堆新代码,想知道质量如何。不用切到终端,直接在 Cursor 的 AI 对话里说:
"Run aislop_scan on src/components/"
AI 会自动调用 MCP 工具扫描该目录,返回分数和问题列表。然后你可以:
"Fix all the aislop issues you just found"
AI 会调用 aislop_fix 自动修复机械问题,再用 aislop_why 解释剩余问题——整个过程在编辑器内完成,无需切换窗口。
5. 团队协作工作流
▲ AI 代码质量三层防线:本地钩子→Pre-commit→CI 门禁
对于多人团队使用 AI 编程的场景,AISlop 提供了三层质量防线:
第一层:本地钩子——每个开发者的 AI Agent 写完代码后立即扫描。通过 npx aislop hook install --claude --quality-gate 确保本地分数不低于基线。
第二层:Pre-commit——代码提交前再次扫描暂存区文件:
npx aislop scan --staged
在 .pre-commit-config.yaml 中配置后,每次 git commit 自动执行。
第三层:CI 门禁——PR 合并前,CI 流水线全量扫描并对比基线:
# GitHub Actions
- run: npx aislop ci .
env:
AISLOP_BASELINE: 70
三层防线确保 AI 代码坏味道在进入主分支之前被多轮拦截。根据 AISlop 团队的研究数据,使用三层防线的团队,AI 代码坏味道密度比不使用任何检查的团队低 60% 以上。
6. 自动修复
AISlop 能自动修复格式化问题、未使用的导入、死代码等机械性问题:
# 安全自动修复
npx aislop fix
# 激进模式(包含依赖清理、未使用文件删除)
npx aislop fix -f
对于需要上下文的复杂问题,AISlop 会自动将诊断信息传给 AI Agent:
# 传给 Claude Code 修复
npx aislop fix --claude
# 传给 Cursor
npx aislop fix --cursor
# 传给 Gemini CLI
npx aislop fix --gemini
# 通用 prompt(适用于任何 Agent)
npx aislop fix --prompt
配置调优:避免噪音
刚跑 npx aislop scan 时,你可能会看到大量警告。这很正常——需要花 10 分钟调一下配置。
按规则调 severity
# .aislop/config.yml
rules:
ai-slop/narrative-comment: warning # 降为 warning,不阻塞
ai-slop/trivial-comment: "off" # 完全关闭此规则
security/hardcoded-secret: error # 提升为 error
排除文件
exclude:
- "**/*.test.ts" # 忽略测试文件
- src/generated # 忽略生成代码
- "**/migrations/**" # 忽略数据库迁移
扩展共享配置
团队可以维护一份基础配置,各项目继承:
# 项目 .aislop/config.yml
extends: ../../.aislop/base.yml
ci:
failBelow: 80 # 覆盖基线的 CI 阈值
评分机制:为什么有些项目分低?
AISlop 的 0-100 评分是加权计算的。AI 坏味道(slop)的扣分权重大于风格问题。一般来说:
- 90-100
:代码质量优秀,几乎没有 AI 痕迹 - 70-89
:合格,有些小问题但可接受 - 50-69
:需要关注,AI 坏味道较多 - <50
:需要大幅整改
分数追踪:
# 查看分数历史趋势
npx aislop trend
每次 scan 都会在 .aislop/history.jsonl 中记录分数,trend 命令会打印历史表格和 ASCII 走势图。
踩坑与排障
1. 首次运行告警过多
初次扫描 500+ 文件的项目,可能看到几百条告警。不要慌——这是正常的。按以下步骤逐步处理:
-
先跑 npx aislop fix自动修复机械性问题 -
查看规则列表 npx aislop rules,关闭不适合你项目的规则 -
调整 severity,把不阻塞的降为 warning -
设置 CI 阈值从 50 开始,逐步提高
2. 与传统 Linter 的重复
AISlop 的 Formatting 和 Linting 引擎确实与传统工具(ESLint、Ruff、Biome)有重叠。如果项目已有完整的 Lint 配置,可以在 config 中关闭 Formatting 引擎,只保留 AI Slop 和 Security 引擎:
engines:
formatting: false
linting: false
这样 AISlop 就专注于传统 Linter 抓不到的 AI 特有模式。
3. 注释规则误杀
好的文档注释(JSDoc、docstring)不应该被标记。如果你的项目有规范的 API 文档注释,可以调整 narrative-comment 的阈值,或者给特定文件/目录加白名单。
4. Node.js 版本要求
AISlop 要求 Node.js ≥ 20。如果 CI 环境是 Node 18,需要先升级。
实战案例:一个真实项目的分数提升之路
▲ 项目分数提升实战:从 42 分到 76 分的完整路径
以一个中型 TypeScript 项目(约 200 个文件、3 万行代码)为例,该项目大量使用 Claude Code 进行开发:
|
|
|
|
|---|---|---|
|
|
npx aislop scan |
|
|
|
npx aislop fix -f |
|
|
|
|
|
|
|
|
|
|
|
failBelow: 70 |
|
从 42 到 76,整个过程不到 2 小时。大部分时间花在"AI 吞掉的异常"上——需要人工判断哪些确实可以忽略、哪些需要补错误处理。
常见问题(FAQ)
Q: AISlop 和 ESLint/Ruff 有什么区别? A: ESLint/Ruff 检查通用的代码规范,AISlop 额外检测 AI 特有的模式——叙事性注释、as any 逃逸、吞异常、TODO 占位符、幻影导入等。两者互补,不替代。
Q: 我不用 AI 写代码,还需要 AISlop 吗? A: 不需要。AISlop 的核心价值是检测 AI 代码模式。但要注意——你的团队成员可能在用 AI 写代码而你不知道。跑一次扫描看看分数,说不定有惊喜。
Q: 支持 Java 吗? A: 支持。AISlop 覆盖 TS/JS、Python、Go、Rust、Ruby、PHP、Java 共 7 种语言。
Q: 自动修复安全吗? A: fix(不加 -f)只修复格式化、未使用导入等完全安全的操作。fix -f 会额外删除未使用的文件和依赖,建议在单独分支上运行并 review diff。
Q: 如何让 AI Agent 主动遵守规则? A: 安装 per-edit hook:npx aislop hook install --claude --quality-gate。Claude Code 每次编辑后自动检查,分数下降就回退修改并告知原因。运行几轮后 AI 会学会避开这些模式。
Q: 为什么叫 "slop"?这个名字适合生产环境吗? A: "Slop" 是 AI 社区对低质量 AI 生成内容的俚称。如果你的团队对"slop"这个词有顾虑,可以用 @scanaislop/aislop 这个 npm 包名,内部命令和配置都是 aislop,不会在代码或 CI 日志中出现 "slop" 字样(除了 npm 包名)。
Q: 和 GitHub Copilot 的代码审查功能有冲突吗? A: 不冲突。GitHub Copilot 的代码审查侧重代码逻辑和最佳实践,AISlop 侧重 AI 特有的代码坏味道模式。两者可以同时运行——实际上 AISlop 支持 SARIF 输出,可以直接集成到 GitHub Code Scanning 中和 Copilot 的审查结果并列显示。
Q: 处理一个 10 万行代码的遗留项目,AISlop 要跑多久? A: 实测 10 万行 TypeScript 项目扫描时间约 2-5 秒(亚秒级引擎),瓶颈主要在依赖审计(npm audit 等)。可以关闭安全引擎中的依赖审计来加速:在 config 中设置 engines.security.dep_audit: false。
行动建议
- 今天
:在你的主项目中运行 npx aislop scan,看看 AI 代码占多少比例 - 本周
:安装 --claude或--cursorhook,让 AI Agent 边写边修 - 本月
:接入 CI 质量门禁,设置 failBelow: 70,防止 AI 坏味道进入主分支
⚠️ 风险提醒:AISlop 仍处于早期阶段(v0.9.4),规则和评分算法可能在后续版本中调整。建议锁定版本号(
aislop@0.9.4)而非使用@latest。部分规则(尤其是注释类)可能产生误报,上线前建议先在少量项目中试用一周。
*参考来源:GitHub scanaislop/aislop;Ars Technica "Fed up with vibe coders, dev sneaks data-nuking prompt injection into their code"(2026 年 5 月);HN 讨论*
#AI 创业 #Agent 工坊 #代码质量 #AI 编程 #工具推荐
本文由 AI 辅助创作,经人工审核编辑发布

