思碼逸任晶磊:ChatGPT 時代的軟件研發數據與效能提升
思碼逸創始人 & CEO 任晶磊在 2023年3月4日于上海舉辦的 LeaTech 全球 CTO 領導力峰會上作為演講嘉賓分享了主題為《ChatGPT 時代的軟件研發數據與效能提升》的演講。
??文字為分享內容的提煉,您可以在文末查看完整分享視頻及獲取演講PPT。
我在清華大學獲得博士學位后,加入了微軟亞洲研究院,從事軟件系統程序分析的研究。同時一直在關注機器學習領域的發展。現在,ChatGPT 技術確實讓幾乎所有人都大為震撼。
接下來我們將進入這項技術的干貨內容,今天的演講分為四個部分。
· ChatGPT 給軟件工程帶來什么?
· 從研發數據角度看 ChatGPT
· 如何打造高質量的研發數據基礎?
· ChatGPT 在實際研發效能數據上的表現如何?
1、ChatGPT 給軟件工程帶來什么?
第一部分,我們將概述 ChatGPT 對軟件工程的影響,不會局限于程序員如何提高工作效率,更會探討對軟件工程整體的影響。
首先,第一個方面是讓大家寫代碼變得更快、更容易了,我認為這個話題無需贅述,因為我相信在座的很多人都有體驗。在 ChatGPT 出現之后,另外一個新產品也是值得關注的——代碼搜索領域的頭部公司 Sourcegraph 正在推出一款產品 Cody(盡管還沒有公測),它在后 ChatGPT 時代提供了問答功能。Cody 會結合你的領域知識、基于現有代碼給出回答。我認為這個產品是值得大家關注的。
Sourcegraph Cody 編程助手
但綜合來看,我們現在能看到的落地能力還不能夠做到生成復雜項目級別的代碼,只能幫助你寫一些微觀的代碼。至于生成工程性的代碼,我們可能還需要等待一段時間,像在《流浪地球》中機器人能夠為你重寫整個操作系統。我認為這種幻想目前仍然只存在于小說中。至于這種能力何時能夠實現,我無法預測,因為任何預測都有可能被打臉。不太悲觀地講,我們的飯碗應該還是能夠再保持幾年的。這是第一個維度的影響。
但 ChatGPT 對軟件工程的影響,不僅是讓個人寫代碼的速度變快這么簡單。我們可以問一個問題:如果你的團隊中每個人的速度都快了10倍,項目進度會變快10倍嗎?在座的都是技術管理者,很明顯這個答案是否定的。因為在從創建到最后交付的整個過程中,寫代碼的時間可能只占10%-20%,軟件工程中還有許多復雜的組織和流程因素。
因此,我們還需要看看 ChatGPT 是否能夠解決軟件工程中的信息不對稱問題。因為當人數增加時,信息不對稱就會存在,流程摩擦也會增加。想想我們每天要開多少會議,花費了百分之多少的時間。AI 能否在這方面發揮價值呢?這是和前面同樣重要的維度。
如果在你的組織中有一個 ChatGPT 研發效能顧問,能夠回答你有關項目和公司中各種問題,它就能夠幫助我們減少信息不對稱,并消除組織中流程摩擦。當然,有些會議需要與真人交流,但如果有些問題可以由 ChatGPT 直接解答,可能能減少20%的會議時間,這也是一種效率。因此,這個價值也是一個非常重要的維度。我們的許多客戶都非常期待這樣的能力。
2、從研發數據角度看 ChatGPT
第二部分,我們將從研發數據的角度探討 ChatGPT,因為任何人工智能技術的訓練和使用都需要數據作為原材料。因此,我們必須從數據的角度去思考這個問題。
ChatGPT 的基石大型模型,是基于公共數據中巨大的參數訓練而成的,規模達到了千億級別。但是,它并不了解私域信息、組織、團隊和其他相關知識。那么,如何將這些知識傳遞給它,是我們當前所面臨的最大瓶頸。
數據基本上可以分為兩類:一類是你的代碼,代碼中保存了你的大部分軟件知識;另一類是你的軟件工具和開發行為的所有數據,比如你的工具中所有的交流互動流程數據,這部分數據是代碼之外的。
具體來說,我們有三種途徑:最右邊是采用大模型的最典型方法,即提供提示(prompt)。與大模型交流時,你不僅僅需要問一個問題,還需要給它提供一些上下文和少量的樣本,以解釋你想要干什么以及你的情況。這里最大的挑戰是你只能給出非常有限的信息,例如4K或8K。如果信息量太少,那么大模型無法回答你關于服務和知識方面的問題。這個帶寬是非常小的。
最左邊的方法是使用你自己的數據去訓練大模型,你需要修改更新它的參數。然而,這種方法需要大量的時間和資源。中間的方式是自己訓練一個小的模型去學習大模型,然后進行微調,以使其更適合你的特定任務。
在實際應用中,選擇哪種方法取決于你的具體情況和需求。無論選擇哪種方法,我們都需要理解大型模型的優勢和局限性,并在實踐中發掘其潛力。
總體來說,我們目前探索的方向是最右邊的第三種路徑。選擇這個路徑背后的邏輯是 ChatGPT 的核心思想,這種思路的成功在于使用全球公開的信息和1000億參數來訓練一個通用的模型,而不是針對特定領域去收集數據和優化模型。當需要解決具體問題時,只需提供一個小樣本,模型就能夠學習并回答問題。因此,我們仍然希望沿著這條路線前進。
3、如何打造高質量的研發數據基礎?
第三部分,我們將介紹構建高質量研發數據基礎的五個步驟。只有保證數據基礎的高質量,ChatGPT 才能可靠地解決具體領域的問題。
第一步,需要完成原始數據的積累。我們意識到在研發中,這些數據本身就是重要的資產和信息源。我們建議使用像 Apache DevLake 這樣的開源工具,快速跨過這個初始階段。
第二步,在獲取數據后,我們會面臨數據質量問題。數據的健康度很重要,因為如果向算法提供60分的數據,是不可能獲得90分的結果的。因此,我們建議使用代碼分析技術來校準數據,夯實數據,以確保數據的質量。
第三步,需要進行自主分析,利用 BI 或可視化工具,從數據中解讀信息,下探洞察原因推動度量-分析-回顧-改進)循環。
第四步,以目標為導向,采用 GQM (目標-問題-指標)方法,基于健康的數據進行系統洞察,可以參考文章《GQM 概述:構建研發效能度量體系的根本方法》進一步復用和豐富模板,沉淀知識。
第五步,基于ChatGPT 實現智能交互,滿足靈活多樣的信息需要。在 ChatGPT 之前,自然語言轉 SQL 這一研究領域早已存在,而以 ChatGPT 為代表的新一代自然語言處理工具,將會給這個領域帶來新的活力。
4、ChatGPT 在實際研發效能數據上的表現如何?
第四部分,我們深入上述的第五個步驟——智能交互,去探索 ChatGPT 在可靠的研發數據基礎上,能夠實現什么樣的功能。
我們基于 Apache DevLake 的真實數據表,測試了 ChatGPT 理解人類常識、找到正確的表、處理復雜抽象問題等方面的能力。
第一個測試顯示,ChatGPT 具備比較全面的人類常識,能夠直接找到“打開 issue”、“issue 合作”等表述對應的數據,這意味著我們不需要提供額外的數據字典,來輔助它理解某個細分領域。
第二個測試顯示,ChatGPT 具備處理復雜數據表的能力。我們提供了互相關聯的 9 張表,其中有許多重復數據字段,而 ChatGPT 成功找到了正確的表,輸出了正確的 SQL 查詢。
第三個測試顯示,當提出的問題比較模糊的時候,ChatGPT 嘗試理解的方向也是合理的。我們的問題中包括了“近期”“PR 評審難度高”這樣并不確切的表述,而 ChatGPT 在 SQL 查詢中使用了“最近一周”、“PR 評論長度 > 500”“PR 評論數量 > 5”這些具體且合理的推測。
第四個測試不是基于研發數據做的,但也很有意思,所以和大家分享一下。我們用了自然語言處理數據集 Spider 里的一個超難問題來考驗 ChatGPT。它給出的第一個 SQL 查詢是錯誤的,接下來我們不給出任何提示或反饋,只是反復提問。在后幾次嘗試中,ChatGPT 成功給出了多種正確解法。
這說明 ChatGPT 可以通過多次嘗試來自驗證,提高數據解讀的準確性。