通義靈碼——靈動指間,快碼加編,你的智能編碼助手

通義靈碼,是阿里雲出品的一款基於通義大模型的智能編碼輔助工具,提供行級/函數級實時續寫、自然語言生成代碼、單元測試生成、代碼優化、註釋生成、代碼解釋、研發智能問答、異常報錯排查等能力,並針對阿里雲的雲服務使用場景調優,助力開發者高效、流暢的編碼。

點擊此處立即參與通義靈碼體驗!

代碼智能生成,完成工作更高效

經過海量優秀開源代碼數據訓練,可根據當前代碼文件及跨文件的上下文,爲你生成行級/函數級代碼、單元測試、代碼註釋等。沉浸式編碼心流,秒級生成速度,讓你更專注在技術設計,高質高效地完成編碼工作。

行/函數級實時續寫

在編碼的過程中,根據上下文和當前語法,爲你自動預測和生成建議代碼,你只需單擊 Tab 鍵即可採納。

public class ZipUtil {
  // 將文件壓縮爲zip文件
  public static void zip(String sourceDir, String zipFile) {icon
    try (ZipOutputStream zos = new ZipOutputStream(
      new FileOutputStream(zipFile))) {
      File[] files = new File(sourceDir).listFiles();
      for (File file : files) {
          if (file.isFile()) {
              zos.putNextEntry(
                new java.util.zip.ZipEntry(
                  file.getName()
                )
              );
              zos.write(FileUtils.readFileToByteArray(file));
              zos.closeEntry();
          }
      }
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

自然語言生成代碼

在編輯器中,通過自然語言描述你想要的功能,根據你的描述和上下文,支持在編輯器區直接生成代碼及相關注釋,編碼心流不間斷。

// 生成 SHA1 簽名

public static String sha1(String str) {
  try {
      MessageDigest md = MessageDigest.getInstance(
        "SHA-1"
      );
      md.update(str.getBytes());
      byte[] digest = md.digest();
      return java.util.Base64.getEncoder().
        encodeToString(digest);
  } catch (Exception e) {
      throw new RuntimeException(e);
  }
}
public static void main(String[] args) {
  String str = "123456";
  String sign = sha1(str);
  System.out.println(sign);
}|

單元測試生成

支持根據 JUnit、Mockito、Spring Test、unit test、pytest 等框架生成單元測試以及單元測試相關代碼解釋。

import org.junit.Assert;
import org.junit.Test;

public class DemoTest {
    @Test
    public void testMerge() {
        int[] nums1 = {1, 3, 5, 0, 0, 0};
        int[] nums2 = {2, 4, 6};
        int[] expected = {1, 2, 3, 4, 5, 6};
        int[] result = Demo.merge(nums1, 3, nums2, 3);

        Assert.assertArrayEquals(expected, result);
    }
}|

代碼優化

深度分析代碼及其上下文,迅速識別潛在的編碼問題,從簡單的語法錯誤到複雜的性能瓶頸,均能夠指出問題所在,並提供具體的優化建議代碼。

這段代碼的目的是創建一個 ArrayList,向其添加兩個字符串元素,然後檢查這個列表是否包含了所有它自己的元素。然而,這樣的檢查是無意義的,因爲這樣的列表永遠爲真。此外,如果列表確實包含了所有元素,那麼代碼將打印出"Hello world",並移除所有這些元素,使用 removeAll 方法代替 clear 方法,這在列表中有很多元素時會影響性能。

優化後的代碼如下:

public static void foo() {
  List<String> list = new ArrayList<>();
  list.add("Hello");
  list.add("World");
  if (list.size() == 2) { // 假設您需要檢查列表是否包含兩個特定的元素
      System.out.println("Hello world");
  }
  list.clear(); // 更高效的清空方法
}

在這個優化版本中,我移除了list.containsAll(list)的調用,因爲它總是返回true,並且沒有實際的檢查目的。相反,我檢查list的size是否等於2,這取決於您實際的業務需求,假設您需要確保列表包含兩個特定的元素。如果list.size()等於2,那麼假設條件成立,會打印出"Hello world"。最後,使用clear()來清空列表,這是一個更高效的方法,因爲它在內部不需要進行復雜的remove操作。請根據您的實際需求調整對list.size()的檢查。如果您的需求不是檢查特定數量的不同元素,您可以移除這個檢查,並且直接調用list.clear()來清空列表。

代碼註釋生成

一鍵生成方法註釋及行間註釋,節省你寫代碼註釋的時間,有效提升代碼可讀性和註釋覆蓋率。

/**
 * 壓縮文件或目錄到Zip文件中
 * @param file 要壓縮的文件或目錄
 * @param zos ZipOutputStream對象
 * @throws Exception 壓縮過程中可能出現的異常
 */
private static void zip(File file, ZipOutputStream zos) 
throws Exception {
   // 如果是文件,則直接壓縮
   if (file.isFile()) {
       zos.putNextEntry(new ZipEntry(file.getName()));
       FileInputStream in = new FileInputStream(file);
       int len;
       byte[] buf = new byte[1024];
       while ((len = in.read(buf)) != -1) {
           zos.write(buf, 0, len);
       }
       in.close();
   } else {
       File[] files = file.listFiles();
       for (File f : files) {
           zip(f, zos);
       }
   }
}|

代碼解釋

支持 30 多種語言的識別,選中代碼後可自動識別編程語言並生成代碼解釋。跨越語言的邊界,讓你快速瞭解代碼邏輯和功能設計。

public static List<String> listDir(OssConfig 
  cfg, String keyPreffix) {
      List<String> result = new ArrayList<>();
      OSSClient ossClient = new OSSClient(
        cfg.endpoint, cfg.accessKeyId, cfg.accessKeySecret
      );
      String nextMarker = null;
  try {
      ObjectListing objectListing = null;
      do {
          objectListing = ossClient.listObjects(
              new ListObjectsRequest(cfg.bucketName)
                  .withPrefix(keyPreffix)
                  .withDelimiter("/")
                  .withMarker(nextMarker));
          for (String commonPrefix : objectListing.
            getCommonPrefixes()) {
              result.add(commonPrefix);
          }
          nextMarker = objectListing.getNextMarker();
      } while (objectListing != null && objectListing.
        isTruncated());
  } catch (Exception e) {
      log.error(e.getMessage(), e);
  } finally {
      ossClient.shutdown();
  }
  return result;
}

該函數用於在阿里雲 OSS 中列出指定前綴的文件夾列表。通過循環調用OSSClient 的 listObjects 方法,獲取文件夾列表並將其添加到結果列表中。最後返回結果列表。

研發智能問答,解決問題更輕鬆

基於海量研發文檔、產品文檔、通用研發知識、阿里雲的雲服務文檔和 SDK/OpenAPI 文檔等進行問答訓練,爲你答疑解惑,助你輕鬆解決研發問題。

研發領域知識問答

例如:

問:如何調用阿里雲 OSS 服務下載文件

通義靈碼:調用阿里雲 OSS 服務下載文件可以通過以下步驟實現:

  1. 在阿里雲控制檯上創建 OSS 存儲桶(Bucket)並上傳需要下載 的文件;

  2. 獲取存儲桶和文件的 URL:在阿里雲控制檯上可以找到存儲桶的 URL,文件的 URL 可以通過在存儲桶中選擇文件並點擊“複製鏈接” 來獲取;

  3. 使用編程語言中的 HTTP 客戶端庫發送 HTTP GET 請求到文件的 URL 上。根據需要可以設置請求頭、請求體等參數;

  4. 服務器收到請求後,會返回文件內容。根據需要可以將文件內容保 存到本地文件系統或直接寫入到其他輸出流中。

異常報錯智能排查

Exception in thread "main" java.lang.
StringIndexOutOfBoundsException Create breakpoint :index 1,lengt at java.base/java.lang.String.checkIndex(String.java:3278)
at java.base/java.lang.String.checkIndex(String.java:3278)
at java.base/java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.j

通義靈碼:這段代碼會出現 java.lang.StringIndexOutOfBoundsException: index 1, length 0 異常的原因是 StringBuilder 的長度爲0,無法 刪除下標爲1的字符。要修復這個問題,可以先給 StringBuilder 添加字 符,例如前面加上 stringBuilder.append("Hello"),刪除指定字符後 則會輸出 Hllo 。在這個例子中,stringBuilder 的初始長度爲5,刪除 下標爲 1 的字符後,長度變爲4。

多編程語言、多編輯器全方位支持

支持 Java、Python、Go、JavaScript、TypeScript、C/C++、C# 等主流語言,同時兼容 Visual Studio Code、JetBrains IDEs 等主流編程工具,爲你提供高效、流暢、舒心的智能編碼體驗。

未來已來,碼上見證

根據阿里雲內部研發全面應用和真實反饋,通義靈碼自動生成的推薦代碼中,有 30%~50% 被代碼開發者採納,成倍地提升研發工作效率。

通義靈碼已經不再是玩具,而是生產力工具!——極海|資深技術專家

用通義靈碼把編碼、調研、分析交給大語言模型,發揮人類工程師獨特創造性。——張剛|英慕科技創始人

嘗試用通義靈碼寫了 OpenAPI 的測試,在已寫的API 的基礎上寫第二個時,助手首次給出的補全匹配度達到 60%70%。我糾正過一次後,後續匹配度達到80%90%,體驗超預期。——阿里雲測試工程師

認真的把通義靈碼從頭到尾玩了一遍,整體來說還是很驚喜的。尤其是通義靈碼的條件下SHELL腳本自生成能力已經達到高級,能夠根據要求編寫一系列複雜shell腳本。——週週|某政企事業單位工程師

通義靈碼的續寫代碼功能非常強大。它能夠根據當前的代碼上下文,預測出可能的代碼走向,給出合適的代碼片段,極大地提高了編程效率。同時,它也能自動識別編程語言,並給出相應的代碼解釋,對於學習編程的新手來說非常有幫助。
除了續寫代碼功能,通義靈碼的生成測試代碼功能也十分出色。相較於人工編寫測試用例需要數分鐘甚至數十分鐘的時間,通義靈碼可以以毫秒級的速度生成測試代碼,且準確率和覆蓋率都令人滿意。——朗新科技 資深產品工程師

通義靈碼作爲國產工具,更加符合國內人的情況:通義靈碼在智能問答、單元測試生成、代碼解釋,起到了非常大的幫助。新接手項目,使用通義靈碼的代碼解釋,大大提高了瞭解的效率;開發過程中,API查詢,用靈碼問答詢問更加高效,省了Google和Bing的查詢次數。——海爾科技|技術架構師

點擊此處,立即瞭解「通義靈碼」並參與使用!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章