天天看點

如何與ChatGPT4結對程式設計提升研發效率

作者:閃念基因

作者:cheney

ChatGPT4 相比 ChatGPT3.5 在邏輯推理能力上有了很大的進步,他的代碼生成能力更是讓我非常震撼,是以我嘗試在工作中某些不涉密的基礎工作應用 ChatGPT4 來提升研發效率,簡單嘗試之後發現确實有不少場景是有效的。本文将向大家展示如何充分利用 ChatGPT-4 這一強大的 AI 工具,并結合結對程式設計方法,進而在研發過程中實作顯著的效率提升。

重要提示:大家在作相應嘗試的時候,一定要注意資訊安全。

場景一:正規表達式編寫

我們團隊負責 PCG 可觀測平台-伽利略的研發,PromQL 是可觀測領域常用的查詢語言,Protobuf 這種協定有自帶基于正規表達式的參數檢查器,是以我們需要寫一個正規表達式,來檢測 PromQL 的合法性,以便于盡早的發現不合法的 PromQL,抛出錯誤,降低底層引擎的壓力。

這個需求,按經驗至少得花超過一小時編碼及單元測試,得翻閱不少 PromQL 手冊,正規表達式的手冊。我們試着把這個任務交給 ChatGPT4。

如何與ChatGPT4結對程式設計提升研發效率

ChatGPT4 寫了一個很複雜的表達式,并且告訴我們這個需求是不合理的,完美的文法檢測得要實作一個文法分析器,而不是正規表達式。

這裡我完善我的需求,我們在接入層的正則應該在乎精确率,忽略召回率,旨在盡早發現一部份錯誤,而不是全部錯誤。

如何與ChatGPT4結對程式設計提升研發效率

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

如何與ChatGPT4結對程式設計提升研發效率

ChatGPT4 寫的單測非常的 Readability,他還知道表驅動的方式寫測試資料。

咱們把代碼 run 起來:

如何與ChatGPT4結對程式設計提升研發效率

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

如何與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 的表現。

如何與ChatGPT4結對程式設計提升研發效率

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

如何與ChatGPT4結對程式設計提升研發效率

這裡我們看到,GPT4 不僅僅完成了需求,他還做到了相容浮點數輸入,使得傳回的精度更高了。例如 1.5MB 實際是 1536B,按我們最初的實作确實會丢失精度,變成 1024B。這還幫我們發現了個 BUG,捂臉。

最後照例,讓他補充一下單測。

如何與ChatGPT4結對程式設計提升研發效率

通過 15 分鐘的簡單交流,我和 ChatGPT 一起完成了這次代碼重構!!!

場景三:實作業務邏輯

雖然要求 chatGPT4 一次性給我們傳遞整個完整需求有點過分,但我們依然可以把需求拆分成小的邏輯單元給 chatGPT 實作,并要求他編寫單測。

這次,我們找了我們項目裡面最新的需求來做個實驗,讓 ChatGPT 幫我們完成需求。

需求是要做一個事件的聚合能力,伽利略會收集各個平台的事件資料,聚合之後以更加可視化的方式給使用者展示。來吧,GPT4!

如何與ChatGPT4結對程式設計提升研發效率
如何與ChatGPT4結對程式設計提升研發效率
如何與ChatGPT4結對程式設計提升研發效率
如何與ChatGPT4結對程式設計提升研發效率

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

如何與ChatGPT4結對程式設計提升研發效率

整體代碼雖然不算特别清晰,但做一些修改還是可以用的,當然我覺得這跟我本身沒把需求描述的太清楚也有關系。

場景四:改 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。

如何與ChatGPT4結對程式設計提升研發效率

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

如何與ChatGPT4結對程式設計提升研發效率
如何與ChatGPT4結對程式設計提升研發效率

場景五:寫單測

我相信上面的例子也足夠展現 GPT4 寫單測的能力了,它不管是表驅動、測試用例的構造能力、代碼的 Readability 能力都非常強!

場景六:取名字

我們知道取變量名和函數名是工程師們最頭疼的問題,這個 ChatGPT4 非常擅長,畢竟這是它的母語呀,例如上面的解析存儲容量的函數,它給的建議确實比原名好太多了。

如何與ChatGPT4結對程式設計提升研發效率

總結

GPT3 我感覺他還是網上搜了一些代碼組合給我的,GPT4 給我的感覺是他真的 get 到我的意思了,而且他能根據我的回報不斷的優化他給我的代碼。雖然不能完全替代工程師編碼,但在很多繁瑣且不需要交代太多背景的獨立工作上,GPT4 還是完成的非常不錯的。作為一個技術人員,嘗試下與 GPT4 結對程式設計的方式,有可能在某些方面真的能提升自身生産效率。

微軟在生産力工具這個方向上的成就真的是不錯,也期待我們公司能搞出這麼牛的成果!

PS:

驗證它是 GPT3 還是 GPT4 最簡單的一句話:昨天的今天是明天的什麼。

作者:cheney

來源:微信公衆号:騰訊技術工程

出處:https://mp.weixin.qq.com/s/8xqDF0GwWt_JPctWyKikQg

繼續閱讀