文章目录

  • 一、CodeWhisperer简介
    • 1.1 CodeWhisperer 是一个重要的生产力助推器
    • 1.2 CodeWhisperer 的实际应用
  • 二、CodeWhisperer安装教程
    • 2.1 IntelliJ IDEA安装CodeWhisperer插件
    • 2.2 VSCode安装CodeWhisperer插件
    • 2.3 PyCharm安装CodeWhisperer
    • 2.4 快捷键使用方法
  • 三、简单自动编码演示
    • 3.1 单行代码自动补全
    • 3.2 CodeWhisperer生成完整代码
    • 3.3 其根据签名自动生成代码
  • 四、AI编程代码实测及项目体验
    • 4.1 简单函数代码测试
    • 4.2 代码安全扫描实测
    • 4.3 代码引用跟踪功能实测
    • 4.4 计算机视觉工程项目实测
  • 五、Amazon CodeWhisperer实测体验总结
    • 5.1 CodeWhisperer 可以帮助我成为一个更好的开发者吗?

一、CodeWhisperer简介

CodeWhisperer是亚⻢逊出品的一款基于机器学习的通用代码生成器,可实时提供代码建议。

在编写代码时,它会自动根据我们现有的代码和注释生成建议。从单行代码建议到完整的函数,它可为我们提供各种大小和范围的个性化建议。

CodeWhisperer 还可以扫描我们的代码以突出显示和定义安全问题。

codewhispereropen in new window:亚马逊官方出品

目前仅以插件的形式在VS Codeopen in new window、Jetbrainsopen in new window等IDE里面使用,如果想试一试可以用 VS Code,目前无限制免费使用免费,并且对环境要求不高,还轻量~

亚马逊在 2022 年 6 月发布了 CodeWhisperer 预览版,现在它支持 Python、Java 和 JavaScript。

CodeWhisperer 经过数十亿行代码的训练,由机器学习提供支持,旨在实现相同的目标。无论我们是学生、新开发人员,还是经验丰富的专业人士,CodeWhisperer 都有助于我们提高工作效率。

其支持多种 IDE 和语言。要开始使用,我们只需安装合适的 AWS IDE Toolkit,启用 CodeWhisperer 功能,输入我们的预览访问代码,然后开始键入:

​ CodeWhisperer 可以持续检查我们的代码和注释,并为我们提供语法正确的推荐。这些推荐根据您的编码风格和变量名称合成,而不仅仅是代码段。

​ CodeWhisperer 使用多个上下文线索来提供推荐,包括源代码中的光标位置、光标前面的代码、注释以及同一项目中其他文件中的代码。您可以按原样使用推荐,也可以根据需要对其进行改善和自定义。正如我之前所提到的,我们使用从开源存储库、内部 Amazon 存储库、API 文档和论坛中提取的数十亿行代码训练(并将继续训练)CodeWhisperer。

​ 在 AWS 博客的一篇文章中,Mark Richman 解释说,CodeWhisperer 的模型是在“包括 Amazon 开源代码在内的各种数据源”上训练的。有了这个语料库(显然确实存在)完善 CodeWhisperer 的模型,编写从 S3 读取文件的代码应该是一个很好的测试用例。

​ 在使用 CodeWhisperer(CW)时,我们需要写一个注释,描述我们希望函数去做什么。注释的描述性和准确性越高,系统就越能更好地推断出我们想要的逻辑。

Function to open an S3 file

比如注释以 Function 开头,让 CW 知道你想要创建一个函数。也就是说,你需要添加一个注释,作为给 CW 的提示。

CW 分析注释并生成一个函数的定义。此时,你可以在生成函数体之前修改函数定义。CW 还可能提供多种函数定义供你选择。

IntelliJ 集成 CodeWhisperer 的截图:

点击“插入代码”,你的函数就在注释的下方创建好了。注意 CodeWhisperer 不仅插入了代码,还创建了一个文档字符串。

