> 本系列文章,是广大开发者及媒体向我们投稿的 **[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)** 评测及心得,与您分享实战体验,向您呈现更实用的信息。敬请关注!
***作者**:中杯可乐多加冰*
### **基于 LLM 的辅助编程——编程范式变革进行时**
大语言模型(Large Language Model)是当下人工智能领域的热点话题之一,它代表着自然语言处理技术的新高度,为开发者提供了改变编程方式的可能性。
大语言模型凭借其复杂的神经结构和参数,通过海量的数据训练,能够模拟人类的语言理解和生成过程,具备上下文学习、指令遵循、逻辑链的推理策略等能力,而这种能力的突破性进展让 AI 编程也成为现实。
在传统的编程范式中,开发人员需要手动编写一行行代码完成特定任务,会耗费大量时间和精力。但大语言模型在编程中的应用,使得开发者不再需要受限于特定的编程语言,只需要用自然语言描述他们的意图和需求,进而更快地开发原型、验证想法、快速迭代功能。简单地说,以前只有程序员能够读懂的代码,现在变成了人人都能理解的自然语言,编程的门槛被大幅降低,会编程和不会编程的同学,都可以接触一下来提高自己的日常生产力!
![image.png](https://dev-media.amazoncloud.cn/64b92eb786024ef4b6ddb6d156fede5e_image.png "image.png")
今天要测评的正是一款基于大语言模型的编程助手:[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail)。作为亚马逊云科技出品的一款生成式 AI 编程工具,其经过了数十亿行级别代码的训练和调参,可以根据注释和现有代码实时生成从代码片段到全函数的代码建议,还可以扫描难以发现的代码漏洞,检查潜在的安全问题。
### **Amazon CodeWhisperer + VS Code 安装与配置**
#### **2.1 扩展安装**
首先,打开 `Visual Studio Code` 工具,点击左侧扩展栏 - 搜索 `Amazon Toolkit` 工具。可以看到,官方已经开发并一直维护着这个插件套件:
![image.png](https://dev-media.amazoncloud.cn/fcf73523fa9242c7be87ddb2ba5165b6_image.png "image.png")
点击安装,将最新版本的工具包安装到 VS Code 中,成功后在左侧的状态栏会出现一个新图标,代表我们已经安装成功,进行如下配置:
#### **2.2 配置**
点击图标,打开工具包面板到[开发人员工具](https://aws.amazon.com/cn/developer/tools/?trk=cndc-detail)( `Developer Tools` )选项,点击 `CodeWhisperer-Start` ,找到 `Amazon CodeWhisperer` 面板,注册或者登陆,连接 `Amazon Builder ID` :
![image.png](https://dev-media.amazoncloud.cn/73fbaa55908347b1ba31510b6bde2f23_image.png "image.png")
使用浏览器打开跳出的绑定页面,并且确认绑定代码是否相同,然后点击确认并继续:
![image.png](https://dev-media.amazoncloud.cn/7fe1db610c624fec91b7e0b146274e2a_image.png "image.png")
没有账号的可以在浏览器跳出的步骤中, Amazon Builder 账号不需要绑定信用卡,只需要使用邮箱注册账号即可。注册或者登陆成功后,直接点击 Allow 就可以授权使用 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail),授权成功后,可以看到开发者选项中的 CodeWhisperer 被成功激活,就能够开始使用了!
![image.png](https://dev-media.amazoncloud.cn/11c5d106353c459da539f08219f7c9a6_image.png "image.png")
### **Amazon CodeWhisperer 实践全流程**
#### **3.1 Amazon CodeWhisperer 基础实验**
要愉快地使用 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail),我们要学习如何给它下 Prompt 提示、如何使用快捷键、如何高效使用 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 辅助编写项目:
1、输入注释为: `say hello world` ,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 会自动根据注释我们想要打印 helloworld,其自动为我们补全了 `console.log(Hello World!)` 部分:
![640.gif](https://dev-media.amazoncloud.cn/0c82cf3a5ae9483cb5539e0052f97e38_640.gif "640.gif")
2、下面,我们开始上难度,输入注释为 `Traverse a binary tree in middle order` (中序遍历),[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 生成了一段递归式的代码:
```js
// Traverse a binary tree in middle order
const middleOrder = (root) => {
if (root) {
middleOrder(root.left);
console.log(root.val);
middleOrder(root.right);
}
}
```
3、然后我们试试算法方面:写一个中文注释,注释内容为:二分查找一个数组,可以看到 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 马上写出了一个标准的二分查找方法:
![image.png](https://dev-media.amazoncloud.cn/666edd37797748ecb4ef49d055e9104b_image.png "image.png")
4、最后我们试试应用方面,题目来自力扣455.分发饼干,题目描述如下:
> 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >=g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
将题目要求用注释注起来,然后按 Tab 键,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 会自动理解题意要求,并且帮我们自动写了这样的一段代码,提交到力扣中,完美 Accept!
![image.png](https://dev-media.amazoncloud.cn/b45d70134e8043a09622d17d30989220_image.png "image.png")
#### **3.2 Amazon CodeWhisperer 项目实践**
实验证明,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 已经能够在需求性的语言理解、算法、应用题开发上面发挥极大的辅助作用,基本上只需要输入注释,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 就会为输入的需求自动提供建议,在没有收到建议时也可以使用 Option + C 或 Alt + C 快捷方式手动触发。借助 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail),我们尝试开发了一款 Web 端的项目,详细的界面原型、项目结构以及实践的过程等内容,大家可以点击这里,在3.2部分查看。
### **Amazon CodeWhisperer 测评分析报告**
#### **4.1 功能性分析**
对于常见的编程功能方面,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 的作用在于能够完成自动化编码工作,可以大大减少开发人员的代码输入量,主要功能有自动代码补全、实时错误检测和建议、安全扫描,其中:
**1、代码补全功能**:它能够根据上下文提供准确的建议,根据注释或者代码上下文准确预测我想要使用的变量、函数和类名,并提供相应的补全选项。这种智能化的补全功能使编码过程更流畅便捷,对于不同的需求场景、开发环境、上下文代码,其提供了不同风格的补全和不同偏向的建议。
![image.png](https://dev-media.amazoncloud.cn/9722ca3be6114357a02017933841093b_image.png "image.png")
**2、实时建议**:[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 具备出色的实时错误检测和建议。它会在编写代码的同时,发现并提示潜在的错误和问题,帮助遵循最佳实践和规范,不仅如此,其还可以根据上下文自动生成虚拟数据:
![image.png](https://dev-media.amazoncloud.cn/cee9e6db9c514083bf9eb4040c041982_image.png "image.png")
**3、安全扫描**:[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 可以扫描代码以检测难以发现的漏洞,并获取代码建议以立即修复这些漏洞。它遵循跟踪安全漏洞的最佳实践,例如开放全球应用程序安全项目(OWASP)概述的漏洞,或者不符合加密库最佳实践及其他类似安全最佳实践的漏洞。
#### **4.2 代码质量分析**
从代码质量方面来分析,生成的代码必须符合编程规范、具有可读性、可维护性和高效性:
**1、代码规范**:经过上述体验和实践,可以看到 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 遵循一致的命名规范、命名约定、良好的代码块和层级结构,能够正确使用缩进、表达式和语句的书写方式,易于人们理解并迅速掌握其数据和功能转换,比如下面输入 standardDeviation 函数名表示想求标准差,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 为我们写出的代码无论从命名,还是从逻辑方面都非常规范:
![image.png](https://dev-media.amazoncloud.cn/10498caa32c34437a085a6ea74b1848b_image.png "image.png")
**2、高效性**:从实际体验角度来讲,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 提示的代码简洁明了,而且知道很多常用的正则表达,比如下面一个相对复杂的 Regular Expression,可以判断字符串是否符合邮箱规则:
![image.png](https://dev-media.amazoncloud.cn/0c4ad6181fe34ecbaecbfe69301e4c51_image.png "image.png")
#### **4.3 用户体验度分析**
**1、易用程度**:可以按快捷键调用 Amazon Codewhisperer,允许用户根据特定需求进行自定义和定制,而且可以通过自动优化代码、智能代码提示、代码格式化、代码重构和代码审查等功能来提高代码的质量和效率。
![image.png](https://dev-media.amazoncloud.cn/de4ead1b58fa4792aaa94cacbbde6576_image.png "image.png")
**3、多环境和多语言支持**:[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 插件可以在 Visual Studio Code、IntelliJ IDEA、PyCharm 等等多种流行的开发工具和集成开发环境(IDE)兼容安装;另外,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 被内置了 Amazon Cloud9 和 Amazon Lambda 控制台, 也可以在 JupyterLab、[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Studio、以及 Amazon Glue Studio Code 中通过加入 CodeWhisperer extension 进行使用。在语言方面,[Amazon 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 等多种编程语言,覆盖多种编程场景。
最后,从个人的角度来讲,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 已经足够作为高级辅助工具承担很大一部分同质化的繁杂工作,测试与工程实践均证明其可以用友好的交互方式提供代码建议,帮助提高编码效率和生产力,让开发者专注于改进和重构其他核心工作。另一方面,[Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 也可以做漏洞检查、注释生成、文档生成、单元测试等多种工作。
当然,由于篇幅原因,这些只是 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail) 的部分功能,还有更多使用技巧、提示方案和最佳实践等着关注和发掘!
欢迎大家一起来参与体验前沿 AI 编程助手 [Amazon CodeWhisperer](https://aws.amazon.com/cn/codewhisperer/?trk=cndc-detail),赢取万元 re:Invent 2023 拉斯维加斯云计算盛会门票,与业内最杰出的领袖与创新者,共享盛大的技术研讨会!
扫描下方二维码,加入「**云上探索实验室**」,开启 AI 与编程的探索之旅!
![image.png](https://dev-media.amazoncloud.cn/959fd2a117a84c4e838e508d449c9c7b_image.png "image.png")
![开发者尾巴.gif](https://dev-media.amazoncloud.cn/1e4b41bc96ef4221bb927d296bfbfceb_%E5%BC%80%E5%8F%91%E8%80%85%E5%B0%BE%E5%B7%B4.gif "开发者尾巴.gif")