提升研发运维效能:Pacvue 泊客电商的 GenAI 技术实践
 
 关于 Pacvue 泊客电商
Pacvue 是唯一一个为整个市场提供统一商务和零售媒体平台的解决方案——从小型到中型卖家,直至企业品牌都能受益。自 2018 年以来,Pacvue 的使命一直是在不断发展的商务和零售媒体格局中,提供领先的解决方案,以加速品牌的成功。
Amazon Bedrock 和 Anthropic Claude 模型
Amazon Bedrock 是一项完全托管的服务,通过单个 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon 等领先人工智能公司的高性能基础模型(FM),以及通过安全性、隐私性和负责任的人工智能构建生成式人工智能应用程序所需的一系列广泛功能。使用 Amazon Bedrock,您可以轻松试验和评估适合您的使用案例的热门 FM,通过微调和检索增强生成(RAG)等技术利用您的数据对其进行私人定制,并构建使用您的企业系统和数据来源执行任务的代理。由于 Amazon Bedrock 是无服务器的,因此您无需管理任何基础设施,并且可以使用已经熟悉的亚马逊云科技服务将生成式人工智能功能安全地集成和部署到您的应用程序中。
Claude 使用 Constitutional AI 和无害训练等技术创建,在思考对话、内容创建、复杂推理、代码审查、代码生成、代码分析和优化、错误检测和调试、文档生成、代码重构和维护等方面表现卓越。Claude 3.5 Haiku 是一款高效快速的优质模型;Claude 3 Opus 适用于处理复杂任务,表现出色;Claude 3.5 Sonnet v2 是 Anthropic 最智能、最先进的模型,在各类任务和评估中展现卓越性能,整体优于 Claude 3 Opus。
Pacvue 泊客电商的 GenAI 技术实践
Claude-Powered Code Reviewer For GitHub Repositories
业务场景
Pacvue 泊客电商作为电商技术领域的创新先锋,充分利用 GitHub 平台进行代码托管、协作开发、代码审查以及持续集成/持续部署(CI/CD)等关键开发流程。秉承持续创新的理念,Pacvue 泊客电商的开发与运维团队一直致力于通过前沿技术提升整体研发运维效能。
为了进一步提升代码审查的效率和代码质量,Pacvue 泊客电商的开发与运维团队决定引入 Amazon Bedrock 上的 Claude 模型,开启 GenAI 技术在 GitHub 代码审查中的实践之路。
技术需求
- Code Review Result 需要提供有价值的代码洞察,能识别 bug 和安全漏洞,时间效率和内存效率问题,并给出修改建议; 
- 对每个 Pull Request/Repo 进行量化评分,对每个 Pull Request/Repo 中修改的文件进行量化评价,便于跟踪和管理; 
- 将评分结果与 CI/CD 流程结合,实现代码质量的自动化管理; 
- GitHub 仓库必须通过白名单控制,只允许指定的 IP 才能连接,并结合 GitHub Access Token 进行访问; 
- Code Review 需要支持 Pull Request 级别和整个代码仓库级别的 Review; 
- 支持 Java、Python、JavaScript 等编程语言的 Code Review,确保工具的广泛适用性; 
- 开发人员和开发经理可以便捷的查看 Code Review Task 状态与结果,提高团队协作效率; 
- 对于整个代码仓库级别的 Review,需要有 Review Summary,以快速了解代码库的整体状况。 
技术方案
经过与亚马逊云科技快速原型团队和解决方案架构师团队讨论和研究,Pacvue 泊客电商开发与运维团队决定使用如下架构:
 
 Claude-Powered Code Reviewer 架构示意图
