☰
Desloppify评分模型完全解析:25%机械检测+75%AI评审如何算出你的代码健康分
2026/9/29 8:16:25 网站建设 项目流程

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 elegance22.0 / 22.0架构分解与接缝质量,是维护性的最大驱动
Low elegance / Contracts / Type safety12.0 ×3防止正确性漂移和接口歧义
Design coherence10.0架构意图的一致性
Abstraction fit / Logic clarity / Structure nav8 / 6 / 5结构信号
Error consistency / Naming / AI generated debt3 / 2 / 1低权重"打磨项",不主导分数变化

设计意图一目了然:优雅度、契约、类型安全这类架构级质量占据绝对主导,命名规范和"AI 生成债务"只是轻微助推——它们是打磨项,不该左右大局。

置信度加权:不确定的发现"轻罚"

每个被检测出的问题都有一个置信度等级,决定它作为"失败"计多少分(定义于 scoring_constants.py):

置信度权重
High1.0
Medium0.7
Low0.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 --json

scan会跑机械检测器并生成评分卡(支持 CI 的--profile ci只取机械快照);status可读 strict/lenient 分数供脚本做阈值门禁。完整说明见 docs/scoring.md。

分数不衡量什么(重要!)

  • ❌ 不衡量功能完整度、性能、用户体验
  • ❌ 不同代码库之间不可直接比较(500 文件的 85 分 ≠ 50 文件的 85 分)
  • ✅ 它是改进趋势的跟踪工具,而非绝对质量评级

想深入源码?关键模块路径

模块作用
desloppify/engine/_scoring/policy/core.py25/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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询