# Function to open an S3 file
def open_s3_file(filename):""":param filename::return:"""s3 = boto3.resource('s3')return s3.Object(bucket, filename).get()['Body'].read()

看起来不错!这段代码实现了你的注释所期望的功能,并且是在几秒钟内就生成了。

节省了查找boto3 API 的时间,你只需要检查代码,确保语义正确。

接着看看提出更多要求时,会发生什么。

这有一个很有用的例子:写一个函数从 S3 的文件中返回前“n”行。

# Function to get first n lines from a file in S3
def get_first_n_lines_from_s3(filename, n):"""Get the first n lines of a file in S3:param filename::param n::return:"""lines = []for line in open_s3_file(filename):lines.append(line)if len(lines) >= n:breakreturn lines

真厉害!CodeWhisperer 使用了之前创建的辅助方法 open_s3_file,并生成了正确的函数。

在 CW 生成函数体之前,你可以修改参数名,提高代码的可读性。例如,如果我们输入:

# Function to find common elements in lists

CW 会提示:

def find_common_elements(list1, list2)

在生成函数体之前,我们可以修改函数定义,使其更具描述性:

def find_common_elements(first, second)

如果我们接受它的函数定义,CodeWhisperer 将使用函数签名和注释来构建函数体。得到的函数将使用改进后的参数名。

# Function to find common elements in lists
def find_common_elements(first, second):return list(set(first) & set(second))

CodeWhisperer 不仅仅可以创建整个函数;它还可以在函数中插入代码片段,并在过程中推断相关变量。

  # reverse the list orderlines.reverse()

1.1 CodeWhisperer 是一个重要的生产力助推器


使用 CodeWhisperer,我能够更快地编写代码。到目前为止,最大的价值是 S3 示例所演示的功能。

如果我自己写代码,大部分时间将会用来查找 boto API 文档,以确保写出正确的调用。使用 CodeWhisperer,则只需三秒钟。

这让我想到了一段曾花了很多时间的烦人代码:给 CloudWatch 发送数据。让我们看看 CodeWhisperer 能否有所帮助,试试提供注释:“Function to emit a CloudWatch metric”。

# Function to emit a cloudwatch metric
def put_metric_data(metric_name, metric_data):"""Put a metric data into cloudwatch:param metric_name::param metric_data::return:"""cloudwatch = boto3.client('cloudwatch')cloudwatch.put_metric_data(Namespace='my_namespace',MetricData=[{'MetricName': metric_name,'Dimensions': [{'Name': 'string','Value': 'string'},],'Unit': 'Seconds','Value': metric_data},])

非常有用!CW 为我节省了许多打字和查阅 API 文档的时间。

我有可能需要重构这段代码,但即使我从零开始编写它,第一步也要写出类似这样的原始逻辑。如今只花三秒钟,我节省了编写大量样板代码的时间,有了一个很好的自定义或重构的起点。

1.2 CodeWhisperer 的实际应用


我在 PyCharm 中安装了 CodeWhisperer ,并对其进行了测试。以下是一些示例,向您展示了它可以执行的操作。我想构建一个质数列表。我键入 # See if a number is pr。CodeWhisperer 完成此操作,然后我按下 TAB(实际键特定于每个 IDE)接受推荐:

在下一行,我按下 Alt+C(同样是 IDE 特定),然后我可以在一对函数定义之间进行选择。我接受第一个函数,CodeWhisperer 推荐函数体,以下是我所拥有的:

我编写 for 语句,CodeWhisperer 推荐循环的主体:

CodeWhisperer 还可以帮助我编写用于访问各种 AWS 服务的代码。我从 # create S3 bucket 开始,然后按 TAB 键完成剩余部分:


看到这里,大家是不是觉得还不错,接下来教大家如何安装,很简单的~

二、CodeWhisperer安装教程

2.1 IntelliJ IDEA安装CodeWhisperer插件

