AI for developer 而非 AI as developer。
AI 在軟件開發領域的應用正在發生極大的演進,以 GitHub Copilot 爲首,從單一的編程輔助,擴展到開發流程的各個環節。本文作者深入分析了 AI 輔助開發工具的演進,并提出,再争論 AI 是否會替代人類開發者的工作已經愈發沒有意義,至關重要的是,于所有開發者而言,如何與智能助手共存并大幅提升效率。
今天你使用 Copilot 了嗎?
這裏的 Copilot 不僅限于開發者們熟悉的 AI 開發助手 GitHub Copilot,而是泛指所有以大模型爲技術基礎的生成式 AI 應用,如 ChatGPT(對話)、Jasper(輔助寫作)、Midjourney(圖片生成)等。
不管你的工作内容是什麽,其實大概率都有能夠用到 Copilot 的地方。那麽,在這些地方就應該嘗試去使用 Copilot。
2022 年底發布的 ChatGPT 帶來的驚豔和掀起的浪潮,已無需贅言。但是,在此之前,很多開發者早在 2021 年就已經用上了大模型加持下的輔助編碼工具,那就是在微軟的牽線下,GitHub 基于 OpenAI Codex 大模型打造的産品 GitHub Copilot。一經推出,它就給學術界和工業界帶來了震撼。
自動生成代碼,一直被作爲軟件工程研究領域的聖杯,也是軟件開發者們擔心 AI 最有可能會替代自己、老闆們認爲 AI 最應該降本增效的場景(真實性暫不讨論)。多年來,基于軟件分析技術和啓發式規則算法一直無法實現期望的效果,躊躇于特定場景或理論研究而難以落地實用。而在 GPT-3 及 Codex 開啓代碼生成的大模型時代後,AI 輔助開發突然得以突破并迅速普及,這與自然語言領域的發展曆程何其相似。
圖源:使用 Meta AI 生成
身處 2024 年的開端,以大模型爲基礎的 AI 仍在快速發展,雖然距離實現通用人工智能(AGI)的願景還有很大距離,但其發展速度和加速度都比人類快出幾個數量級。經曆了 2023 年對大模型的不明覺厲到習以爲常,如今的我們可以更加理性和全面地看待這項技術。作爲軟件開發者,有必要重新思考一下,在可預見的未來,開發者與 AI 将會如何相處。
不過,還是讓我們先從 Copilot 的含義開始說起。
Copilot 的定位與含義:從 GitHub Copilot 到 Microsoft Copilot
最初的 Copilot 專屬于開發者,特指提供 AI 輔助編程的 GitHub Copilot。但經過兩年多的發展,Copilot 這一品牌早已不限制在 AI 輔助研發領域,而 GitHub Copilot 也早已超越代碼智能生成這一基本功能。2023 年 9 月,微軟宣布全新升級的 Copilot 将直接集成到 Windows 11、微軟 Office 365 全系産品和 Edge 中;2023 年 11 月的 Ignite 大會上,微軟宣布 Bing Chat 及其企業高級版 Bing Chat for Enterprise 正式更名爲 Copilot;微軟雲服務的一系列企業訂閱計劃中,也将 Copilot 作爲最重要的賣點和增值服務。微軟将其在旗下産品中提供的 AI 服務統一稱爲 Microsoft Copilot,希望成爲用戶的日常 AI 伴侶,貫穿用戶的整個工作流。
大模型技術産品化是 2023 年的主基調,微軟的一系列産品化動向表明,它在商業上對當前的 AI 應用逐漸有了一個更加清晰的定位:讓 AI 作爲副駕駛,輔助人類在各種場景中完成人類自身所需完成的工作。具體到開發者的日常工作,越來越多的人開始接受、适應、習慣寫代碼時得到 AI 的協助和提示,就像得到 IDE 的輔助功能一樣。2023 年 6 月,JetBrains 宣布推出 AI Assistant,标志着 AI 輔助開發已經開始内置到 IDE 中。AI 在開發階段提供輔助開始沉澱爲一項基礎的服務,未來可能與現代 IDE 一樣成爲開發者重度依賴的必備功能。
AI 輔助編碼是大模型最早落地的應用之一,也是最具有實用性和商業價值的場景之一。在目前類 ChatGPT 的聊天應用依然以免費爲主的情況下,GitHub Copilot 早早推出付費訂閱計劃以及企業級服務,現已形成大量穩定的付費用戶群和成熟自恰的商業模式。以 Github Copilot 爲代表的 AI 輔助開發産品,在 2023 年下半年迎來集中爆發(很大程度上得益于開源模型 LLaMa 的優異表現)。那麽,這個領域的現狀和發展是怎樣的呢?
類 GitHub Copilot 産品的發展:領導者創新,跟随者追趕
首先,我們來看行業領導者 —— GitHub Copilot 在這一年的裏程碑式更新:
2023 年 3 月,Copilot 升級爲 Copilot X,接入 GPT-4 并新增了一系列功能:
GitHub Copilot Chat,可實現與 AI 對話完成編碼;Copilot for Pull Requests,由 AI 協助開發者描述變更;Copilot for Docs,服務文檔的智能編寫和問答;Copilot for CLI,使用 AI 輔助命令行的使用;Copilot Voice,說話就完成程序編寫。
2023 年 5 月,GitHub 推出 Copilot Labs,作爲升級版伴侶擴展,提供早期實驗和即将推出的新功能,如代碼解釋、語言間翻譯、代碼刷子、測試用例生成等。其中最強大的當屬代碼刷子,不僅預置了可讀性提升、類型推斷、修複 Bug、補充文檔與注釋等功能,還支持自定義提示詞并保存爲工具,相當于賦予了開發者再次擴展 Copilot 的能力以及個性化的可定制性。
2023 年 11 月,GitHub 發布 Copilot Workspace,與 GitHub 網站的群體協作功能聯系更加緊密,旨在幫助開發者完成更複雜的任務,如感知跨文件上下文生成代碼、基于整個倉庫進行問答、針對 issue 生成多處代碼變更等。從此,Copilot 的舞台不僅限于個人電腦中的 IDE,也不局限于開發者個人的獨立工作區。
再看 Copilot 之外的項目,我将其分爲以下三類:
商業競品
大公司或創業公司推出的 Copilot 競品,國外有 Amazon 的 CodeWhisperer、Sourcegraph 的 Cody、Anysphere 的 Cursor、Google 的 Codey、JetBrains 的 AI Assistant 等,國内有華爲的 CodeArts Snap、智譜的 CodeGeeX、百度的 Comate、科大訊飛 iFlyCode 等。
開源平替
實現類 Copilot 功能的開源項目,如 auto-dev、Devpilot、FauxPilot 等。一般側重于實現工程部分,核心部分所需的 AI 能力依賴大模型 API 的接入,如 OpenAI API、Azure API、自主部署模型 API 等。
前沿探索
探索 AI 自主獨立工作的 Agent 項目,如 MetaGPT、GPT Pilot、DevOpsGPT、ChatDev 等。基本思路是模拟人類軟件開發團隊組織結構和開發模式,賦予 AI 不同角色和技能,讓其自主溝通和協作完成端到端的項目級開發或複雜任務的實現。
對比之下不難看出,GitHub Copilot 早已超越一個提供代碼補全建議的輔助編碼工具,但大部分的競品或平替還是在對标 AI 輔助編碼這一基本功能。一方面是因爲這一功能是多數用戶或客戶想象中 AI 最應該且能最大程度上提升效率的環節,另一方面是因爲跟随者們在這一基本功能上也很難說已經與 Copilot 處于同一水平。
既然效果上沒有差異隻有差距,那麽就必須從其他方面做出差異化,比如商業公司通過聯動自身其他知識庫或服務提供獨特性,而創業公司和開源項目則主打可控性和自由度。
但是,作爲業界領導者的 Copilot,對自身的定位早已超越在開發階段的單點提效,而是開始布局更廣泛的場景:一方面推出圍繞代碼的解釋、翻譯、問答等功能,另一方面開始發展代碼之外的能力,從開發階段向軟件開發流程的兩端延伸。從格局和層次來看, Copilot 作爲行業領導者,目前仍保持着遙遙領先的優勢。
與競品或平替的思路不同的 Agent 則更加激進和大膽一些,抛開 Copilot 所定義的範圍和邊界,從智能體的角度探索 AI 在軟件開發中的可能性。AI Agent 試圖打造一個端到端的軟件開發者,給定要求即可給出符合要求的軟件,而這依賴于一個很強的前提假設,那就是用于實現 Agent 的 AI 至少具備一個傑出的軟件開發者所具備的認知、思考、遵循、反思、協作等能力,實際上已經是對通用強人工智能的要求。
當前最先進的 AI 也尚未達到如此高的要求,這決定了将 AI Agent 用于軟件開發目前處于并且還會長期處于探索階段。實際上,雖然 Copilot 也是在朝着智能體的方向發展,從最初的編程助手發展爲一個能力越來越綜合的 " 工具 ",但對于自主性并不強求甚至有意克制,仍然将 AI 定位爲開發者的助手而非自作主張的智能體,這是與目前大部分 Agent 項目最大的不同。
從目前的發展情況來看,我們可以概括出目前 AI 輔助開發從業者的三個對未來方向的共識:
從底層局部的代碼實現,到關注上層的架構和規劃;從編碼階段單點提效,到開發全流程增益;從完成确定性任務,到創造性自主工作。
那麽,帶着這些共識,回到我們最初提出的問題:面向未來,開發者與 AI 如何相處?
開發者與 AI 如何相處:AI for developer 而非 AI as developer
預測未來很難,因此我們需要加入一些限制和前提:這裏的 AI 特指當前基于大模型相關技術實現的 AI,并且基于當前已知的研究和工程實踐的延長線進行分析。預測要做到精準更難,因此我們不妨使用 AI 與大模型的概率性思維,直接枚舉一下可能的模式:
船長 - 大副型(Pilot-Copilot):Copilot 的初始設定,由人分解以及執行任務,在此過程中 AI 作爲副手輔助人類更快地任務,無法獨立于人類完成工作。主管 - 下屬型(Master-Worker):人類設定高層次的任務,再交由 AI 完成具體實現,AI 可以自動完成更低一級的分解和叠代循環,人類需要承擔把控輸入輸出的職責。同事 - 同事型(Peer-Peer):AI 被賦予與人類同等的地位,平等地進行分工且并行進行開發,AI 負責探索實現方案,而人負責架構設計、分工、集成等工作,從而實現優勢互補。學徒 - 導師型(Student-Mentor):人類的能力和成長性開始落後于 AI,人向 AI 尋求架構和實現的建議,通過請教和學習彌補自己的知識盲區,通過動手和練習增長自己的能力短闆。代理 - 雇主型(Agent-Boss):人類已經完全與 AI 脫節,無法理解 AI 的思維方式和實現細節,人隻需要告訴 AI 自己能做什麽,AI 負責進行問題分解和任務分配,人作爲衆多工具之一被 AI 調用。
在前三種模式中,人類開發者仍是軟件開發的主導者和責任主體,而在後兩種模式中,人類漸漸失去地位,而 AI 成爲了實現層面的主導。這幾種模式并非遞進關系,因此并不沖突;就像平行宇宙一樣,這些可能的未來都會發生,甚至會同時共存于一個世界,取決于場景具體程度、問題普遍性、任務複雜度、個人使用方式等諸多因素。
圖源:使用 Bing AI 生成
那麽,所有可能的模式之間是否有共性呢?是的,始終不變的是,問題的定義者和需求的提出方一直是人類,掌握驗收權的最終用戶仍是人類,隻要軟件開發的動機還是滿足人類的需求。經曆了 2021 到 2023 這兩年,大多數開發者從一開始的忐忑到後來的祛魅,逐漸切身體會到當前的 AI 技術在實際工作中的能力和局限,并開始思考如何更好地使用這項工具來更好地完成自己的工作——沒錯,正确的态度是将 AI 當做工具來看待,無論它的能力多麽強大,被替代的仍是我們現有的工具(Google Search、Stack Overflow、IDE,甚至編程語言和設計模式)。
在這個前提下,再争論 AI 是否會替代人類開發者的工作已經愈發沒有意義,更實際的問題是開發者如何與 AI 相處才能提升自己的價值。這個問題可能根本沒有确定性的答案,但我們可以從以上分析中推導出一個簡單的判斷原則:AI for developer 而不是 AI as developer,隻要能更好地發揮人類開發者自身的價值,那麽就是合适的相處之道。