问题在我开始在一个真实代码库上使用AI智能体时就变得显而易见了。智能体会修复README中的一个拼写错误然后二十分钟后以完全相同的自信水平提出对JWTJSON Web Token认证边界的修改。没有信号表明一个需要仔细推理而另一个不需要。没有语气变化没有标记没有犹豫。我尝试了两种标准方法。自己批准每个操作把智能体变成了缓慢的橡皮图章——反正都是我在做思考。让它无人监督地运行意味着我离一个糟糕的日子只有一次遗漏的diff之遥。两种方法都不行。所以我建立了第三个选项一个评分过程在智能体写一行代码之前告诉它一个任务有多大的风险。我称之为必需推理指数RRI。RRI是一个确定性评分过程将特定任务映射到操作门槛。与其信任智能体来判断一个任务需要多少推理它给工作流一个数字基于即将接触的代码的技术现实这个特定的变更需要多少谨慎、验证和监督。这个区别很重要。RRI在执行上是确定性的在测量上并不是神奇地客观的。脚本保证相同的输入产生相同的输出而评分标准底线降低了智能体低估敏感工作的能力。目标不是消除判断。目标是让智能体不再是自身风险的唯一裁判。这个分数不仅设定了安全门槛。它还决定哪个模型运行任务以及人类是否需要看到它。低RRI任务——修复文案、更新配置值、重构一个小型工具函数——可以委托给更轻、更便宜的模型并以很少的摩擦执行。高RRI任务获得更强的模型、更严格的验证以及在实施前需要人类参与。第三个用途我花了更长时间才看到高分是重新规划的信号不仅仅是升级。如果一个任务评分超过70正确的做法通常不是给它一个更好的模型。正确的做法是将它拆分直到每个部分的评分低于55。更小的任务意味着更少的攻击面更少的副作用遗漏以及更少的空间让可疑的智能体决策变成沉默的技术债务。复杂性是债务隐藏的地方。1、RRI在工作流中的位置RRI不是一个独立工具。它是结构化开发循环中的决策点。工作流看起来像这样分析——智能体读取代码库并识别受影响的文件、依赖关系和可能的影响范围。规划——智能体写一个计划目标、受影响文件、设计决策、假设和验证策略。评分——智能体对任务运行rri.py。这就是数字产生的地方。展示并等待——智能体展示完整的RRI细分、区间和门槛。如果评分超过25它停止并等待明确的人类批准才能写代码。实施——一旦批准智能体按定义的顺序逐个任务工作。标记进度——每个任务后智能体更新任务账本做了什么、通过了什么、失败了什么、还剩什么。ANALYZE - PLAN - SCORE (rri.py) | .------------------------. | | | RRI 0-25 RRI 26-70 RRI 70 | | | auto-exec present replan: no review wait for split until approval RRI 55 | | | ------------------------ | IMPLEMENT (one task at a time) | MARK PROGRESS (task ledger)第3步的RRI分数支配着后续一切。RRI 0–25时智能体可以自动执行它展示即将做什么并立即开始。RRI 26及以上时它展示计划并等待。RRI超过70时该任务还不被视为一个实施任务。它变成一个必须先被分解的规划任务。这是真正可扩展的人机协作模型。人类不需要批准每个操作。他们是高复杂性工作的最终权威分数明确表明哪些工作值得那种关注。低风险任务无摩擦地流转。高风险任务在造成损害之前浮出水面。智能体仍然参与评估特别是在判断不可避免的地方。但它没有单方面降低敏感工作的权威。评分策略做那份工作。2、RRI的机制关键是从信任模型转向衡量并界定风险。一个加权公式产生0到100之间的基础分数一组惩罚条件在特定风险条件叠加时将其推得更高。几个例子让这个想法在公式之前更容易理解README拼写错误 - 大约RRI 5-10 UI标签或文案变更 - 大约RRI 10-20 带测试的小工具重构 - 大约RRI 20-35 认证中间件变更 - 大约RRI 45-65 涉及权限的迁移 - 大约RRI 70 架构级重设计 - 大约RRI 100公式是RRI 100 × ((0.18·C 0.12·F 0.15·D 0.15·T 0.12·A 0.12·K 0.10·P 0.06·X) / 5) Penalties权重是启发式策略默认值。它们不是普遍真理也不应被视为经过研究验证的模型。它们被故意显式化以便团队可以争论、版本化、校准和随着真实项目数据积累而调整。比精确权重更重要的是工具可以测量的和仍然需要判断的之间的分离。变量 | 名称 | 性质 | 测量策略 ----|-----------------------|---------------|----------------------------------- C | 圈复杂度 | 客观 | radon、gocyclo、clippy等工具 F | 受影响文件数 | 客观 | git diff / 文件路径分析 D | 领域复杂性 | 评分标准锚定 | 涉及的层认证、迁移、UI等 T | 测试覆盖风险 | 半客观 | 现有测试、覆盖率、特征化差距 A | 任务模糊度 | 主观 | 验收标准的清晰度 K | 耦合/副作用 | 评分标准锚定 | 下游依赖和集成点 P | 公共API/安全 | 评分标准锚定 | 故障的影响范围 X | 上下文大小 | 主观 | 智能体必须持有的代码库上下文变量分为四个信任级别客观——由工具测量而非估算。智能体在这里没有有意义的输入。半客观——从代码库推导但仍然需要解释。评分标准锚定——原则上是主观的但受策略映射约束。智能体可以将分数评得更高永远不会更低。主观——智能体判断。模糊性和上下文大小无法完全自动化因此智能体必须说明其假设。这种划分是我最关心的部分。C和F是从文件系统读取的事实。D、K和P是判断调用所以我将它们锚定到评分标准而不是信任智能体的直觉。任何被标记为安全边界的文件路径——认证、加密、权限、迁移——都带有强制性的最低分数。智能体可以将其评得更高永远不会更低。这个底线阻止了智能体将安全关键变更视为简单的。仅靠基础分数不能捕获一切。某些组合无论各个变量如何评分都需要更多的谨慎一个同时改变行为和重构的变更一个没有测试的安全变更或者一个没有验证策略的任务。对于这些RRI在基础之上添加固定的惩罚分数。每个惩罚独立应用且仅应用一次惩罚可以将分数推到100以上。条件 | 分数 ------------------------------------------------|-------- 重构 同一任务中改变行为 | 8 无测试且高安全/数据影响 (P ≥ 4) | 10 高复杂度和高领域 (C ≥ 4 且 D ≥ 3) | 10 任务涉及认证、授权、权限、敏感内容 | 10 影响超过10个文件 (F ≥ 4) | 8 需要架构或策略决策 | 12 不存在验证策略 | 153、从分数到成本单独的数字不是价值。使RRI有用的是每个分数映射到一个区间每个区间定义三件事智能体必须通过的门槛、它运行的模型层级以及任务消耗多少人工审查。RRI | 标签 | 门槛 | 模型层级 | 人工成本 --------|---------|-------------------------------------------|---------|--------------------------- 0–25 | 低 | 自动执行。无需批准。 | 经济 | 无 26–40 | 中等 | 确认受影响区域存在测试。 | 经济 | 最小 41–55 | 中高 | 计划 明确的验收标准。 | 均衡 | 审查计划 56–70 | 复杂 | 人类在实施前审查计划。 | 均衡 | 审查计划 diff 71–85 | 高 | 先分解运行特征化测试。 | 高级 | 审查分解 diff 86–100 | 很高 | ADR 风险分析 先分解。 | 高级 | 完整审查 100 | 过度 | 停止。先进行架构工作。 | 高级 | 架构讨论ADR是架构决策记录。复杂性在这里变成成本。RRI 10的任务很便宜更轻的模型无需人工审查少一些仪式。RRI 80的任务成本更高高级模型、分解、特征化测试、风险分析和人工审查。将RRI在一个项目中求和本身不会产生交付估计。它不会告诉你项目需要的确切天数。但它确实给你一个风险加权视图显示成本将集中在何处模型层级、审查努力、架构关注和验证负担。这已经比将每个智能体任务视为具有相同的运营成本有用得多。4、脚本化的现实我的第一直觉是让智能体给自己评分。那是一个错误。LLM不会一致地计算风险它们是近似的。让一个模型评估变更的风险它会给你一个听起来合理的数字在不同运行之间变化并且没有问责机制。两个智能体在同一个代码库上对同一个任务评分可以产生不同的数字。这不是风险指标。这是一个多了一步的猜测。另一个显而易见的路径——MCP服务器、外部API、基于云的评分服务——用一个问题换另一个问题。现在你的风险评估依赖于网络调用、外部服务的正常运行和一个可能过期的凭据。一个告诉你是否可以安全继续的工具不应本身成为一个脆弱的依赖。所以我把评分移到了一个本地脚本中。它不需要网络在仓库内运行并且对其接收的输入是确定性的。脚本scripts/rri.py处理数学运算、圈复杂度分析、文件计数、平台配置和评分标准执行。智能体只填写无法完全自动化的输入——例如模糊性、上下文大小和部分测试风险。以下是它在真实任务上的样子修改一个Rust项目中的认证库dubbridge。智能体为其主观变量提供最佳猜测脚本处理其余部分。python3 scripts/rri.py \ --auto-cc \ --touches src/auth/lib.rs \ --D 2 --K 2 --P 0 \ --T 2 --A 1 --X 2脚本处理输入并产生结构化输出。每行显示变量、应用评分标准底线后的最终分数以及解释该分数如何得出的证据链。Platform: rust (auto-detected) Var Score Source --- ----- ------ C 1 cargo clippy (max CC 8) F 0 1 file touched D 4 rubric floor: auth boundary T 2 agent-supplied A 1 agent-supplied K 4 rubric floor: auth boundary P 4 rubric floor: auth boundary X 2 agent-supplied Base: 42 (weighted sum) Penalty: 10 (auth boundary, P 4) RRI: 52 Med-high - plan required before implementation看看发生了什么。智能体为D、K和P报告了较低的值。它认为这是一个小改动。但文件在认证边界内所以脚本将这三个都提升到了底线任务落入了中高区间。变更的位置否决了智能体的判断。这就是整个想法。智能体不能决定认证代码是简单的。输出还给你一个运营成本比最便宜的选项更强的模型、一个实施计划、明确的验收标准和计划的人工审查。这只是一个任务。在一个冲刺中这给你一些可以预算的东西不是完美的确定性但比直觉好得多的信号。5、为迁移而构建从一开始我就想让RRI在不止一个项目上工作。公式、惩罚和区间并不特定于Rust或dubbridge。每个生态系统中改变的两件事是复杂度测量器和锚定评分标准。在实践中Cargo.toml意味着Rust脚本可以使用Rust配置。go.mod意味着Go可以触发gocyclo。package.json可以触发基于ESLint的配置。pyproject.toml可以触发radon。--platform标志可以在需要时覆盖检测。评分标准以同样的方式工作。一个通用评分标准可以为**/auth/**、**/migrations/**、**/permissions/**和**/crypto/**等路径提高底线。团队可以在其上叠加项目特定规则理想情况下由ADR或架构策略支持。核心分数保持稳定。本地策略适应代码库。这种可移植性很重要因为目标不是创建一个完美的通用指标。目标是创建一个可重复的治理机制可以在不同仓库之间迁移而不依赖于智能体的心情、信心或推销话术。6、RRI不解决的问题RRI是一个护栏不是正确性证明。它不保证低RRI任务是安全的。它不证明高RRI任务是困难的。它不替代测试、代码审查、架构判断或领域专业知识。它也不消除所有主观性模糊性、上下文大小和部分测试风险仍然需要判断。权重是策略默认值不是自然定律。它们应该随时间校准。如果一个团队发现迁移始终比默认模型建议的更危险评分标准应该改变。如果测试密度在特定代码库中是一个糟糕的代理评分策略应该改变。RRI还依赖于任务定义的质量。一个模糊的任务可以收到一个分数但分数不应使模糊性变得可接受。如果验收标准不清楚模糊性必须提高RRI并迫使在实施前进行澄清。那个限制不是模型的弱点。它是模型应该暴露的东西之一。7、实际改变了什么对我改变最大的不是智能体。是我的角色。我不再照看每个diff了。现在只有当分数说变更值得人类关注时我才会被拉入。在那条线之下智能体可以在我不注视每一步的情况下工作。我的时间花在那些人类判断真正重要的少数任务上。智能体也停止了表现得像一个应声虫。在高分时工作流放慢分解任务、写计划、定义验收标准、确定测试在触及架构之前先询问。那种分解不仅在安全方面重要。一个从RRI 80拆分成三个低于55的部分的任务不仅仅是更安全的。它还更便宜。更少的模型成本更少的审查时间更少的攻击面更少的隐藏假设。在RRI之前这需要多久是用经验、直觉和乐观主义来回答的。RRI并没有完全替代这些。但它增加了一个缺失的具体信号复杂性、模型成本、审查努力和架构风险可能集中的地方。对认证要小心从来不是一个真正的保障。它存在于记忆和良好意图中而两者在压力下都会失败。一个有本地策略支持的分数并不完美但它更难被忽视。一旦复杂性在实施之前是可见的护栏就不再依赖每个人在正确的时刻记住它。而智能体项目的成本也不再那么令人惊讶了。完整实现——scripts/rri.py、锚定评分标准、平台配置和策略——位于github.com/krukmat/dubbridge。原文链接为AI智能体引入评分系统 - 汇智网