「豆包Marscode体验官」又一个不用充钱能让我变强的助手

1,085 阅读10分钟

我正在参加「豆包MarsCode初体验」征文活动 juejin.cn/post/738499…


文章目录

    • 前言

    • 技术积累

      • 豆包Marscode是什么?
      • Copilot是什么?
      • 豆包Marscode主要功能
      • 豆包Marscode有哪些优势?
      • 豆包Marscode支持语言/工具
      • 豆包Marscode接入方式
      • 豆包Marscode帮助中心
    • 实战演示

      • 安装插件
      • 行/函数级实时续写
      • 自然语言生成代码
      • 代码优化
      • 单元测试生成
      • 代码注释生成
      • 解释代码
      • 研发智能问答,解决问题更轻松
      • 异常报错智能排查(Java IntellJ IDEA 2021版本未开启)
    • 写在最后


01 前言

AI编码助手(AI Coding Assistant)是一种利用人工智能帮助开发人员更快、更准确地编写代码的软件工具。它可以通过根据提示生成代码或在你实时编写代码时建议自动完成代码来实现此目的。以下是AI代码助手可以做的一些事情:
1、与你使用的流行代码编辑器集成,例如 IntelliJ IDEA、Goland、Visual Studio Code等等
2、根据提示或代码注释生成完整的代码片段
3、自动完成实时编写的代码行
4、检测代码中的错误、错误和安全漏洞
5、帮助注释代码,以便方便回头参考
6、代码纠错
7、API查询或学习
8、…

目前市面上几乎所有大厂都有自研AI编码助手,比如Github Copilot、亚马逊CodeWhisper、微软Sketch2Code、华为CodeArts Snap、阿里通义灵码、科大iFlyCode、蚂蚁CodeFuse、京东Deco、商汤代码小浣熊等等。

其实各种的AI编码助手底层都是采用大模型,并在后期经过海量优秀开源代码数据训练而成,今天我们就分享一款来自字节跳动的编码助手——豆包MarsCode。

image.png

02 技术积累

豆包MarsCode是什么?

豆包 MarsCode 提供了编程助手和 IDE 来协助你完成编程任务。

豆包 MarsCode 编程助手,具备以智能代码补全为代表的 AI 功能。支持了多种编程语言以及主流的 IDE,国内Copilot平替产品,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力,除此之外,它还对代码解释、单元测试生成以及问题修复等功能提供支持,进而提升了开发的效率与质量。

豆包 MarsCode IDE 是一个 AI 原生的云端集成开发环境(IDE)。内置的 AI 编程助手和开箱即用的开发环境。

但是使用过程中没有跑通Demo,引入第三方包出现问题比较多,下次再写。

豆包 MarsCode 编程助手主要功能

基础能力: 代码补全、代码生成、代码解释、代码注释、单元测试生成...

这些基础能力没什么说的,编程助手出了这么久,每一家都在围绕着基础能力做文章,已经卷不出差别

代码补全Pro: 基于上一次的编辑内容及代码情况,预测下一个改动点并提供推荐代码。

很心动的功能,经常写代码的同学知道,Ctrl+c,v后,最难受的就是修改代码

智能修复:发现代码中的问题并修复。

直接在代码上改,不用Ctrl+c,v,这才是Copilot

智能问答:针对研发领域定向优化问答质量,提供更精准的问答结果。

问答大多都有,但是豆包有嵌入式问答,就舒服了很多

豆包 MarsCode 编程助手有哪些优势?

对新手友好:不得不说豆包是真照顾不回编程的人,提示、新手引导超赞,估计是经历了Coze的插件开发优化后,知道新AI人多数不回编程 代码修复:当编码中出现需要修复的代码 Lint 错误时,编程助手会直接在编辑器中主动给出修改代码,我们不需要去查看是什么报错原因,只需要判断修复结果是否正确,如果正确,一键采纳修复后的代码即可。

豆包 MarsCode 编程助手支持语言/工具

支持的 IDE

