CodeWhisperer:强大的AI代码助手,大大提高编程效率

2024-03-04 19:59

本文主要是介绍CodeWhisperer:强大的AI代码助手,大大提高编程效率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 什么是 Amazon CodeWhisperer?
  • 快速上手CodeWhisperer
    • 安装
    • 配置
    • 如何使用 Amazon CodeWhisperer
    • CodeWhisperer初体验:hello world
  • Python语言快速入门
    • 向文件写入数据
    • 读取csv文件
    • 排序算法之冒泡排序
    • 设计模式之单例模式
  • 使用CodeWhisperer快速上手Pytorch
    • pytorch版本的卷积
    • Conv+BN+Relu激活函数
    • 残差Block
    • 上大餐:Reset18
    • NMS(非极大值抑制)
  • 总结

什么是 Amazon CodeWhisperer?

亚马逊云科技在2023年4月18日宣布,实时 AI 编程助手 Amazon CodeWhisperer 正式可用,同时推出的还有供所有开发人员免费使用的个人版(CodeWhisperer Individual)。CodeWhisperer 经过数十亿行代码的训练,可以根据您的评论和现有代码实时生成从代码片段到全函数的代码建议。CodeWhisperer 帮助开发者基于注释生成代码,追踪开源参考,扫描查找漏洞。确保了开发人员可以专注于敏捷开发,不会由于搜索示例代码等工作而打断思绪。在创建复杂代码和面对不断变化的开发环境时,开发人员可以在自己喜欢的 IDE(集成开发环境)中使用 CodeWhisperer,例如 Visual Studio Code、IntelliJ IDEA 及其他 IDE,从而提高工作效率、简化工作任务。

具有以下特点:

  • 1、免费:对所有开发人员都可以免费使用。这点很重要!!!

  • 2、为您量身定制的实时 AI 代码生成器,极大提高工作效率。在预览期间,Amazon 举办了一场工作效率挑战赛,使用 Amazon CodeWhisperer 的参与者成功完成任务的可能性要比未使用 CodeWhisperer 的参与者高 27%,平均完成任务的速度快 57%。

  • 3、 支持热门编程语言和 IDE。Amazon CodeWhisperer 支持开发语言有: Python、Java、JavaScript、TypeScript、C#、Go、Rust、PHP、Ruby、Kotlin、C、C++、Shell 脚本、SQL 和 Scala 等开发语言;支持的IDE有Visual Studio Code、IntelliJ IDEA 等。所有开发人员(不仅仅是拥有亚马逊云服务账户或使用亚马逊云服务的人),只需一个电子邮箱地址即可注册。so easy!!!

  • 4、针对 AWS 服务的优质建议:可以帮助程序员过滤出有偏见或不公正的代码建议,提高代码的安全性和准确性。CodeWhisperer 是唯一具备该功能的编程助手。当生成的代码类似于训练集中的参考代码时,它会为代码提供额外的提示(比如代码库 URL 和许可证),帮助降低使用代码的风险,并使开发人员重复利用代码。

  • 5、内置安全扫描:可以对开发人员编写的代码进行安全扫描,找到并建议修复难以检测的漏洞。例如十大开放式 Web 应用程序安全项目 (OWASP) 中的漏洞以及不符合加密库最佳实践的漏洞等。如果 CodeWhisperer 发现了漏洞,它会提供解决问题的建议。

在这里插入图片描述

快速上手CodeWhisperer

安装

打开pytcharm,点击File——Settings,如下图:
在这里插入图片描述

点击Plugins,然后,在搜索栏里输入aws,找到AWS Toolkit,点击Install安装,如下图:

在这里插入图片描述
弹出警告框,如下图:
在这里插入图片描述
点击Accept,继续下一步。等待安装完成。
在这里插入图片描述
安装完成后,点击Apply。
在这里插入图片描述
重启Pycharm。到这里就安装完成了。非常easy!!!

配置

重启Pycharm后,在左下角就能看到AWS Toolkit。我们开始配置CodeWhisperer,如下图
在这里插入图片描述
点击AWS Toolkit——Developer Tools,选择CodeWhisperer,点击Start。

在这里插入图片描述
选择使用email登录,如上如图.然后,点击Connect
在这里插入图片描述
点击Open and Copy Code