出于安全考虑,尽量避免数据暴露于互联网,我们将所有 Amazon Lambda 函数放在一个 VPC 中,通过 NAT Gateway 访问互联网,通过 VPC Endpoint Gateway 访问 DynamoDB 和 S3,通过 VPC Endpoint Interface 访问 Claude 和 Amazon SQS。
①通过 GitHub Webhook/Action 自动探测开发人员针对代码仓库的 Pull Request event
②调用 Codereview Post API 提交 Code Review Task
③检查 Code Review Task 中是否有需要 review 的代码文件,如果不存在直接 return “No file need review”,如果存在则进入④,⑤
④将 Code Review 任务状态存储到 Amazon DynamoDB 中
⑤ trigger lambda 异步处理根据文件拆分细化任务到 Amazon SQS 中,白名单设置(处理的文件尾缀:.go/.py/.java 等,Lambda 的环境变量)
⑥ 获取 Pull Request diff file 等信息
⑦将 Code Review message 放入 Amazon SQS
⑧更新 Amazon DynamoDB 中需要处理的文件数目
⑨ Amazon Lambda 订阅 Amazon SQS,根据 Amazon SQS 中的 message 来 review code
⑩将需要 review 的代码通过 Amazon Lambda 并发提交给 Claude 进行 review
⑪ 将 Claude 返回的结果存储到 S3 中的文件中
⑫更新 Amazon DynamoDB 中需要处理的文件数目和已处理文件数目
⑬ 用户发起代码审查结果查询给 Amazon EC2(通过 nginx Host UI)
⑭Amazon EC2 通过 Amazon API Gateway 发送查询请求
⑮根据 ReviewId 等信息查询当前代码审查的状态与结果
⑯根据提交的 ReviewId 查询 Amazon DynamoDB 中任务的状态
⑰读取 S3 的内容,生成 Pre-signed URL 返回给用户
主要挑战
保障 Code Review 过程的安全
- GitHub 仓库通过白名单控制,只允许 VPC 中的 NAT Gateway 固定的 IP 地址和端口与 GitHub 仓库交互。 
- 通过 Amazon Bedrock 使用 Claude 更加安全。Amazon Bedrock 处理的任何客户内容都会被加密。用户输入和模型输出不会与任何模型提供商共享。亚马逊云科技和第三方模型提供商不会使用 Amazon Bedrock 的任何输入或输出来训练 Amazon Titan 或任何第三方模型。使用了 Amazon PrivateLink 建立从 Amazon VPC 到 Amazon Bedrock 的私有连接,而无需将数据暴露给互联网流量。 
- Amazon Bedrock 提供多种支持安全和隐私要求的功能。Amazon Bedrock 符合服务和组织控制(SOC)、国际标准化组织(ISO)、健康保险流通与责任法案(HIPAA)等常见合规标准,客户可以在符合《通用数据保护条例》(GDPR)的情况下使用 Amazon Bedrock。Amazon Bedrock 包含在 SOC 1、2、3 报告的范围内,使客户能够深入了解我们的安全控制措施。我们通过对我们的 AWS 控制进行广泛的第三方审核来证明合规性。Amazon Bedrock 是符合 ISO 9001、ISO 27001、ISO 27017、ISO 27018、ISO 27701、ISO 22301 和 ISO 20000 标准的亚马逊云科技服务之一。Amazon Bedrock 已获得 CSA 安全信任保障和风险(STAR)2 级认证,该认证验证亚马逊云产品的最佳实践使用情况和安全状况。 
支持的编程语言类型与扫描方式
Claude-Powered Code Reviewer 支持多种编程语言,包括 Go、Python、Java、C++、JavaScript、C#、Ruby 等,并且可以通过 Amazon lambda 环境变量进行控制,只 review 指定类型的代码文件。除了支持对单个 Pull Request 的 review,还支持对整个代码仓库的 review 以及对 review 结果的总结。
Code Review 结果是否有价值
Claude 在 Code 方面的能力参考下图中红色方块部分:
 
  
 经过测试发现,Claude 可以通过简单的 Prompt 提供有价值的代码洞察,用户可以根据个性化需求修改 Prompt,下面是测试示例:
