鯨品堂|淺談GPT在數據庫重構項目中的創新應用

2023-09-11 451
引言:它來了

當我們對《流浪地球2》中人工智能MOSS產生無盡的科幻聯想之際,GPT已經通過大規模數據預訓練,擁有了理解、生成文本的能力,并在多個行業引發了巨大沖擊,從客戶服務到市場營銷,從醫療健康到教育,都帶來了顛覆性的變革,AI元年悄然而至。

在軟件研發領域,它能夠幫助我們提高開發效率、改善代碼質量、代碼自動生成嗎?本文依托于一個老項目數據庫重構的背景,和大家一起探討下GPT在研發重構過程中的應用實踐。

重構:困難重重
圖片關鍵詞
已服役十余年的項目,應客戶要求去除商業數據庫中間件,使用postgreSQL替換Oracle,經過十余年的業務加載和迭代,啟動重構存在很大的考驗與風險


數據庫方面:數據庫中存在大量的存儲過程、函數、動態SQL需要進行語法差異轉換,并且調用鏈情況較為復雜,在存過、函數、動態SQL之間存在著互相調用的情況,耦合度比較高。



代碼方面:祖傳架構方面,老式集群模式的項目下代碼工程多,工程中的技術框架經過很多輪的迭代,包含JDBC、MyBatis、FreeMarker、EJB、工廠模式等。業務實現方面,有大量的存過、函數調用,并且SQL的組裝無處不在,有字符串拼接、StringBuffer、StringBuilder、mapper.xml、自定義XML等方式。


綜合來看,這是一項具有挑戰性的任務,技術上沒有瓶頸,但實施上困難重重:

代碼走查需仔細,否則范圍難控制;


對于人員經驗要求高,需要熟悉框架,能夠識別、發現、解決問題;


大量的SQL和代碼改造,具備高度經驗化、高重復化的特征;


項目多人員參與,經驗參差不齊,如何保障重構質量。

GPT:研發團隊小助手

為了提升效率,引入了chatGPT作為研發小助手,并按使用場景給它分了三個角色,看看它具體可以幫我們做什么:

圖片關鍵詞

下面讓我們通過重構中java代碼處理的一個典型場景示例,帶大家一起感受一下它的魅力:

第一步:準備好需要處理的java代碼段,和指令。

圖片關鍵詞
圖片關鍵詞

第二步:問答交互式協助,就如同使用釘釘、微信聊天一樣,輸入上面的代碼段+指令,讓它幫我們處理。

圖片關鍵詞


最后:AI的響應結果符合預期,并且給出了詳細的匯總分析。由此可見,只要指令夠準確,它就可以快速完成代碼段的分析、改造和總結,效率很高,整體耗時不會超過10秒鐘。

盤它:工欲善其事必先利其器

使用過程中發現chatGPT在高度經驗化、重復化的任務處理中表現不俗,研發一個以它為底座的重構工具勢在必行。細心的你,會發現上面的截圖并不是來自需要科學上網的chatGPT,而是源自我們做的接入GPT API的重構小工具。

圖片關鍵詞


自動走查,解決走查困難問題

用內置掃描器來替代人工走查,當前工具預置掃描器已支持java代碼、DDL、xml掃描,精確的按任務文件維度,處理一個超大文件,在保證上下文完整的情形下,拆解成符合AI token要求的較小任務單元(代碼段)。

對掃描拆解的代碼段,按照預置場景下的命中策略,判斷是否需要送AI處理,打標識生成真正的待辦任務。

這樣不再依賴于人工走查和人員經驗,既節約了時間,又減少了疏漏,同時一定程度上提升任務轉化效率及準確率。


可視化項目管理

傳統的數據庫重構項目研發管理,代碼走查完成后,由研發經理分配到人,現在不需要了。工具提供項目維度的管理,將AI交互使用場景分類,進行場景化管理,場景掃描生成任務后,自動均勻分配給項目研發人員。

例如,Oracle2PostgreSQL的重構項目,包含的兩種場景:

DDL轉換場景:將Oracle數據庫中的表、存儲過程、函數、視圖等DDL導出到文件中,文本掃描器掃描生成DDL轉換任務,分配給研發人員進行審核后,就可以直接交給AI處理;



代碼工程轉換場景:上傳或git拉取代碼工程并托管,javaparser、文本掃描器會對代碼工程做自動走查掃描,將需要處理的java類、mapper.xml文件等,作為任務,分配給研發人員,待審核后,直接交由AI處理。