在IDEA中打开配置窗⼝,选择Plugins,搜索"AWS Toolkit",点击Install,点击OK按钮,如下图:

安装完之后重启IDEA,如下图:

打开AWS Toolkit视图(菜单View/Tool Windows/AWS Toolkit),点击"Developer Tools"tab⻚⾯,选择“CodeWhisperer/Start",如下图:

弹出的窗⼝中选择“Use a personal email to sign up and sign in with AWS Builder ID",点击“Connect”按钮,如下图:

在弹出的窗⼝中,选择“Open and Copy Code”,如下图:

此时会在浏览器中打开⼀个⻚⾯,按ctrl-v粘贴code值,点击“Next“,如下图:

输⼊邮箱地址,点击"Next",如下图:

输⼊名字,点击“Next”,CodeWhisperer会向邮箱中发送⼀个验证码,如下图:


打开邮箱,可以看到验证码,如下图:

复制验证码,粘贴到输入框,点击“Verify”按钮,如下图:

设置密码,点击“Create AWS Builder ID“,如下图:

在最后⼀个⻚⾯中点击“Allow”按钮,如下图:

出现如下提示后,即表示注册AWS builder ID成功,如下图:

返回IDEA,在AWS Toolkit视图中的Developer Tools中可以打开或关闭代码⽣成功能,如下图:

此时,就可以愉快的使用AI 编程了。

2.2 VSCode安装CodeWhisperer插件


  1. 安装AWS Toolkit插件,具体到 VS Code 侧边栏搜索并安装

  1. 侧边栏点击aws,>> DEVELIOPER TOOL >> CodeWhisper >> Start

  1. 在下拉菜单中点击Use a personal email to sign up and sign in with AWS Builder ID

  1. 点击Copy Code and Proceed,这将自动复制代码


一般会提示外部网站打开提醒,选择打开

5.打开网站后,输入点击Copy Code and Proceed时得到的代码,点击Next

6.输入自己的邮箱地址(同时登录你的邮箱等待验证码),点击Next

7.重复之前步骤,但是由于已经在浏览器上登录成功了,所以步骤非常简单
粘贴代码后将会提示以下内容,点击Allow即可


等左下角的AWS扩展颜色正常,对勾状态,说明连接成功

此时,就可以愉快的使用AI 编程了。

2.3 PyCharm安装CodeWhisperer


1.打开Pycharm插件管理

在 JetBrains IDE 中,导航到设置菜单(在 macOS 上为 + ,在 Windows 上为文件→设置),然后单击左侧菜单上的“插件”。

在菜单顶部,单击Marketplace并在搜索栏中键入 “AWS Tookit”。然后点击安装

2.安装完成后重启IDE

3.将 Pycharm 连接到 AWS(AWS Build ID创建),重复之前步骤

IDE 重新启动后,您将看到一个新的 AWS Toolkit 工具窗口。还可以通过 View -> Tool Windows -> AWS Toolkit(视图 -< 工具窗口 -< AWS Explorer)访问此窗口。

然后点击"Developer Tools"标签,选择“CodeWhisperer/Start"

此时,就可以愉快的在PyCharm里使用AI 编程了。

2.4 快捷键使用方法


全程需要按快捷键调用 Codewhisperer,主要的几个用法如下:

ALT + C 要求给出建议(当有暗色字出现时,按tab接受建议)
快捷键 功能
TAB 接受建议
ESC 取消建议
选择下一个建议
选择上一个建议

三、简单自动编码演示

回到 IDEA,看到如下界面,即表示注册并启动成功:

下面我们新建任意Java文件,看看他如何能够帮助我们自动生成代码。

3.1 单行代码自动补全

输入字符串public。根据输入,CodeWhisperer 生成了建议列表

3.2 CodeWhisperer生成完整代码

CodeWhisperer 可以根据编写的注释生成完整的函数。


类似于 if/for/while 等代码块的生成。


