深度体验:IntelliJ Idea自带AI Assistant,开启面向AI编程新纪元!

news2024/11/16 16:48:24

首发公众号: 赵侠客

引言

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的功能页面

▲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演示:

强大的代码补齐.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个总结

使用JetBrains AI Assistant辅助写作

▲一键生成文章总结

4.4 自定义提示词

可以根据自定义提示词加入你的右键菜单中:

在这里插入图片描述

▲自定义提示词

最后

大模型时代,AI日新月异,每隔一段时间就会出现新的AI应用,AI写代码能力已经可以说是超过初级程序员了,作为以码代码为生的我们应该怎样面对AI的来袭我认为主要可以从以下几点做起:

  • 害怕什么就去做什么,怕被AI取代就去学习AI,用AI的优势来弥补自己的不足之处,用自己的优势来弥补AI的不足之处
  • 提升自己的软实力,AI代码能力最强,短期来看在团队沟通、协作、管理等方面还比较欠缺,我们可以提升自己这些方面的软实力
  • 提质增效,AI目前无法保证输出代码的质量,我们可以提升自己代码质量,使用自动化工具提升团队效率来对抗AI
  • 参与开源项目,与优秀的人一起做一个优秀的项目,目前AI是无法做到的,所以我们要积极参与技术社区活动
  • 持续进步,定期回顾自己的工作,分析问题总结经验教训,不断改进自己的工作方式和方法,同时关注用户的反馈不断优化产品和服务,提升用户体验

点赞加关注,代码Bug无

评论加转发,项目如期上

收藏加在看,团队心相扣

推荐加赞赏,绩效自然优

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA项目基于SSM的学生成绩管理系统

目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导&#xff0c;获取源码后台 一、前言 二、技术介绍 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端…

全球氢化双酚A (HBPA)市场规划预测:2030年市场规模将接近1330亿元,未来六年CAGR为2.7%

一、引言 随着全球化工行业的持续发展&#xff0c;氢化双酚A (HBPA)作为重要的化工原料&#xff0c;其市场重要性日益凸显。本文旨在探索HBPA行业的发展趋势、潜在商机及其未来展望。 二、市场趋势 全球HBPA市场的增长主要受全球化工行业增加、消费者对高性能化工产品要求提高…

vue3内置组件Suspense

给多个异步组件提供一个统一的状态管理 使用前&#xff0c;有两个loading... 使用后&#xff0c; 只有一个loading... Index.vue: <script setup lang"ts"> import { onMounted, ref, defineAsyncComponent } from vue import { useRouter } from vue-router…

CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。…

什么是网络安全?一文了解网络安全究竟有多重要!

随着互联网的普及和数字化进程的加速&#xff0c;网络安全已经成为我们生活中不可或缺的一部分。然而&#xff0c;很多人对于网络安全的概念仍然模糊不清。 ​ 那么&#xff0c;什么是网络安全&#xff1f;它究竟有多重要呢&#xff1f; 一、网络安全的定义 网络安全是指通过…

【Java】/* JDK 新增语法 */

目录 一、yield 关键字 二、var 关键字 三、空指针异常 四、密封类 五、接口中的私有方法 六、instanceof 一、yield 关键字 yield关键字&#xff0c;从Java13开始引⼊。yield关键字⽤于从case的代码块中返回值。 原本的switch语句写法&#xff1a; public static void …

Notion爆红背后,笔记成了AI创业新共识?

在数字化时代&#xff0c;笔记软件已成为我们记录、整理和创造知识的得力助手。本文将带您深入了解Notion以及其他五个AI笔记产品&#xff0c;它们如何通过AI重塑笔记体验&#xff0c;满足我们快速记录、捕捉灵感、智能整理、情感陪伴和自动撰写文章的五大核心需求。 ———— …

NC 在两个长度相等的排序数组中找到上中位数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定两个递增…

项目比赛项目负责人的汇报技巧:如何让每一次汇报都清晰有力

项目比赛项目负责人的汇报技巧&#xff1a;如何让每一次汇报都清晰有力 前言MECE原则&#xff1a;确保全面性与互斥性SCQA结构&#xff1a;讲一个引人入胜的故事逻辑树思维模型&#xff1a;深入挖掘问题根源STAR法则&#xff1a;展示你的行动与成果PREP模型&#xff1a;清晰表达…

SAP 执行程序报错:Screen does not exist.解决办法

当我们第一次执行创建计划协议—ME31L和ME31事务代码的时候,可能会遇到下图中的这个报错,提示屏幕不存在 处理方式:我们要通过激活二级屏幕的方式激活即可。 1、执行事务代码:CMOD 自定义创建一个项目,这里我们创建的是ZMM02,然后点击创建 然后点击增强分配 将程序名称…

Opencv学习-图像翻转变换

1. flip函数介绍&#xff08;翻转&#xff09; void cv::flip(InputArray src, OutputArray dst, int flipCode ) src&#xff1a;输入图像。 dst&#xff1a;输出图像&#xff0c;与 src 具有相同的大小、数据类型及通道数。 flipCode&#xff1a;翻转方式标志。数值大于 0 表…

geoserver发布wms服务

注意事项&#xff1a;因为这里我安装的是geoserver2.25.2&#xff0c;所以jdk版本换成11&#xff0c;安装17的时候点击浏览文件&#xff0c;右上角转圈&#xff0c;f12打开控制台发现报错500 1、新建工作空间 2、编辑工作空间 3、添加新的存储仓库 4、选择矢量数据源下的第一个…

嵌入式day18

shell脚本配置 shell编程&#xff1a;&#xff08;shell/bash&#xff08;linux&#xff09; ->命令解释器&#xff09; 解释类编程语言 边翻译边执行 擅长文件处理&#xff0c;系统操作 开发效率高 执行效率低 移植性好 c语言&#xff1a; 编程型语言 先编译再执行 擅长数…

(leetcode学习)42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…

Linux常用命令全

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

八大排序--快速排序、希尔排序、冒泡排序、归并排序、堆排序等经典排序算法思想

目录 排序的分类 基本概念 插入排序 直接插入排序 折半插入排序 希尔排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 二路归并排序 基数排序 选择算法需要考虑的因素 排序的分类 其中比较重要的已做标记&#xff0c;下面来简要介绍一下 基本概…

【Python】任推邦近30日推广数据采集+推送

不知道任推邦是啥的&#xff0c;可以查看之前的文章&#xff1a;夸克网盘扩容N次20T的方法 本文主要是针对夸克网盘的&#xff0c;其他项目有的没有提供接口&#xff0c;如果有也自行抓包&#xff0c;参考修改一下就行了。主要是将接口返回内容以html表格形式进行推送&#xf…

数据结构-二叉树(java实现)及相关的oj题

文章目录 树树的定义&#xff1a;关于树的相关概念&#xff1a;树的实际实现形式&#xff08;表现形式&#xff09;树的应用 二叉树二叉树的概念特殊的二叉树二叉树的性质&#xff1a;二叉树的存储实现&#xff1a;二叉树的模拟实现&#xff1a;实现的成员方法与属性&#xff1…

CSS3中动画的制作案例

直接上代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>-webkit-keyframes expand {0% {border-width: 4px;}50% {border-width: 12px;}100% {border-width: 4px;height: 130px;width: 15…

C#对象和类型

属性、方法、字段 字段和属性的区别 在C#中&#xff0c;字段&#xff08;fields&#xff09;和属性&#xff08;properties&#xff09;都是类的成员&#xff0c;它们提供了类存储数据的方式&#xff0c;但它们在用途和功能上有着明显的区别。 字段 字段通常用来存储类…