LLM 應用于編程輔助調研
前言
AI輔助編程出現之前需要簡單重復技藝的修煉,也就是拔刀速度影響了發揮,今后拔刀速度可以忽略了。
往后的開發可以思考道為主,反正簡單重復技藝的部分都可以交給AI,甚至一部分求道的過程是跟AI共同完成。
一、能做什么
-
解析代碼:陳年代碼一時難以理解,快速解析用途、優缺點等;
-
語言轉換
-
代碼刷子:可以增強代碼可讀性,添加類型,智能修復可能的bug,比code Runner更優秀的即時代碼調試,優化冗余代碼.....
-
測試用例生成
以下引用于(PS:調查數據本身可能存在偏向性,僅做參考):https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/
開發者們報告稱,Copilot 能幫助他們穩步推進開發流程(73%),并在處理重復性任務期間降低精力消耗(87%)

有近 90% 的開發者們表示,在使用 Copilot 時,他們完成任務,特別是重復性任務的速度更快了。這也符合 GitHub 在產品設計時做出的基本預期。
為了在實踐中觀察并量化這種提升效果,GitHub 組織了一場對照實驗。兩個受試小組(其中一組使用 Copilot)需要接受計時,核算用 JavaScript 編寫 HTTP 服務器的平均用時。
- 實驗發現:
- 使用 Copilot 的小組完成任務的比例更高,為 78%,未使用 Copilot 的小組完成任務比例為 70%。
- 更顯著的區別在于,使用 Copilot 的開發者完成任務的速度明顯更快,要比未使用 Copilot 的開發者快 55%。具體來看,使用 Copilot 的開發者完成此項任務的平均用時為 1 小時 11 分鐘,而未使用 Copilot 的開發者平均用時達 2 小時 41 分鐘。
綜上,該項調查和實驗最終得出的結論是,“Copilot 有助于加快工作完成速度,幫助開發者減少精神內耗,以更加飽滿的精神狀態專注于工作內容,最終在自己的編碼過程中找到更多樂趣。”
![]()
二、局限性
輔助編程并不是萬能的,也存在局限性。
-
缺乏上下文理解:盡管Copilot使用了先進的自然語言處理技術,但它仍然可能無法完全理解程序員試圖實現的上下文或業務邏輯,從而生成的代碼可能不完全符合預期。
-
缺乏安全性保障:Copilot生成的代碼可能存在安全漏洞,這是因為它只是根據輸入的提示和上下文生成代碼,并沒有考慮到潛在的安全風險。
-
受限于語言和庫:Copilot只支持特定的編程語言和庫,因此在不支持的領域或者語言中使用它可能會受到限制。
-
代碼風格不統一:Copilot生成的代碼可能不符合團隊或者組織的編碼規范和風格指南,這可能導致代碼質量和可維護性下降。
-
需要云服務支持:Copilot只能在與GitHub相關的云服務中使用,這可能會對一些開發者造成限制。
-
代碼敏感安全性:Copilot 在使用過程中,會通過向 GitHub 提交代碼進行學習,因此需要注意提交的代碼內容是否包含敏感信息。
根據 OpenAI 的論文,Codex 只有 29% 的時間會給出正確答案。而且它編寫的代碼往往重構得很差,無法充分利用現有的解決方案。
Copilot 之所以比那些水平一般的程序員更糟糕,一個關鍵問題在于,它甚至沒有嘗試編譯代碼或檢查代碼是否有效,也沒有考慮過自己是否真的遵循了文檔的指示。
此外,Codex 沒有接受過去一兩年內創建代碼的訓練,因此它完全沒學過最新版本、庫和語言特性。例如,提示它創建 fastai 代碼后,它只會給出使用 v1 API 的建議,而不是大約一年前發布的 v2 版本。
三、效果展示
https://d16xvuom8mr9m8.cloudfront.net/videos/completions/main.mp4
以下代碼均通過編寫注釋,按tab自動生成
package com.example.demo.service;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
/**
* 該服務用于提供數學計算支持,包括但不限于加、減、乘、除、取平均、取余等
*/
@Service
public class MathService {
//提供精確到小數點后5位的數值加法
public BigDecimal plus(BigDecimal a, BigDecimal b){
return a.add(b);
}
public BigDecimal plus(String a, String b){
return plus(new BigDecimal(a), new BigDecimal(b));
}
public BigDecimal plus(Integer a, Integer b){
return plus(new BigDecimal(a), new BigDecimal(b));
}
public BigDecimal plus(Long a, Long b){
return plus(new BigDecimal(a), new BigDecimal(b));
}
public BigDecimal plus(Double a, Double b){
return plus(new BigDecimal(a), new BigDecimal(b));
}
//提供精確到小數點后2位的數值減法
public BigDecimal minus(BigDecimal a, BigDecimal b){
return a.subtract(b);
}
public BigDecimal minus(String a, String b){
return minus(new BigDecimal(a), new BigDecimal(b));
}
//統計分析list中元素最多的10個
public Integer max10(List<Integer> list){
return list.stream().max(Integer::compareTo).get();
}
//求list中所有數值的平均值
public BigDecimal avg(List<BigDecimal> list){
return list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
}
//求list中所有數值的中位數
//####################此處明顯可以看到,中位數求值明顯錯誤
public BigDecimal mid(List<BigDecimal> list){
return list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
}
//####################此處明顯可以看到,中位數求值明顯錯誤
//求list中所有數值的最大值
public BigDecimal max(List<BigDecimal> list){
return list.stream().max(BigDecimal::compareTo).get();
}
//求list中所有數值的最小值
public BigDecimal min(List<BigDecimal> list){
return list.stream().min(BigDecimal::compareTo).get();
}
//求list中最大值
public Integer max(Integer[] list){
return list.stream().max(Integer::compareTo).get();
}
}
四、業界應用
WPS珠海金山,應用chatgpt開發自動化測試vbscript腳本,據說有一倍的開發效率提升,不過仍然需要花時間調試代碼處理正確性
五、多產品對比
| 工具 | 收費 | 鏈接 | 模型 | 備注 |
|---|---|---|---|---|
| copilot | 個人:10$每月 100$每年 企業級:19$每人每月 |
https://github.com/features/copilot | gpt4 | 按tab鍵自動填充代碼 企業級受限于github賬戶以及與github賬戶關聯的組織 |
| chatgpt-genie ai | 20$每月 | https://github.com/ai-genie/chatgpt-vscode https://www.loom.com/share/1a57be874e5d4ec099493cc68ed31e04 |
gpt4 | 用于vscode集成與chatgpt對話 需開啟chatgpt會員,獲取 secret key https://platform.openai.com/account/api-keys |
| Tabnine AI Autocomplete for Javascript, Python, Typescript, PHP, Go, Java, Ruby & more |
免費14天 pro:12$每人每月 企業版:待深入溝通 |
https://www.tabnine.com/pricing | gpt4 | 按tab鍵自動填充代碼 vscode插件 試用過程中發現提示實現代碼有邏輯錯誤 |
| StarChat | 免費 需要采購硬件訓練 | https://huggingface.co/blog/starchat-alpha https://huggingface.co/bigcode/starcoder https://huggingface.co/HuggingFaceH4/starchat-alpha |
gpt like | 采用GPU : 512 Tesla A100 訓練耗時 24天 512 Tesla A100 * 8訓練耗時 45分鐘 ![]() |
Copilot
3月23日消息,當地時間3月22日,微軟旗下代碼托管平臺GitHub發布了編程輔助工具Copilot的全新版本Copilot X,新版本接入GPT-4,并新增了聊天和語音功能,允許開發人員用自然語言詢問如何完成特定的編碼功能。
六、總結
1.多產品成熟度
copilot > chatgpt-genie ai > Tabnine AI Autocomplete > StarChat
2.編程輔助
綜合來看AI應用于編程輔助,越是枯燥乏味的代碼補全越是準確,的確可以提高寫代碼效率。
但是真正在寫代碼而不是模仿時,缺乏基于業務上下文的靈巧聯想能力;同時也不能保證提示代碼完全正確,需要測試驗證;有時也會提示一些并不滿足需求的實現。
**使用Copilot前**
這個功能不會寫
1. google / stack overflow
2. ctrl C
3. ctrl V
4. 改改輸入,改改輸出
done!
**使用Copilot后**
這個功能不會寫
1. 管他呢!先寫個方法名,再來點注釋
2. 猜一個庫函數名,然后在IDE智能提示里選一個看起來差不多的,回車
3. 讓copilot跳出來自動補全,一路tab
4. 改改輸入,改改輸出
done!
備注:步驟3,4 ctrl c + v可以省略
3.業務場景
圍繞著開發測試腳本、單元測試等場景,不如效仿WPS直接采用ChatGPT。
浮生潦草閑愁廣,一聽啤酒一口盡


浙公網安備 33010602011771號