亚马逊AWS官方博客
悠星运维团队的 GenAI 技术实践:Claude 3-Powered Code Reviewer
关于悠星
上海悠星网络科技有限公司成立于 2014 年,总部位于中国上海,并于日本东京和韩国首尔设有办事处。自成立以来,悠星致力于成为全球领先的游戏研发、产品发行、战略投资及 IP 管理商。
自 2017 年起,悠星网络先后成功发行了《碧蓝航线》、《明日方舟》及《蔚蓝档案》等多款高知名度产品,在日、韩、欧美等地区屡创佳绩;为了给玩家带来不止于游戏的体验,悠星先后成立了 2D 动画公司 Yostar Pictures 与 3D 动画公司 ARCUS,力求提供多样化、不同形式的内容供玩家享受。
2023 年,悠星网络进一步拓宽业务区域,于中国大陆发行了《蔚蓝档案》简体中文版。未来,悠星将继续秉承稳扎稳打的发展路线,维持精准独到的战略眼光,致力于将优质游戏带给全球玩家,提供最本真的游戏乐趣。
Amazon Bedrock 和 Claude 3 模型
Amazon Bedrock 是一个完全托管的服务,通过单一 API 为头部 AI 公司如 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 提供高性能的基础模型选择,以及构建具有安全性、隐私性和负责任 AI 的生成式 AI 应用程序所需的广泛功能。Claude 3 模型基于 Anthropic 公司对于创建可靠、可解释和可控制的 AI 系统的研究。
Claude 3 使用 Constitutional AI 和无害训练等技术创建,在思考对话、内容创建、复杂推理、代码审查、代码生成、代码分析和优化、错误检测和调试、文档生成、代码重构和维护等方面表现卓越。Claude 3 Haiku,这是速度最快、最紧凑的模型,可实现近乎即时的响应;Claude 3 Sonnet,这是平衡了技能和速度的理想模型;Claude 3 Opus,这个模型最智能,可在处理高度复杂的任务时提供顶级性能。
悠星运维团队的 GenAI 技术实践:Claude 3-Powered Code Reviewer
业务场景
在现代软件开发中,代码审查(Code Review)是确保代码质量和项目成功的关键步骤。悠星网络科技有限公司(Yostar)作为国内顶尖的游戏开发和发行公司,始终致力于技术创新和高效运维。为了进一步提升代码审查的效率和质量,悠星运维团队引入了 Amazon Bedrock 基础模型 Claude 3 语言模型,开启了 GenAI 技术在代码审查中的实践之路。
悠星运维团队认为在游戏开发过程中,代码审查(Code Review)不仅是一个技术流程,更是提升团队协作、知识共享和项目成功率的重要手段。基于大模型 Claude 3 系统的代码审查流程,游戏公司可以提高代码质量、降低项目风险、促进团队协作和开发人员的成长,从而在激烈的市场竞争中保持领先地位。
技术需求
- Code Review Result 需要提供有价值的代码洞察,能识别 bug 和安全漏洞,时间效率和内存效率问题等
- GitLab 仓库必须通过白名单控制,只允许指定的 IP 才能连接,并结合 GitLab Access Token 进行访问
- 方便通过 GitLab Webhook 与 CI/CD 进行集成
- Code Review 需要支持 commit 级别和整个代码仓库级别的 Review
- 支持 Go、Python、JavaScript 等编程语言的 Code Review
- 开发人员和开发经理可以便捷地查看 Code Review Task 状态与结果
- 对于整个代码仓库级别的 Review,需要有 Review Summary
技术方案
经过与亚马逊云科技快速原型团队,解决方案架构师团队和技术客户经理团队讨论和研究,悠星运维团队决定使用如下架构:
Claude 3-Powered Code Reviewer 架构示意图
出于安全考虑,尽量避免数据暴露于互联网,我们将所有 Amazon Lambda 函数放在一个 VPC 中,通过 NAT Gateway 访问互联网,通过 VPC Endpoint Gateway 访问 DynamoDB 和 S3,通过 VPC Endpoint Interface 访问 Bedrock Claude 3 和 Amazon SQS。
① 通过 GitLab Webhook 自动探测开发人员针对代码仓库的 Push event
② 调用 Codereview Post API 提交 Code Review Task
③ 检查 Code Review Task 中是否有需要 review 的代码文件,如果不存在直接 return “No file need review”,如果存在,则进入④,⑤
④ 将 Code Review 任务状态存储到 Amazon DynamoDB 中
⑤ 触发 Lambda 异步处理,根据文件拆分细化任务到 Amazon SQS 中,白名单设置(处理的文件尾缀:.go/.py/.java 等,Lambda 的环境变量)
⑥ 获取 commit diff file 等信息
⑦ 将 Code Review message 放入 Amazon SQS
⑧ 更新 Amazon DynamoDB 中需要处理的文件数目
⑨ Amazon Lambda 订阅 Amazon SQS,根据 Amazon SQS 中的 message 来 review code
⑩ 将需要 review 的代码通过 Amazon Lambda 并发提交给 Claude 3 进行 review
⑪ 将 Claude 3 返回的结果存储到 S3 中的文件中
⑫ 更新 Amazon DynamoDB 中需要处理的文件数目和已处理文件数目
⑬ 用户发起代码审查结果查询给 Amazon Amplify
⑭ Amazon Amplify 通过 Amazon API Gateway 发送查询请求
⑮ 根据 ReviewId 等信息查询当前代码审查的状态与结果
⑯ 根据提交的 ReviewId,查询 Amazon DynamoDB 中任务的状态
⑰ 读取 S3 的内容生成 Pre-signed URL 返回给用户
主要问题
Code Review 过程中的安全问题
- GitLab 仓库通过白名单控制,只允许 VPC 中的 NAT Gateway 固定的 IP 地址和端口与 GitLab 仓库交互
- 通过 Amazon Bedrock 使用 Claude 3 更加安全。Amazon Bedrock 处理的任何客户内容都会被加密。用户输入和模型输出不会与任何模型提供商共享。AWS 和第三方模型提供商不会使用 Amazon Bedrock 的任何输入或输出来训练 Amazon Titan 或任何第三方模型。使用了 AWS PrivateLink 建立从 Amazon VPC 到 Amazon Bedrock 的私有连接,而无需将数据暴露给互联网流量
- Amazon Bedrock 提供多种支持安全和隐私要求的功能。Bedrock 符合服务和组织控制(SOC)、国际标准化组织(ISO)、健康保险流通与责任法案(HIPAA)等常见合规标准,客户可以在符合《通用数据保护条例》(GDPR)的情况下使用 Bedrock。Amazon Bedrock 包含在 SOC 1、2、3 报告的范围内,使客户能够深入了解我们的安全控制措施。我们通过对我们的 AWS 控制进行广泛的第三方审核来证明合规性。Amazon Bedrock 是符合 ISO 9001、ISO 27001、ISO 27017、ISO 27018、ISO 27701、ISO 22301 和 ISO 20000 标准的 AWS 服务之一。Amazon Bedrock 已获得 CSA 安全信任保障和风险(STAR)2 级认证,该认证验证 AWS 云产品的最佳实践使用情况和安全状况。
支持的编程语言类型与扫描方式
Claude 3-Powered Code Reviewer 支持多种编程语言包括 Go、Python、Java、C++、JavaScript、C#、Ruby 等,并且可以通过 Amazon Lambda 环境变量进行控制,只 review 指定类型的代码文件。除了支持对单个 commit 的 review,还支持对整个代码仓库的 review 以及对 review 结果的总结。
Code Review 结果是否有价值
Claude 3 在 Code 方面的能力参考下图中红色方块部分:
经过测试发现,Claude 3 可以通过简单的 Prompt 提供有价值的代码洞察,用户可以根据个性化需求修改 Prompt,下面是测试示例:
- Commit 级别的扫描
Claude 3 对每个 commit 中每个修改的文件进行 review,参考 Prompt 如下:
一段含有 Bug 的 python 代码如下:
通过 commit 提交代码后,Code Review 结果如下:
在提供的代码中,存在一个严重的 bug 和安全漏洞。这个问题的特点如下:
Claude 3 可以在 10 秒内生成上面 code review 结果,不难看出 Claude 3 找到了 bug 位置,并且对 bug 进行描述,说明了潜在影响,并且给出了一个时间效率更高和内存效率更优秀的实现方式。
开发人员可以快速根据 review result 对 bug 进行修复,同时提升自身开发技能,从而减少 bug 数目,减少生产问题的产生。
相较于传统的人工 code review 方式,Claude 3-Powered Code Reviewer 大大地降低了 code review 的时间成本和人工成本,并且精通多种编程语言和自然语言。
相较于传统的基于规则扫描方式,Claude 3-Powered Code Reviewer 可以理解代码,并且给出更加深刻和详细的代码洞察。
Commit 级别的扫描运行效果截图如下
Commit 扫描结果
- 代码仓库级别的扫描
Claude 3 对仓库中每个文件进行 Review,参考 Prompt 如下:
Claude 3 对仓库中所有文件的 Review 结果进行总结,参考 Prompt 如下:
代码仓库级别的扫描运行效果截图如下
代码仓库 Review Summary
代码仓库每个文件 Review Result
Runtime Quotas
方案可以通过 Lambda 环境变量控制使用 Claude 3 Opus,Sonnet 和 Haiku,用户可以根据实际需求选择最适合自己的模型。在按需使用场景下的 Claude 3 Runtime Quotas 如下:
Claude 3 Opus,Sonnet 和 Haiku Runtime Quotas
Review History By Claude 3 Haiku
Claude 3 Haiku,这是速度最快、最紧凑的模型,从上图 Review History 图片中可以看出,对于有 47 个文件的代码仓库整体 Review Task 可以在 18s 内完成,对于单个 commit Review Task 最低可以在 8s 内完成。
UI 设计
- 使用 Amplify 托管 React UI,UI 层负责实现本方案中需要展示的代码审核 Portal、Review 页面嵌入、URL 参数跳转等功能。UI 页面将 S3 的地址生成 Per-sign URL,通过 ifream 嵌入并最终展现
- 获取 Review 列表页面的信息,支持分页,并且可以按 Project,Branch,ScanScope,CommitId 进行检索
- 支持点击 Url 直接定位指定 Project、Branch、CommitId 的 review 记录,方便与即时通信系统(如飞书,企业微信,钉钉)集成,并自动刷新 Code Review Task 状态,待 Code Review Task 完成后点击 Review Id 字段即可获得 Code Review Result
方案优势
- 接近实时生成的 Code Review Result 提供有价值的代码洞察,能识别 bug 和安全漏洞,时间效率和内存效率问题等,并给出解释与优化后的代码示例
- 与传统人工 Code Review 相比,极大的降低了人工成本和时间成本,并且 Claude 3 精通多种编程语言和自然语言
- 与传统基于规则的静态扫描工具相比,Claude 3 可以理解代码,并提供更加深刻和详细的代码洞察
- 使用 Serverless 技术架构,按需付费,无固定成本,相比传统的静态扫描工具和人工 Code Review 成本更低
- 扩展性好,只需要修改环境变量就可以控制 review 的代码种类
- Review Prompt 简单,易于客户化修改
- 使用 REST API 提交 Code Review Task 方便与 CI/CD 集成
- 独立的 Code Review Portal 方便查看 Review History 以及与即时通信系统(如飞书,企业微信,钉钉)集成
- 用户可以根据实际需求选择最适合自己的模型
- 无需迁移 GitLab 仓库,只需提供访问 API 即可
业务成果
悠星运维团队通过与亚马逊云科技合作,将 Claude 3-Powered Code Reviewer 在一个月内从 POC 到生产上大规模使用,遍及数百个 GitLab 仓库。使用之后,Code Review 花费时间仅需原流程的 2% 左右,提高了开发效率,代码质量显著提高,降低了 bug 数量,减少了生产问题,提高了生产效率,降低了运营成本。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
参考链接
Large Language Models for Code Analysis: Do LLMs Really Do Their Job?:https://arxiv.org/abs/2310.12357
AWS Bedrock FAQ:https://thinkwithwp.com/cn/bedrock/faqs
Claude 3 for coding:https://claude3.pro/claude-3-opus-vs-gpt-4-for-coding
Claude docs:https://docs.anthropic.com/claude/docs
Claude Prompt Engineering Techniques:https://docs.google.com/presentation/d/1zxkSI7lLUBrZycA-_znwqu8DDyVhHLkQGScvzaZrUns/edit#slide=id.g288a92597fe_0_487
BotNet-Generator:https://github.com/JacobFischer/BotNet-Generator
llms-for-code-analysis:https://github.com/aseec-lab/llms-for-code-analysis