1.前言
大模型到底该以一种什么方式落地,从而嵌入我们的工作当中,助力我们工作效率的提升,其实最好的方式也许就是虚拟助手的方式,就像钢铁侠的"贾维斯"一样,随叫随到能回答问题,能自动的解决一些问题。
阿里开源出了自己的编程大模型“通义灵码”之后,我们可以通过IDEA插件的方式轻松打造一个自己的编程“贾维斯”。
2.下载安装
直接去插件市场里面搜索TONGYI Lingma就可以搜索出对应插件:
安装好之后需要我们用自己的阿里云账号来登录,点击登录会转跳登陆界面,用支付宝或者淘宝扫码即可:
登录完成后IDEA的面板会变成这样:
这样我们就有了自己的编程“贾维斯”。
它具体能做什么?已经写的很清楚了:
接下来我们就来感受一下这些功能。
3.解释代码
解释代码,这功能就太好用了。我说几种情况,大家要是中招的,可以把"真实"二字打在评论区里。
情况一:
祖传代码我相信大家目前所在的团队都会是有的,目前博主所在的团队手里就有大量的祖传代码,其中一个后端的controller类有接近一万行代码。这些沉重的“历史包袱”往往是阻碍我们开发的罪魁祸首。真不是写不出来,而是读不懂。
情况二:
作为后端的我们对前端代码其实没有那么熟悉,但有些时候我们是需要去碰一下前端代码做一些小修小改的。这种时候代码读起来真的是连蒙带猜。
情况三:
一些开源组件或框架的底层源码其实写的不一定就是很规范的,源码简直就是一片汪洋大海,很容易在里面迷路。
真实吧?ok,那找个帮手来帮我们一下就行了,交给通义灵码给我们翻译成人话就行了。
选中要翻译的代码,解释代码即可。
可以看到解释的非常准确:
当然你要是觉得它解释的不够清楚,还可以点击更详细,让它解释的更详细一点:
4.生成单元测试
但凡是对质量有一定要求的团队,在实际的生产中,单元测试是必然逃不过的一环,并且还会要求很高的覆盖率。关于单元测试博主前面有专门的文章讲解,有需要的话可以移步:
关于单元测试,是既重要又繁琐,它需要自己去手动写代码来构建测试用例,但既然是手动的活儿就有几率写的不好,覆盖不全面的情况发生。交给通义灵码,它可以自动帮我们生成单元测试。
选中我们想要生成单元测试的方法:
通义灵码会自动生成单元测试:
可以看到它生成的是junit的单元测试,同时它也提供了让我们选择其它诸如mockito之类的测试框架。
注意头上右上角的选项哈,它是可以自动帮我们生成类文件的:
来看一下它生成的单元测试对不对:
可以看到是很正确的,该用mock的方式注入JDBC,它是注入了的,改声明主启动类从而给出一个IOC环境,它也是正确声明了的。
package com.eryi.service; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; @ExtendWith(MockitoExtension.class) @ExtendWith(SpringExtension.class) public class UserServiceTest { @Mock private JdbcTemplate jdbcTemplate; @InjectMocks private UserService userService; @BeforeEach public void setUp() { // 初始化测试环境 } @Test public void testTransfer() { // 设置预期行为 when(jdbcTemplate.update(anyString(), anyVararg())).thenReturn(1); // 调用待测试的方法 userService.transfer(); // 验证方法调用 verify(jdbcTemplate, times(1)).update("update user set balance = balance - ? where id = ?", 100, 1); verify(jdbcTemplate, times(1)).update("update user set balance = balance + ? where id = ?", 100, 2); // 验证事务是否回滚 try { userService.transfer(); fail("Expected an exception to be thrown"); } catch (RuntimeException e) { // 异常应该被抛出 } } }
5.生成注释
6.智能补全
写代码写一半补全另一半已经很强了是吧?
通义灵码还能通过注释直接生成代码,写完注释后回车,然后会智能提示出可补全的内容,按tab键可以采纳智能补全。