大家如果看到这有疑问,可以接着看第四部分,有详细的测试说明。

3.3 其根据签名自动生成代码


看到这里,大家应该有个简单的了解了,咱们接着往下看~

四、AI编程代码实测及项目体验

4.1 简单函数代码测试

首先,我先用中文注释了“写一个读取csv文件的函数”
回车后可以看到CodeWhisperer自动显示出来

按快捷键Tab确认键入后,接着回车后CodeWhisperer又自动生成了以下代码:

感觉这个CodeWhisperer自动生成的代码还不错,我选择了Insert Code键入使用。

紧接着用中文又注释了“创建一个简单的爬虫简单函数”

在这选择了第三个自动代码,同样Tab键入。

接下来是注释“选择排序”后回车

注释“选择排序”后回车

中文注释实测完后又对英文注释进行了测试,如下图所示:

乘胜追击,又对创建和上传文件代码进行自动生成测试,同样得到了预期的效果。

对于简单的函数实测让我感觉这个工具还挺不错的,因为可以根据自己想要的注释自动生成多个代码建议,这样不仅节省了大量的编码时间,而且多种代码建议可供选择,一定程度上提升了自己编写代码的质量。

4.2 代码安全扫描实测

接下来用CodeWhisperer去扫描我们代码中的安全漏洞,以下是运行按钮的位置

打开我想扫描的文件,然后运行安全扫描

结果发现CodeWhisperer探测到该文件中有两个安全问题。
通过查看问题栏,点击事件定位到代码中,我们将鼠标移入到突出显示的代码,查看建议的措施,如下所示,问题指出在该例子中未加密的AWS凭证被记录下来,是一个安全漏洞,它建议我们重写代码并且修复该漏洞。


同样查看第二个问题,CodeWhisperer告诉我们讲应该把标识设置为True。


根据CodeWhisperer的建议,我进行了对应修改,两处安全问题修改如下:



修改后重新扫描了文件,扫描完成,显示没找到问题。

对于安全扫描这项功能,我还是挺惊艳的,没想到能实测找出问题并给出对应的解决问题,因为这一点我对CodeWhisperer的好感又增加了。

4.3 代码引用跟踪功能实测

在这里想实现一个函数来创建一个dynamo DB表。
如下图所示进行了实际测试
“implement a function to create a dynamoDB table”

以下是CodeWhisperer Reference Log给出的建议:


根据代码建议标注被文件跟踪器标记为MIT许可证,其引用了Apache-2.0许可证下的代码。我选择接受了这些标记代码,然后发现CodeWhisperer自动记录了引用我需要的许可证信息,这样我就可以在我的代码上添加适当的许可证和归属信息。
这个功能实测完感觉也挺有用的,对代码涉及到的许可证和归属信息问题进行了有效解决。

4.4 计算机视觉工程项目实测

在对官网显示的几项功能测试完后,又在平时用到的实际项目上进行了测试,我选取了常用的一些CV检测模型,以下是ShuffleNet的实际测试效果。

首先,我在实例化训练数据集上,对缺失的代码段进行测试,看CodeWhisperer是否能联系上下文进行代码补全。

进行回车操作后,CodeWhisperer显现出来了所给的建议。

目前看所给的建议正确,接着我又对冻结权重部分进行了测试,


这回我又利用了CodeWhisperer的快捷键ALT+C进行了测试,

结果显示自动生成了False选项,测试到这里真的让我觉得这个工具是真的好,可以帮助我解决代码中遇到的很多问题。
在训练代码中测试完,我又接着对检测模型代码进行了测试,如下图所示在transform指向中为我建议了img。

最后,我对检测模型代码进行了运行测试,正确的检测出图片为蒲公英dandelion。

总的来说,CodeWhisperer辅助我完成了CV模型的代码编写和模型检测,达到了官网所展示的预期。接下来,我要让CodeWhisperer帮助我完成更复杂的任务了,哈哈

