搭建智能桥梁,Amazon CodeWhisperer 助您轻松编程

机器学习
Amazon CodeWhisperer
云上探索实验室
生成式人工智能
0
0
作者:小虚竹 ### **零:前言** 今年的 ChatGPT 热潮之后,AI 大模型的应用日益广泛,虽然 AI 编码暂时不能完全替代[程序员](https://so.csdn.net/so/search?q=%E7%A8%8B%E5%BA%8F%E5%91%98\\&spm=1001.2101.3001.7020),但随着时代的变迁和趋势的发展,我们不必过于焦虑。我们应该积极适应变化,顺应趋势,勇敢尝试用AI来辅助编码工作。 <!--StartFragment--> 今天让虚竹哥带大家了解下 Amazon [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)。 <!--EndFragment--> <!--StartFragment--> ### **一**、**Amazon [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)** <!--EndFragment--> ![c96122dedf0c4a9aa6bde2e41d3763b6.png](https://dev-media.amazoncloud.cn/95d6413573034b93af105f4f21719b81_c96122dedf0c4a9aa6bde2e41d3763b6.png "c96122dedf0c4a9aa6bde2e41d3763b6.png") 从官方的介绍中,可以感受到 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 是一款强大的AI编程助手,可以在你的 IDE 环境中即刻生成针对单行或全函数的代码建议,提升你的编程效率。借助于 [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail),可以写一段注释的话,然后 [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 会直接在[开发环境](https://so.csdn.net/so/search?q=%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83&spm=1001.2101.3001.7020)中推荐一个或多个最适合实现任务的代码片段,你可以选择使用当前代码片段或者上下选择其他代码片段。 <!--StartFragment--> 我对 Amazon [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 进行了一次全盘体验,感受到了以下几个主要功能和特点: <!--EndFragment--> 1、代码生成:根据注释和现有的代码生成出来的代码建议,适应性很好,有些代码非常优质,leetcode 打败100%的 JAVA 用户。 2、多语言和 IDE 支持:这个就很牛逼,把大部分开发全覆盖了。 3、安全扫描:扫描代码以检测难以发现的漏洞,并给出修复建议。这个可以避免团队未来损失大量的金钱和精力。 下面带大家实战体验一波~ <!--StartFragment--> ### 二、实战体验 <!--EndFragment--> 在 IDEA 上安装 Amazon [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 的插件(虚竹哥用的是 IDEA2022.1.4 版本) 按照以下步骤在 IDEA 中安装 Amazon Toolkit 插件: 1、打开 IDEA,点击右上角的 "File" 菜单,然后选择 "Settings"。 2、在设置窗口左侧的菜单栏中,点击 "Plugins"。 3、在 Plugins 页面右上角,输入 "Amazon Toolkit",并从搜索结果中选择相应的插件。 4、点击 "Install" 按钮开始安装插件。 5、安装完成后,点击 "OK" 按钮。 ![1.png](https://dev-media.amazoncloud.cn/d672b5a7d5a24f8f99ec90f165b78dfa_1.png "1.png") <!--StartFragment--> 注意,安装完成后,要重启 IDEA,才会生效。点击如图的 Restart IDE,等待重启。 <!--EndFragment--> ![2.png](https://dev-media.amazoncloud.cn/f9bc3d2e782249edba83b765fbbf1cb6_2.png "2.png") 依次点击 "View" -> "Tool Windows" -> "Amazon Toolkit"。这将打开 Amazon Toolkit 视图。 在 Amazon Toolkit 视图上,您将看到一个名为 "Developer Tools" 的标签页。点击这个标签页。 在 "Developer Tools" 页面上,您将看到一个名为 "[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)" 的选项。点击这个选项。 在 [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 页面上,您将看到一个名为 "Start" 的按钮。点击这个按钮 ![3.png](https://dev-media.amazoncloud.cn/c3c71108d7e04080918b84113ae80f0a_3.png "3.png") <!--StartFragment--> 选择 “Use a personal email to sign up and sign in with Amazon Builder ID” 然后点击 “connect” <!--EndFragment--> ![4.png](https://dev-media.amazoncloud.cn/ab010a6f98974af0bcfd933d07c7eaea_4.png "4.png") <!--StartFragment--> **在弹窗中,记得要点击复制图标,这是复制 code,后面有用到。** <!--EndFragment--> <!--StartFragment--> 然后选择 “Open and Copy Code” <!--EndFragment--> ![5.png](https://dev-media.amazoncloud.cn/4cc2fd4686974bdf9accd38026c6f39b_5.png "5.png") <!--StartFragment--> 会看到一个浏览器页面弹出。请将复制的 code 粘贴到输入框中,并点击提交按钮。 <!--EndFragment--> ![6.png](https://dev-media.amazoncloud.cn/047e44678bab4f4289c2931b3cc90999_6.png "6.png") <!--StartFragment--> 如图输⼊你的邮箱地址,点击"下一步" <!--EndFragment--> ![7.png](https://dev-media.amazoncloud.cn/a1a7ee18b3024086902e0dddd316bfe9_7.png "7.png") <!--StartFragment--> 在页面上输入您的姓名信息,并点击 "Next" 按钮,在此之后,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 将会向您的邮箱发送一个验证码。 <!--EndFragment--> <!--StartFragment--> 请前往您的邮箱,并查找 [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 发送的邮件。在该邮件中,您将会看到一个包含验证码的消息。请复制该验证码并返回到页面上,以便完成下一步操作。 <!--EndFragment--> <!--StartFragment--> 接下来,您需要设置密码。为了确保安全性,密码需要符合一定的格式和强度要求。请按照页面上的提示,并创建一个高强度的密码。在设置完成后,请再次输入该密码以进行确认。 <!--EndFragment--> ![9.png](https://dev-media.amazoncloud.cn/c1b78e01752248ec973e0ebf5183131f_9.png "9.png") <!--StartFragment--> 当看到类似下图的界面时,就表示创建成功了。 <!--EndFragment--> ![10.png](https://dev-media.amazoncloud.cn/c0cac1c6a7da48c58ea4626bd336e529_10.png "10.png") <!--StartFragment--> #### **实战1:** <!--EndFragment--> <!--StartFragment--> [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 提供了一项补全注释的功能 <!--EndFragment--> <!--StartFragment--> 可以根据上下文自动为代码生成注释,看效果还不错。这一功能对于不喜欢编写注释的开发者来说是非常有用的,可以轻松地为自己的代码添加有意义的描述,而无需费时费力地手动编写注释。 <!--EndFragment--> ![11.png](https://dev-media.amazoncloud.cn/c5851ace3007417aa9ae6f12750129db_11.png "11.png") <!--StartFragment--> #### **实战2:** <!--EndFragment--> <!--StartFragment--> [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 提供了一项自动生成代码的功能 <!--EndFragment--> <!--StartFragment--> 写了一个注释,想写个冒泡排序。自动帮我生成代码了。这个功能非常方便,特别是在你知道要实现什么功能但不确定具体的实现方式时 <!--EndFragment--> <!--StartFragment--> 下面给大家演示一下: <!--EndFragment--> <!--StartFragment--> 注释写完之后,会自动生成代码建议片段,可以选择插入代码:insert code  <!--EndFragment--> <!--StartFragment--> 或者上下选择其他代码片段 <!--EndFragment--> ![12.png](https://dev-media.amazoncloud.cn/4cdd3284606d40939341eadf1c1ce410_12.png "12.png") <!--StartFragment--> 选择 insert code  <!--EndFragment--> ![14.png](https://dev-media.amazoncloud.cn/09f9d483673f41c58731c937c72b4b98_14.png "14.png") <!--StartFragment--> [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 在方法体内提供了自动换行的功能。当你在方法体内按下回车键时,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 会自动生成后续的代码片段,以便你能够更加高效地编写代码,这里的上下文处理得很不错。 <!--EndFragment--> ![15.png](https://dev-media.amazoncloud.cn/c00e3846f84f4672a445cd4f0e49abcc_15.png "15.png") <!--StartFragment--> [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 自动生成的代码,不仅带有可读性高的注释,而且还遵循了标准化代码风格,对于代码强迫症的我来说,爱了。 <!--EndFragment--> <!--StartFragment--> 代码更容易理解和维护,同时也提高了代码的可读性和可维护性,不错不错。 <!--EndFragment--> ![16.png](https://dev-media.amazoncloud.cn/55ed13d3207c442c84fe2e3753b1fe60_16.png "16.png") <!--StartFragment--> 下面是完整的代码: ``` package com.xiaoxuzhu.csdn; public class TestCodeWhisperer { /** * 写个冒泡排序 */ public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } } ``` <!--StartFragment--> 运行结果: <!--EndFragment--> ![17.png](https://dev-media.amazoncloud.cn/0b709857a0e345cf88631eab8b3e329d_17.png "17.png") <!--StartFragment--> #### **实战3:** <!--EndFragment--> <!--StartFragment--> 实战2只是一个简单的排序算法,要求也不高。现在来升级下实验。输入一段话,大致内容要求是:需要求解每次划动窗口的最大值。 <!--EndFragment--> <!--StartFragment--> 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 <!--EndFragment--> <!--StartFragment-->  要求返回 滑动窗口中的最大值 。 <!--EndFragment--> ![18.png](https://dev-media.amazoncloud.cn/473401716b5f408f845caa955ebeea26_18.png "18.png") <!--StartFragment--> 选择 insert code ,在 main 方法里调用了一个方法,这个方法暂时不存在,IDE 报红色了。 <!--EndFragment--> <!--StartFragment--> 回车,触发 [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 提供了自动换行的功能。 <!--EndFragment--> ![19.png](https://dev-media.amazoncloud.cn/3ff69a46ad9b4d4dbb27187bc79f7fdc_19.png "19.png") <!--StartFragment--> 选择 insert code  <!--EndFragment--> <!--StartFragment--> 这里的上下文处理很优秀,生成了上面需要的方法。 <!--EndFragment--> ![20.png](https://dev-media.amazoncloud.cn/a2d91b4a53164b7a9a53253a92aabdf3_20.png "20.png") <!--StartFragment--> 最后生成完整的代码。 ``` package com.xiaoxuzhu.csdn; public class TestCodeWhisperer2 { /** * 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 * <p> * 返回 滑动窗口中的最大值 。 */ public static void main(String[] args) { int[] nums = {1, 3, -1, -3, 5, 3, 6, 7}; int k = 3; int[] res = maxSlidingWindow(nums, k); for (int i : res) { System.out.println(i); } } public static int[] maxSlidingWindow(int[] nums, int k) { int[] res = new int[nums.length - k + 1]; int index = 0; for (int i = 0; i < nums.length - k + 1; i++) { int max = Integer.MIN_VALUE; for (int j = i; j < i + k; j++) { max = Math.max(max, nums[j]); } res[index++] = max; } return res; } } ``` <!--StartFragment--> 生成的代码简洁,而且执行的结果是正确的 <!--EndFragment--> ![21.png](https://dev-media.amazoncloud.cn/b3d1f85705964948873dcf485f13d3ff_21.png "21.png") <!--StartFragment--> 实验的过程很丝滑,而且ai的理解能力还是很强的,能正确地理解虚竹哥的意思并生成对应的代码。 <!--EndFragment--> <!--StartFragment--> #### **实战4:** <!--EndFragment--> <!--StartFragment--> 求解每次划动窗口的最大值还不够难,再从 leetcode 中选一个难度级别比较高的算法题目,看 ai 能不能理解,并进行正确解答。 <!--EndFragment--> <!--StartFragment--> 选一个动态规划里,困难级别的: <!--EndFragment--> ![22.png](https://dev-media.amazoncloud.cn/8fa8de95b58843d48b217bcfdfd386db_22.png "22.png") <!--StartFragment--> 题目是: <!--EndFragment--> <!--StartFragment--> 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 <!--EndFragment--> <!--StartFragment--> 开始人工智能写代码 <!--EndFragment--> ![23.png](https://dev-media.amazoncloud.cn/fb5fa48747b1445898cededc54ce17ad_23.png "23.png") <!--StartFragment--> 按提示内容,不断插入代码 insert code  <!--EndFragment--> ![24.png](https://dev-media.amazoncloud.cn/5cf44922c7254b70b618d5b726576794_24.png "24.png") ![25.png](https://dev-media.amazoncloud.cn/dec01b63b2ee47f491100b90495e0737_25.png "25.png") <!--StartFragment--> 最终生成代码: <!--EndFragment--> <!--StartFragment--> 跑一下结果,为2,是对的。 <!--EndFragment--> ![26.png](https://dev-media.amazoncloud.cn/ec16774013ca49dfbbfc303325be1cca_26.png "26.png") <!--StartFragment--> 这样就够了吗?不!虽然我们已经成功生成了代码,但是我们不能就此满足。为了保证代码质量,我们可以使用LeetCode进行测试。 <!--EndFragment--> <!--StartFragment--> 复制代码到 leetcode 里,然后先运行下 <!--EndFragment--> ![27.png](https://dev-media.amazoncloud.cn/7922b57b9b84476da13f10a070519cde_27.png "27.png") <!--StartFragment--> **过啦~** <!--EndFragment--> ![28.png](https://dev-media.amazoncloud.cn/9103f99a625a4be99f56613eb8cd0d20_28.png "28.png") <!--StartFragment--> 提交,我们看下提交记录: <!--EndFragment--> ![29.png](https://dev-media.amazoncloud.cn/0ce6a722c6ae4d8cbef3dd718b8eed4c_29.png "29.png") <!--StartFragment--> 击败100%~  <!--EndFragment--> <!--StartFragment--> 此时此刻,有个 BGM 响起:无敌是多么,多么寂寞~ <!--EndFragment--> <!--StartFragment--> #### **实战5:** <!--EndFragment--> <!--StartFragment--> 前面的四个小实战只是为了试探我们 [**Amazon CodeWhisperer**](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 的能力,现在是时候挑战更高难度的任务了——编写一个猜数字的小游戏,看看是否能够在更复杂的上下文中理解并完成它。 <!--EndFragment--> <!--StartFragment--> 下面是游戏规则: <!--EndFragment--> <!--StartFragment--> 我们要编写一个猜数字的游戏。在这个游戏中,计算机会生成一个1到188之间的随机数,并等待用户在控制台输入数字进行猜测。如果用户猜大了,程序会提示用户数字太大了;反之,如果用户猜小了,程序会提示用户数字太小了。 <!--EndFragment--> <!--StartFragment--> 提示词:随机生成一个1~188以内的数字 <!--EndFragment--> ![30.png](https://dev-media.amazoncloud.cn/11794a5b254643be8f01573e03c13a06_30.png "30.png") <!--StartFragment--> 提示词:写个标记,默认 false <!--EndFragment--> ![31.png](https://dev-media.amazoncloud.cn/da984d4c150d48e1ac5004738397c69b_31.png "31.png") <!--StartFragment--> 提示词:创建一个 Scanner 对象 <!--EndFragment--> ![32.png](https://dev-media.amazoncloud.cn/464c569c02df481f89fbb8c99d32568a_32.png "32.png") 提示词:在循环中,循环条件是 flag 为 true 终止循环,先提示用户进行猜数字,用户输入数字,判断 guessNumber 的值与 number 是否一样,如果一样,就设置 flag 为 true 跳出循环; 判断 guessNumber 的值与 number 是否一样 ,如果大了提示大了,小了提示小了。 ![33.png](https://dev-media.amazoncloud.cn/d1572e00ec354a68aeb41c56eff330e0_33.png "33.png") <!--StartFragment--> 提示词:最后生成提示:恭喜了,猜对了 <!--EndFragment--> ![34.png](https://dev-media.amazoncloud.cn/2eb173de651f46fdbfccc0d800f11f14_34.png "34.png") <!--StartFragment--> 生成的完整代码,跑起来试试: <!--EndFragment--> ![35.png](https://dev-media.amazoncloud.cn/ee0101f168964ce088aa0baa4d926ba0_35.png "35.png") <!--StartFragment--> #### **注意事项** <!--EndFragment--> <!--StartFragment--> [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 的 “Amazon Toolkit” 插件对 idea 的版本支持有限制,我从2019版本开始尝试,有不兼容问题,后面查找了资料,是从2022.1版本及以上才支持的。 <!--EndFragment--> <!--StartFragment--> ### **三、总结** <!--EndFragment--> <!--StartFragment--> 随着时间的推移,人工智能技术迅猛发展。智能编程助手如 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 大大提高了开发效率和代码质量。[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 是强大的智能编程助手,可帮助开发者更快、更安全地构建应用程序。 <!--EndFragment--> [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 解决了开发中的常见痛点。它可以快速生成准确的代码建议,节省时间。对于不熟悉的编程语言,它提供准确的代码建议,避免语法错误和问题。此外,CodeWhisperer 帮助开发者及早发现和修复安全漏洞,提高软件安全性和稳定性。它还消除打字错误和典型错误,提高代码准确性。 <!--StartFragment--> [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 具有许多优势。它提高了工作效率和生产力,可以自信地进行编码并提供相关开源项目信息。它支持多种编程语言和流行的 IDE,提供高效便捷的开发体验。开发者可以随时使用或关闭它,并免费使用,降低了成本。 <!--EndFragment--> <!--StartFragment--> [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 适用于多种场景,可以快速生成样板代码,帮助在不熟悉的编程语言中进行编码,检测安全漏洞,消除打字和典型错误,并减少重复编码的工作。它还适用于其他常规任务和使用不熟悉的API的场景。 <!--EndFragment--> 在实际体验中,安装和使用 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 的插件非常简单,能够与流行的 IDE 无缝集成。虚竹哥在使用 IDEA 安装了 Amazon Toolkit 插件,并成功使用了 [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 生成了一些代码。实验的过程由简单注释生成到复杂的算法解答,最后实验写一个小游戏,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 准确地理解了虚竹哥的意图并生成了相应的代码。 <!--StartFragment--> 此次的体验很愉快,也有收获。可以投入开发生产中,减少开发量,让我有更多时间投入更有价值的工作上。 <!--EndFragment--> <!--StartFragment--> 大家也可以去体验体验,也欢迎找虚竹哥沟通分享心得。 <!--EndFragment--> <!--StartFragment--> 现在还有个活动,大家可以去参加:[https://dev.amazoncloud.cn/experience/codewhisperer-2?sc_medium=corecontent\\&sc_campaign=product\\&sc_channel=CSDN](https://dev.amazoncloud.cn/experience/codewhisperer-2?sc_medium=corecontent\\&sc_campaign=product\\&sc_channel=CSDN "https://dev.amazoncloud.cn/experience/codewhisperer-2?sc_medium=corecontent\\&sc_campaign=product\\&sc_channel=CSDN") <!--EndFragment--> <!--StartFragment--> 我是虚竹哥,我们明天见~ <!--EndFragment-->
0
目录
关闭