2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
我在早期将人工智能引入软件开发生命周期(SDLC)的团队中不断看到一种模式:有人将大型语言模型集成到拉取请求审查流水线中作为质量关卡,两周后,该模型将一个完全正常的拉取请求标记为“有风险”,团队主管推翻了一次并抱怨了两次,不到一个月,这个人工智能关卡就被悄然禁用了。
这种情况是无法挽回的。一旦团队主管花了一个周五下午向工程团队解释为什么人工智能认为他们的拉取请求存在危险(而实际上并没有),“人工智能开发工具”就会成为他们下次与首席技术官一对一会议上的笑柄。而且人工智能可能在某些时候是正确的——你只是失去了找出是哪些时候的机会。
我正在构建一个解决此问题的软件即服务产品(Codens,一个人工智能开发测试平台——我很乐意讨论它,但这不是本文的重点)。在为该产品设计拉取请求风险评估服务时,我确立了五条不可妥协的设计规则,我认为这些规则适用于任何融入工作流的人工智能产品:
- 人工智能仅提供建议。 绝不自动阻止合并。
- 团队主管对代码质量负责。 而不是人工智能。
- 通过无需理由,不通过需一行说明。 不要让人类去辩护为何批准。
- 原始事件、衍生事实和人工智能建议分开存储。 审计轨迹必须能在任何单一层出错时依然保留。
- 配置优于代码。 风险规则可在仓库中编辑,而不位于人工智能服务的源代码控制中。
本文介绍了这些约束条件的实现——即引擎的实际面貌,以及生产环境中部署的代码。
架构:规则优先,人工智能其次
拉取请求的流程依次经过三个阶段:
拉取请求网络钩子
↓
[1] 规则引擎 ← 纯确定性逻辑,无大型语言模型
↓ 规则匹配 + 风险评分
[2] 阈值检查 ← 由规则驱动的“是否属于高风险”
↓ 如果属于高风险
[3] 人工智能建议层 ← 大型语言模型查看匹配的规则和拉取请求差异,
提供意见,从不阻止
团队主管仍然按下合并按钮。人工智能的角色至多是“在评论中提出关切,团队主管可以忽略”。规则引擎的角色是“告诉团队主管仔细查看某些文件”。没有任何信息从人工智能扩散到任何阻碍部署的关卡。
规则引擎:仅四种匹配类型
每条规则都属于四种匹配类型之一。我刻意抵制添加第五种类型(正则表达式很诱人,但我一直拒绝)。
class 规则匹配类型(枚举):
文件路径通配符 = "file_path_glob" # auth/**, billing/**, migrations/**
关键词 = "keyword" # "permission", "PII", "encryption"
标签 = "label" # GitHub label "risk:high"
文件扩展名 = "file_extension" # .sql, .tf, .pem
@dataclass
class 风险规则:
patte
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。