在这里插入图片描述
然后将Code粘贴进去。点击Submit and continue。继续下一步!
在这里插入图片描述
输入注册的电子邮箱,如果没有请注册一个账号!继续下一步!
在这里插入图片描述
输入邮箱和姓名!下一步!
在这里插入图片描述
新建密码,和新建账号时的要求一样,可以设置一样的密码!
在这里插入图片描述
点击Allow。然后网页和Pycharm弹出如下界面:
在这里插入图片描述
在这里插入图片描述
一切OK!Are you OK?

如何使用 Amazon CodeWhisperer

  • 1、将光标放在注释或代码行后面,点击 Enter 键,激活 CodeWhisperer。

  • 2、您可以使用向左箭头键 / 向右箭头键,浏览多个建议(如果可用)。通过按 Tab 键,接受代码建议。通过按 Esc 键 或键入一个字符,放弃建议。

  • 3、在接受或编写新代码后,再次点击 Enter 键,获取下一行建议代码。

  • 4、手动触发 Amazon CodeWhisperer;或者如果未显示建议,可在 MacOS 上点击 Option + C,或在 Windows 上点击 Alt + C。

CodeWhisperer初体验:hello world

配置完成就可以上手了! 体验一下Python的hello world。如下图:
先写一行注释,如下图:

在这里插入图片描述
然后,点击Enter键,生成函数名。如果你觉得满意,点击Tab键即可使用!在点击Enter键,生成函数体,如下图:
在这里插入图片描述
点击Tab键,写入代码。几个按键就可以完成!代码如下:

# 在main函数中执行,一个hello world
def main():print("hello world")

中文和英文混着用,CodeWhisperer可以识别!

Python语言快速入门

我选一些常用的代码作为例子,比如一些文件的读写操作和一些经典的算法,体验CodeWhisperer代码生成能力!

向文件写入数据

将结果保存到txt文件中,这是常用的代码,代码如下:

# 向result.txt文件写入多行数据
def write_lines(lines):with open('result.txt', 'a') as f:for line in lines:f.write(line + '\n')

我说的写入,但是CodeWhisperer给的是追加。这可能是在中文理解上的问题。改成英文的试试,代码如下:

# To write multiple lines of data to the result.txt file
def write_lines(lines):with open('result.txt', 'a') as f:for line in lines:f.write(line + '\n')

好吧!确实有问题!
再试试其他的平台的代码:

with open("result.txt", "w") as file:  file.write("第一行数据\n")  file.write("第二行数据\n")  file.write("第三行数据\n")

我想输入一万行咋办呢?

读取csv文件

使用pandas读取csv文件,代码如下:

# 写一个使用pandas读取csv文件
import pandas as pddef read_csv(file_path):df = pd.read_csv(file_path)print(df)return dfif __name__ == "__main__":read_csv("data.csv")  

基本上,写出了大致的逻辑,还帮你写了if __name__ == "__main__":。同样对比其他平台。

import pandas as pd  # 读取CSV文件  
data = pd.read_csv('your_file.csv')  # 打印数据框的前几行  
print(data.head())

这个就比较简单了!

排序算法之冒泡排序

代码如下:

# 写一个冒泡排序
def bubble_sort(alist):n = len(alist)for j in range(n-1):count = 0for i in range(0, n-1-j):if alist[i] > alist[i+1]:alist[i], alist[i+1] = alist[i+1], alist[i]count += 1if count == 0:returnprint(alist)print("第%d趟排序后的结果:" % (j+1))print(alist)print("=====================")return alist
alist = [54,26,93,17,77,31,44,55,20]
print(bubble_sort(alist))

基本上能完整生成!还打印出了中间结果,结果如下:

[26, 54, 17, 77, 31, 44, 55, 20, 93]
第1趟排序后的结果:
[26, 54, 17, 77, 31, 44, 55, 20, 93]
=====================
[26, 17, 54, 31, 44, 55, 20, 77, 93]
第2趟排序后的结果:
[26, 17, 54, 31, 44, 55, 20, 77, 93]
=====================
[17, 26, 31, 44, 54, 20, 55, 77, 93]
第3趟排序后的结果:
[17, 26, 31, 44, 54, 20, 55, 77, 93]
=====================
[17, 26, 31, 44, 20, 54, 55, 77, 93]
第4趟排序后的结果:
[17, 26, 31, 44, 20, 54, 55, 77, 93]
=====================
[17, 26, 31, 20, 44, 54, 55, 77, 93]
第5趟排序后的结果:
[17, 26, 31, 20, 44, 54, 55, 77, 93]
=====================
[17, 26, 20, 31, 44, 54, 55, 77, 93]
第6趟排序后的结果:
[17, 26, 20, 31, 44, 54, 55, 77, 93]
=====================
[17, 20, 26, 31, 44, 54, 55, 77, 93]
第7趟排序后的结果:
[17, 20, 26, 31, 44, 54, 55, 77, 93]
=====================
None

