Desloppify评分模型完全解析:25%机械检测+75%AI评审如何算出你的代码健康分
【免费下载链接】desloppifyAgent harness to make your slop code well-engineered and beautiful.项目地址: https://gitcode.com/gh_mirrors/de/desloppify
Desloppify是一个给 AI 编码智能体使用的 Agent Harness,它把"机械检测"(死代码、重复、复杂度)和"AI 主观评审"(命名、抽象、模块边界)结合在一个防作弊的评分体系里,算出 0~100 的代码健康分。分数超过 98,意味着代码库达到了资深工程师眼中"漂亮"的水平。
先看全局:分数只是"北极星"
Desloppify 的核心循环是:扫描 → 评分 → AI 评审 → 分诊 → 执行修复 → 重扫。健康分给智能体一个持续优化的方向,工具链则负责把问题排成队列、逐项解决:
评分被刻意设计成"不可刷分"——唯一提分方式,就是真正让代码变好。
25/75 双池模型:两个分数如何合并
健康分来自两个相互独立的"维度池":
| 池 | 权重 | 来源 |
|---|---|---|
| 🛠️ 机械池 | 25% | 自动检测器(代码异味、重复、安全等) |
| 🤖 主观池 | 75% | AI 代码评审(架构、优雅度、契约等) |
关键规则:如果还没有跑过主观评审,分数就是 100% 机械分;一旦主观维度有了分数,25/75 的比例自动生效。这个常量就写死在评分策略模块里(core.py):
SUBJECTIVE_WEIGHT_FRACTION = 0.75 MECHANICAL_WEIGHT_FRACTION = 1.0 - SUBJECTIVE_WEIGHT_FRACTION最终合并公式非常简单:健康分 = 机械池均分 × 0.25 + 主观池均分 × 0.75(四舍五入到 1 位小数),实现在 health.py 的_overall_health_score中。
机械池:五个维度,公式透明
每个机械维度由自动检测器打分,公式是:
维度分 = ((总检查数 − 加权失败数) / 总检查数) × 100
五个维度在池内的权重:
| 维度 | 池内权重 | 关注点 |
|---|---|---|
| File health(文件健康) | 2.0 | 结构性问题 |
| Code quality(代码质量) | 1.0 | 死代码、异味、耦合、命名等 30 余种检测器 |
| Duplication(重复) | 1.0 | 代码重复、样板重复 |
| Test health(测试健康) | 1.0 | 测试覆盖缺口 |
| Security(安全) | 1.0 | 依赖环、安全隐患 |
注意:不是所有检测器在每个项目都会触发——Rust 检测器只跑 Rust 代码,React 检测器只在 TypeScript 项目生效。只有"有检查量"的检测器才参与维度计分。
主观池:12 个维度,优雅度占主导
主观分来自desloppify review的 AI 评审,每个维度 0~100 分。权重分布(完整表见 core.py):
| 维度 | 权重 | 说明 |
|---|---|---|
| High elegance / Mid elegance | 22.0 / 22.0 | 架构分解与接缝质量,是维护性的最大驱动 |
| Low elegance / Contracts / Type safety | 12.0 ×3 | 防止正确性漂移和接口歧义 |
| Design coherence | 10.0 | 架构意图的一致性 |
| Abstraction fit / Logic clarity / Structure nav | 8 / 6 / 5 | 结构信号 |
| Error consistency / Naming / AI generated debt | 3 / 2 / 1 | 低权重"打磨项",不主导分数变化 |
设计意图一目了然:优雅度、契约、类型安全这类架构级质量占据绝对主导,命名规范和"AI 生成债务"只是轻微助推——它们是打磨项,不该左右大局。
置信度加权:不确定的发现"轻罚"
每个被检测出的问题都有一个置信度等级,决定它作为"失败"计多少分(定义于 scoring_constants.py):
| 置信度 | 权重 |
|---|---|
| High | 1.0 |
| Medium | 0.7 |
| Low | 0.3 |
一个低置信度问题对分数的拖累,只有高置信度问题的 30%。这让"可能误报"的发现不会重罚你的分数。
小样本衰减:防止小维度左右大局
机械维度还有一个采样衰减机制:检查数少于 200 的维度,权重按检查数比例缩减(health.py)。比如某维度只有 50 次检查,它的有效权重只有配置权重的 25%。这防止"只查了几行代码"的维度对总分产生不成比例的影响。
Lenient 与 Strict:技术债务的显形
Desloppify 跟踪两种计分模式(core.py):
- Lenient(默认):
open、deferred、triaged_out的问题计为失败;标记为wontfix、fixed、false_positive的不扣分 - Strict:
wontfix和auto_resolved也计为失败
Lenient 与 Strict 之间的差距,就是你通过"不管了"决定接受的技术债务量。想刷分?把问题标记为wontfix只能在宽松分上苟住,严格分会立刻把债务暴露出来。
其他防作弊设计
🔒区域过滤:只有 Production 和 Script 区的文件参与计分;Test、Config、Generated、Vendor 区的问题不拖累健康分——但反过来,你也无法靠"多写测试文件"来摊薄问题。
🔒按文件封顶:部分检测器(异味、测试覆盖、安全等)按文件计分,单文件问题数封顶(1~2 个问题计 1.0 失败单位,6 个以上封顶 2.0),避免一个烂文件垄断整个分数。
🔒评审可降级:主观维度重新评审时,如果评审者发现新问题,分数可能下降——评审不是"只涨不跌"的单向通道。
快速上手:三步拿到你的健康分
pip install --upgrade "desloppify[full]" desloppify scan --path . desloppify status --jsonscan会跑机械检测器并生成评分卡(支持 CI 的--profile ci只取机械快照);status可读 strict/lenient 分数供脚本做阈值门禁。完整说明见 docs/scoring.md。
分数不衡量什么(重要!)
- ❌ 不衡量功能完整度、性能、用户体验
- ❌ 不同代码库之间不可直接比较(500 文件的 85 分 ≠ 50 文件的 85 分)
- ✅ 它是改进趋势的跟踪工具,而非绝对质量评级
想深入源码?关键模块路径
| 模块 | 作用 |
|---|---|
| desloppify/engine/_scoring/policy/core.py | 25/75 权重、维度权重、计分模式常量 |
| desloppify/engine/_scoring/results/health.py | 双池混合、透明化得分拆解 |
| desloppify/engine/_scoring/results/core.py | 检测器→维度的加权失败统计 |
| desloppify/base/scoring_constants.py | 置信度权重等全局常量 |
| docs/scoring.md | 官方评分说明文档 |
Desloppify 的评分模型用一句朴素的话概括:机械检测守住下限,AI 评审拉高上限,防作弊设计保证分数涨得诚实。把分数当作北极星,让智能体沿着next → 修复 → resolve → next的循环走,代码库会一轮轮地变干净。
【免费下载链接】desloppifyAgent harness to make your slop code well-engineered and beautiful.项目地址: https://gitcode.com/gh_mirrors/de/desloppify
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考