文章目录
一、Amazon CodeWhisperer简介 二、安装Amazon CodeWhisperer 2.1 PyCharm环境(一定要2023版本及以上) 2.1.1 下载插件 2.1.2 注册Amazon账号 2.1.3 CodeWhisperer与Amazon Q 2.2 IDEA环境(一定要2023版本及以上) 2.2.1 下载插件 2.2.2 注册并登录 2.3 Jupyter Lab环境 2.3.1 Jupyter Lab与Jupyter notebook 2.3.2 安装Jupyter Lab 2.3.3 安装amazon-codewhisperer-jupyterlab-ext插件 2.3.4 注册并登录 2.3.5 安装问题汇总(非常重要!!!) 三、案例演示 3.1 Pycharm环境 3.1.1 斐波那契数列(使用中文注解) 3.1.2 汉诺塔问题(使用英文注解) 3.1.3 三层BP神经网络(需人工调参) 3.2 IDEA环境 3.2.1 创建Bean对象 3.2.2 创建工具类 3.2.3 Amazon Q优化代码 3.3 Jupyter Lab环境 3.3.1 更改热键/快捷键(必要操作) 3.3.2 读取数据 3.3.3 空值处理 3.3.4 统计描述/绘图 四、总结 4.1 快捷键 4.2 使用方法一、Amazon CodeWhisperer简介
善始者繁多,克终者盖寡。
2022年底以ChatGPT为代表的大语言模型(LLMs)技术在各个领域掀起了人工智能浪潮,此后一年多的时间里众多机构和组织相继推出了应用LLMs的产品。大家听过最多的肯定是OpenAI推出的ChatGPT(官网地址),如今公布的最新版本是ChatGPT4.0,众多营销号鼓吹是可以替代普通程序员的存在,本人体验过后感觉确实不错,但是国家在互联网这方面管理太严了,访问起来相当不方便。
除了ChatGPT外其实还有很多优秀的LLMs产品,例如Cusor、tabnine、Amazon CodeWhisperer(亚马逊)、Copilot(微软)、文心一言、讯飞星火等
Amazon CodeWhisperer(官方网址)是亚马逊公司推出的一款用于 IDE 和命令行的 AI 生产力工具。(相信大公司,国内就可访问还是免费!!!当然微软的也很优秀,但是国内网络不能访问而且收费还不低)可以通过插件的方式安装在IDEA、PyCharm、JupyterLab 中(非常人性化),它能识别中文和英文注解并自动生成代码。(功能十分强大)
二、安装Amazon CodeWhisperer
下面介绍在PyCharm、IDEA、Jupyter三种环境中安装AWS,当然也可以直接访问官方文档
2.1 PyCharm环境(一定要2023版本及以上)
2.1.1 下载插件
依次点击“File | Settings | Plugins”,在商店中搜索“AWS Toolkit”下载安装即可。
2.1.2 注册Amazon账号
依次点击“View | Tool Windows | AWS Tools”
点击完毕后会出现如下对话框,点击“sign in to get started”注册账号即可。
“AWS Toolkit”弹窗位置和自己的软件设置有关,本人将其放置在底部,所有弹窗出现在页面下半部分。
点击按钮后会自动跳转至Amazon的登录页面,一路点击黄色按钮,使用自己邮箱注册登录即可。
网页出现出现如下信息时说明已登录成功,我们就可以在PyCharm中使用AWS了。
2.1.3 CodeWhisperer与Amazon Q
返回PyCharm我们在“AWS Toolkit”对话框中发现两个对话框,分别是“Amazon Q”和“CodeWhisperer”。
Amazon Q是一个AI助手,类似于ChatGPT,我们可以向其提问以获取某些建议,做项目开发时用,可以放着不管他;
CodeWhisperer是一个代码生成工具,它能自动识别注解并生成代码。
2.2 IDEA环境(一定要2023版本及以上)
2.2.1 下载插件
依次点击“File | Settings | Plugins”,在商店中搜索“AWS Toolkit”下载安装即可。
2.2.2 注册并登录
在界面左侧找到“AWS”。
点击“Sign in to get started”登录AWS账号,操作同2.1.2。
2.3 Jupyter Lab环境
注意:此种环境下配置Amazon CodeWhisperer可能会涉及大量的包操作,并且遇到各种各样的问题,相较于开发环境安装复杂度高!!!
2.3.1 Jupyter Lab与Jupyter notebook
通常我们说的jupyter指的是jupyter notebook,是一种文本编辑器,也是我们较为常用的版本,在命令行输入“jupyter notebook”即可进入网页,它的样子是:
可以将Jupyter Lab看做是Jupyter notebook的升级版! 它能够编辑更多类型文本,并且可以安装插件,已经非常类似IDEA和PyCharm这样的集成开发环境。在命令行输入“jupyter lab”即可进入网页,它的样子是:
2.3.2 安装Jupyter Lab
输入如下命令安装Jupyter Lab
pip install jupyterlab
查看Jupyter Lab是否安装成功
jupyter lab
2.3.3 安装amazon-codewhisperer-jupyterlab-ext插件
针对不同版本的Jupyter Lab通过不同命令进行安装:
查看Jupyter Lab版本
jupyter --version
例如图中显示的版本为4.1.2
根据版本信息执行不同安装命令:
Jupyter Lab版本>=4.0
pip install amazon-codewhisperer-jupyterlab-ext
其他版本
pip install amazon-codewhisperer-jupyterlab-ext~=1.0
jupyter server extension enable amazon_codewhisperer_jupyterlab_ext
插件正常安装后刷新页面,在页面底部会出现“CodeWhisperer”按钮。
2.3.4 注册并登录
操作方式同上。
2.3.5 安装问题汇总(非常重要!!!)
安装Jupyter Lab之前,必须先安装Jupyter Notebook,建议Jupyter Notebook版本6.0及以上; 执行“pip install amazon-codewhisperer-jupyterlab-ext”命令时报错,出现“UnicodeDecodeError: ‘gbk‘ code can‘t decode……”,是由于windows10编码与python编码冲突导致的,因为国内计算机默认编码通常为“GBK”,而国外产品的编码往往为“UTF-8”,请看解决方案。 执行“pip install amazon-codewhisperer-jupyterlab-ext”命令时报错,出现“could not create ‘build\bdist.win-amd64\wheel\……”,依次尝试解决方案1、解决方案2。三、案例演示
3.1 Pycharm环境
3.1.1 斐波那契数列(使用中文注解)
在注解下方按住“ALT C”出现提示框,按住“TAB”键插入代码。
让AWS编写一个主程序测试斐波那契数列方法,此处并没有要求输出多少,AWS自动显示前10个数字并加上了“程序结束的描述”。
我们发现AWS很好的满足了我们描述的需求,运行结果也是正确的,不足之处是数字是竖直排放的,原因是我们提供的注解描述不够准确。
3.1.2 汉诺塔问题(使用英文注解)
中文翻译:创建一个函数,显示汉诺塔问题的前10次变换过程,此汉诺塔问题中包含A、B、C个柱子、包含64个金盘、初始状态时金盘全都放在A柱上,游戏目标是将金盘全都移动到C盘上。
同样让AWS测试该方法。
中文翻译:测试hanoi函数,此时包含3个金盘。
运行结果完全正确。
3.1.3 三层BP神经网络(需人工调参)
以下代码均为AWS自动生成!!! 运行代码发现程序并不能够正常运行。
出现了两个问题:
1.数据越界(主要体现在激活函数上)
2.数据不齐(主要体现在绘图过程中xy轴的数据,例如87、88行)
'''
使用numpy创建一个BP神经网络类,
包含一个输入层、一个隐含层、一个输出层,
包含前向传播、后向传播方法,
隐含层和输出层使用sigmod激活函数,
损失函数使用方差,
测试集和训练集使用numpy随机生成
'''
import numpy as np
import matplotlib.pyplot as plt
class BPNN(object):
def __init__(self, input_num, hidden_num, output_num):
self.input_num = input_num
self.hidden_num = hidden_num
self.output_num = output_num
self.w1 = np.random.randn(input_num, hidden_num)
self.w2 = np.random.randn(hidden_num, output_num)
self.b1 = np.zeros((1, hidden_num))
self.b2 = np.zeros((1, output_num))
self.lr = 0.1
self.loss = []
def forward(self, x):
self.z1 = np.dot(x, self.w1) + self.b1
self.a1 = self.sigmoid(self.z1)
self.z2 = np.dot(self.a1, self.w2) + self.b2
self.a2 = self.sigmoid(self.z2)
return self.a2
def backward(self, x, y):
self.loss.append(np.sum((y - self.a2) ** 2) / 2)
self.delta2 = (y - self.a2) * self.sigmoid_derivative(self.z2)
self.delta1 = self.delta2.dot(self.w2.T) * self.sigmoid_derivative(self.z1)
self.w2 += self.a1.T.dot(self.delta2) * self.lr
self.w1 += x.T.dot(self.delta1) * self.lr
self.b2 += np.sum(self.delta2, axis=0, keepdims=True) * self.lr
self.b1 += np.sum(self.delta1, axis=0, keepdims=True) * self.lr
return self.loss
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1 - x)
def train(self, x, y, epoch):
for i in range(epoch):
self.forward(x)
self.backward(x, y)
return self.loss
def predict(self, x):
return self.forward(x)
def plot_loss(self):
plt.plot(self.loss)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Loss Curve')
plt.show()
return self.loss
def plot_predict(self, x, y):
plt.scatter(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Prediction')
plt.show()
return self.loss
def plot_predict_line(self, x, y):
plt.scatter(x, y)
plt.plot(x, self.predict(x))
plt.xlabel('x')
plt.ylabel('y')
plt.title('Prediction')
plt.show()
return self.loss
#创建一个形状为5*10*1的BP神经网络
input_num = 5
hidden_num = 10
output_num = 1
model = BPNN(input_num, hidden_num, output_num)
#使用numpy随机生成训练集和测试集
x_train = np.random.rand(100, input_num)
y_train = np.random.rand(100, output_num)
x_test = np.random.rand(10, input_num)
y_test = np.random.rand(10, output_num)
#训练模型
epoch = 1000
loss = model.train(x_train, y_train, epoch)
#测试模型
y_pred = model.predict(x_test)
#绘制损失曲线
model.plot_loss()
#绘制预测曲线
model.plot_predict(x_test, y_test)
#绘制预测曲线
model.plot_predict_line(x_test, y_test)
#打印预测结果
print(y_pred)
#打印损失值
print(loss)
#打印权重
print(model.w1)
print(model.w2)
print(model.b1)
print(model.b2)
#打印输入
print(x_train)
#打印输出
print(y_train)
#打印测试集
print(x_test)
#打印测试集
print(y_test)
#打印模型
print(model)
#打印模型
print(model.w1)
print(model.w2)
print(model.b1)
print(model.b2)
3.2 IDEA环境
3.2.1 创建Bean对象
以下代码由AWS自动生成,代码基本符合注解中的描述。
public class MyTest {
//创建一个Person对象,属性值分别是1001、张三、25、123@qq.com,并调用toString方法显示对象信息
public static void main(String[] args) {
Person person = new Person(1001, "张三", 25, "XXXXXXXXXX");
System.out.println(person.toString());
}
}
/**
* 创建Person类,类中包含ID、姓名、年龄、邮箱四个属性,包含eat、run三个方法
* 类中包含一个空参方法和全参方法,以及所有属性的GET和SET方法
* 类中toString方法显示类的四个属性内容
*/
class Person {
private int id;
private String name;
private int age;
private String email;
public Person() {
}
public Person(int id, String name, int age, String email) {
this.id = id;
this.name = name;
this.age = age;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name +
", age=" + age +
", email='" + email +
"}";
}
public void eat() {
System.out.println("吃饭");
}
public void run() {
System.out.println("跑步");
}
}
3.2.2 创建工具类
使用AW生成JDBC工具类,本人只编写了中文注解,其余代码均自动生成。但是由于描述的过于简单,生成的代码也比较简陋,我们可以使用Amazon Q来优化代码。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCUtil {
/**
* 创建函数使用JDBC连接mysql数据库
*/
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8","root","root");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
conn = null;
}
}
3.2.3 Amazon Q优化代码
使用Amazon Q后它会根据已有代码给予修正提示,但是并未直接修改代码,根据自身需求可以选择性使用Amazon Q功能。
3.3 Jupyter Lab环境
3.3.1 更改热键/快捷键(必要操作)
默认情况下启用AWS后按下“Tab”键表示接受AWS的代码建议,但是!在Jupyter Lab中“Tab”键表示制表符,这样的情况下无法插入AWS生成的代码,所以需要对AWS的快捷键进行修改。
依次点击“Settings | Keyboard Shortcuts”,找到“codewhisperer”下的“accept-inline”并添加新的快捷键,此处添加了快捷键“Q”。
3.3.2 读取数据
使用pandas库读取名为“dataset.csv”的文件,并显示出前5行内容,AWS很快的完成了任务。
3.3.3 空值处理
删除表中包含空值的行和列并将处理后的结果显示出来。
3.3.4 统计描述/绘图
对于统计性描述以及绘图任务,AWS也能够完成,不过各项参数还可以继续调整。
四、总结
4.1 快捷键
Alt C 唤出AWS代码提示;
Tab 插入代码;在Jupyter Lab中需要重新设置快捷键。
4.2 使用方法
AWS是亚马逊公司提供的免费产品,通过插件的方式运行在各种集成开发环境(IDE)中,能够根据注解自动生成代码,既支持中文又支持英文,使用AWS能够轻松完成大部分常规性问题,例如自动创建一个工具类、编写一个IO方法、解决一个数学问题,但是在处理较为复杂的问题时还需要人为调参,例如编写一个BP神经网络。
学会详细的描述自己的需求是使用AWS的关键!!!