对比其他平台的,代码如下:

def bubble_sort(arr):n = len(arr)for i in range(n):# 将最大的数移动到末尾for j in range(0, n - i - 1):if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]# 示例arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("排序后的数组:")
for i in range(len(arr)):print("%d" % arr[i]),

运行结果:

排序后的数组:
11
12
22
25
34
64
90

在这里插入图片描述

设计模式之单例模式

模式设计也是日常编程经常用到的,我选择单例模式来测验一下CodeWhisperer,代码如下:

class Singleton(object):def __new__(cls, *args, **kwargs):if not hasattr(cls, '_instance'):orig = super(Singleton, cls)cls._instance = orig.__new__(cls, *args, **kwargs)return cls._instancedef __init__(self):print('init')passdef __str__(self):return 'Singleton'__repr__ = __str__pass
class MyClass(Singleton):a = 1pass
if __name__ == '__main__':a = MyClass()b = MyClass()print(a)print(b)print(a is b)pass

运行结果:

init
init
Singleton
Singleton
True

可以看到a和b是同一个对象,代码是没有问题的!

使用CodeWhisperer快速上手Pytorch

目前,python语言广泛应用在AI上,其中最著名的AI框架是Pytorch。试试CodeWhisperer生成Pytorch代码的能力如何?

pytorch版本的卷积

# 写一个pytorch的卷积
import torch
import torch.nn as nnclass Conv(nn.Module):def __init__(self):super(Conv, self).__init__()self.conv = nn.Conv2d(3, 3, 3)def forward(self, x):x = self.conv(x)return x

Conv+BN+Relu激活函数

Conv+BN+Relu是CNN的标准配置!我们一起看看CodeWhisperer生成的代码怎么样,代码如下:

# 写一个pytorch的block,由卷积、BN和relu激活函数组成
import torch
import torch.nn as nnclass ConvBNReLU(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1):super(ConvBNReLU, self).__init__()self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias=False)self.bn = nn.BatchNorm2d(out_channels)self.relu = nn.ReLU(inplace=True)def forward(self, x):return self.relu(self.bn(self.conv(x)))

轻松搞定!!!

残差Block

ResNet Block,这种残差结构主宰着深度学习模型,无论是CNN还是Transformer都是这种残差结构,我们尝试使用CodeWhisperer生成ResNet的Block,代码如下:

# 写一个pytorch的残差block
import torch
import torch.nn as nnclass ResidualBlock(nn.Module):def __init__(self, inchannel, outchannel, stride=1):super(ResidualBlock, self).__init__()self.left = nn.Sequential(nn.Conv2d(inchannel, outchannel, kernel_size=3, stride=stride, padding=1, bias=False),nn.BatchNorm2d(outchannel),nn.ReLU(inplace=True),nn.Conv2d(outchannel, outchannel, kernel_size=3, stride=1, padding=1, bias=False),nn.BatchNorm2d(outchannel))self.shortcut = nn.Sequential()if stride != 1 or inchannel != outchannel:self.shortcut = nn.Sequential(nn.Conv2d(inchannel, outchannel, kernel_size=1, stride=stride, bias=False),nn.BatchNorm2d(outchannel))def forward(self, x):out = self.left(x)out += self.shortcut(x)out = nn.ReLU(out)return out

毫无压力!!!

上大餐:Reset18

让CodeWhisperer直接写一个pytorch版的ResNet18。

