> 本系列文章,是广大开发者及媒体向我们投稿的 **[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)** 评测及心得,与您分享实战体验,向您呈现更实用的信息。敬请关注!
*作者:airmelt*
随着 AI 编程在程序员中流行,越来越多的开源项目和大型公司也在代码生成领域开始发力。**亚马逊云科技就推出了一款 AI 编程助手—— [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)**,并开放测试,开发者们可以在各种 IDE 上免费体验,享受 AI 带来的效率提升。
今天就和大家一起,从安装开始到代码补全,“沉浸式”体验一下 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)!
### **安装**
安装 CodeWhisperer 非常简单,只需要在插件市场搜索 Amazon Toolkit 即可。以 *VS Code* 为例:
![image.png](https://dev-media.amazoncloud.cn/08fac4f774854335a45ed2a6ddda26aa_image.png "image.png")
安装完成之后,侧边栏就会出现一个亚马逊云科技的图标,点击最下面的 DEVELOPER TOOLS 登陆,登陆完成之后点击 CodeWhisperer,选择“开始”就可以体验了。
![image.png](https://dev-media.amazoncloud.cn/530fdb61d8f440338e262bd137d4b7ea_image.png "image.png")
### **代码补全体验**
#### **获取当前时间**
首先我们尝试一个非常简单的例子:用 Python 获取当前时间:
```js
# get current time
import time
def get_current_time():
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
```
实际上输入第一行的注释,代码助手就会提示输入 import time ,然后我们可以输入函数的定义 def ,剩下的都可以自动补充完整:
![image.png](https://dev-media.amazoncloud.cn/3f7b30e711b3465ebb6cd1ff75257f6d_image.png "image.png")
#### **网页代码修改**
首先我们搭了一个简单的网页,网页上面有两个正方形,分别是橘色和红色的,里面还有一些文字,比如 *Test* 和 *Hello World*:
![image.png](https://dev-media.amazoncloud.cn/19248b1537144fd3994028e98f04c051_image.png "image.png")
```js
<html>
<head>
<title>Test</title>
<style>
.test {
width: 100px;
height: 100px;
background-color: orange;
}
.hello {
width: 50px;
height: 50px;
margin: 10px;
background-color: red;
}
</style>
</head>
<body>
<div class="test">Test</div>
<div class="hello">Hello World!</div>
</body>
</html>
```
现在,我们需要给 *Test* 这个正方形加上阴影,将*Hello World*! 这个较长的字符串省略并在后面加上省略号。尝试给出注释:
![image.png](https://dev-media.amazoncloud.cn/bd57004eb547438499b0010068bfa735_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/6e5933045fd046a693f0649d3bf6b836_image.png "image.png")
也顺利的生成了预期的格式:
![image.png](https://dev-media.amazoncloud.cn/2a7a780f2edd4f1586e23e1a3841a91a_image.png "image.png")
#### **算法应用**
首先我们尝试一下经典的快速排序算法,它很顺利地生成出来了:
![image.png](https://dev-media.amazoncloud.cn/ade1ed3635854130a77a42d516f0d2e9_image.png "image.png")
基本上是满足了快速排序算法的要求。
接着我们挑战个难一点的,在字符串中找到最长的回文子串。这个问题可以用中心扩展法在 O(n^2) 的时间复杂度完成,最优的算法是使用**马拉车算法(Manacher's Algorithm)**,其时间复杂度仅为 O(n) :
![image.png](https://dev-media.amazoncloud.cn/342dda957758405b9d4c55ac4ab109e7_image.png "image.png")
也很快得到了。不过实践是检验真理的唯一标准,我们来看看它能不能通过 *LeetCode*:
![image.png](https://dev-media.amazoncloud.cn/20f7ec16dbb0451a993bb4dc74de16f7_image.png "image.png")
一次通过!我自己在写循环的部分很容易出错,而 CodeWhisperer 的代码补全很好地规避了错误的产生,还是十分强大的。
#### **单元测试**
在日常工作时,编写单元测试可以在一定程度上保证对代码的修改把握。我们可以对上面的马拉车算法进行单元测试的编写:
![image.png](https://dev-media.amazoncloud.cn/1c2cc317e7a1464b9a81f74055468288_image.png "image.png")
在 Python 中,我们一般用断言可以完成一些简单的单元测试,这里CodeWhisperer 给出了一些测试用例。
### **安全扫描**
**安全扫描(Security Scan)** 是 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 推出的一项崭新的功能。在测试阶段,每个月可以使用50次。我们可以尝试一下官网的例子。
![image.png](https://dev-media.amazoncloud.cn/9b3fbb79e1e448deb34ec4125cd3b52e_image.png "image.png")
出现了报错,从提示来看,应该是因为在一个大的文件夹进行了安全扫描。所以新建一个文件夹再尝试:
![image.png](https://dev-media.amazoncloud.cn/cf5fae84d1144e5b95110775ee8712dd_image.png "image.png")
这次顺利地得到了结果。这里面应该有两个安全问题,当前检测到第一个;删除之后扫描,它也检测出了另一个安全问题:
![image.png](https://dev-media.amazoncloud.cn/871fe0f9a0c647a5907d82bc617d80c5_image.png "image.png")
[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 的安全扫描功能确实能够检测出一定的安全问题,这在开发过程中是非常实用且重要的。
### **结语**
总的来说,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 还是有不少亮点。安全检查是这次最与众不同的地方,整个功能是非常有自己的特色的。期待后续的功能更新和迭代!
![开发者尾巴.gif](https://dev-media.amazoncloud.cn/76ac430aefed4fdf9676ae3fac911236_%E5%BC%80%E5%8F%91%E8%80%85%E5%B0%BE%E5%B7%B4.gif "开发者尾巴.gif")