提供任務可視化及閉環管理,項目管理者在監控界面上對場景任務的分配情況一目了然。


一鍵AI處理

數據庫替換重構項目中,需要研發經理做好技術背調,并輸出任務清單,然后對研發團隊進行賦能和分配任務,接下來研發人員按包路徑維度,結合背調知識庫,逐個修改。這樣做的缺點是容易代入個人編碼習慣,無法標準化,可能會帶來不必要的BUG,對業務產生影響。

工具自動化后,研發人員只需要關注分配的任務,按照任務清單對代碼段審核,就可以一鍵送AI處理,AI會響應輸出結果代碼段或SQL,然后針對預處理后的AI返回結果,進行人工校準,就可以一鍵復寫生成java類和SQL。

人機交互模式,將高度經驗化、重復化的部分研發工作,交由AI處理,研發人員做好審核和校驗,充分利用了AI編碼能力,節約了工作量,同時提升了準確率和代碼質量。

干貨:一點心得


模型選擇:text-davinci-003模型 or gpt-3.5-turbo模型

01
模型和使用場景分析

text-davinci-003是基于GPT-3的模型,適用于廣泛的自然語言處理任務,包括對話生成、問題回答、文本摘要和翻譯等。它功能強大但相對較慢,適合復雜和深入的文本處理,不要求實時性。

gpt-3.5-turbo是基于GPT-3.5的模型,具有高性能、低延遲的特點。它適用于快速生成文本的場景,如在線聊天機器人、客戶支持自動化和內容創作輔助。在對話和短文本方面表現出色,響應速度快。

02
token和頻次限制

兩種模型對于每分鐘調用頻次、交互token均有限制。開始我們傾向于選擇token大和調用頻次高的達芬奇模型,但試驗后發現,在轉換速率和準確率上gpt-3.5-turbo要遠優于達芬奇,可是基于chatgpt更高的時效和性能要求,OpenAI對它做了更多的限流控制。

圖片關鍵詞

綜上,gpt-3.5-turbo模型更加適合用于高效率、高質量的生成型任務,在算力性能和實時性方面優勢很大,選擇接入它沒錯。


turbo模型速率限制解決方案

turbo的限流控制很讓人頭疼,于是工具研發中引入了令牌桶算法,支持接入多個apikey,完美解決了限流問題。

令牌桶算法(Token Bucket Algorithm)是一種流量控制算法,用于控制資源訪問速率。它是一種經典的算法,常用于網絡傳輸、API限流、請求調度的場景。
圖片關鍵詞

token限制解決方案
提煉出java、xml、DDL文件不同的特征,通過預置的Java類掃描器和文本類掃描器,保障上下文完整性,以及符合交互的token限制。


場景命中策略
openai是收費的,內測中免費賬戶流量很快就耗費殆盡。如何篩選命中有效內容,把實際需要處理的內容交給它很關鍵。

基于這些考慮,抽象出了場景的概念,在場景下預置不同的正則表達式策略,并提取符合策略規則的內容/代碼段,提交給AI處理。


AI交互指令校準:
讓我們再接著思考:在特定使用場景下如何設置合理角色和prompt?又怎么固定返回我們想要的結果?

模型選擇、加載:需要分析場景任務選擇合適的模型,將模型加載到計算環境中,以便進行后續的校準和交互;


樣本數據準備:為了進行指令的校準,我們將需要問詢的數據整理成樣本數據;


指令示例:樣本數據和特定的場景指令集,組合形成待校準指令集;


篩選指令:根據不同指令的響應,選擇符合預期的指令作為場景的prompt。



人機交互的設計

初版設計思路為:掃描->AI處理->回寫,驗證后發現存在著準確性、及時率的一些問題,于是我們考慮使用半自動-人機交互模式來解決這些問題,流程優化為:掃描->任務審核->AI處理->任務校準->回寫,并且提供差異比對和異常重送的功能,以提升交互準確率。


圖片關鍵詞

總結:說點想說的

隨著AI的不斷發展和應用,其強大的自然語言預處理機制和大數據的魅力,在各個領域展現出巨大的潛力。在代碼解釋分析、代碼生成、知識庫檢索等方面也擁有無限可能,未來,我們可以期待它作為研發的好幫手,發揮更重要的作用。


官方微信公眾號

浩鯨云計算科技股份有限公司 版權所有 2003-2023

蘇ICP備10224443號-6       蘇公網安備 32011402011374號

亚洲精品免费视频_热99re6久精品国产首页青柠_精品国产专区91在线_亚洲美洲欧洲偷拍片区