微軟這次做了個AI:讓程序員提前下班提早下崗
GPT-3 這個自然語言處理AI 在去年“出圈”了,被公認是繼AlphaGo 之後“人工智能史上又一里程碑”。它在互聯網上“閱讀”了5000 億詞,模型達到1750 億參數,從而變得通用。但給AI 硬灌數據,實在是燒錢耗力。但好在,GPT-3 正在孕育出能夠實現商業化的後代。
GPT-3 這個自然語言處理AI 在去年“出圈”了,被公認是繼AlphaGo 之後“人工智能史上又一里程碑”。它在互聯網上“閱讀”了5000 億詞,模型達到1750 億參數,從而變得通用。但給AI 硬灌數據,實在是燒錢耗力。但好在,GPT-3 正在孕育出能夠實現商業化的後代。
就在剛剛,GitHub、OpenAI、微軟聯合打造了一個全新的代碼生成AI:GitHub Copilot(以下簡稱為Copilot)。
簡單來說,Copilot 可以根據程序員的註釋寫代碼,自動補全代碼,提供與代碼匹配的測試,還能生成多個備選方案的代碼供選擇。GitHub 表示,Copilot 生成的代碼大部分是原創的。
目前,Copilot正在測試專供Visual Studio Code的擴展,一旦達到可用狀態,未來會成為微軟編程產品裡的收費項目。Copilot可以說是OpenAI接受微軟10億美元投資以來的首個重大成果。
還有行業人士表示,這代表AI 開始在編程工作中發揮作用,軟件開發領域的“第三次工業革命”似乎正緩緩揭開序幕。
和你結對編程的,換成了AI
在此之前,程序員寫不出代碼,一般會到軟件開發領域的問答網站Stack Overflow“借鑒”,或者求助於一些代碼自動補全工具。然而,傳統IDE 基本都使用搜索方法進行補全,換句話說,網上有的,才能被抓過去補全。
但Copilot 是另一種思路,它直接靠AI 理解程序員的需求。Copilot 不僅僅是模仿以前見過的代碼,它還會分析文檔中的字符串、註釋、函數名稱以及代碼本身,從而生成新的匹配代碼,包括之前調用的特定函數。
脫胎自GPT-3 的OpenAI Codex,接受過公開源代碼和自然語言的培訓,能理解編程語言和人類語言。所以,Copilot 對語言理解和轉換有極高的天賦。
GitHub 給Copilot 的官方定義是“AI 結對編程員”。“結對編程”(pair programming)是一種軟件開發方法,兩個程序員在一個計算機上共同工作。一個人輸入代碼,而另一個人審查他輸入的每一行代碼。輸入代碼的人稱作駕駛員,審查代碼的人稱作觀察員。兩個程序員經常互換角色。GitHub 認為Copilot 是進化版的“結對編程”,在未來幫程序員查缺補漏的,將會換成AI。
Copilot 具體的功能如下:
在註釋中用簡單的英語描述一個函數,Copilot 就可以將其轉換為實際代碼;
Copilot 能根據程序員給出的例子,快速生成模板和重複的代碼;
導入單元測試包,Copilot 就可以提供與代碼匹配的測試;
Copilot 可以提供多個備選方案的代碼供程序員選擇。
此外,Copilot 還能輔導新手寫代碼,可以幫助他們找出錯誤、學習新框架,省去大量查資料的時間。
OpenAI 首席技術官Greg Brockman 表示,將在今年夏末通過API 發布Codex。
Github CEO Nat Friedman 提到,“OpenAI Codex 對於人們的代碼使用習慣有著廣泛了解,而且在代碼生成能力上遠遠超過GPT-3,這要歸功於它在訓練中接觸到的大量公共源代碼數據集。GitHub Copilot 則適用於多種框架和語言,但目前的技術預覽版主要面向Python、JavaScript、TypeScript、Ruby 以及Go”。具體來說,OpenAI 在GPT-3 的基礎上生成了Codex 算法,Codex 在從GitHub 那裡提取出來的TB(terabyte)級公開代碼以及英語語言示例中得到訓練。基於Codex 算法,編程AI Copilot 誕生了。
也就是說,Copilot 比GPT-3 誕下的專為代碼生成設計的後代。在運行過程中,Copilot 編輯器的擴展插件將程序員的註釋和代碼發送到GitHub Copilot 服務端,然後該服務使用OpenAI Codex 來生成對代碼的建議。
目前相比於市面上一些編程輔助工具,Copilot 的上下文理解能力要強大得多。無論是在文檔字符串、註釋、函數名還是代碼主體中,Copilot 都能根據編程者已寫出的上下文生成匹配的代碼。
不看廣告,看“療效”
Friedman 說,GitHub 的數百名開發者在編碼時,整天都在使用Copilot 功能,他們中的大多數人都接受了AI 的建議,沒有關閉該功能。
但就目前來看,Copilot 提供建議的準確率似乎不高。GitHub 對一組Python 函數進行了基準測試,測試團隊清除了函數並要求Copilot 填充它們。模型在第一次嘗試正確率是43%,經過10 次嘗試後,正確率達到了57%。團隊表示,之後Copilot 還將進行多次訓練和測試,準確率會進一步提升。但據一些程序員的說法,這種自動生成的代碼工作要“好用”有個前提,就是能精確描述了函數需要實現的功能,不然後續的調試會是更耗時的工作。
另外,GitHub 表示,Copilot 提出的代碼可能會無法編譯或運行,而且Copilot 還可能會使用舊的或已棄用的庫和語言。此外,在試圖理解開發人員的意圖時,Copilot 建議的代碼可能並不總是有效或有意義的,因此程序員還是像往常一樣仔細測試和審查所有代碼。
對於代碼安全,GitHub 表示,並不是所有使用的代碼都經過了漏洞、不安全實踐或個人數據的審查。因此,他們也設置了一些過濾器來防止Copilot 生成攻擊性的語言,目前效果並不完美,需要後續完善。
技術社區也不可避免地對這款工具可能引發的代碼所有權、許可證、利益衝突以及其他現實問題展開了討論。Friedman 回應稱,“總體來說:在公共數據上訓練機器學習系統屬於合理的使用方式;輸出結果的所有權歸於操作者,跟傳統的編譯器沒什麼區別。具體到訓練問題上,大家也可以看到OpenAI 向美國專利商標局做出的承諾。我們預計Copilot 項目的知識產權與AI 成果將很快在世界範圍內掀起關於政策的討論熱潮,我們自己也希望能夠參與進來。”
提前下班,提早下崗
擊敗Stack Overflow 的,不是下一個代碼問答社區,而是編程AI。那麼,現在還是“協助編程”的AI,未來會不會成為能“自動編程” 的AI?
Friedman 在Hacker News 寫道:“軟件開發正迎來自己的『第三次工業革命』。第一次革命是編譯器、調試器、垃圾收集器以及語言等工具的出現,極大提升了開發者的工作效率;第二次革命則以開源為契機,全球開發者社區得以匯聚起來,並在彼此的開發成果基礎之上不斷推進;第三次革命就在現在,業界嘗試在編程當中使用AI 技術。在發展成熟之後,開發人員的日常工作將有巨大改變—— 但仍然有很多工作可做、也只能由人類開發者完成,因此不用太擔心。”
即使是高度機械化的工廠,也需要操作員來發出初始化指令,所以在未來,IT 行業可能還會留下一些操作員類型的程序員,和一些把握高精度操作技巧的工程師。
但也正如Open AI 的CEO Sam Altman 所說,程序員的身價將會下降:“這是我的預測:AI 會讓那些在電腦前工作的人,身價掉得比在物理世界里工作的人還要快。這和大部分的預期完全相反。”
有了Copilot,程序員就可以提前下班,但在未來,也可能會提前下崗。
這並不是微軟第一回借力OpenAI 推出AI 應用。在剛過去的Build 大會上,微軟宣布了GPT-3 的第一個商業用例:在Microsoft Power Apps 中集成GPT-3 的能力,可將自然語言直接轉換為現成代碼。但目前功能相對有限,只支持在微軟Power Fx 中生成公式。即便如此,對於那些非專業的操作者,這個系統也能給出最合適的公式。在過去的工作流中,普通員工要執行數據分析、構建應用程序或讓流程自動化,一般都需要向IT 部門提出需求,然後等待數週或數月才能完成工作,而藉助現在這個功能,可以更“傻瓜”地開發符合自己需求的軟件。
微軟嚐到了OpenAI 技術的甜頭。但和微軟的獨家綁定,也給OpenAI 招來了一些爭議。對此,OpenAI 首席技術官Greg Brockman 表示,底層技術不會只由微軟來使用,OpenAI 將在今年夏末發布Codex 模型,供第三方開發者編寫他們自己的應用程序。