
ChatGPT4 相比 ChatGPT3.5 在邏輯推理能力上有了很大的進步,他的代碼生成能力更是讓我非常震撼,因此我嘗試在作業中某些不涉密的基礎作業應用 ChatGPT4 來提升研發效率,簡單嘗試之后發現確實有不少場景是有效的,
本文將向大家展示如何充分利用 ChatGPT-4 這一強大的 AI 工具,并結合結對編程方法,從而在研發程序中實作顯著的效率提升,
重要提示:大家在作相應嘗試的時候,一定要注意資訊安全,
場景一:正則運算式撰寫
我們團隊負責 PCG 可觀測平臺-伽利略的研發,PromQL 是可觀測領域常用的查詢語言,Protobuf 這種協議有自帶基于正則運算式的引數檢查器,因此我們需要寫一個正則運算式,來檢測 PromQL 的合法性,以便于盡早的發現不合法的 PromQL,拋出錯誤,降低底層引擎的壓力,
這個需求,按經驗至少得花超過一小時編碼及單元測驗,得翻閱不少 PromQL 手冊,正則運算式的手冊,我們試著把這個任務交給 ChatGPT4,

ChatGPT4 寫了一個很復雜的運算式,并且告訴我們這個需求是不合理的,完美的語法檢測得要實作一個語法分析器,而不是正則運算式,
這里我完善我的需求,我們在接入層的正則應該在乎精確率,忽略召回率,旨在盡早發現一部份錯誤,而不是全部錯誤,

這一次,看上去還不錯,但是我懶,不想仔細看,我又不放心他寫,所以我要求他自己寫個單測,進行充分的自測,

ChatGPT4 寫的單測非常的 Readability,他還知道表驅動的方式寫測驗資料,
咱們把代碼 run 起來:

有一個測驗用例沒過,把這種情況告訴 ChatGPT4,讓他自己解決吧,

ChatGPT4 說要解決這個問題,必須引入更復雜的運算式,這不是我們想要的結果,因此我們還是選擇了更簡單的正則運算式交付需求,做一些簡單的檢查,更復雜的檢查就交給 promql 語法決議器去做,
所以我花 5 分鐘,發現了需求的不合理,選擇了最符合業務需求的方案,并且還寫完了我們想要的正則運算式,并且代碼非常 Readability,同時有單測,
場景二:重構代碼
我們寫代碼的程序中,往往會因為疏忽,而產出各種 bug 和壞味道,我們來試試 ChatGPT4 能幫我們做什么,
下面隨機找了一段我們代碼倉庫里面的不涉密基礎代碼,發給 ChatGPT4,
package strings
import (
"fmt"
"regexp"
"strconv"
)
var reOfByte = regexp.MustCompile(`(\d+)([GgMmKkBb]?)`)
// ParseByteNumber 決議帶有容量的字串
func ParseByteNumber(s string) int64 {
arr := reOfByte.FindAllStringSubmatch(s, -1)
if len(arr) < 1 || len(arr[0]) < 3 {
return -1
}
n, err := strconv.Atoi(arr[0][1])
if err != nil {
return -2
}
if n <= 0 {
return -3
}
switch arr[0][2] {
case "G", "g":
return int64(n) * (1024 * 1024 * 1024)
case "M", "m":
return int64(n) * (1024 * 1024)
case "K", "k":
return int64(n) * (1024)
case "B", "b", "":
return int64(n)
default:
return -4
}
}
先讓 ChatGPT 看一眼代碼,

ChatGPT4 表示他看懂了,接下來給 ChatGPT4 提一下重構的需求,看看 ChatGPT4 的表現,

不得不說,ChatGPT4 這些優化,使得代碼 Readability 了很多,特別是錯誤碼回傳這里,原來的代碼真是天坑,但同時我們也發現這個函式實作是不太符合需求的,他只匹配了 substring,例如 XXXX100KBXXX 這類引數也會被錯誤匹配,我們把這些情況告訴 GPT4,看看他的表現,(畢竟是結對編程,我也得動點腦子做點貢獻!!!)

這里我們看到,GPT4 不僅僅完成了需求,他還做到了兼容浮點數輸入,使得回傳的精度更高了,例如 1.5MB 實際是 1536B,按我們最初的實作確實會丟失精度,變成 1024B,這還幫我們發現了個 BUG,捂臉,
最后照例,讓他補充一下單測,

通過 15 分鐘的簡單交流,我和 ChatGPT 一起完成了這次代碼重構!!!
場景三:實作業務邏輯
雖然要求 chatGPT4 一次性給我們交付整個完整需求有點過分,但我們依然可以把需求拆分成小的邏輯單元給 chatGPT 實作,并要求他撰寫單測,
這次,我們找了我們專案里面最新的需求來做個實驗,讓 ChatGPT 幫我們完成需求,
需求是要做一個事件的聚合能力,伽利略會收集各個平臺的事件資料,聚合之后以更加可視化的方式給用戶展示,來吧,GPT4!




在我不斷的追加我的需求細節之后,chatGPT4 交付了一個還算可以的東西,當然這里我們也發現這段代碼有個 BUG,當然,我是不會自己動手修復的,讓 GPT4 自己來吧,

整體代碼雖然不算特別清晰,但做一些修改還是可以用的,當然我覺得這跟我本身沒把需求描述的太清楚也有關系,
場景四:改 BUG
我們伽利略平臺支持自定義指標,底層識別的變數型別是 2,$3 這種形式,UI 為了用戶可讀性,是表現為 A,B,C,最近出現了一個 BUG,A+B+C+D+E+F+G+H+I+J+K 配置下去再加載上來之后編程 A+B+C+D+E+F+G+H+I+J+B0,
原因 K 是 ,但是前端轉碼的實作,是回圈遍歷處理的,所有處理兩位數字有,轉回來識別成了1 和 0,

我們把這個問題給 ChatGPT,看他怎么解決,


場景五:寫單測
我相信上面的例子也足夠體現 GPT4 寫單測的能力了,它不管是表驅動、測驗用例的構造能力、代碼的 Readability 能力都非常強!
場景六:取名字
我們知道取變數名和函式名是工程師們最頭疼的問題,這個 ChatGPT4 非常擅長,畢竟這是它的母語呀,例如上面的決議存盤容量的函式,它給的建議確實比原名好太多了,

總結
GPT3 我感覺他還是網上搜了一些代碼組合給我的,GPT4 給我的感覺是他真的 get 到我的意思了,而且他能根據我的反饋不斷的優化他給我的代碼,雖然不能完全替代工程師編碼,但在很多繁瑣且不需要交代太多背景的獨立作業上,GPT4 還是完成的非常不錯的,作為一個技術人員,嘗試下與 GPT4 結對編程的方式,有可能在某些方面真的能提升自身生產效率,
微軟在生產力工具這個方向上的成就真的是不錯,也期待我們公司能搞出這么牛的成果!
PS:
驗證它是 GPT3 還是 GPT4 最簡單的一句話:昨天的今天是明天的什么,
作者:cheney
本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/How-to-pair-programming-with-ChatGPT4-to-improve-research-and-development-efficiency.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/548916.html
標籤:其他
上一篇:Perceptron, Support Vector Machine and Dual Optimization Problem (3)
