介紹 GitHub Copilot 代理模式(預覽版)
2025年2月24日,由 Isidor Nikolic 釋出
代理模式現已在 VS Code 穩定版中可用,並支援 MCP 伺服器。請在我們的部落格文章中閱讀有關代理模式更新的更多資訊。
Copilot 代理模式是 AI 輔助程式設計的下一次進化。它如同一個自主的結對程式設計師,根據你的指令執行多步驟的編碼任務——分析你的程式碼庫、讀取相關檔案、提出檔案編輯建議,以及執行終端命令和測試。它能響應編譯和程式碼檢查錯誤,監控終端和測試輸出,並自動迴圈修正,直到任務完成。目前所有 VS Code Insiders 使用者均可使用,並即將登陸 VS Code 穩定版。
如何使用 Copilot 代理模式
在 VS Code Insiders 中,開啟 Copilot 編輯檢視(),從模式下拉選單中選擇代理 (Agent),然後輸入你的提示。
Copilot 代理模式可以從零開始建立應用程式、跨多個檔案進行重構、編寫並執行測試,以及將舊程式碼遷移到現代框架。它可以自動生成文件、整合新庫,或幫助解答關於複雜程式碼庫的問題。Copilot 代理模式讓你擁有一個理解工作區的 AI 協作者,從而極大地提高生產力。它可以在你掌控全域性的同時,協調你的內部開發流程。
Copilot 代理模式以一種更自主、更動態的方式運作,以實現預期結果。為了處理一個請求,Copilot 會迴圈執行以下步驟,並根據需要多次迭代:
- 自主確定相關的上下文和需要編輯的檔案。
- 提供程式碼更改和終端命令來完成任務。例如,Copilot 可能會編譯程式碼、安裝軟體包、執行測試等。
- 監控程式碼編輯的正確性和終端命令的輸出,並迭代修正問題。
Copilot 代理模式使用一組工具來完成這些任務。
在理想情況下,你只需關心 Copilot 代理模式的最終輸出,但它有時也會犯錯或偏離軌道。為了在這些情況下輕鬆干預和撤銷,每一次工具呼叫都會透明地顯示在使用者介面中,終端工具需要批准,並且我們支援豐富的撤銷功能——你可以使用檢視標題欄中的撤銷上次編輯 (Undo Last Edit) 控制元件來恢復到上次編輯應用之前的狀態。與其依賴一個冗長詳細的提示來獲得完美的解決方案,你更應該與 Copilot 進行迭代——使用者介面就是為迭代而設計的,讓你完全控制整個過程,確保最終結果更好。
Copilot 代理模式透過呼叫正確的工作區工具,自動找到精確的上下文並設定工作檔案集。為了更精確地引導 Copilot,你隨時可以透過 #file
、拖放或點選新增檔案 (Add Files) 按鈕來明確引用上下文。例如,你可以建立一個 specifications.md
檔案並將其新增為上下文,以更好地控制 Copilot,或者你可以設定自定義指令——這樣 Copilot 就會遵循你的編碼規範或其他偏好。
請記住,因為 Copilot 代理模式可能會為每個提示傳送多個請求,所以它不會像常規編輯模式那麼快,並且可能會迅速用完你的免費 Copilot 配額。對於定義明確且範圍有限的任務,請堅持使用編輯模式。當你需要多次編輯或處理更開放的任務時,再切換到代理模式。
工作原理
當你在代理模式下向 Copilot 傳送請求時,我們會根據你從模型下拉選單中選擇的大語言模型 (LLM) 生成一個提示。這個提示包括:
- 你的查詢
- 工作區的摘要結構(而不是完整的程式碼庫,以節省 token)
- 機器上下文(例如,你使用的作業系統)
- 工具描述(以及可選的工具呼叫結果)
我們為 LLM 定義了一套可供呼叫的工具,每個工具都有其獨特的功能,幫助 Copilot 完成工作。利用這些工具,Copilot 可以在工作區中搜索、讀取檔案內容、在終端中執行命令、從編輯器獲取編譯或程式碼檢查錯誤,並透過一個推測性解碼器端點應用建議的更改(效能正在改進中)。工具列表在不斷擴充,因為我們正在試驗還有哪些其他工具可以增強 Copilot 在代理模式下的能力。
每個工具都為 LLM 提供了關於如何以及何時使用它的詳細說明。以下是 read_file
工具描述的示例:
{
"name": "read_file",
"description": "Read the contents of a file. You must specify the line range you're interested in, and if the file is larger, you will be given an outline of the rest of the file. If the file contents returned are insufficient for your task, you may call this tool again to retrieve more content.",
"parameters": {
"type": "object",
"properties": {
"filePath": {
"description": "The absolute paths of the files to read.",
"type": "string"
},
"startLineNumberBaseZero": {
"type": "number",
"description": "The line number to start reading from, 0-based."
},
"endLineNumberBaseZero": {
"type": "number",
"description": "The inclusive line number to end reading at, 0-based."
}
},
"required": ["filePath", "startLineNumberBaseZero", "endLineNumberBaseZero"]
}
}
我們投入了大量開發時間來完善這些工具描述和系統提示,以確保 LLM 能夠準確地使用工具——Anthropic 在他們的構建高效代理部落格中也提到了這一點。我們有自己的自動化評估,但在更新提示和描述,以及觀察它們在真實世界用例中的表現之間,仍然需要大量的反覆試驗。
我們觀察到 GPT 4o 和 Claude Sonnet 的行為有所不同,但目前我們向這些模型傳送類似的系統提示。未來,隨著我們將 Copilot 代理模式的支援擴充套件到更多 LLM,我們將為每個模型專門定製提示。
我們熱愛自託管(self-hosting)
從 VS Code 誕生第一天起,我們就是自託管的堅定信徒。如果團隊沒有使用一個新功能來進行生產環境的變更,那麼這個功能本身就有問題。對我們來說,道理就這麼簡單。
我們的團隊擁有超過 200 個 GitHub 倉庫,我們已經看到 Copilot 代理模式在較小的倉庫中表現出色,並已經帶來了生產力的提升。向 Copilot 提出開放式問題的能力在任何規模的倉庫上都表現得很好——例如,某個特定功能是在哪裡以及如何實現的。在像 vscode 這樣的大型程式碼庫中進行跨多檔案的重構,對當今任何軟體工程代理來說都是一個嚴峻的挑戰。在複雜倉庫中改進 Copilot 代理模式將為我們的團隊解鎖更多的自託管機會,也為你帶來更有用的互動。
除了自託管,VS Code 團隊成員還喜歡在他們的業餘專案中使用 Copilot 代理模式,比如天氣預報、膳食計劃、咖啡消耗或健身鍛鍊的應用。
目前,對於我們的 Copilot 代理模式用例,VS Code 團隊更傾向於使用 Claude Sonnet 而非 GPT-4o。在對 Claude 3.7 Sonnet 的初步測試中,我們已經看到 Copilot 代理模式的功能有了顯著提升。
今日可用
Copilot 代理模式正處於預覽階段,現已對所有 VS Code Insiders 使用者開放。我們每天都在推送程式碼以改進 Copilot,因此 VS Code Insiders 中的體驗每天都在變好(例如,今天我們推送了編輯建議的終端命令的功能)。我們期待在我們的倉庫中收到你的反饋。請告訴我們你想如何使用 Copilot 代理模式,以便我們能確保我們交付的功能對你有影響力。
接下來,我們計劃進行以下工作:
- 更細粒度的撤銷功能
- 簡化上下文 UI(工作集)
- 支援 Notebook(目前編輯會話僅適用於文字編輯器)
- 能夠自動批准特定的終端命令
- 改進終端工具 UI(例如,內聯顯示終端命令輸出)
- 探索將工具可擴充套件性和 MCP 伺服器作為代理模式的工具。如果你有擴充套件程式的想法,請告訴我們
- 統一聊天和編輯的體驗
- 與此同時,我們正在提高質量和效能,目標是向所有 VS Code 穩定版使用者釋出 Copilot 代理模式。
關於 Copilot 代理模式的詳細概述,請閱讀官方文件。
我們對 Copilot 代理模式感到非常興奮——今天就試試吧,讓我們知道你的想法。
享受愉快的程式設計氛圍!
Isidor 和 VS Code 團隊