详细讲解从零开始在 Google Cloud Run 上实现 AI 系统质量控制的全流程。实战教程,对生产部署有直接指导价值。
利益相关者冲突驱动的质量门禁
在上一篇关于将架构文档视为一等资产的文章中,我和大家在评论区围绕如何强制执行架构规则,展开了一场很有价值的讨论。当时我承诺,会分享近期 Google Developer Groups 工作坊的相关材料。
现在,工作坊已经顺利结束!下面我会讲述自己如何构建 AI Quality Gate、它如何帮助我解决内部的“CEO、CTO、CFO、CISO”冲突,并总结现场演示的内容。
你可以收听根据本文生成的播客(感谢 NotebookLM):
包含源代码的 Playground 仓库:
我的本职工作是 DevSecOps 工程师,但在业余时间,我会参与 Technovation Girls 的导师工作。这是一个帮助年轻女性学习科技与 STEM 知识的全球项目。由于我们始终需要更多 IT 导师,我构建了一个 AI 导师 bot 来帮助学生。构建这个 bot 时,我面临两个重大挑战:
安全性:因为使用者是儿童,所以必须完全避免 AI 幻觉带来的安全风险。
预算:因为费用由我个人承担,所以成本必须非常低。
这个 bot 取得了巨大成功。借助 Google Cloud Run 和 Vertex AI,它服务了 250 名用户,回答了 1,500 个问题,而每月费用仅为 25~55 美元。
然而,当我尝试快速添加新功能时,却遇到了一个大问题。由于我每天只能为这个项目挤出 1~2 小时的空闲时间,我的脑海里爆发了一场激烈的“CEO、CTO、CFO、CISO”冲突:
CTO 想编写代码,快速发布功能。
CISO 想阻止发布,确保一切都足够安全。
CFO 想把云成本控制在较低水平。
CEO 想让产品不断增长并取得成功。
为了解决“CEO、CTO、CFO、CISO”冲突,我创建了一个 AI Quality Gate。AI Quality Gate 是一个自定义微服务,可以自动从架构、安全和成本(FinOps)角度审查代码。它构建在 Google Cloud Run 之上,并使用 Vertex AI(Gemini)。
Quality Gate 执行的第一个动作,就是阻止它自己的 MVP 进入生产环境。所以,我认为这是一个好兆头。
严重问题列表:AI Gateway(AAA):所提供的代码直接从 Secret Manager 获取 GitLab token,并使用它访问 GitLab API。这绕过了 AI gateway,违反了“始终与 AI gateway 保持一致(AAA、FinOps)”规则。AAA 组件应该负责管理包括 GitLab 在内的所有外部服务的身份认证和授权。
AI Gateway(AAA):所提供的代码直接从 Secret Manager 获取 GitLab token,并使用它访问 GitLab API。这绕过了 AI gateway,违反了“始终与 AI gateway 保持一致(AAA、FinOps)”规则。AAA 组件应该负责管理包括 GitLab 在内的所有外部服务的身份认证和授权。
建设性建议:实现 AI Gateway AAA:修改 ai_review.py 脚本,使其首先通过 AI gateway 进行身份认证。随后由 AI gateway 处理 GitLab 身份认证,以集中且安全的方式管理访问权限。在 job 中使用 gateway 提供的 token,不要直接访问 GitLab API。FinOps 注意事项:跟踪 AI 审查的成本,并将其与 FinOps 工具关联起来。随着资源使用量增加,提供清晰的成本可见性非常重要。
实现 AI Gateway AAA:修改 ai_review.py 脚本,使其首先通过 AI gateway 进行身份认证。随后由 AI gateway 处理 GitLab 身份认证,以集中且安全的方式管理访问权限。在 job 中使用 gateway 提供的 token,不要直接访问 GitLab API。
FinOps 注意事项:跟踪 AI 审查的成本,并将其与 FinOps 工具关联起来。随着资源使用量增加,提供清晰的成本可见性非常重要。
由于它运行在 Cloud Run 上,只有真正执行代码检查时才会产生费用。整整一个月的自动化深度上下文代码审查,我只花了 0.12 美元!这让大脑中的 CFO 非常开心。最初,我把 AI Quality Gate 作为 CI/CD pipeline 中的一个步骤。但等待几分钟后才看到“Merge Request Failed”消息,既缓慢又令人烦躁。现在,我会在创建 Merge Request 之前,直接在 IDE 中通过 bash 脚本运行 Quality Gate。这样既节省时间,又能在速度、安全和预算之间取得平衡,完美化解“CEO、CTO、CFO、CISO”冲突。
在 GDG 工作坊期间,我对三个不同的代码仓库进行了现场演示,以证明为什么传统工具还不够。
首先,我使用 Ruff、Pylint 和 Semgrep 等标准工具扫描了一个简单的服务。代码获得了完美的 10/10 分。然而,当我把代码发送给 AI Quality Gate 后,它却阻止了发布。它发现了一个严重的 SQL injection 和一个 prompt injection——代码中隐藏着一条给 AI 审查者的提示,要求它“报告一切正常”。传统 linter 完全漏掉了这些问题,但 AI 成功发现了它们,并提供了准确的修复步骤。
在第二个项目中,README.md 文件声明系统遵循严格的隐私标准,并会对用户数据进行匿名化处理。但实际代码却反其道而行之:它保存了用户真实的电子邮件地址和 ID。标准工具没有发现这个问题,但 AI Quality Gate 阅读了文档,将文档描述与代码的实际行为进行对比,并发现了这项安全违规。
最后一个演示最为强大。这个仓库中一行代码都没有,只有一份使用 Markdown 编写的新功能规划文档。我把这份文本方案发送给 AI Quality Gate。在我写下第一行 Python 代码之前,AI 就发现了方案中的严重安全缺陷,例如缺少 server logs,以及将密码硬编码。它把“Shift-Left”安全理念进一步转变为“Shift-In”——在你仍处于想法构思阶段时,就把专家直接带入你的 IDE。现在,我们不仅可以测试代码,甚至还可以测试想法。
当你把架构规则和文档放在代码附近时,自定义 AI Quality Gate 就会成为一个极其强大的工具。它能帮助你编写更好的代码、节省时间,并最终解决内部的“CEO、CTO、CFO、CISO”冲突。此外,这样的 gate 还可以成为一名具备任意领域经验的额外顾问,在最早阶段帮助改进任何想法,从而节省未来的成本。最重要的是,它的运行成本几乎为零。如果你想自己构建一个,我的 Docker image 已经发布在 DockerHub 上,示例仓库则位于我的 GitHub:
对于后续操作,你可以考虑屏蔽此人和/或举报滥用行为。