豆包 MarsCode 编程助手支持的 IDE 如下:

IDE 名称说明
Visual Studio Code支持 1.67.0 及以上版本。
JetBrains包括 IntelliJ IDEA、Pycharm、Goland、Android Studio、WebStorm、Clion、Rider、Phpstorm、DataGrip 等。版本须为 221.5080.210 及以上。

支持的语言/框架

豆包 MarsCode 编程助手支持的主流语言和框架如下:

类型支持的语言/框架
后端Go、Python、C++、C、C#、Java、PHP、Rust
前端HTML、TypeScript、JavaScript、CSS
应用端Kotlin、Objective-C、Swift
其他Lua、SAS、CUDA、Perl、Ruby、Shell、SQL、R

03 实战演示

本次演示采用IntelliJ IDEA编码工具,并采用后端Java代码进行,前端也可采用VS Code工具编写JS代码进行测试。

安装插件

直接在IDEA插件菜单栏进行搜索‘’Marscode",选择安装。安装成功后可在工具栏找到并登录豆包Marscode账号,即可开始使用。

如何辨别是否成功启用??

image.png

行/函数级实时续写

在编码的过程中,根据上下文和当前语法,为你自动预测和生成建议代码,你只需单击 Tab 键即可采纳。

image.png

自然语言生成代码

在编辑器中,通过自然语言描述你想要的功能,根据你的描述和上下文,支持在编辑器区直接生成代码及相关注释,编码心流不间断。

冒泡排序算法自动生成

image.png

代码优化

帮你识别代码中的问题,并提供代码优化建议

测试写了一段垃圾代码,我们选择生成代码优化建议

image.png

豆包Marscode优化建议:

这段代码的目的是根据输入的字符串str,判断它是否包含特定的字母,并输出相应的结果。代码中使用了多个if-else if语句来判断字符串中是否包含不同的字母。如果字符串中包含的字母是"a"、“b”、“c”、“d”、“e”、“f"或"g”,则输出对应的字母,否则输出"over"。
优化建议如下:
使用switch语句代替多个if-else if语句,以提高代码的可读性和维护性。
将字符串"sdfgasef"作为方法的参数传入,以增加代码的灵活性和可复用性。

优化后的代码如下:

/**
 * 代码优化
 * @param str 待判断的字符串
 * @return void
 */
public void codeOptimization(String str) {
    switch (str) {
        case "a":
            System.err.println("a");
            break;
        case "b":
            System.err.println("b");
            break;
        case "c":
            System.err.println("c");
            break;
        case "d":
            System.err.println("d");
            break;
        case "e":
            System.err.println("e");
            break;
        case "f":
            System.err.println("f");
            break;
        case "g":
            System.err.println("g");
            break;
        default:
            System.err.println("over");
            break;
    }
}

这样,调用codeOptimization方法时,只需要传入不同的字符串即可,而不需要修改方法内部的判断逻辑。同时,使用switch语句可以更清晰地表达代码的意图,提高代码的可读性。

单元测试生成

支持根据 JUnit、Mockito、Spring Test、unit test、pytest 等框架生成单元测试以及单元测试相关代码解释。

任意编辑一段代码,我们选中生成单元测试

image.png

豆包Marscode的代码建议:

为了测试generateUnitTest方法,我们可以使用JUnit 5框架来编写单元测试。首先,我们需要创建一个测试类,然后在该类中编写测试方法。
以下是一个示例:

package com.example.ccedemo;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import static org.junit.jupiter.api.Assertions.*;

import java.io.File;

public class TongYiLingMaTestTest {

    private TongYiLingMaTest tongYiLingMaTest;

    @BeforeEach
    public void setUp() {
        tongYiLingMaTest = new TongYiLingMaTest();
    }

