质量信号
一个数字:0–10,000
Section titled “一个数字:0–10,000”sentrux 计算一个连续分数,称为质量信号。它是 5 个根因指标的几何平均值,每个指标归一化到 [0, 1],然后缩放到 0–10,000。
quality_signal = (modularity × acyclicity × depth × equality × redundancy) ^ (1/5) × 10000为什么用几何平均值?
Section titled “为什么用几何平均值?”纳什社会福利定理(1950)证明几何平均值是满足以下条件的唯一聚合方式:
- 帕累托最优——如果所有分数提升,信号就提升
- 对称性——所有根因权重相等
- 独立性——无关维度不影响结果
实际意义:你无法在拉高一个指标的同时拉低另一个指标来刷分。提升几何平均值的唯一方法是改善所有因子。这迫使真正的架构改善发生。
为什么不用字母评级?
Section titled “为什么不用字母评级?”字母评级制造了人为的边界。79 分 = B,81 分 = A。AI 代理会去刷边界而不是真正改善。使用连续分数,每 +1 分的意义相同。代理在改善边际趋近零时自然收敛——就像梯度下降一样。
为什么不用 20 个代理指标?
Section titled “为什么不用 20 个代理指标?”代理指标(耦合率、死代码率、函数长度)度量的是症状,而非根因。AI 代理可以刷单个代理指标——添加假的导入来提升内聚度,表面上拆分函数。指标提升了,但代码并没有变好。
根因指标度量的是基本的结构属性,只能通过真正的架构改变来提升。
一个代码库是一个有向图 G = (V, E),其中 V = 文件,E = 依赖关系。这个图恰好有 5 个独立的结构属性:
| 指标 | 理论 | 度量内容 | 边还是节点? |
|---|---|---|---|
| 模块性 | Newman 2004 | 边是否聚集成模块? | 边 |
| 无环性 | Martin 2003 | 是否存在环形边? | 边 |
| 深度 | Lakos 1996 | 边链有多深? | 边 |
| 均衡性 | Gini 1912 | 节点属性是否集中? | 节点 |
| 冗余度 | Kolmogorov | 是否存在多余的节点? | 节点 |
3 个边属性 + 2 个节点属性 = 总共 5 个。再增加更多将是冗余的。
modularity = (Q + 0.5) / 1.5 # 有界 [-0.5, 1] → [0, 1]acyclicity = 1 / (1 + cycles) # 无界 → sigmoiddepth = 1 / (1 + max_depth / 8) # 无界 → sigmoid,中点为 8equality = 1 - gini # 有界 [0, 1] → 取反redundancy = 1 - ratio # 有界 [0, 1] → 取反5 个指标中有 3 个没有任意参数。只有 2 个需要 sigmoid 中点。
Iteration 1: signal = 5800 → equality is lowest (3500) → refactor god function → equality improves → signal = 6300
Iteration 2: signal = 6300 → modularity is lowest (5500) → extract module → modularity improves → signal = 6900
Iteration 3: signal = 6900 → redundancy is lowest (7200) → remove dead functions → redundancy improves → signal = 7400
...diminishing returns → natural convergence没有人为的停止点。AI 在每次变更的边际改善趋近零时自然收敛——与梯度下降完全一致。
| 理论 | 年份 | 提供的内容 |
|---|---|---|
| 控制论(Wiener) | 1948 | 反馈回路架构 |
| 系统工程(钱学森) | 1954 | 分解为独立子系统 |
| Kolmogorov 复杂度 | 1963 | 理论基准真值 |
| 图模块性(Newman) | 2004 | 模块性 Q 指标 |
| 纳什议价 | 1950 | 几何平均值作为最优聚合 |
| Gini 系数 | 1912 | 不均衡度量 |
| Tarjan 算法 | 1972 | 环检测 |
| Lakos 层次化 | 1996 | 依赖深度 |