第 8 篇|如何设计 Risk Engine,让系统真正“提前感知风险”
在第 7 篇,我们讲清楚了一件关键的事:
没有 Risk Engine 的 Harness,本质上是在“放大效率的同时放大风险”。
很多团队已经能做到:
- AI 帮你找代码
- AI 帮你改代码
- AI 甚至能跑通流程
但上线之后,问题开始出现:
- 改动范围判断错误
- 隐性约束被破坏
- 历史 bug 被“重新引入”
于是你会发现一个残酷的现实:
AI 提高了“变更速度”,但没有提高“变更正确率”
而 Risk Engine,就是解决这个问题的核心。
一、什么才叫“真正的风险感知”?
先明确一个误区:
❌ 风险感知 ≠ 写一堆规则校验 ❌ 风险感知 ≠ 静态代码扫描
真正的 Risk Engine,要做到的是:
在改代码之前,回答:这次改动“像不像过去出过事故的改动”?
这句话非常关键。
因为在企业系统里:
绝大多数事故,本质都是“历史问题的变种重演”
二、Risk Engine 的核心模型(必须理解)
Risk Engine 本质是一个“三段式推理”:
变更(Diff) → 语义表示 → 历史经验匹配 → 风险判断
拆开来看:
1️⃣ 输入不是“代码”,而是“变更”
很多团队第一步就做错了:
去分析完整代码
但真正需要分析的是:
- updateStatus(order, "PAID")
+ updateStatus(order, "COMPLETED")
👉 风险永远来自“变化”,而不是“现状”
2️⃣ 把变更变成“语义向量”
关键问题:
AI怎么理解这段 diff 的“含义”?
不是字符串匹配,而是:
- 变量语义(order status)
- 行为语义(状态变更)
- 业务语义(订单生命周期)
👉 最终转成 embedding(语义向量)
3️⃣ 用“事故库”做相似度匹配
核心逻辑:
当前变更 → embedding → 搜 incidents → 找最像的历史事故
如果命中:
{
"incident": "订单状态错误导致资金重复结算",
"similarity": 0.82
}
👉 就可以提前预警
三、Risk Engine 的数据基础(决定上限)
Risk Engine 的效果,不取决于算法,而取决于数据。
必须有三类数据:
1️⃣ Incidents(事故库,最关键)
{
"title": "库存重复扣减",
"rootCause": "MQ重复消费",
"affected": ["InventoryService.deduct"],
"pattern": "非幂等操作 + 重试机制"
}
👉 核心不是记录“发生了什么”,而是:
抽象出“事故模式(pattern)”
2️⃣ Constraints(约束库)
{
"ORDER_STATUS_IMMUTABLE": {
"description": "订单状态不可回退",
"scope": ["OrderService.updateStatus"]
}
}
👉 用于:
- 提供风险解释
- 增强判断可信度
3️⃣ Flow Graph(调用路径)
👉 用于判断:
- 影响范围
- 是否跨关键链路(支付 / 库存 / 订单)
四、风险评分模型(可落地)
一个简单但有效的评分模型:
Risk Score = 相似事故权重 + 影响范围权重 + 约束冲突权重
1️⃣ 相似事故(最高权重)
similarity > 0.8 → 高风险
0.6 ~ 0.8 → 中风险
< 0.6 → 低风险
2️⃣ 影响范围
看 flow graph:
- 是否影响核心链路(订单 / 支付)
- 是否跨服务
- 是否涉及 DB 写操作
3️⃣ 约束冲突
检测:
- 是否修改受约束方法
- 是否违反已知规则
示例输出:
{
"riskLevel": "HIGH",
"score": 0.87,
"reasons": [
"匹配历史事故:库存重复扣减(0.82)",
"涉及核心链路:订单 → 库存",
"违反约束:库存扣减必须幂等"
]
}
五、关键实现细节(90%团队会忽略)
⚠️ 1. Incident 必须“结构化抽象”
错误做法:
{
"title": "4月1号库存问题"
}
正确做法:
{
"pattern": "幂等缺失 + 重试",
"trigger": "MQ重复消费",
"impact": "库存错误"
}
👉 Risk Engine 识别的是“模式”,不是“事件”
⚠️ 2. Diff 要做“语义增强”
不能只看代码行,要补充:
- 所属模块
- 所属业务
- 上下文方法
⚠️ 3. 必须引入“反例机制”
否则会出现:
什么都报风险
解决方法:
{
"safeCases": [
"只读查询",
"日志修改",
"UI字段调整"
]
}
六、Risk Engine 的正确接入点
很多团队会问:
Risk Engine 应该放在哪?
答案是:
1️⃣ 必须在“代码生成之前”
需求 → 分析 → Risk → 决策 → 生成代码
👉 否则只是“事后报警”
2️⃣ 同时在 CI 阶段再跑一遍
PR → Risk Check → 阻断 or 放行
👉 形成“双保险”
七、从“提示风险”到“改变行为”
Risk Engine 的终极目标不是提示,而是:
改变开发行为
表现为:
- AI主动规避高风险方案
- AI建议更安全的实现路径
- 系统拒绝明显危险的改动
八、企业落地的三个阶段
第一阶段:提示型
- 输出风险报告
- 不阻断流程
👉 目标:建立信任
第二阶段:建议型
- 提供替代方案
- 强制注入约束
第三阶段:控制型
- 高风险直接阻断
- 必须人工确认
九、一个现实结论(很重要)
很多团队会问:
Risk Engine 能不能做到 100% 准确?
答案是:
不能,也不需要
它的价值在于:
- 提前暴露 60% 的风险
- 避免 80% 的重复事故
这已经足够改变团队质量曲线。
十、这一篇的本质
如果说前几篇解决的是:
- AI怎么写代码
- AI怎么理解系统
那么这一篇解决的是:
AI什么时候应该“停下来”
结尾
真正成熟的工程体系,不是“跑得更快”,而是:
知道什么时候该慢下来
Risk Engine,就是那个“刹车系统”。
下一篇,我们会继续往下走一层:
👉 如何设计 Constraint Engine,让AI在复杂系统中“始终做对的事”
当 Risk + Constraint 同时存在时,你的 Harness 才真正具备:
可控进化能力