推出 GitHub Copilot 代理模式(預覽版)
2025 年 2 月 24 日,作者:Isidor Nikolic
代理模式現已在 VS Code Stable 中可用,並支援 MCP 伺服器。詳細瞭解我們在部落格文章中對代理模式的更新。
Copilot 代理模式是 AI 輔助編碼的下一代演進。它充當自主的同行程式設計師,可按您的指令執行多步編碼任務—分析您的程式碼庫,讀取相關檔案,提出檔案編輯建議,並執行終端命令和測試。它會響應編譯和 lint 錯誤,監視終端和測試輸出,並在一個迴圈中自動更正,直到任務完成。現已對所有 VS Code Insiders 使用者可用,即將登陸 VS Code Stable。
如何使用 Copilot 代理模式
在 VS Code Insiders 中,開啟 Copilot 編輯檢視(),從模式下拉選單中選擇 **Agent**,然後輸入您的提示。
Copilot 代理模式可以從頭開始建立應用程式,執行跨多個檔案的重構,編寫和執行測試,並將遺留程式碼遷移到現代框架。它可以自動生成文件,整合新庫,或幫助回答有關複雜程式碼庫的問題。Copilot 代理模式透過擁有一個瞭解工作區的 AI 協作者,幫助您實現超高效率。它可以協調您的內部開發流程,同時讓您保持控制。
Copilot 代理模式以更自主和動態的方式執行,以實現期望的結果。為了處理請求,Copilot 會在以下步驟之間迴圈,並根據需要多次迭代
- 自主確定相關上下文和要編輯的檔案。
- 提供程式碼更改和終端命令來完成任務。例如,Copilot 可能會編譯程式碼、安裝包、執行測試等。
- 監視程式碼編輯和終端命令輸出的正確性,並進行迭代以糾正問題。
Copilot 代理模式使用一組工具來完成這些任務。

在理想情況下,您只需要關心 Copilot 代理模式的最終輸出,但它有時會犯錯並偏離方向。為了輕鬆干預和撤銷這些情況,每個工具的呼叫都會透明地顯示在 UI 中,終端工具需要批准,並且我們支援豐富的撤銷功能 - 您可以使用檢視標題欄中的 **Undo Last Edit** 控制元件恢復到應用最後一次編輯之前的狀態。您應該與 Copilot 進行迭代,而不是依賴一個冗長、詳細的提示來產生完美的解決方案 — UI 就是為迭代而設計的,讓您完全控制流程,確保最終結果更好。
Copilot 代理模式透過呼叫正確的程式碼區工具,自動查詢精確的上下文並設定檔案工作集。為了更精確地指導 Copilot,您始終可以使用 `#file` 顯式引用上下文,透過拖放或點選 **Add Files** 按鈕。例如,您可以建立一個 `specifications.md` 檔案並將其作為上下文新增以更好地控制 Copilot,或者您可以設定 自定義指令 - 這樣 Copilot 就會遵守您的編碼指南或其他偏好。
請記住,由於 Copilot 代理模式可能每個提示傳送多個請求,因此它不會像常規編輯模式那樣快,並且會很快用完您的免費 Copilot 配額。對於定義明確且範圍有限的任務,請堅持使用編輯模式。當您需要進行多次編輯或處理更開放的任務時,請切換到代理模式。
工作原理

當您向代理模式下的 Copilot 傳送請求時,我們會向您從模型下拉列表中選擇的大型語言模型(LLM)發出提示。此提示包括:
- 您的查詢
- 工作區的摘要結構(而不是完整的程式碼庫,以節省 token)
- 機器上下文(例如,您正在使用的作業系統)
- 工具描述(可選的工具呼叫結果)
我們為 LLM 定義了一組工具來呼叫,每個工具都有其自身的功能,幫助 Copilot 完成工作。使用這些工具,Copilot 可以搜尋工作區,讀取檔案內容,在終端中執行命令,從編輯器獲取編譯或 lint 錯誤,並透過投機解碼器端點應用建議的更改(效能改進正在進行中)。工具列表正在不斷擴充套件,因為我們正在嘗試哪些其他工具可以提高 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 在其 building effective agents 部落格中也提到了這一點。我們有自動評估,但更新提示和描述以及觀察它們在實際用例中的行為之間仍然有很多來回的過程。
我們在 GPT 4o 和 Claude Sonnet 之間看到了不同的行為,但目前,我們向這些模型傳送相似的系統提示。未來,隨著我們將 Copilot 代理模式的支援擴充套件到更多 LLM,我們將為每個模型定製提示。
我們熱愛自託管
自 VS Code 問世以來,我們一直是自託管的堅定信徒。如果團隊不使用一項新功能來為生產做好準備,那麼該功能就有問題。對我們來說就是這麼簡單。
我們的團隊擁有超過 200 個 GitHub 儲存庫,並且我們已經看到 Copilot 代理模式在較小的儲存庫中表現出色,並且已經帶來了生產力提升。在任何大小的儲存庫上詢問 Copilot 開放式問題都非常有效—例如,某個特定功能在哪裡以及如何實現。在大型程式碼庫(如 vscode)中跨多個檔案的重構,對任何軟體工程代理來說都是一項艱鉅的挑戰。改進複雜儲存庫中的 Copilot 代理模式將為我們的團隊解鎖更多自託管機會,併為您提供有用的互動。
除了自託管,VS Code 團隊成員還喜歡將其 Copilot 代理模式用於他們的愛好專案,例如天氣預報應用程式、膳食計劃、咖啡攝入量或健身鍛鍊。
今天,VS Code 團隊在 Copilot 代理模式用例中更偏好 Claude Sonnet 而非 GPT-4o。在對 Claude 3.7 Sonnet 的初步測試中,我們看到了 Copilot 代理模式功能的顯著改進。
今日可用
Copilot 代理模式目前處於預覽階段,現已對所有 VS Code Insiders 使用者可用。我們每天都在實際推送程式碼來改進 Copilot,因此 VS Code Insiders 中的體驗每天都在變得更好(例如,今天我們推送了編輯建議終端命令的功能)。我們期待在我們的儲存庫中收到您的反饋。讓我們知道您想如何使用 Copilot 代理模式,這樣我們才能確保我們交付的功能對您具有影響力。
接下來,我們計劃進行以下工作
- 細粒度撤銷功能
- 簡化上下文 UI(工作集)
- 筆記本支援(目前編輯會話僅適用於文字編輯器)
- 自動批准特定終端命令的功能
- 改進終端工具 UI(例如,內聯顯示終端命令輸出)
- 探索工具可擴充套件性和MCP 伺服器作為代理模式的工具。如果您有擴充套件想法,請告訴我們。
- 統一聊天和編輯體驗
- 同時,我們正在提高質量和效能,目標是將 Copilot 代理模式釋出給所有 VS Code Stable 使用者。
有關 Copilot 代理模式的詳細概述,請閱讀官方文件。
我們對 Copilot 代理模式感到非常興奮——立即試用並告訴我們您的想法。
祝您編碼愉快!
Isidor 和 VS Code 團隊