Visual Studio Code 和 GitHub Copilot

微軟技術棧發表於2023-05-05

翻譯自 Chris Dias 的部落格

AI 這個話題,近期我們看到它被大家廣泛地談論,有些人很興奮,也有些人表達了擔憂。進步幾乎每天都在發生,速度前所未有。每天有超過一百萬的 Copilot 使用者,如果你有機會嘗試,你可能也會認為這項技術並沒有讓人失望,尤其是對於像 OpenAI 的 GPT-3.5/4 這樣的大型語言模型 (LLM)。

在這篇文章中,我們將介紹 VS Code 中 AI 的背景知識,向您展示一些由 GitHub Copilot 提供支援的令人興奮的新體驗,並讓我們一窺未來的發展方向和方式。

GitHub Copilot “V1”

Copilot 擴充套件首次推出已經一年多了。Oege De Moor 和他在 GitHub 的團隊與 OpenAI 合作,帶來了第一個使用 LLM 進行開發的大規模示例,特別是 OpenAI 的程式碼模型。

圖片

Copilot 透過基於周圍程式碼的上下文提供建議作為“幽靈文字”(“ghost text”),為您正在編寫的程式碼提供實時提示。如果您將意圖寫成註釋,或使用描述性函式名稱,Copilot 可以使用這些提示逐字逐行甚至逐塊自動生成程式碼。這是一種非常有效的體驗,通常“幽靈文字”會起作用,您很快就會在流暢的“Tab-Tab-Tab”開發流程中編寫程式碼。

事實證明,這僅僅是個開始。

編輯器內聊天

我們知道 AI 滲透到開發過程中只是時間問題。我們一直在與 GitHub Next 團隊合作開發 Copilot 和 Copilot Labs 擴充套件,但 2022 年 11 月釋出的 ChatGPT 大大加快了時間表。

VS Code 團隊舉辦了一場內部駭客馬拉松,探索如何將 AI 更深入地整合到 VS Code 中,並提出了許多很酷的想法,例如:改進的重新命名和重構、基於示例的程式碼轉換,以及使用自然語言建立檔案 glob 模式或正規表示式的方法。

儘管這些想法很有趣,但我們一直圍繞著聊天體驗打轉。我們有一定程度的懷疑——真的需要生活中的另一種聊天體驗嗎?VS Code 是一個編輯器,我們的工作是讓您進入那個“區域”,併為您的開發和創新消除各種干擾因素。

我們確實發現了一項有趣的探索,將聊天直接構建到編輯器中。這是第一個原型:

圖片

當我們對設計進行迭代時,我們意識到這種使用者模型具有優勢。它可以輕鬆地從鍵盤中呼叫,您可以留在自己的程式碼中,並且輸出結果是程式碼(僅限於程式碼)。

在下面的示例中,我們首先選擇了使用者陣列,然後在 macOS 上按 Cmd+I(或在 Windows/Linux 上按 Ctrl+I)調出聊天輸入。然後我們要求 Copilot 將使用者名稱欄位拆分為 firstName 和 lastName,最後我們單擊 Inline Diff 檢視 Copilot 所做的更改。

圖片

無需使用評論或過於描述性的函式名稱向 Copilot 表達您的意圖,只需按 Cmd+I 並描述您想要做什麼。在 Copilot 工作時待在區域內。

擁抱聊天檢視

隨著圍繞 ChatGPT 的熱情與日俱增,具有自定義聊天檢視的內部和外部擴充套件的數量也在增加。我們擔心這些東西無法擴充套件,很難在 Web 檢視中支援基本的鍵繫結和主題,並且對於那些使用 Monaco 編輯器進行程式碼塊的人來說,很難擴充套件到數百個例項,更不用提這些編輯器例項沒有擴充套件支援。因此,我們與 GitHub Copilot 團隊密切合作,將聊天檢視構建到 VS Code 的核心中。隨著時間的推移,儘管我們最初猶豫不決,但完整的聊天檢視體驗開始贏得我們的青睞。有誰不想以這樣的問候開始新的一天呢?

圖片

我們開始意識到聊天檢視的好處越來越多。與基於瀏覽器的聊天相比,整合體驗最明顯的價值在於我們可以為模型提供上下文,幫助打好對話基礎並提供更好的答案。例如,您不能輕易要求基於瀏覽器的 ChatGPT 最佳化跨多個檔案的程式碼。VS Code 已經對工作區瞭如指掌,因為這是您可以跨檔案進行重構、查詢所有引用、轉到定義等的方式。關鍵資訊可以負責任地嵌入到提示中,以便模型可以給出更相關的答案,最終能夠讓您要求 Copilot 最佳化或重構具有跨多個檔案的依賴關係的程式碼。