五、Amazon CodeWhisperer实测体验总结

5.1 CodeWhisperer 可以帮助我成为一个更好的开发者吗?


通过以上的测试,我觉得它可以帮助我成为一个更好的开发者。

首先,它可以为我节省大量的时间和精力,让我能够专注于改进、重构和测试。

其次,它通过承担一些同质化的繁重工作,让我有机会成为一个更好的程序开发人员。

比如上面的测试的例子是 Amazon 工具(经过 Amazon 开源代码训练)能够表现出色的例子。

当然,在大多数开发人员需要花费很多时间的地方,比如编写领域相关的逻辑时,我又多测试了一下,让我们看看CodeWhisperer会不会也有帮助。

比如从 Python 文档中的数据类示例开始。

@dataclass
class InventoryItem:"""Class for keeping track of an item in inventory."""name: strunit_price: floatquantity_on_hand: int = 0def total_cost(self) -> float:return self.unit_price * self.quantity_on_hand

其实我想知道 CodeWhisperer 是否可以向这个类添加一个方法。让我们看看如果添加注释:" Function that return this item costs more than $10",会发生什么?

@dataclass
class InventoryItem:"""Class for keeping track of an item in inventory."""name: strunit_price: floatquantity_on_hand: int = 0def total_cost(self) -> float:return self.unit_price * self.quantity_on_hand# Function that returns whether this item costs more than $10def expensive(self) -> bool:return self.unit_price > 10

结果是非常酷的。值得注意的是,CodeWhisperer 给函数起了一个直观的名字,并包含了对 self 的引用。

接着,让我们尝试用CodeWhisperer来做测试,看是否会触及它的极限。

# Function to test InventoryItem class
def test_inventory_item():"""Test InventoryItem class:return:"""item = InventoryItem("Widget", 10, 5)assert item.name == "Widget"assert item.unit_price == 10assert item.quantity_on_hand == 5assert item.total_cost() == 50assert not item.expensive()

在上面的代码中,我输入了注释,CW 自动完成了剩下的工作。
测试似乎是一个极好的证明 CW 可以节省时间的例子。我不需要浪费时间去想测试的值,也不用输入所有的成员变量和方法。

总的来说,可以帮助我成为一个更好的开发者,但是任何辅助工具都有利有弊,CodeWhisperer也是才发布不久,通过测试我也想邀请大家去进行实际测试,可以对使用CodeWhisperer遇到的问题大家一起相互讨论,一起促进这个编程助手迭代和完善~

对了,最近亚马逊云科技中国峰会马上就要召开了,应该会见到更多的实用工具,感兴趣的小伙伴可以一起关注参加呀

2023亚马逊云科技中国峰会的链接:https://summit.awsevents.cn/2023/form.html?source=aHMZ6Q20We4igheElTULyinBa1qRTISgfZcMsoZCBuqdqMRgsBt0cSfDnLS2uBkb

欢迎大家在评论区积极讨论~~~

