文章作者:java 李杨勇
### 前言
本篇文章致力于让更多的程序员们在生产实践中能节约更多的宝贵时间,更快、更安全地构建应用程序而发布。[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 它提供了智能提示、代码自动补全和错误检测等功能,以支持开发人员的编码工作。在这里勇哥我特意的推荐给大家,让大家使着舒心,用的开心,并且当前还在活动期间,只要完成一些实践的上手操作,不仅仅能让大家掌握一个很好的插件编码开发助手,还能用积分兑换一些礼品。\
那么接下来我会完整的进行[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 各种提示功能的测试,帮助大家更好的了解以及使用这款插件。
![1d231a7613614facb49dd52590dc5f86-1.png](https://dev-media.amazoncloud.cn/4e0f455e13b1480fa5e19c0b05e8d3ed_1d231a7613614facb49dd52590dc5f86-1.png "1d231a7613614facb49dd52590dc5f86-1.png")
### Amazon CodeWhisperer 概述
> [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 作为智能编程助手,经过数十亿行代码的训练,可以根据注释和现有代码实时生成从代码片段到全函数的代码建议。此外,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 可以标记或筛选类似开源训练数据的代码建议,获取相关开源项目的存储库 URL 和许可证,开发者可以轻松地查看它们并添加归因。更重要的是,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 可以扫描代码来检测难以发现的漏洞,获取代码建议来立即修复这些漏洞。最贴心的是,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 支持 Python、Java 和 JavaScript 等15 种编程语言,还有支持 VS Code、IntelliJ IDEA、Amazon Cloud9、Amazon Lambda 控制台、JupyterLab 和 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Studio 等集成式开发环境。\
> 这个是官方给予的说法,我个人进行了一个大致的全盘测试,用我的话术来总结的话就是:\
> 1.[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 可以通过分析给定的代码和上下文信息,提供有关代码结构、函数和变量的建议。它可以帮助开发人员在编写代码时更快地找到错误并提供可能的解决方案。\
> 2.只要给予正确的提示内容,本产品可以加快至少一倍的开发速率。很多算法也能直接出提示,免去了各种二次编码的繁杂操作,**省心、省力、省时**,是一款非常 Nice 的【AI 编程助手】。
### 插件安装
这里我们选择使用【Visual Studio Code】来完成这次示例,编码语言我们会进行多种尝试,但是主要是 Java、Python 等常用的语言,毕竟是为了更好的服务于大家嘛~为大家做出有价值的贡献。
#### 整体安装步骤体验感
1.操作步骤相对简略,主要就是安装插件、选择功能、登录账号、激活使用。并且全程英文提示也比较贴心,没有什么很陌生的词汇,都能靠基本常识分析出来,对新程序员非常的友好,对老程序员来说就是更容易上手。
2.各类操作的按钮大小颜色也都比较突出,部分操作做了高亮处理,非常的人性化,很舒服,我个人喜欢哪个蓝色的大大的登录按钮,一眼就看到了,非常的直接、干脆。
#### 插件搜索
我们打开【Visual Studio Code】后,选择【扩展】功能(左侧列表的第五个功能),搜索【CodeWhisperer】,由于这个搜索是异步操作的,直接会显示【Amazon Toolkit】的这个插件,我们直接点击【安装】按钮。
![f0c2162b071c41b3bf74202d0dbedc9c-2.png](https://dev-media.amazoncloud.cn/a709de44028e4c2f8b4689d2acfcdc4c_f0c2162b071c41b3bf74202d0dbedc9c-2.png "f0c2162b071c41b3bf74202d0dbedc9c-2.png")
我们可以在左侧列表的最后一个功能上看到新安装上的【亚马逊云科技】功能插件,右侧可以看到对应的时间版本。
![119029fd696743cd939ffb8a2fdc7cb2-3.png](https://dev-media.amazoncloud.cn/9dca1fcb8239467591b20af305f0b373_119029fd696743cd939ffb8a2fdc7cb2-3.png "119029fd696743cd939ffb8a2fdc7cb2-3.png")
#### 登录 Amazon CodeWhisperer
这里我们点击进入【亚马逊云科技】功能,看好了,需要在【CodeWhisperer】处点击【Start】,点击完毕后右侧菜单中的第二个带锁的【CodeWhisperer: AI-powered code suggestions】就会被展开,需要我们进行登录操作,没有账号的直接注册就可以,很方便的。
![47692970160244a195f7d3babaca86ff-4.png](https://dev-media.amazoncloud.cn/70281ed5a37d41238042766b5911a685_47692970160244a195f7d3babaca86ff-4.png "47692970160244a195f7d3babaca86ff-4.png")
点击【Proceed To Browser】,是继续的意思。
![845b14bae78240eca33e727ec9b9b19e-5.png](https://dev-media.amazoncloud.cn/d0fbf8a7c46149229161ca0334568a4b_845b14bae78240eca33e727ec9b9b19e-5.png "845b14bae78240eca33e727ec9b9b19e-5.png")
打开外部网站,需要登录。
![63fd40befe7946cca35524a1cf187149-6.png](https://dev-media.amazoncloud.cn/60f04cb3df6f4a888701ae4ad2e0c146_63fd40befe7946cca35524a1cf187149-6.png "63fd40befe7946cca35524a1cf187149-6.png")
点击【Confirm and continue】即可,这里是授权操作。
![de33371fdc1e4acbad927aef1bbf929d-7.png](https://dev-media.amazoncloud.cn/94468f16baff49cc9422843b8daee146_de33371fdc1e4acbad927aef1bbf929d-7.png "de33371fdc1e4acbad927aef1bbf929d-7.png")
选择【注册】与【登录】。
![f9eacaf7fc0e431081b3ea5c370503b1-8.png](https://dev-media.amazoncloud.cn/6877f5c02a664283850483eca4bac7f9_f9eacaf7fc0e431081b3ea5c370503b1-8.png "f9eacaf7fc0e431081b3ea5c370503b1-8.png")
是否允许,翻译成【允许 Amazon VSCode 工具包访问您的数据吗?】这里我们需要点击【Allow】代表允许。
![3db463a4838b40d1a711f875f172fe89-9.png](https://dev-media.amazoncloud.cn/9dea6e670e6b4d8cb3d3b97a9b5fa765_3db463a4838b40d1a711f875f172fe89-9.png "3db463a4838b40d1a711f875f172fe89-9.png")
很人性的让我们稍等一会,很快的,不用切换页面。
![0c24e469b5d741f5b0628a8acfc6938e-10.png](https://dev-media.amazoncloud.cn/161745cecb964649adf8824b54e5580f_0c24e469b5d741f5b0628a8acfc6938e-10.png "0c24e469b5d741f5b0628a8acfc6938e-10.png")
也就几秒钟过后就能看到告诉咱们可以在 VSCode 中使用【Amazon Toolkit】了。
![dcf66b79907f4990b673b8ba33fdc7dd-11.png](https://dev-media.amazoncloud.cn/2cb23b1091cf477d974fc2dce73edeaa_dcf66b79907f4990b673b8ba33fdc7dd-11.png "dcf66b79907f4990b673b8ba33fdc7dd-11.png")
查看【Amazon Toolkit】在【Visual Studio Code】中的状态,这里已经不是【Start了】。
![0b00ca5aa30b4930a5606f2f721412d3-12.png](https://dev-media.amazoncloud.cn/e8982f9db80243679259de863df4fd1a_0b00ca5aa30b4930a5606f2f721412d3-12.png "0b00ca5aa30b4930a5606f2f721412d3-12.png")
如果是第一次登录成功,会有一个提示。
![4315c9785ce0427b904caf8dda9a82bc-13.png](https://dev-media.amazoncloud.cn/0769f4c791714c0ca7df34b65fbdfbe1_4315c9785ce0427b904caf8dda9a82bc-13.png "4315c9785ce0427b904caf8dda9a82bc-13.png")
登录后会自动前置我们已经解锁的功能,接下来我们具体的使用【人工智能代码建议】进行测试。
![b8f5f33d197243d9bbae0404ba5fdac0.png](https://dev-media.amazoncloud.cn/e01e7ba31561413f94dc6e32dec8651c_b8f5f33d197243d9bbae0404ba5fdac0.png "b8f5f33d197243d9bbae0404ba5fdac0.png")
### 人工智能代码建议——Python 自动补全测试
这里我查阅了【[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) Workshop】,下面是总结的内容。
在编写应用程序开发代码时,开发人员必须掌握来自亚马逊云科技、Stripe 和 Twilio 等提供 商的多个编程语言、框架、软件库和热门云服务。虽然开发人员可以利用 Stack Overflow 和 GitHub 等开发人员社区中提供的代码片段,但搜索这些片段,然后根据其特定任务自定义代 码是一个手动且耗时的流程。作为开发人员,您在完成这些任务的同时,必须确保您遵循正确 的编程语法和最佳编码实践。
[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 是面向开发人员的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)驱动的编码助手,凭借该服务,您可以克 服这些挑战。开发人员**可以使用通俗易懂的英语简单地编写注释**,以概述特定任务,比如“upload a file to S3”。根据该注释,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 会自动确定哪些云服务和公共库最适合该指定任 务,动态构建具体代码,并直接在 IDE 中建议生成的代码片段。此外,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 与您 的 Visual Studio Code 和 JetBrains IDE 无缝集成,使您能够保持专注,无需离开开发环境。 在写这篇文章时,[CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 支持 Python、Java、JavaScript、TypeScript、C#、Go、 Rust、PHP、Ruby、Kotlin、C、C++、Shell 脚本、SQL 和 Scala。
#### 触发快捷键说明
- 触发提示的快捷键是【ALT+C】,如果是MacOS系统的话就需要使用【Option + C】了。
- 通过按 Tab 键,接受代码建议。
- 通过按 Esc 键 或键入一个字符,放弃建议。
- 在接受或编写新代码后,再次点击 Enter 键,获取下一行建议代码。
- **将光标放在注释或代码行后面,点击 Enter 键,激活 CodeWhisperer。**
最后一个快捷操作我特别的加粗了一下,这个最开始没有发现,无意中发现的,是非常好用的哦,自己尝试的时候一定要试试。
#### 根据函数名称
我们先试用 Python 语言测试一下,可以看到我们创建了一个 py 文件,仅仅写了一个def,它默认给了后面的 add 函数提示,但是很明显这个 add 函数不是我们想要的内容,例如,我们想要一个判断三个值其中哪个是最大值的函数。
![fb755871ac974e57bcab9bfde9ed854d.png](https://dev-media.amazoncloud.cn/8cbbb7c17bcb48b9b81ddacec7599f32_fb755871ac974e57bcab9bfde9ed854d.png "fb755871ac974e57bcab9bfde9ed854d.png")
目标:自动生成判断三个值其中哪个是最大值的函数。
![ade00a21a3d1485b9684679955d36f8e.png](https://dev-media.amazoncloud.cn/c56290095d6f475e9ee8c87616abcb04_ade00a21a3d1485b9684679955d36f8e.png "ade00a21a3d1485b9684679955d36f8e.png")
完成效果可以参考上图,图片中我们能看到对应的代码提示内容,可以说是完整的表达了函数名称所要完成的内容,目标达成。
#### 根据注释内容
根据注释内容应该是更为精准的自动补全使用方法,毕竟注释的内容可以写很多,但是在【[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) Workshop】文档中我们可以看到【可以使用通俗易懂的英语简单地编写注释】字样,说明我们得用英文来书写提示内容,这个对于英语一般的初级程序人员来说还是比较吃力的,对于我们这帮老人来说很多的时候都是编写新的业务逻辑与算法,其实真正的帮助都是固定的一些算法。但是我们还没有尝试中文是否可行呢,具体的看测试结果
#### 英文注释
注释内容的目标是从大到小排列数组。
#have a array please Arrange from large to small
![a89d53b632b6446a872784e12c585f3d.png](https://dev-media.amazoncloud.cn/91d17e87d5a24df094cc202731903a19_a89d53b632b6446a872784e12c585f3d.png "a89d53b632b6446a872784e12c585f3d.png")
测试自动生成函数,可以在结果上看到测试的数据【从大到小排列】,给予的算法是【选择排序】
![9f01120e07ab4fe0b29c2c3d179a239b.png](https://dev-media.amazoncloud.cn/bbe0b10f3ce947dd865943d292f1eab9_9f01120e07ab4fe0b29c2c3d179a239b.png "9f01120e07ab4fe0b29c2c3d179a239b.png")
#### 中文注释
#用冒泡排序写一个数组从小到大的函数
![44a1f9388e0f446aa0aeb10d99782a5f.png](https://dev-media.amazoncloud.cn/1d87927905c84f3dbdbb4589d16583ec_44a1f9388e0f446aa0aeb10d99782a5f.png "44a1f9388e0f446aa0aeb10d99782a5f.png")
运行以下看效果:
![8e34503030f3401f905d73a963ffb3f5.png](https://dev-media.amazoncloud.cn/6f6733cafbae44ab86721bfe5889b00c_8e34503030f3401f905d73a963ffb3f5.png "8e34503030f3401f905d73a963ffb3f5.png")
说从小到大排列就是从小到大,没有问题的。
我们获取一个稍微复杂一个的测试:【# 人脸识别函数】,可以看到给予了cv2包的提示以及简单的函数处理,不过并没有对人脸进行识别,只是对图像做了一定的灰度以及压缩处理,有没有其它的提示呢?
![534058ffb3814137bd23f32047c25734.png](https://dev-media.amazoncloud.cn/7940904fdfd144308720a05917732312_534058ffb3814137bd23f32047c25734.png "534058ffb3814137bd23f32047c25734.png")
我先安装了 cv2,【pip install opencv-python】,这次在等待的过程中发现了提示代码的切换操作。
![2e6b4a1ee5834d219ded10440b35e9ab.png](https://dev-media.amazoncloud.cn/c9d4113cae6c404d98d78afcb54d2c9f_2e6b4a1ee5834d219ded10440b35e9ab.png "2e6b4a1ee5834d219ded10440b35e9ab.png")
#### 提示代码切换
触发条件,当我把鼠标放置在灰色代码区域的时候出现了一个提示,很明显是左右切换代码提示的。我实验了一下,挺好用。
发现过程,这里使用的注释是【# 写一个字符串全排列函数】,写了一个 def,后面给了函数名称,当通过 tab 获取函数名称后我的鼠标正好悬停在灰色代码上,故而发现的这个提示功能。
这个功能可以直接切换代码提示,但是快捷键是可以继续优化的,非常棒的功能,这里得点个赞。
![85607d41c2a1418ca5c05ceebb31da6e.png](https://dev-media.amazoncloud.cn/eb278ae38dd0408dba66de0b3cea248a_85607d41c2a1418ca5c05ceebb31da6e.png "85607d41c2a1418ca5c05ceebb31da6e.png")
测试结果:很明显,当字符串的长度为3时,结果是6个,说明正确。
![6bca4ebc17ed44dda006e70e1b8e1def.png](https://dev-media.amazoncloud.cn/1848ce0ae5b24d16b2c3ff685897fe63_6bca4ebc17ed44dda006e70e1b8e1def.png "6bca4ebc17ed44dda006e70e1b8e1def.png")
### Java 语言示例
我们来创建一个 Java 文件测试一下:
例如:我们在 main 函数内写一个值交换的示例。
![8e53b23ad65e4ac1802a554722603e8b.png](https://dev-media.amazoncloud.cn/f84af95b85c242259efb5e02f9d2915d_8e53b23ad65e4ac1802a554722603e8b.png "8e53b23ad65e4ac1802a554722603e8b.png")
写一个值交换的注释
![13ec498ef8aa456a9dec5ea96ef9bf6c.png](https://dev-media.amazoncloud.cn/c052ddd33ea74688b3bdc9ba408fffef_13ec498ef8aa456a9dec5ea96ef9bf6c.png "13ec498ef8aa456a9dec5ea96ef9bf6c.png")
使用异或来完成值交换
![a8214f65183e465886871b4b56dddb52.png](https://dev-media.amazoncloud.cn/8a11aad77e8641e1a2ccc61c84a15667_a8214f65183e465886871b4b56dddb52.png "a8214f65183e465886871b4b56dddb52.png")
稍微复杂的一些算法提示,这里我使用的是 Java 的方法注释,发现没问题,成功生成。
![52c280900616436093da747619c0d9ce.png](https://dev-media.amazoncloud.cn/878e467aa2e742b8b0ea9c5cf71b560a_52c280900616436093da747619c0d9ce.png "52c280900616436093da747619c0d9ce.png")
### JavaScript 语言示例
我这里没有使用注释的方法,使用的是函数名称来处理,发现 js 依然是可以行得通的。
![894229ad31b54b108611c2449fe3419d.png](https://dev-media.amazoncloud.cn/1615eb11b76f4a5db02846140a5f2299_894229ad31b54b108611c2449fe3419d.png "894229ad31b54b108611c2449fe3419d.png")
我们生成一个嵌套循环试试:
![aae5935ef84e4608950a0504c9939c4f.png](https://dev-media.amazoncloud.cn/1ac7ca3cb9354cc5b6287543a903a9df_aae5935ef84e4608950a0504c9939c4f.png "aae5935ef84e4608950a0504c9939c4f.png")
嵌套循环生成的没有问题,并且是根据我们所编写的注释而完成的代码,因为可以看到有最后的 document.wirte 输出字样,已经完成我们的目标内容。
**小应用测试**
我们用 Python 语言写一个小爬虫,爬取一篇小说测试一下完整性。
各种提示然后回车后基本都可以 tab 自动生成,如果不提示就【ALT+C】再次生成,更换代码的话需要将光标放在注释或代码行后面,点击 Enter 键,激活 [CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)。这几个操作多做几遍就熟悉了。
![557b69f5098b47ddad432937adae39d5.png](https://dev-media.amazoncloud.cn/20edf89a971d494db324283916fff426_557b69f5098b47ddad432937adae39d5.png "557b69f5098b47ddad432937adae39d5.png")
这里贡献上我的代码。这个是某个网站的单独下载方式,不通用哦。
```
Python
# 写一个爬取网络小说的代码
import requests
# 需要使用 parsel 做超文本格式处理
import parsel
import time
import random
import os
baseUrl = "某网址"
bookId = baseURL+"/book/1228049.html"
bookIdDir = bookId.replace("book/", "showchapter/")
# 生成 win10 的访问 UA
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}
listChild = []
listDate = []
mTitle = []
# 文章链接与标题独立列表
a_href_list = ["", ""]
# 存放文章链接与标题数组列表
a_href_arr = []
def GetUrl(url):
html = requests.get(url, headers=headers)
sel = parsel.Selector(html.text)
# 获取主 Title
mTitle.append(sel.css(".book-meta h1::text").getall()[0])
os.mkdir("./" + mTitle[0] + "/", mode=0o777)
print(mTitle)
# 获取文章 url 列表
href = sel.css(".volume-list ul a::attr(href)").getall()
# 获取标题
text = sel.css(".volume-list ul a::text").getall()
for item1, item2 in zip(href, text):
a_href_list = ["", ""]
a_href_list[0] = item1
a_href_list[1] = item2
a_href_arr.append(a_href_list)
def GetTxt(url, title):
html = requests.get(url, headers=headers)
sel = parsel.Selector(html.text)
# 文章
infoDate = []
info = sel.css(".content p::text").getall()
for item in info:
infoDate.append(item+"\\r\\n")
title = str(title).replace(" ", "_")
title = str.format("{0}/{1}.txt", mTitle[0], title)
with open(title, "w+", encoding="utf-8") as f:
f.write("".join(infoDate))
f.close()
print(title, "保存完毕")
GetUrl(bookIdDir)
for item in a_href_arr:
GetTxt(item[0], item[1])
time.sleep(random.uniform(0.5, 1.5))
```
### 总结
我们依次进行了 Python 语言、Java 语言以及 JavaScript 语言的测试,操作的步骤基本相同,但是给予的代码都是基本符合我们的需求内容,主要是咱们仅仅是一步安装,并没有根据不同的语言逐一修改,这就非常方便了,兼容性是非常的棒。
在英文注释的基础上我们进行了中文注释的提示测试,依然是可以正常完成代码提示的,说明当前的这个版本肯定是有了一定的优化,也方便了程序小白的使用,并且在操作过程中找到了【提示代码切换】的操作,这个操作就很美,如果能在快捷键使用上再优化一下就更完美了。
综上所述符合省心、省力、省时的说法,绝对是一款非常 Nice 的【AI 编程助手】。
当前还在活动中,只要完成一些实践的上手操作,不仅仅能让大家掌握一个很好的插件编码开发助手,还有很多好礼相赠,尽快去参加吧。\
[活动地址](https://dev.amazoncloud.cn/experience/codewhisperer-2)
<!--EndFragment-->