- Pull Request 级别的扫描 
Claude 对每个 Pull Request 中每个修改的文件进行 review,参考 Prompt 如下:
一段含有 bug 的 Java 代码如下:
通过 Pull Request 提交代码后,Code Review 结果如下:
Here is my code review response in Chinese and XML format:
<review_score>
20
</review_score>
<review_result>
这段代码存在严重的内存泄漏问题,可能导致应用程序最终耗尽内存而崩溃。主要问题如下:
内存泄漏:代码中使用了一个静态的 ArrayList 来存储对象,但没有任何移除机制。在无限循环中不断添加新对象,会导致内存持续增长直到耗尽。
private static final List<Object> cache = new ArrayList<>(); while (true) { Object obj = new Object(); cache.add(obj); // 没有移除机制 }
无限循环:main 方法中的 while(true)循环会一直运行,没有退出条件。
线程睡眠处理不当:虽然有 try-catch 块处理 InterruptedException,但只是打印堆栈跟踪,并未采取任何有意义的操作。
改进建议:
使用有界集合如 LinkedHashMap,并实现 LRU(最近最少使用)缓存策略:
private static final int MAX_CACHE_SIZE = 1000; private static final Map<Integer, Object> cache = new LinkedHashMap<Integer, >Object>(MAX_CACHE_SIZE, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry<Integer, Object> eldest) { return size() > MAX_CACHE_SIZE; } };
添加退出条件或使用定时器来控制程序运行时间。
正确处理 InterruptedException,例如退出循环或重新设置线程的中断状态。
考虑使用 Java 的软引用(SoftReference)或弱引用(WeakReference)来允许垃圾收集器在需要时回收缓存的对象。
这些改进可以显著提高代码的健壮性和性能,避免内存泄漏问题。
</review_result>
Claude 可以在 10 秒内生成上面的结果,不难看出 Claude 找到了 bug 位置,并且对 bug 进行了描述,说明了其潜在影响,并且给出了一个时间效率更高和内存效率更优秀的实现方式。
开发人员可以快速根据 review result 对 bug 进行修复,同时提升自身开发技能,从而减少 bug 数目,减少生产问题的产生。
相较于传统的人工 Code Review 方式,Claude-Powered Code Reviewer 大大地降低了 Code Review 的时间成本和人工成本,并且精通多种编程语言和自然语言。
相较于传统的基于规则扫描方式,Claude-Powered Code Reviewer 可以理解代码,并且给出更加深刻和详细的代码洞察。
Pull Request 级别的扫描运行效果截图如下:
 
 Pull Request 扫描结果 1
针对每个 Pull Request 提供量化评分,汇总 Pull Request 中每个修改文件的评分(0 分代表最差的代码,100 分代表最好的代码),计算出每个 Pull Request 中文件最低分,平均分,最高分,开发人员可以迅速通过量化指标衡量 Pull Request 的代码质量。
 
 Pull Request 扫描结果 2
发现 Pull Request 中文件最低分,平均分比较低,开发人员点击链接即可获得每个文件的修改建议并及时修改代码,从而提升代码质量,减少 bug 的产生,从而减少生产问题的出现。
- 代码仓库级别的扫描 
Claude 对仓库中每个文件进行 Review,参考 Prompt 如下:
Claude 对仓库中所有文件的 Review 结果进行总结,参考 Prompt 如下:
代码仓库级别的扫描运行效果截图如下:
 
 代码仓库 Review List
 
 代码仓库 Review Summary
 
 代码仓库每个文件 Review Result
代码仓库 Review Summary 可帮助开发经理快速掌握整理代码的质量,代码仓库每个文件的 Review Result。
UI 的设计和功能
- 使用 Amazon EC2 托管 React UI,UI 层负责实现本方案中需要展示的代码审核 Portal、Review 页面嵌入、URL 参数跳转等功能。UI 页面将 S3 的地址生成 Per-sign URL,通过 ifream 嵌入并最终展现。 
- 获取 Review 列表页面的信息,支持分页,并且可以按 Project、Branch、ScanScope、Pull Request Id/Commit 进行检索。 
- 支持点击 Url 直接定位指定 Project、Branch、Pull Request Id/Commit 的 review 记录,方便与即时通信系统(如飞书、企业微信、钉钉、Slack)集成,并自动刷新 Code Review Task 状态,待 Code Review Task 完成后点击 Review Id 字段即可获得 Code Review Result。 
方案优势
- 接近实时生成的 Code Review Result 提供有价值的代码洞察,能识别 bug 和安全漏洞,时间效率和内存效率问题等,并给出解释与优化后的代码示例,代码进行量化评分,将评分结果与 CI/CD 流程结合,可以实现代码质量的自动化管理; 
- 与传统人工 Code Review 相比,极大地降低了人工成本和时间成本,并且适配多种编程语言和自然语言; 
- 与传统基于规则的静态扫描工具相比,Claude 可以理解代码,并提供更加深刻和详细的代码洞察;扩展性好,只需要修改环境变量就可以控制 review 的代码种类; 
- Review Prompt 简单,易于客户化修改; 
- 使用 REST API 提交 Code Review Task,方便与 CI/CD 集成; 
- 独立的 Code Review Portal 方便查看 Review History 以及与即时通信系统(如飞书、企业微信、钉钉、Slack)集成; 
- 无需迁移代码仓库,只需提供访问 API 即可。 
系统集成与效果展示
GitHub CI/CD 集成,实现 Diff 自动评审
CI/CD 设置如下:
配置 GitHub Action 工作流,当每次有 PR 被创建时会自动触发这个工作流
 
 GitHub Action 工作流配置
