首发公众号: 赵侠客
引言
JetBrains AI Assistant 是 JetBrains 集成开发环境(IDE)中嵌入的一款智能开发助手工具,旨在通过人工智能技术来简化和提升软件开发过程,我深度体验了一下在IntelliJ IDEA 2024.2 Beta (Ultimate Edition)版本中JetBrains AI Assistant在JAVA开发过程中的多种辅助功能,为开发者提供了显著的便利与效率提升。其主要的功能有:
- 通用大模型,通用大模型的功能它都有,如聊天、问题回答、创意写作
- 辅助编程,如生成代码、注释、单元测试、代码解释、BUG查找、代码优化重构、编程语言转换,智能起名、代码补齐
- 查找功能,强大的类似Text2SQL查询非结构化数据
- 辅助开发,如自动生成git commit message、自定义提示词等
使用方法:先访问JetBrains Ai官网找到JetBrains AI Assistant,然点Try now按教程将你的账号开通AI功能
▲JetBrains AI Assistant官网
安装好JetBrains AI Assistant后在Idea右边会出现一个像鸣人卷的Icon,点击后即可进入 AI Assistant的引导页,如下图:
▲Idea安装好AI Assistant的功能页面
从引导页面可以看出AI Assistant主要有5种功能,点Start Using Ai Assistant后我们第一件事先问一下它可以做哪些事件:
prompt:你能做哪些事情?
▲AI Assistant提供的功能
看这个回答还是很AI的,有些也让人看不懂是什么意思,不过不重要,接下来我们就深度体验一下我挖掘到的13种功能。
二、查找功能
查找功能是在开发过程中是非常重要的,在Idea中我们经常会查到一个接口在哪里、一个方法在哪里、一个关键字在哪里或是一段代码在哪里,那么通过prompt让AI给我们查找和使用Ctrl+Shift+F搜索有什么不同呢?我们看下面的查找案件,比如现在有两个接口:
@RestController
public class UserController extends BaseController {
@GetMapping("/userSize/{id}")
public ResponseEntity<UserDTO> userSize(@PathVariable Long id) {
UserDTO userDTO = new UserDTO();
userDTO.setId(id);
userDTO.setSize(1572864L);
return ResponseEntity.ok(userDTO);
}
@PostMapping("/userSize")
public ResponseEntity<UserDTO> setUserSize(@RequestBody UserDTO userDTO) {
log.info("user {} maxSize {}", userDTO.getId(), userDTO.getMaxSize());
return ResponseEntity.ok(userDTO);
}
}
2.1 通配查
找当我们线上有一个功能出现了问题,前端说调用我们接口userSize/1出问题,那么我们第一时间肯定是想快速的在代码中找到这个接口,如果你提前知道接口使用了{id}能通配接口参数,那么可以使用Ctrl+Shift+F ,再输入userSize/\W+ 使用正则查到对应的接口,如下图所示:
▲ 传统查找方法
可是当接口是别人定义的,可能项目都是别人开发的,人都可能已经走了,你根本不知道接口的定义格式,所以正则也不好用的,这种情况如果使用传统方法在大型项目中想找到这个接口的代码位置甚至都有点困难,这时AI就来了:
prompt:帮我在控制层查找 userSize/1
这个接口
▲ AI自动理解查找
是不是很智能?自动帮你理解接口的定义和你参数匹配,是不是比写正则好用多了?AI不仅能搜索还能分析理解你想要的内容,然后根据自己的理解给出你可能想要的内容,是不是比较厉害?
2.2 多条件查询
有时我们查询可能有很多个条件,类似SQL 可以增加多Where条件,而Idea传统查询条件只能有一个,是无法多条件查询的,如:有以下查询:
prompt:帮我查找Long
类型的数字,要求大于1000L
,请直接帮我输出来
▲ AI多条件查找
是不是有Text2SQL的感觉?可以在非结构化数据中使用类似Text2SQL查找结构化数据的感觉? 是不是感觉有点强?
2.3 指定位置查找
很多时间我们可能需要指定查询的位置来缩小查询的范围从而提升查询的精度,传统的Idea查询可能使用过滤的方法,如指定在本项目、本模块、或者是某种文件后缀中查找,现在我们有了AI增加一个提示词就搞定了,如:如下查询:
prompt:帮我输出 Controller
层所有GET
方法接口
▲ 指定位置查找
是不是比使用Ctrl+Shift+F
高级多了?这AI是不是有点强?
2.4 指定查找具体代码类型
比如我们只想查找静态方法,传统方法只能通过static关键字来过滤,很有可能 这个static关键字可能并不是修饰方法类似的,而AI就可以理解你想要的就是静态方法而不是包含static关键字的其它内容,如:可以使用如下提示词:
prompt:帮我查到所有使用了静态方法
,要求输出5个
▲ 查询5个静态方法
就问你Ctrl+Shift+F能做吗?是不是很强?有点在非结构化数据里使用SQL查结构化数据的感觉,有了AI的加持能不能查内容,完全取决于你的prompt水平,是不是DZT了?
三、 写代码相关功能
AI Assistant将开启下一代的面向AI编程的新纪元,这可能真不是一句吸引眼球的标题,现在的AI生成代码可能比我们想的要强的多。市面上充斥着各式各样的代码生成AI,生成的代码好不好用才是AI Assistant的重头戏,也是决定着它能不能普及、能不能替代搜索引擎、甚至替代某些程序员完成部分代码编写工作,生成代码的质量也是至关重要,今天我们不研究生成代码的质量,只演示如何生成,接下我会深度体验AI生成代码的质量,并与国内外主流代码生成大模型做对比,如果大家有想看和哪家大模型做代码生成质量对比可以评论区留言。
3.1 函数生成
这个功能应该是面向AI开发程序员最需求的,以前我们是面向搜索引擎开发,有什么不会的直接网上搜索,现在是面向AI开发,有什么不会的直接让AI生成就好了。我们在需要生成代码的位置(MAC)按住 CMD+
会出现AI提示词输入框,然后输入你的 prompt代码瞬间帮你生成出来。
prompt:帮我生成wordCount
方法,要求统计fileName中指定关键词的数量
▲ 生成统计文件中指定词的数量
可以看出生成的代码速度还是非常快的,生成的代码也是像模像样的,功能也是正常的,还使用了try-with-resource
来自动关闭文件流,有的新手可能在这里还会忘记关闭文件流,感觉AI非常的老练。
3.2 强大的代码提示
当你在写代码时,AI会根据你的代码上下文自动理解你接下来要写的代码,然后使用灰色的文字提示你,如果你需要,直接按tab
键就可以自动填充提示的代码,可以一直这样提示下去,很可能你一直按tab
键代码就帮你写好了,这个是提高代码编程速度的神器,大部分情况AI都能正确的判断接下来你要写的代码,当然也可能会误判,不然我们真的要失业了!!!我们看下图的GIF演示:
▲ 强大的代码提示功能
3.3 智能起名
变量起名有时会让很多人头痛,特别是有些英语不好的,很多都用拼音来命名变量如touXiang、biaoTi、neiRong等,或者用int1、int2、string1、string2这样的变量,甚至有的人使用中文来命名,也不是说不行,如果直接的不行代码会报错的,就是让人看了有点猪立人群的感觉,从都人是走路上班,有的人非要爬着上班也不是说不行的。
public static void main(String[] args) {
String huanYing="\uD83D\uDE00";
String gz="欢迎关注";
String 公众号="赵侠客";
System.out.println(huanYing+gz+公众号);
}
有了AI的辅助,英文再差也能生成看上去高大上的变量名,一看就是非常的专业。使用方法,按住Shift+F6
Ai会自动根据上下文给方法和变量起有意义的名字,如下面AI生成的nams比strings是不是专业多了?
▲ 智能生成变量名
3.4 BUG查找
这个功能也是太重要了,毕竟大部分人可能三分之一时间在写代码,三分之一时间在排查BUG,另外三分之一时间在改BUG,有了AI可以事先帮我们查到代码中潜在的BUG,使用方法:选择我们的代码,然后右键菜单中选择查找BUG
▲ AI查找代码中的BUG
3.5 代码优化重构
优化重构是代码水平不断提升的体现,以前需要开发者不断的开发,深入的理解业务,不断的提升自己的代码水平,学习各种设计模式,才有能力优化代码,提升性能,提高代码可维护性,现在有了AI,可以瞬间帮你优化重构代码,是不是很香?
▲ AI优化重构wordCounty方法
3.6 添加代码注释
良好的代码注释是高质量代码的重要指标之一,很多程序员没有写注释的习惯,有时自己写的代码,隔几年后别说指望别人看得懂,可能连自己都看不懂了,这下有了AI,可以一键帮我们生成注释了,给不喜欢写注释程序员带来了福音。
▲ AI给方法添加注释
3.7 一键生成单元测试
注释都不写,更不用说要写单元测试了,我敢说国内除了做开源项目或者公司基础组件的会写单元测试,大部分做业务开发的程序员很少会写单元测试的,因为写业务代码都要996了,要是再写单元测试那还不得007?
▲ AI给wordCout一键生成单元测试
四、更多其它功能
4.1 代码解释
当我们看业务代码,或者源码时,完全看不懂是什么意思时,只需要选中代码,然后让AI给出详细的解释,这个功能对阅读源码帮助太大了。
▲ AI源码解释
4.2 语言转换
可以将JAVA代码转换其它语言的代码,以下以wordCount转换成Rust为例:
▲ 将wordCount转Rust
以下是生成的Rust代码,有没有会Rust的?帮看下转换的代码是不是正确的,感觉Rust未来的方向,现在的Javaer总是在网上被人鄙视,好像是处在鄙视链的底层。应该要下定决心好好学习一下Rust,不能再处于鄙视链的底层了!!!
use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;
fn word_count(file: &str, word: &str) -> io::Result<i32> {
let mut count = 0;
let file = File::open(file)?;
for line in io::BufReader::new(file).lines() {
let line = line?;
let mut index = 0;
while let Some(start_index) = line[index..].find(word) {
count += 1;
index += start_index + word.len();
}
}
Ok(count)
}
fn main() {
let file = "a.txt";
match word_count(file, "hello") {
Ok(count) => println!("{}", count),
Err(err) => eprintln!("Error reading file: {}", err),
}
}
4.3 自动生成git commit message
在commit代码时,可以使用AI Assistant来一键生成代码改动总结,不过目前好像只能支持英文。
▲自动生成git commit message
4.3 辅助写作
这点对有写作需求的开发者来说确实满香的,在Idea MarkDown文件里可以直接按Command+
输入提示词无缝使用AI辅助写作:
prompt:帮我这篇文章写5个
总结
▲一键生成文章总结
4.4 自定义提示词
可以根据自定义提示词加入你的右键菜单中:
▲自定义提示词
最后
大模型时代,AI日新月异,每隔一段时间就会出现新的AI应用,AI写代码能力已经可以说是超过初级程序员了,作为以码代码为生的我们应该怎样面对AI的来袭我认为主要可以从以下几点做起:
- 害怕什么就去做什么,怕被AI取代就去学习AI,用AI的优势来弥补自己的不足之处,用自己的优势来弥补AI的不足之处
- 提升自己的软实力,AI代码能力最强,短期来看在团队沟通、协作、管理等方面还比较欠缺,我们可以提升自己这些方面的软实力
- 提质增效,AI目前无法保证输出代码的质量,我们可以提升自己代码质量,使用自动化工具提升团队效率来对抗AI
- 参与开源项目,与优秀的人一起做一个优秀的项目,目前AI是无法做到的,所以我们要积极参与技术社区活动
- 持续进步,定期回顾自己的工作,分析问题总结经验教训,不断改进自己的工作方式和方法,同时关注用户的反馈不断优化产品和服务,提升用户体验
点赞加关注,代码Bug无
评论加转发,项目如期上
收藏加在看,团队心相扣
推荐加赞赏,绩效自然优