赞
踩
善始者繁多,克终者盖寡。
2022年底以ChatGPT为代表的大语言模型(LLMs)技术在各个领域掀起了人工智能浪潮,此后一年多的时间里众多机构和组织相继推出了应用LLMs的产品。大家听过最多的肯定是OpenAI推出的ChatGPT(官网地址),如今公布的最新版本是ChatGPT4.0,众多营销号鼓吹是可以替代普通程序员的存在,本人体验过后感觉确实不错,但是国家在互联网这方面管理太严了,访问起来相当不方便。
除了ChatGPT外其实还有很多优秀的LLMs产品,例如Cusor、tabnine、Amazon CodeWhisperer(亚马逊)、Copilot(微软)、文心一言、讯飞星火等
Amazon CodeWhisperer(官方网址)是亚马逊公司推出的一款用于 IDE 和命令行的 AI 生产力工具。(相信大公司,国内就可访问还是免费!!!当然微软的也很优秀,但是国内网络不能访问而且收费还不低)可以通过插件的方式安装在IDEA、PyCharm、JupyterLab 中(非常人性化),它能识别中文和英文注解并自动生成代码。(功能十分强大)
下面介绍在PyCharm、IDEA、Jupyter三种环境中安装AWS,当然也可以直接访问官方文档
依次点击“File | Settings | Plugins”,在商店中搜索“AWS Toolkit”下载安装即可。
依次点击“View | Tool Windows | AWS Tools”
点击完毕后会出现如下对话框,点击“sign in to get started”注册账号即可。
“AWS Toolkit”弹窗位置和自己的软件设置有关,本人将其放置在底部,所有弹窗出现在页面下半部分。
点击按钮后会自动跳转至Amazon的登录页面,一路点击黄色按钮,使用自己邮箱注册登录即可。
网页出现出现如下信息时说明已登录成功,我们就可以在PyCharm中使用AWS了。
返回PyCharm我们在“AWS Toolkit”对话框中发现两个对话框,分别是“Amazon Q”和“CodeWhisperer”。
Amazon Q是一个AI助手,类似于ChatGPT,我们可以向其提问以获取某些建议,做项目开发时用,可以放着不管他;
CodeWhisperer是一个代码生成工具,它能自动识别注解并生成代码。
依次点击“File | Settings | Plugins”,在商店中搜索“AWS Toolkit”下载安装即可。
在界面左侧找到“AWS”。
点击“Sign in to get started”登录AWS账号,操作同2.1.2。
注意:此种环境下配置Amazon CodeWhisperer可能会涉及大量的包操作,并且遇到各种各样的问题,相较于开发环境安装复杂度高!!!
通常我们说的jupyter指的是jupyter notebook,是一种文本编辑器,也是我们较为常用的版本,在命令行输入“jupyter notebook”即可进入网页,它的样子是:
可以将Jupyter Lab看做是Jupyter notebook的升级版! 它能够编辑更多类型文本,并且可以安装插件,已经非常类似IDEA和PyCharm这样的集成开发环境。在命令行输入“jupyter lab”即可进入网页,它的样子是:
输入如下命令安装Jupyter Lab
pip install jupyterlab
查看Jupyter Lab是否安装成功
jupyter lab
针对不同版本的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”按钮。
操作方式同上。
在注解下方按住“ALT C”出现提示框,按住“TAB”键插入代码。
让AWS编写一个主程序测试斐波那契数列方法,此处并没有要求输出多少,AWS自动显示前10个数字并加上了“程序结束的描述”。
我们发现AWS很好的满足了我们描述的需求,运行结果也是正确的,不足之处是数字是竖直排放的,原因是我们提供的注解描述不够准确。
中文翻译:创建一个函数,显示汉诺塔问题的前10次变换过程,此汉诺塔问题中包含A、B、C个柱子、包含64个金盘、初始状态时金盘全都放在A柱上,游戏目标是将金盘全都移动到C盘上。
同样让AWS测试该方法。
中文翻译:测试hanoi函数,此时包含3个金盘。
运行结果完全正确。
以下代码均为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)
以下代码由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("跑步"); } }
使用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; } }
使用Amazon Q后它会根据已有代码给予修正提示,但是并未直接修改代码,根据自身需求可以选择性使用Amazon Q功能。
默认情况下启用AWS后按下“Tab”键表示接受AWS的代码建议,但是!在Jupyter Lab中“Tab”键表示制表符,这样的情况下无法插入AWS生成的代码,所以需要对AWS的快捷键进行修改。
依次点击“Settings | Keyboard Shortcuts”,找到“codewhisperer”下的“accept-inline”并添加新的快捷键,此处添加了快捷键“Q”。
使用pandas库读取名为“dataset.csv”的文件,并显示出前5行内容,AWS很快的完成了任务。
删除表中包含空值的行和列并将处理后的结果显示出来。
对于统计性描述以及绘图任务,AWS也能够完成,不过各项参数还可以继续调整。
Alt C 唤出AWS代码提示;
Tab 插入代码;在Jupyter Lab中需要重新设置快捷键。
AWS是亚马逊公司提供的免费产品,通过插件的方式运行在各种集成开发环境(IDE)中,能够根据注解自动生成代码,既支持中文又支持英文,使用AWS能够轻松完成大部分常规性问题,例如自动创建一个工具类、编写一个IO方法、解决一个数学问题,但是在处理较为复杂的问题时还需要人为调参,例如编写一个BP神经网络。
学会详细的描述自己的需求是使用AWS的关键!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。