軟體工程的未來展望
軟體工程正在不斷變化,到 2025 年底,它將呈現出截然不同的面貌。2021 年,我們推出了名為 Codeex 的首款模型,這是我們首次展示所謂的「Vibe 編碼」。幾週前,我們發布了 Codeex CLI,這是一個在您的筆記本電腦終端上運行的本地代理,您可以與其同步配對和交互。
新系統 Codeex 的發布
今天,我們向軟體工程的未來邁出了一步,發布了一個新系統——一個可以並行運行多項任務的遠程軟體代理,我們遵循 OpenAI 的命名傳統,將其命名為 Codeex。Codeex 的令人興奮之處在於它在 OpenAI 計算環境中運行您的存儲庫和環境,您可以運行許多副本,從而能夠並行執行多項任務,隨時啟動,稍後再回來處理,這也是我們今天要向您展示的內容。
面向不同用戶的推出計劃
我們從今天開始向 ChatGPT 的專業版、企業版和團隊用戶推出此功能,未來還將向 Plus 和 Edu 用戶推出。
強大的背後:Codeex One 模型
Codeex 由名為 Codeex One 的新模型提供支持,這是我們迄今為止最好的編碼模型。我們基於 03 模型進行優化,不僅針對基準測試,更針對人們真正想要合併到其代碼庫中的代碼類型,考慮到註釋、無關更改和風格等因素,以真正加速人們的工作。
Codeex 團隊成員介紹
為了向您展示這個我們非常興奮與您分享的系統,Codeex 團隊的許多成員在場。他們是:
-
Hansen:Codex 研究團隊成員之一。
-
Josh:Codex 團隊的工程師。
-
Tibo:負責構建代碼代理和基礎設施以支持它們。
Codeex 功能演示
連接存儲庫與任務選擇
通常您需要連接您的 GitHub 帳戶,演示者已經完成了這一步。在這裡,演示者選擇了一個開源存儲庫——preparedness 存儲庫,其中包含一些由優秀的 preparedness 團隊製作的前沿評估。演示者接收到三個適合在任何存儲庫上開始的任務: 1. Ask 任務:要求 Codeex 向新手解釋代碼庫的一般結構。 2. Code 任務:要求在存儲庫中找到並修復一個錯誤。 3. Proactive 任務:要求 Codeex 瀏覽代碼庫,不僅探索代碼庫,還主動提出可以自行執行的任務建議。
任務執行與結果
演示者同時啟動了這三個任務,三個 Codeex 代理在後台並行工作。此外,演示者還添加了一個任務,即盡可能多地查找並修復錯字和語法錯誤。之前,演示者還向 Codeex 代理提出了一個有趣的問題,即關於代碼庫的目標是可維護性和無錯誤,Codeex 代理瀏覽了代碼庫並提出了多項任務建議,例如修復可變默認參數、更正變量拼寫以及統一超時設置等。
Codeex 運行原理
基礎設施
Codeex 運行在 OpenAI 的計算基礎設施上,與我們用於強化學習的基礎設施相同,這意味著它在大規模訓練運行中已經過實戰檢驗,並且在訓練期間和生產後期的代理行為保持一致。每個任務都在自己的微虛擬機沙箱中運行,擁有自己的文件系統、CPU、內存和網絡策略,代理在其中擁有完全的自主權。
環境配置
每個任務都在一個環境中運行,這個環境基本上是一個存儲庫,但配置了環境變量、機密和設置腳本,以便您可以自定義運行時,充分釋放代理的能力。早期的 Alpha 測試者發現,安裝一個簡單的代碼檢查器或格式化程序就能獲得很大的收益,現在我們默認安裝了很多這樣的工具。對於 OpenAI 的內部環境,我們甚至設置了預提交鉤子,代理編碼時會提交代碼,查看提交鉤子的反饋,就像在真實的開發環境中一樣。
解決複雜問題的演示
用戶 bug 報告
演示者展示了 Codeex CLI 的一個用例,即解決用戶報告的一個 bug。當文件名包含特殊字符時,CLI 中的 diff 命令會顯示錯誤消息。
代理的處理過程
我們訓練的代理不僅能解決這些問題,還引入了代理的 MD 文件概念。代理首先會查看存儲庫中的代理 MD 文件,其中提供了存儲庫布局的一些說明,以及一些特殊指令,例如在終端打印一些內容。代理不僅會編寫代碼,還知道如何導航代碼庫並重現問題。它編寫了一個腳本來重現問題,並執行代碼以驗證問題是否可以重現。
訓練方法
我們使用端到端強化學習來訓練代理,以驗證它是否完成了從編寫代碼到運行測試的整個周期,並確保它能夠完成任務,滿足風格檢查和程序檢查等多項要求。在 Sweetbench 等評估中,這種方法取得了最優的性能。
最終結果
代理找到了問題並編寫了一個測試來驗證其工作,還運行了代碼檢查器以確保代碼符合風格要求。最終,代理準備提交文件並生成了一個拉取請求(PR)。
模型訓練與代碼審核
模型訓練的考量
我們在訓練模型時考慮了對齊性,以確保模型生成的代碼符合我們的期望。在代碼審核方面,我們關注代碼的質量和風格,以及解釋性和可驗證的輸出。
代碼審核演示
演示者展示了 Tibo 啟動的一個任務的結果。在右側,我們看到模型生成的實際代碼輸出,需要確保代碼有合理的更改,符合 PR 描述,並且沒有額外的更改。在左側,模型生成了對其操作的摘要,包括添加的導入、操作的原因以及引用的代碼。在測試部分,模型實際運行了代理 MD 文件中要求的測試,並報告了測試結果。
未通過測試的情況
演示者還展示了一個在 preparedness 存儲庫中完成的任務,模型生成的代碼最初看似通過,但從測試輸出中發現測試未通過,可能是環境中缺少依賴項。這表明在 AI 編寫代碼的世界中,可驗證性非常重要。
內部使用體驗與未來計劃
內部使用情況
許多 OpenAI 的同事都在使用 Codeex,並以不同的方式獲得了神奇的體驗。在產品發布前的準備階段,演示者通過 Codeex 完成了一些代碼更改和重構任務,有時是簡單的字符串更改,有時是更大的功能需求。當這些任務成功完成時,感覺非常神奇。
未來計劃
我們將繼續改進 Codeex,使其集成到更多系統中,例如問題跟蹤器,並發布 API 以自動集成到 CI 中。我們還將繼續開發 Codeex CLI,今天發布了一個迷你模型,並將推出使用 ChatGPT 登錄的功能,使其更容易上手。
兩種形式的結合
我們認為未來將是本地同步和遠程異步兩種系統的結合,就像一個可以在雲端運行自己的計算機,又能在您身邊提供幫助的遠程同事。Codeex 可以是一個您可以委派任務的實習生、一個導師、一個協同編程者,同時扮演多種角色。
總結
我們的目標是幫助加速有用的工作,增加世界上的軟體工程師數量,推動更多有用的編程工作,從而推動世界前進。我們非常期待看到您如何使用 Codeex。