許多程式設計問題的答案通常需要多個步驟。例如,許多部落格文章會引導您完成一個過程,而聊天檢視非常適合這種互動方式。除錯是一個很好的例子。誠實地說,配置 launch.json 和 tasks.json 進行除錯並不容易。相比於編寫更多文件或向編輯器新增對話方塊,事實證明您可以簡單地詢問“/vscode add a launch.json and a tasks.json”,然後提供有關如何建立檔案、要新增的內容等的說明,直到您像老闆一樣觸發斷點並檢查變數。

圖片

但也許整合聊天的最重要原因是因為進行雙向對話可以幫助您決定什麼是對的、什麼是錯的。大型語言模型並不完美,它們不會“思考”。他們只是想出下一個更好的回應詞(當然,他們很擅長這個)。作為 Pilot,您始終是負責人,您可以決定採納 Copilot 的哪些建議,以及將哪些程式碼帶入您的工作區。提出澄清問題,或提供更多細節的能力,有助於您做出這些關鍵決定。

充分利用 Copilot

命名很難,然而,“GitHub Copilot”,是一個很棒的名字。“Copilot”不是“結對程式設計師”或“自動飛行員”或簡單的“聊天”,而是用一個詞傳達了多個重要概念。

因此,如果您將自己視為 VS Code 的 Pilot,而 GitHub Copilot 則是副駕駛員,那麼您就開始瞭解如何思考該服務以及與其互動的方式,從而使“座位”上的同伴發揮最大作用。

  • 我們再三強調:作為 Pilot,您是負責人。您決定採納哪些建議以及將哪些程式碼整合到您的工作區中。
  • Copilot 的主要工作是協助您,處理單調或重複性的任務。讓它編寫測試用例、製作樣本資料或基於現有模式構建程式碼。
  • Copilot 可以在更多背景下做更多事情。我們都習慣於基於關鍵字的快速網路搜尋,但您提供的詳細資訊越多,獲得的結果就越好。例如,不要說“Node Express TypeScript”,而是讓 Copilot 幫助您“使用 TypeScript 在 Express.js 框架下搭建一個 Node.js 網站”,然後迭代。
  • 您可以透過在聊天輸入欄位中按“/” 將互動範圍限定為特定主題。例如,要了解如何在編輯器中開啟或關閉 breadcrumbs,請輸入“/vscode Turn off breadcrumbs”。

圖片

  • 您還可以將主題用作快捷方式。無需在內聯聊天中鍵入“解釋此程式碼”,只需鍵入“/”+ Tab(/explain 的快捷方式)並按“Enter”。聊天檢視將開啟,其中包含所選程式碼的說明。
  • 要知道 Copilot 並不完美,會給出錯誤的答案。提出澄清問題來幫助確定哪些是對的、哪些是錯的,並使用“贊成”/“反對”投票按鈕來幫助我們改善體驗。
  • 最後,幾乎與第一個提示一樣重要,總是用友好的“你好”或“早上好”來問候你的 Copilot,這會讓你們兩個都有更好的心情。

今天就開始吧

上面討論的內聯完成體驗已經可以使用。如果您的組織沒有 Copilot,請註冊(https://github.com/features/copilot)並開始免費試用。從那裡:

  • 開啟 VS Code(更好的是,使用 Insiders)。
  • 開啟擴充套件檢視 (Ctrl+Shift+X),搜尋 GitHub Copilot 並安裝擴充套件。
  • 出現提示時,使用您的 GitHub ID 進行身份驗證。
  • 開啟一個程式碼檔案,讓奇蹟發生!

負責任的 AI

像這樣的巨大技術進步真的很少見。我們也相信 AI 是下一個重大轉變,它將改變我們思考、構建和使用開發工具的方式,最終以我們今天只能夢想的方式增強開發過程的各個方面。我們並不聲稱自己是第一個這樣說的人,但很快我們都會想知道如何在沒有 AI 支援的工具的情況下構建、除錯、部署和維護應用程式和系統的。

AI 並不完美(我們也不完美),它會隨著時間的推移而改進。微軟和 GitHub Copilot 遵循負責任的 AI (Responsible AI) 原則,並採用控制措施來確保您的服務體驗合適、愉快且有用。我們理解人們對於 AI 功能的快速擴充套件存在遲疑和擔憂,也充分尊重那些不想或不能使用 Copilot 的人。

聊天助手、編輯器內聊天和內聯完成功能的組合讓您無論處於哪個編碼“區域”都可以利用 Copilot 的強大功能。

將 Chat 整合到 VS Code 中,由 GitHub Copilot 提供支援,只是旅程的第一步。我們將繼續探索其他“內迴圈”場景,例如:使用自然語言描述搜尋模式或程式碼生成、自動生成提交訊息和拉取請求描述、更智慧的程式碼重新命名、重構、轉換等等。

Happy Smart Coding!

點我前往原部落格~

相關文章