Amazon Q Developer是亚马逊云科技推出的一款专为专业开发者设计的人工智能助手,旨在提升代码开发和管理的效率。其主要功能包括代码生成、调试、故障排除、安全漏洞扫描等,提供一站式的代码服务。
往期文章分享了关于Amazon Q的入门配置技巧、快速实践指南,本期文章将继续分享如何利用Amazon Q集成企业代码库。
亚马逊云科技推出了Amazon Q Developer在IDE中的定制功能(Customization),支持在行内代码补全以及聊天窗口中的定制。现在,用户可以在IDE代码编辑器中定制Amazon Q Developer,从私有代码库中生成特定的代码推荐,这使得代码建议更加精准、个性化。
对于企业客户来说,通过这些定制功能,Amazon Q Developer可以根据您团队的内部库、专有算法技术和企业代码风格来提供支持,从而协助软件开发。这不仅可以提高开发效率,还能确保开发过程符合企业的技术要求和编码标准。企业用户可以依据团队的具体需求和偏好配置这些定制选项,以此优化开发流程,加速项目进度,并提高最终产品的质量和性能。这些功能的引入,为企业提供了一个强大的工具,来支持软件开发任务和增强开发团队的协作效率。
Amazon Q Developer的定制功能严格遵守亚马逊云科技的数据隐私和安全标准。您共享给 Amazon Q Developer的代码库只限于您的组织使用,不会用于训练亚马逊云科技的基础模型。定制部署后,推理端点将专属于您组织内的开发者,确保您的代码推荐不会在其他公司的开发者IDE中显示。您可以自行决定哪些开发者能访问特定的定制,并通过监控相关指标来评估所部署定制的效果。
此外,Amazon Q Developer通过提供使用Amazon KMS中客户管理的密钥加密您的定制数据的选项,帮助确保您代码的安全。这些定制数据将在定制任务完成后被删除。
本文将通过简单的案例操作展示Amazon Q Customization的具体使用方式以及能力。
前提要求
为完成本文的动手实践操作,您需要满足以下要求。
1.配置Amazon Q Developer专业版,具体步骤可参考《Amazon Q进阶指南|技巧一:入门配置》。
2.按照以下要求准备您的数据。本文采用的数据来自于github aws sample code的aws-spring-boot-optimization存储库。
您的数据源必须包含至少2MB、最多20GB的源代码文件,且必须来自支持的编程语言,数据源中任何超过10MB的文件都将被忽略。
数据源中的文件数量没有限制,但您必须至少包括每种语言10个文件,以支持您的定制需求。
文件名和各个目录名不得超过255个字符(累积起来可以超过255个字符),超出限制将导致定制创建失败。
在Amazon S3数据源中,所有源代码必须放置在某个目录内,不能放在根目录。根级别的任何文件都将被忽略。
aws-spring-boot-optimization存储库:
https://github.com/aws-samples/aws-spring-boot-optimization
整理代码库
为了优化Amazon Q Developer的性能,建议尽量提高您代码库的代码质量。根据最佳实践,推荐采用以下几种方法:
使用描述性强的函数名。
编写简洁明了且能准确传达关键信息的代码注释。
添加使用示例。
包含README文件等。
通过这些方式提升代码质量,可以让Amazon Q Developer生成定制代码的表现更上一层楼。
Amazon Q Developer的定制功能接受不同的数据源,其中包括Github、GitLab、Bitbucket以及Amazon S3。如果您的数据源位于Github、GitLab或Bitbucket中,那么您可以参考《连接数据源》教程,通过Amazon CodeConnections连接,本文将使用Amazon S3作为数据源。
创建Amazon S3存储桶,将准备就绪的数据存入Amazon S3存储桶中。需要注意的是,在Amazon S3数据源中,所有源代码必须放置在一个路径中,而不能放在根级别,根级别的任何文件都将被忽略。如下图所示,所有代码文件都被放置customerService路径下。
《连接数据源》教程:
https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/customizations-admin-customize.html#customizations-admin-connect
配置定制功能
开始前请确保您已经配置并订阅了Amazon Q Developer专业版(Pro License)。
接着,在您的亚马逊云科技控制台中搜索“Amazon Q Developer”,点击选择“Amazon Q Developer(Including Amazon CodeWhisperer)”。
在右侧导航栏中单击“Customization”,点击“Create Customization”来创建新的定制任务。
然后根据您的场景和需求输入Customization name以及Description,本例为customerService。
在Connection to source provider部分,选择“Amazon S3”作为数据提供来源,并输入Amazon S3存储桶或Amazon S3文件夹的URI。
您可以通过开启日志来了解并定位Amazon Q Developer Customization的问题,日志根据您的选择,将被发送至Amazon CloudWatch Logs、Amazon S3存储桶,或Amazon Data Firehose。
本文选择使用Amazon CloudWatch作为日志文件的存储地点。有关日志文件中的Error Message,更多信息请参阅《理解与定制相关的日志消息》。
《理解与定制相关的日志消息》
https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/customizations-log-use-understand.html#customizations-optimize-reading-logs
所有选项都填写完毕后,点击右下角的“Create Customization”,Amazon Q Developer将会开始创建您的定制功能。根据您提供的数据量大小,可能会需要几个小时的时间完成创建,您可以通过查看Status是否为“Created”来判断创建成功与否。
如果失败,您可以通过Error detail查看创建失败的原因,并在修改后,通过点击右上角“Actions”,选择“update”来重新开始创建。
可能会导致创建失败的原因有以下4种,您可以根据情况进行修改。
您可能会遇到以下错误:Total size of the provided repositories exceeds the maximum allowed size of number for a customization(提供的存储库总大小超过了定制允许的最大限制)。在这种情况下,请从您的数据源中移除一个存储库后重试。
您可能会收到错误:Insufficient data to create a customization. Add more files from supported languages and retry(数据不足,无法创建定制内容,请添加更多支持的语言文件后重试)。为了使用特定语言编写的代码来创建定制,您的数据源中必须至少包含该语言的10个代码文件、至少需要包含2MB代码,建议接近20MB,最多不超过20GB的支持语言源代码文件。即使某些文件使用了相关语言,也可能不计入这2MB,例如重复文件和格式不支持的文件将不被计算。如果您收到此错误,添加更多包含您希望定制的编程语言的文件后重试。
您可能会收到错误:Encountered an issue when retrieving some of the selected repositories from CodeConnections. Check the customization’s log deliveries for details(在从CodeConnections检索部分选定存储库时遇到问题,请查看自定义的日志交付以获取详细信息)。如果您遇到此错误,请尝试使用您的连接可以访问的有效存储库再次创建或更新定制。
定制准备好后,需要手动点击“Activate”才可激活该定制功能,这个过程会需要一些时间。
同时您可以在页面上看到右侧部分有一个评估分数,它帮助衡量在根据代码库中的代码预测和提供代码建议时的准确性。它提供的分数分为三个等级:
非常好,分数在7到10之间;
一般,分数在4到7之间;
较差,分数在0到4之间。
可以看到本文中提供的代码库只得到了3分的评分,因为本文提供的代码只是些质量较差的实例代码。您可以通过使用描述性强的函数名、编写简洁明了且能准确传达关键信息的代码注释、添加使用示例、包含README文件以及加入更多数据等方式来提升分数。
Amazon Q Developer Customization也提供了版本控制的功能。在此页面中可以看到“Versions”选项,您可通过点击右上角的“Actions”,选择“Create new version”来创建新的版本,也可以点击“Deactivate”撤销激活版本。
激活定制功能之后,可以看到版本的Status被更新为“Activated”。
在正式开始使用之前,可以通过选择“Add users and groups”来授予选定的团队成员使用定制功能,该功能可以帮助企业用户更好地管理访问权限并保护您的数据安全。
点击Add Users,并选择一个订阅过Amazon Q Develop专业版的用户,给予该用户使用定制功能的权限。
您也可以换到Groups部分来添加一个用户组。
在IDE中使用定制功能
打开您熟悉的IDE,本文将使用VScode作为演示。在IDE中使用创建好的User来登录Amazon Q之后,正常情况下,Amazon Q的面板可以用快捷键来打开和关闭,对于苹果电脑,按下Shift+Command+P快捷键,对于Windows电脑,按下Shift+Ctrl+P快捷键。
找到并点击“Amazon Q:Select Customization”。
选择刚刚创建好的customerService这一Customization。
通过Amazon Q Developer Inline chat的功能来生成复合代码库风格的代码,从私有代码库中生成特定的代码推荐。如下图所示,输入以下注释,即对Amazon Q的指令,图中的代码都由Amazon Q Developer生成。
use the customerService class and write a method to load customer info and delete specific customer by ids
将Amazon Q Developer生成的代码与内部库代码进行对比,如下图所示,可见Amazon Q Developer生成的代码正确运用了内部库中已经存在的customer repository以及相关函数,包括findAll和deleteById。
在Chat中的定制问答功能
除了Inline的代码生成功能以外,Amazon Q Developer定制功能同样支持在IDE与Amazon Q的对话框中询问与内部代码库相关的问题。如下图所示,询问Amazon Q内部代码库中customerService包的信息,可以看到Amazon Q可以给出准确并详细的总结。这个功能可以加速开发者学习理解内部代码的过程,提升工作效率。
监控Amazon Q定制功能的效果
在Dashboard页面上,提供了各种关键性能指标,包括每天的活跃用户数量、生成的代码行数以及执行的安全扫描次数等。通过这些数据,您不仅可以更全面地评估Amazon Q Developer的整体表现,还能直观地观察到它在提高工作效率方面的具体成效。
除了Dashboard外,您还可以在Amazon CloudWatch中访问更多的可视化指标,其中包括代码块接受率(Block Accept Rate)和代码行接受率(Line Accept Rate)等。这些高级指标进一步帮助监控和优化Amazon Q Developer的使用情况,确保能够最大化地利用这些工具来提升开发过程的效率和安全性。通过这种方式,可以根据实时数据作出判断,优化代码和输出质量。
目前支持的编程语言
目前Amazon Q Developer Customization功能支持如下编程语言:
Java(.java)
JavaScript(.js, .jsx)
Markdown(.md, .mdx)
Python(.py)
reStructuredText(.rst)
Text(.txt)
TypeScript(.ts, .tsx)
其他语言即使被包含在代码库中也不会被Amazon Q Developer使用。
总结
Amazon Q Developer Customization通过其强大的定制功能和灵活的数据源支持,为企业和开发者提供了强有力的支持,从而使得代码开发过程更加高效、安全且符合个性化需求。通过实际案例演示,可以看到无论是在代码生成、代码质量提升还是团队协作方面,Amazon Q Developer都能显著提升开发者的工作效率和代码质量。
随着技术的进步和市场需求的变化,Amazon Q Developer将继续更新和扩展其功能,以满足更广泛的编程语言和更复杂的开发场景,期待见证Amazon Q Developer如何继续推动创新。
本篇作者
王佩佳
亚马逊云科技解决方案架构师,负责亚马逊云科技云计算方案咨询和设计。同时致力于生成式AI应用方面的研究和推广,并通过可实施的解决方案,帮助客户取得业务价值。
Kelvin Guo
亚马逊云科技资深解决方案架构师。主要技术方向为MLOps、DevOps、容器、数据分析。拥有20多年软件开发、项目管理、敏捷思想落地、工程效能咨询和落地经验。
诚邀您参与「云上探索实验室」,扫描下方二维码,立即体验Amazon Q Developer,开启您的极简开发之旅!
星标不迷路,开发更极速!
关注后记得星标「亚马逊云开发者」
听说,点完下面4个按钮
就不会碰到bug了!
点击阅读原文查看博客!获得更详细内容!