实测 亚马逊AI 编程助手 Amazon CodeWhisperer(全网最全)相关推荐

  1. 亚马逊AI编程助手CodeWishperer的使用

    IntelliJ IDEA安装亚马逊AI编程助手CodeWishperer 简介 CodeWishperer是亚马逊2023年4月份推出的实时AI编程助手,它可以实时分析开发人员所写的代码并根据内容为 ...

  2. 重磅!Amazon发布个人免费的AI编程助手:CodeWhisperer !

    来源:https://juejin.cn/post/7223746457941508157 现已正式推出实时 AI 编程助手 Amazon CodeWhisperer,包括 CodeWhisperer ...

  3. 惹事之后,亚马逊AI助手Alexa将增新功能,真的能比自己更懂你?

    作者|震霆            出品|遇见人工智能        公众号|GOwithAI 亚马逊的语音助手Alexa总是给用户带来"惊喜". 比如前段时间突然发出怪笑,把用户吓 ...

  4. 叉叉助手停运有什么替代的_亚马逊全球开店助手将停止服务!卖家:终究是错付了...

    最近,亚马逊可谓是新规频出.上个礼拜,亚马逊发布"自2020年9月1日开始,商家名称和地址将显示在卖家资料页面"上的通知.随后,后台的"销售业绩"版块也悄悄换至 ...

  5. 亚马逊AI又遭抗议:一个好端端的美国官员,怎么就成罪犯了?

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 哈哈哈. 如果你近期稍微关注到亚马逊在美遭遇的抗议和diss,想必对ACLU这个组织不会陌生. ACLU,全称The American C ...

  6. 亚马逊 ai 解雇_绿色是使用AI的新的黑色节约型亚马逊雨林

    亚马逊 ai 解雇 新成果 /使用AI的节约环境/哈佛 AI促进社会公益 / IEEE SMC 2020 接受 (New results / Saving Environment using AI / ...

  7. 半小时训练亿级规模知识图谱,亚马逊AI开源知识图谱嵌入表示框架DGL-KE

    出品 | AI科技大本营(ID:rgznai100) 知识图谱 (Knowledge Graph)作为一个重要的技术,在近几年里被广泛运用在了信息检索,自然语言处理,以及推荐系统等各种领域.学习知识图 ...

  8. 探索“老药新用”最短路径:亚马逊AI Lab开源大规模药物重定位知识图谱DRKG

    本文经授权转载自机器之心(almosthuman2014),未经授权禁止二次转载与摘编. 本文长度为3200字,建议阅读9分钟 本文带你了解亚马逊AI实验室的开源机器学习工具. [ 摘要 ]最近,来自 ...

  9. 半小时训练亿级规模知识图谱,亚马逊AI开源知识图谱嵌入表示框架

    来源:AI 科技大本营 本文约2300字,建议阅读9分钟 亚马逊 AI 团队开源了一款专门针对大规模知识图谱嵌入表示的新训练框架 DGL-KE,能让研究人员和工业界用户方便.快速地在大规模知识图谱数据 ...

最新文章

  1. postgresql之数据库管理
  2. 重构职场竞争力之测试能力提升方法
  3. 处理机调度实验总结_计算机系统结构总结
  4. Matlab中gradient函数的使用方法
  5. Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环
  6. Silver Cow Party POJ - 3268(dijkstra+反向交换)
  7. SPOJ - QTREE3Query on a tree again!——树链剖分
  8. 怎么用计算机弹c哩c哩,计算器音乐c哩c哩乐谱 | 手游网游页游攻略大全
  9. php获取url传参数乱码问题,php url地址栏传中文值乱码问题与解决方法
  10. openssl内存分配,查看内存泄露
  11. Java实现海报+二维码+二维码中间log+文字合并高清图片
  12. 生产追溯系统-IQC来料检验
  13. C++ 读取txt文件中数据并存入数组中
  14. 阿里飞冰使用教程-前端低代码可视化GUI速开发
  15. Office 365 共享链接直接进入编辑
  16. 产品安全设计十大原则
  17. 三维场景中创建镜面反射效果(three.js实战9)
  18. 使用CSS设置重叠层次
  19. java从数据库查询数据存在redis中
  20. 工作流(Workflow) -- 工作流简介

热门文章

  1. Session和cookie机制详解
  2. java代码将csv格式的文件导入数据库
  3. electron打包用http-server创建的本地服务器
  4. CodeForces 103A Testing Pants for Sadness
  5. Spring事务注解Transactional失效
  6. CAD学习笔记中级课【字体】
  7. php大小写转换函数(strtolower、strtoupper)用法介绍
  8. android 类型.this,Android中各种类型对话框的使用
  9. Cortex-AX系列性能对比(原)
  10. Linux编程:命令行选项单横线“-”与双横线“--”的区别