# 写一个pytorch的Resnet18
import torch
from torch import nn
from torch.nn import functional as F
class ResnetBlock(nn.Module):def __init__(self, in_channels, out_channels, stride=1):super(ResnetBlock, self).__init__()self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1)self.bn1 = nn.BatchNorm2d(out_channels)self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1)self.bn2 = nn.BatchNorm2d(out_channels)self.shortcut = nn.Sequential()if stride != 1 or in_channels != out_channels:self.shortcut = nn.Sequential(nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride),nn.BatchNorm2d(out_channels))def forward(self, x):out = F.relu(self.bn1(self.conv1(x)))out = self.bn2(self.conv2(out))out += self.shortcut(x)out = F.relu(out)return outclass Resnet18(nn.Module):def __init__(self):super(Resnet18, self).__init__()self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3)self.bn1 = nn.BatchNorm2d(64)self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)self.layer1 = self.make_layer(64, 64, 2, stride=1)self.layer2 = self.make_layer(64, 128, 2, stride=2)self.layer3 = self.make_layer(128, 256, 2, stride=2)self.layer4 = self.make_layer(256, 512, 2, stride=2)def make_layer(self, in_channels, out_channels, blocks, stride=1):layers = []layers.append(ResnetBlock(in_channels, out_channels, stride))for i in range(1, blocks):layers.append(ResnetBlock(out_channels, out_channels))return nn.Sequential(*layers)return nn.Sequential(*layers)def forward(self, x):x = self.conv1(x)x = self.bn1(x)x = F.relu(x)x = self.maxpool(x)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)return x

只需使用Enter+Tab+方向键就可以完成ResNet18网络的编译!

NMS(非极大值抑制)

NMS是物体检测常用的代码,我们使用CodeWhisperer可以轻松写出来,代码如下:

# NMS函数
import numpy as npdef bbox_iou(bboxes1, bboxes2):if bboxes1.shape[1] != 4 or bboxes2.shape[1] != 4:raise IndexError# 两两框的位置差bboxes1_area = (bboxes1[:, 2] - bboxes1[:, 0]) * (bboxes1[:, 3] - bboxes1[:, 1])bboxes2_area = (bboxes2[:, 2] - bboxes2[:, 0]) * (bboxes2[:, 3] - bboxes2[:, 1])# 两两框的重叠面积后面进行目标检�nleft_up = np.maximum(bboxes1[:, :2], bboxes2[:, :2])right_down = np.minimum(bboxes1[:, 2:], bboxes2[:, 2:])# 两两框的重叠面种inter_section = np.maximum(right_down - left_up, 0)inter_area = inter_section[:, 0] * inter_section[:, 1]# 两两框的IOUunion_area = bboxes1_area + bboxes2_area - inter_areaious = inter_area / union_areareturn ious
def nms(bboxes, iou_threshold, sigma=0.3, method='nms'):classes_in_img = list(set(bboxes[:, 5]))best_bboxes = []for cls in classes_in_img:cls_mask = (bboxes[:, 5] == cls)cls_bboxes = bboxes[cls_mask]while len(cls_bboxes) > 0:max_ind = np.argmax(cls_bboxes[:, 4])best_bbox = cls_bboxes[max_ind]best_bboxes.append(best_bbox)cls_bboxes = np.concatenate([cls_bboxes[: max_ind], cls_bboxes[max_ind + 1:]])iou = bbox_iou(best_bbox[np.newaxis, :4], cls_bboxes[:, :4])weight = np.ones((len(iou),), dtype=np.float32)assert method in ['nms', 'soft-nms']if method == 'nms':iou_mask = iou > iou_thresholdweight[iou_mask] = 0.0if method == 'soft-nms':weight = np.exp(-(1.0 * iou ** 2 / sigma))cls_bboxes[:, 4] = cls_bboxes[:, 4] * weightscore_mask = cls_bboxes[:, 4] > 0.cls_bboxes = cls_bboxes[score_mask]return best_bboxes

总结

在这个AI技术飞速发展的时代,我们邀请你一同踏上“用 AI 助力,提升编程效率 —— Amazon CodeWhisperer 探索之旅”的征程。这不仅是一次向AI编程助手——Amazon CodeWhisperer的探索,也是一次向更高效、更智能编程方式的探索。

在这次旅程中,我们一同领略了Amazon CodeWhisperer带来的革命性改变,它以人工智能为驱动,极大地提升了开发者的生产力,降低了开发时间,并提供了一种全新的编程体验。从代码的生成到智能建议,再到错误检测和代码优化,CodeWhisperer都展现出了强大的能力。

通过上面的介绍,相信你已经亲身体验到AI技术在编程中的应用,感受到了CodeWhisperer带来的便捷与高效。让我们共同开启这个全新的编程世界,拥抱AI的变革,用智能编程助力我们的未来。

我们在这里等你,一起开启这场AI与编程的探索之旅,一起见证AI技术在软件开发中的美好未来!

活动地址:https://dev.amazoncloud.cn/experience/codewhisperer-2?sc_medium=corecontent&sc_campaign=product&sc_channel=CSDN

这篇关于CodeWhisperer:强大的AI代码助手,大大提高编程效率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/774280

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键