前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
Amazon CodeWhisperer
Amazon CodeWhisperer 是一款 AI 编码配套应用程序,可在 IDE 中生成整行代码和完整的函数代码建议,以帮助您更快地完成更多工作。在本系列文章中,我们将为您详细介绍 Amazon CodeWhisperer 的相关信息,敬请关注!
2023年可以说是生成式 AI 正式破圈的一年。无数的工具、产品横空出世,包括面向企业的大语言模型,以及帮助个人的 AI 工具。其中,在 AI 编程助手领域,也涌现了很多不错的产品,潜移默化中改变了程序员们生产和解决问题的方式。以前,大家往往依靠搜索引擎,找到对应官网或在知名论坛寻找答案;而如今,我们仅依靠 AI 编程助手,就能解决很多问题。
亚马逊云科技就推出了一款 AI 编程助手—— Amazon CodeWhisperer,同时推出的还有供所有开发人员免费使用的个人版(CodeWhisperer Individual),能够使用您的 AI 编码配套应用程序更快、更安全地构建应用程序。亚马逊云科技在 AI 领域有足够多的积累,在面向开发者方面亦有足够多的经验、产品用户体验来反馈用户感受,并不断迭代着相关产品。同时,借助亚马逊云的强大优势和力量,能够将 AI 和云打通,这在当前云原生时代是必不可少的能力。
目标及前期准备
先给大家介绍下今天我们希望实现的目标:基于 Spring Boot 框架,简单实现用户登陆。我们使用的是 IntelliJ 开发工具,选用 Maven 进行依赖管理。用到的依赖如下:
- Web
- JPA
- H2
我们首先尝试安装 CodeWhisperer 插件,在 Plugins 中搜索 Amazon Toolkit 下载即可。
下载完成后绑定自己的亚马逊账号即可开始使用,默认开启自动建议。
项目结构如图所示:
pom.xml
文件如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
开始
健康检查
我们先实现一个最简单的 Controller,请求 /ping 返回 pong 即可。
1 | package com.example.demo.controller; |
测试用例是检验代码正确性必不可少的一环,我们来写个简单的测试用例。这时 CodeWhisperer 已经开始展示它的实力了,只是写了一行 @Test 注解,它将我们想要做的测试代码完整提示出来:
下面是完整的测试代码:
1 | package com.example.demo; |
运行一下测试用例,很顺利地通过了:
用户类设计
我们来定一个 User 模型,发现它在 Table To Class 的实现中具备一定的表设计能力,以及字段关联联想、约束设计能力。
能推测我们想要的表字段,索引约束建议。这对于新手来说是莫大的帮助。想象有一位“功力深厚”的同伴在旁指点你设计表结构,那么表结构的设计就能相对合理一些。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26package com.example.demo.model;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.stereotype.Indexed;
"game_users") (name =
public class User {
private Long id;
true, nullable = false) (unique =
private String username;
false, length = 64) (nullable =
private String password;
true, nullable = false) (unique =
private String email;
}
DAO 层实现
根据官网的 GIF 图展示,可以通过注释进行代码推断,DAO 层的实现就交给它:
根据我们上面想要根据邮箱查询用户的注释,它已经给出了相应的提示。让我们再考考它,注释中进行多个方法的描述:
也很顺利地实现了!1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package com.example.demo.dao;
import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
public interface UserDao extends JpaRepository<User, Long> {
// function to implement find user by email
Optional<User> findByEmail(String email);
Optional<User> findByUsername(String username);
// two function to implement find user by id or email
Optional<User> findById(Long id);
Optional<User> findByEmailIgnoreCase(String email);
// function to implement check user is existed
Boolean existsByEmail(String email);
}
综上,CRUD 的 DAO 层实现可以交给 CodeWhisperer 来完成。我们希望能够预先插入一些数据便于测试,琐碎的日志测试对它来说轻轻松松。
1 | package com.example.demo; |
Service 层实现
轮到 Service 层了,在这里我们简单的根据用户名查询用户,返回对应的数据即可。当我们方法签名写一半时,它给的建议是停下继续敲击的手指,因为基本符合预期,而且具备一定的记忆联想能力。在 DAO 层定义的 Optional
1 | package com.example.demo.service; |
Controller 层实现
最后,我们来实现最外层入口,简单的进行相关业务校验:用户名是否为空、密码是否正确。在这里用于演示。
用户不存在相关处理,密码正确性验证,基本符合我们的要求。
1 | package com.example.demo.controller; |
最后我们来测试一下,格式错误和用户密码错误的情况。
与预期一致。
总结
CodeWhisperer 就我们今天的使用而言,还是非常智能和便捷的。作为一款具备记忆和联想能力的 AI 编程工具,今天 CodeWhisperer 展示的记忆联想效果很不错,并且具备一定的表结构设计能力,一些简单的测试用例完成度也不错。未来一些简单琐碎的需求、测试用例也可以交给它了。针对一些更复杂的场景,随着模型的数据量级和质量不断优化,相信我们都能够陆续解决!