    @Test
    public void testGenerateUnitTest() {
        // 假设文件存在
        File mockFile = new File("D:\test\test.jpg");
        try {
            // 使用Mockito框架模拟File类的exists方法
            Mockito.when(mockFile.exists()).thenReturn(true);

            // 调用待测试的方法
            tongYiLingMaTest.generateUnitTest();

            // 验证方法是否按预期执行
            // 由于HttpUtil.generatePresignedUrl是一个静态方法,我们不需要mock它
            // 可以直接验证输出结果是否符合预期
            // 例如,我们可以验证url是否被正确打印出来
            // 由于我们没有HttpUtil.generatePresignedUrl方法的实现,这里我们只是假设它返回一个有效的URL
            // 如果需要,可以添加对URL的验证
            // assertEquals(expectedUrl, System.out.toString());
        } catch (Exception e) {
            fail("generateUnitTest should not throw any exception");
        }
    }
}

请注意,上述代码中使用了Mockito框架来模拟File类的exists方法。这是因为我们不需要真正检查文件是否存在,我们只需要确保方法能够正常执行。如果需要,你也可以添加对URL的验证。
在编写测试用例时,我们通常会使用@BeforeEach注解来设置测试环境,例如创建测试对象。然后,在测试方法中,我们模拟必要的对象和行为,调用待测试的方法,并验证其行为是否符合预期。
请注意,由于generateUnitTest方法中使用了System.out.println来打印信息,我们无法直接验证输出。如果需要验证输出,可以考虑使用System.setOut来捕获输出流,或者使用其他测试框架的特性来捕获输出。

代码注释生成

一键生成方法注释及行间注释,节省写代码注释的时间,有效提升代码可读性和注释覆盖率。

image.png

豆包Marscode注释:

  /**
     * 代码注释生成
     * @author senfel
     * @date 2024/2/4 11:32
     * @return void
     */
    public void codeNote(){
        int[] arr = new int[]{1, 2, 10, 4, 5, 6, 7, 8, 9,3,0}; // 创建一个整型数组
        for (int i = 0; i < arr.length; i++) { // 外层循环控制比较的轮数
            for (int j = 0; j < arr.length - 1 - i; j++) { // 内层循环控制每轮比较的次数
                if (arr[j] > arr[j + 1]) { // 如果当前元素大于下一个元素
                    int temp = arr[j]; // 交换两个元素
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

解释代码

支持 30 多种语言的识别,选中代码后可自动识别编程语言并生成代码解释。跨越语言的边界。

image.png

这个函数的功能是将给定的整型数组按照从小到大的顺序进行排序。它使用了冒泡排序算法,通过比较相邻的元素并交换位置,将较大的元素逐渐往后移动,从而实现排序。

研发智能问答,解决问题更轻松

基于海量研发文档、产品文档、通用研发知识进行问答训练,为你答疑解惑,助你轻松解决研发问题。

插件对话框直接输入问题

image.png

04 写在最后

豆包Marscode提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力。在实际的开发过程中对我们代码质量和异常排查也有着良好的支持,可以大大节省编码时间。

总体来说使用后的感受:

  • 从Explain、Doc、Test的视角来看,MarsCode确实在一定程度上提高了开发效率。Explain功能能够清晰地解释代码的含义,帮助我更好地理解代码的运行逻辑;Doc功能则提供了详细的文档说明,让我能够快速找到需要的信息;Test功能则能够自动生成测试用例,并执行测试,节省了我编写测试代码的时间。

  • MarsCode还支持进行chat对话,这个功能与chat gpt比较类似。虽然这个功能并没有给我带来太多的惊艳体验,但它确实可以作为一个备选的工具,用于解决一些开发过程中的问题。不过需要注意的是,使用这个功能需要实时联网,这在一定程度上可能会影响使用体验。

  • MarsCode是基于自研云雀大模型算法开发的。也就是说MarsCode至少是一个基于API套壳的工具,这意味着它的功能可能会受到一定的限制,无法完全满足开发过程中的所有需求。

MarsCode作为一个开发工具,聊胜于无。它提供了一些有用的功能,能够在一定程度上提高开发效率。但同时需要注意,使用MarsCode时需要保护好自己的代码隐私,避免泄露敏感信息。