通義靈碼,是阿里雲出品的一款基於通義大模型的智能編碼輔助工具,提供行級/函數級實時續寫、自然語言生成代碼、單元測試生成、代碼優化、註釋生成、代碼解釋、研發智能問答、異常報錯排查等能力,並針對阿里雲的雲服務使用場景調優,助力開發者高效、流暢的編碼。
代碼智能生成,完成工作更高效
經過海量優秀開源代碼數據訓練,可根據當前代碼文件及跨文件的上下文,爲你生成行級/函數級代碼、單元測試、代碼註釋等。沉浸式編碼心流,秒級生成速度,讓你更專注在技術設計,高質高效地完成編碼工作。
行/函數級實時續寫
在編碼的過程中,根據上下文和當前語法,爲你自動預測和生成建議代碼,你只需單擊 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 服務下載文件可以通過以下步驟實現:
-
在阿里雲控制檯上創建 OSS 存儲桶(Bucket)並上傳需要下載 的文件;
-
獲取存儲桶和文件的 URL:在阿里雲控制檯上可以找到存儲桶的 URL,文件的 URL 可以通過在存儲桶中選擇文件並點擊“複製鏈接” 來獲取;
-
使用編程語言中的 HTTP 客戶端庫發送 HTTP GET 請求到文件的 URL 上。根據需要可以設置請求頭、請求體等參數;
-
服務器收到請求後,會返回文件內容。根據需要可以將文件內容保 存到本地文件系統或直接寫入到其他輸出流中。
異常報錯智能排查
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的查詢次數。——海爾科技|技術架構師
點擊此處,立即瞭解「通義靈碼」並參與使用!