通过浏览器插件可视化展示文件层面评审结果
使用浏览器插件可以很方便地向 GitHub 页面注入自定义的内容,核心逻辑如下:
 
 浏览器插件展示文件层面评审结果示例图
通过浏览器插件可视化展示 PR 层面评审总结结果
PR 层面的评审实际上是将每个变更文件的评审结果进行一次归纳,并将本次审查的评分分布情况通过图表展示出来:
 
 PR 进行 review 之后的总结图
支持手动按需触发单个文件评审
当我们查看代码仓库里的某个文件时,如果想让 AI 快速给出总结或者分析,可以使用插件增强的功能:
 
 支持手动按需完整文件评审
与 PMD 这类基于规则的 Review 对比,可以提供更深层次的代码洞察
PMD 是一种静态代码分析工具,主要用于检测代码中的潜在问题。它基于预定义的规则集工作,能够快速识别代码中的常见问题,如未使用的变量、重复代码、代码风格违规等。由于其规则驱动的特性,PMD 的执行速度非常快,适合集成到 CI/CD 管道中,帮助开发者在早期发现并修复问题。此外,PMD 支持规则的自定义,用户可以根据项目需求调整或扩展规则集,使其更贴合实际开发场景。然而,PMD 的局限性在于它主要关注代码的表面问题,难以发现复杂的逻辑错误或设计缺陷。虽然它支持多种编程语言,但每种语言的规则需要单独配置,这必然会增加一定的维护成本。
下图是我们使用 PMD 扫描后的一个结果片段:
 
 PMD 扫描后结果片段
与规则驱动的工具不同,AI 大模型可以分析代码的逻辑结构,发现潜在的设计问题、性能瓶颈甚至安全漏洞。它的优势在于能够结合上下文提供更准确的建议,并且通过不断升级模型,逐步优化其审查能力。此外,AI 大模型通常支持多种编程语言和框架,具有较强的灵活性。另一方面我们也看到,AI 大模型的资源消耗较大,并发调用比较大的情况下分析速度相对较慢,可能不适合需要快速实时反馈的场景。
静态扫描和 AI 大模型在代码审查中各有优势。PMD 一类的工具适合用于快速检测代码中的常见问题,尤其是在需要频繁集成的开发环境中;而 AI 大模型则更适合用于深度分析,帮助发现复杂的逻辑或设计问题。在实际开发中,可以结合两者的优势:使用 PMD 进行快速扫描,确保代码符合基本规范;同时利用 AI 大模型进行更深层次的审查,以提升代码的整体质量。这种组合方式能够兼顾效率与深度,为开发者提供更全面的代码质量保障。
业务成果
Pacvue 泊客电商开发与运维团队通过与亚马逊云科技合作,将 Claude-Powered Code Reviewer 在一个月内从 POC 到生产上大规模使用,覆盖了数百个 GitHub 仓库。使用之后,Code Review 时间减少 70%,提高了开发效率,代码质量显著提高,bug 减少 30%,减少了生产问题,提高了生产效率,降低了运营成本。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
参考链接
Claude 3-Powered Code Reviewer
Large Language Models for Code Analysis: Do LLMs Really Do Their Job?
Claude Prompt Engineering Techniques
本篇作者
 
 本期最新实验《多模一站通 —— Amazon Bedrock 上的基础模型初体验》
✨ 精心设计,旨在引导您深入探索 Amazon Bedrock 的模型选择与调用、模型自动化评估以及安全围栏(Guardrail)等重要功能。无需管理基础设施,利用亚马逊技术与生态,快速集成与部署生成式 AI 模型能力。
⏩️[点击进入实验] 即刻开启 AI 开发之旅
构建无限, 探索启程!








 
    
 
				 
				 
			


评论