搭配 Agent 使用工具

工具透過專門的功能擴充 Visual Studio Code 中的 Agent,用於完成特定工作,例如搜尋程式碼、執行指令、獲取網頁內容或調用 API。VS Code 支援三種類型的工具:內建工具、Model Context Protocol (MCP) 工具和擴充功能工具。

如需工具類型以及工具在 Agent 迴圈中如何運作的背景資訊,請參閱 工具概念

本文說明如何在聊天提示詞中使用工具,以及如何管理工具的叫用與核准。

為聊天啟用工具

在聊天中使用工具之前,您需要在「聊天」檢視中啟用它們。您可以使用工具選取器在每次請求時啟用或停用工具。您可以透過安裝 MCP 伺服器或提供工具的擴充功能來新增更多工具。

提示

僅選取與您的提示詞相關的工具,以改善結果。

若要存取工具選取器

  1. 開啟「聊天」檢視,並從 Agent 選取器中選取 Agent

  2. 選取聊天輸入欄位中的 設定工具 (Configure Tools) 按鈕。

    Screenshot showing the Chat view, highlighting the Configure Tools button in the chat input.

  3. 選取或取消選取工具,以控制目前請求可使用的工具。

    使用搜尋方塊來篩選工具清單。

當您使用提示詞檔案自訂 Agent 自訂聊天時,您可以指定特定提示詞或模式可用的工具。深入了解工具清單優先順序

在提示詞中使用工具

使用 Agent 時,Agent 會根據您的提示詞和請求的內容,自動從啟用的工具中決定要使用哪些工具。Agent 會自主選擇並叫用相關工具以完成工作。

您也可以在提示詞中輸入 # 後接工具名稱,藉此明確引用工具。當您想要確保使用特定工具時,這非常有用。在聊天輸入欄位中輸入 # 即可查看可用工具清單,包括內建工具、來自已安裝伺服器的 MCP 工具、擴充功能工具和工具集。

明確引用工具的範例

  • "Node.js 的最新版本為何 #web"
  • "Next.js 的路由如何運作? #web"
  • "修復 #problems 中的問題"
  • "解釋身分驗證流程 #codebase"
提示

預設情況下,工具呼叫詳細資料在聊天對話中會被摺疊。您可以選取聊天中的工具摘要列來展開它們,或者使用 chat.agent.thinking.collapsedTools 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定 (實驗性) 來變更預設行為。

權限層級

「聊天」檢視中的權限選取器可控制 Agent 在工作階段期間擁有的自主程度。從聊天輸入區域的權限下拉式選單中選取權限層級,以選擇如何處理工具呼叫和核准。

權限層級 說明
預設核准 (Default Approvals) 使用您設定的核准設定。需要核准的工具在執行前會顯示確認對話方塊。如有需要,Agent 可能會詢問釐清問題。
略過核准 (Bypass Approvals) 自動核准所有工具呼叫,不顯示確認對話方塊,並在出錯時自動重試。如有需要,Agent 可能會詢問釐清問題。
Autopilot (預覽) 自動核准所有工具呼叫,不顯示確認對話方塊,並自動回應釐清問題。Agent 會持續自主運作,直到工作完成。
注意

略過核准Autopilot 會略過手動核准提示,包括可能具破壞性的動作,例如檔案編輯、終端機指令和外部工具叫用。第一次啟用這兩個層級中的任一個時,會出現警告對話方塊要求您確認。請僅在了解安全性影響的情況下使用這些層級。詳情請參閱 安全性考量

權限層級適用於目前聊天工作階段。您可以在工作階段期間隨時從權限選取器中選取不同的層級來變更它。您可以隨時選取停止按鈕來停止 Agent。

Autopilot 如何運作

注意

Autopilot 目前處於預覽階段。

當您選取 Autopilot 權限層級時,Agent 的行為會與標準 Agent 工作階段不同

  • 持續反覆執行:Agent 會持續自主運作,直到它判定工作已完成。
  • 自動核准所有工具:所有工具呼叫都會自動核准,類似於 略過核准 層級。
  • 出錯時自動重試:Agent 在遇到錯誤時會自動重試。
  • 自動回應問題:通常會封鎖並要求您輸入的工具 (例如釐清問題),會自動回應,使 Agent 不會因為等待回覆而停滯。此行為專屬於 Autopilot,不適用於 略過核准

chat.autopilot.enabled 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定啟用時 (預設為開啟),Autopilot 在「聊天」檢視中即可使用。

工具核准

某些工具在執行前需要您的核准。這是一項安全性措施,因為工具可以執行修改檔案、環境的動作,或嘗試透過惡意工具輸出進行提示詞插入式攻擊。

當工具需要核准時,會出現一個顯示工具詳細資料的確認對話方塊。在核准工具之前,請仔細檢查資訊。您可以核准工具僅供單次使用、用於目前工作階段、用於目前工作區或用於未來所有叫用。

Screenshot of a tool confirmation dialog showing tool details and approval options.

工具和 Agent 動作可能會導致檔案修改。了解如何防止意外編輯工作區中的敏感檔案

重要

在核准之前,請務必仔細檢查工具參數,尤其是修改檔案、執行指令或存取外部服務的工具。參閱在 VS Code 中使用 AI 的 安全性考量

管理工具核准

使用命令轉盤 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的 聊天:管理工具核准 (Chat: Manage Tool Approval) 指令來集中檢查與設定工具核准。快速選取會顯示按來源 (例如 MCP 伺服器或擴充功能) 分組的所有工具。

對於每個工具,您可以設定兩種類型的核准

  • 預先核准 (「不需核准」):在工具執行前跳過確認對話方塊。
  • 事後核准 (「不需檢查結果」):在工具輸出新增至聊天內容前跳過檢查。這對於傳回外部資料的工具有關,因為其內容可能包含提示詞插入嘗試。

展開來源以設定個別工具的核准,或選取頂層核取方塊以一次信任來自特定 MCP 伺服器或擴充功能的所有工具。

啟用或停用工具自動核准 (實驗性)

預設情況下,您可以選擇自動核准任何工具。若要防止意外核准,您可以使用 chat.tools.eligibleForAutoApproval 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯繫您的管理員進行變更。 設定。將值設為 false 以一律要求該工具進行手動核准。

組織也可以使用裝置管理原則來強制要求特定工具進行手動核准。深入了解 企業版文件

URL 核准

當工具嘗試存取 URL 時 (例如使用 #web/fetch 工具),會使用兩步驟核准程序來保護您免受惡意或非預期內容的影響。VS Code 會在「聊天」檢視中顯示帶有 URL 詳細資料的確認對話方塊供您檢查。

  • 預先核准:核准對 URL 的請求

    此步驟可確保您信任要聯繫的網域,並可防止敏感資料傳送到不受信任的網站。

    Screenshot of a URL approval dialog showing URL details and approval options.

    您可以選擇單次核准,或是自動核准未來對特定 URL 或網域的請求。選取自動核准不會影響檢查結果的必要性。當您選取 允許請求至 時,您可以選擇為該 URL 或網域同時設定預先和事後核准。

    注意

    預先核准遵循「信任的網域」功能。如果網域列在其中,您將自動被核准向該網域發出請求,並推遲回應檢查步驟。

  • 事後核准:核准從 URL 抓取的回應內容

    此步驟可確保您在抓取的內容新增至聊天或傳遞給其他工具之前對其進行檢查,以防止潛在的提示詞插入式攻擊。

    例如,您可能會核准從知名網站 (如 GitHub.com) 抓取內容的請求。但由於內容 (如問題說明或評論) 是使用者產生的,它可能包含可能操縱模型行為的有害內容。

    您可以選擇單次核准,或是自動核准來自特定 URL 或網域的未來回應。

    重要

    事後核准步驟未連結到「信任的網域」功能,且一律需要您的檢查。這是一項安全性措施,旨在防止您原本信任的網域上出現不受信任內容的問題。

chat.tools.urls.autoApprove 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定用於儲存您的自動核准 URL 模式。設定值可以是啟用或停用請求和回應兩者自動核准的布林值,也可以是具有 approveRequestapproveResponse 屬性以便進行精細控制的物件。您可以使用精確的 URL、glob 模式或萬用字元。

URL 自動核准範例

{
"chat.tools.urls.autoApprove": {
    "https://www.example.com": false,
    "https://*.contoso.com/*": true,
    "https://example.com/api/*": {
        "approveRequest": true,
        "approveResponse": false
    }
}

重設工具確認

若要清除所有儲存的工具核准,請使用命令轉盤 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的 聊天:重設工具確認 (Chat: Reset Tool Confirmations) 指令。

若要檢查並選擇性地變更個別工具核准而非清除所有核准,請使用 聊天:管理工具核准 指令。

編輯工具參數

您可以在工具執行前檢查並編輯輸入參數

  1. 當工具確認對話方塊出現時,選取工具名稱旁的 V 形圖示以展開其詳細資料。

  2. 根據需要編輯任何工具輸入參數。

  3. 選取 允許 (Allow) 以使用修改後的參數執行工具。

終端機指令

Agent 可能會使用終端機指令作為其工作流程的一部分來完成工作。當 Agent 決定執行終端機指令時,它會使用內建的終端機工具在 VS Code 的整合終端機中執行指令。

在聊天對話中,Agent 會顯示它執行的指令。您可以透過選取指令旁的 顯示輸出 (Show Output) (>) 在聊天中直接檢視指令的輸出。您也可以選取 顯示終端機 (Show Terminal) 在整合終端機中檢視完整的輸出。

Screenshot showing terminal command output in chat.

使用實驗性的 chat.tools.terminal.outputLocation 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來設定終端機指令輸出顯示的位置:在聊天中直接顯示,或在整合終端機中。

在終端機面板中,您可以看到 Agent 在聊天工作階段中使用過的終端機清單。您也可以透過終端機清單中的聊天圖示來區分 Agent 終端機。

Screenshot showing the integrated terminal with multiple agent terminals.

在背景繼續執行終端機指令

當 Agent 執行長時間執行的終端機指令 (例如啟動開發伺服器或在監看模式下執行建置) 時,您可以將指令推送到背景。這可讓 Agent 在不等待指令完成的情況下繼續處理其他工作。

當指令正在執行時,聊天對話中的終端機指令旁會出現 在背景繼續 (Continue in Background) 按鈕。選取此按鈕可將指令移至背景。指令會繼續執行,Agent 稍後可以檢查其輸出或使用終端機執行其他工作。

Agent 在執行終端機指令時也可以指定逾時。達到逾時後,Agent 會停止等待指令並傳回目前收集到的輸出。使用 chat.tools.terminal.enforceTimeoutFromModel 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來控制是否強制執行 Agent 指定的逾時值。

自動核准終端機指令

您可以使用 chat.tools.terminal.autoApprove 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來設定哪些終端機指令會被自動核准。您可以指定允許和拒絕的指令

  • 將指令設為 true 以自動核准它們
  • 將指令設為 false 以一律要求核准
  • 透過將模式包在 / 字元中來使用規則運算式

例如

{
  // Allow the `mkdir` command
  "mkdir": true,
  // Allow `git status` and commands starting with `git show`
  "/^git (status|show\\b.*)$/": true,

  // Block the `del` command
  "del": false,
  // Block any command containing "dangerous"
  "/dangerous/": false
}

預設情況下,模式會與個別子指令進行比對。若要自動核准指令,所有子指令必須符合 true 項目,且不得符合 false 項目。

對於進階案例,請使用帶有 matchCommandLine 屬性的物件語法,以針對完整的命令列而非個別子指令進行比對。

相關設定

  • chat.tools.terminal.enableAutoApprove 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯繫您的管理員進行變更。:永久停用自動核准功能
  • chat.tools.terminal.blockDetectedFileWrites 在 VS Code 中開啟 在 VS Code Insiders 中開啟 (實驗性):檔案寫入偵測 (實驗性)
  • chat.tools.terminal.ignoreDefaultAutoApproveRules 在 VS Code 中開啟 在 VS Code Insiders 中開啟 (實驗性):停用所有預設規則 (包括允許和封鎖),以完全控制所有規則。
注意

自動核准終端機指令提供「盡力而為」的保護,並假設 Agent 並非惡意運作。當您啟用終端機自動核准時,保護自己免受提示詞插入攻擊非常重要,因為某些指令仍有可能漏掉。以下是偵測可能失效的一些範例

  • VS Code 使用 PowerShell 和 bash tree-sitter 語法來擷取子指令,因此如果這些語法沒偵測到,模式就無法被偵測。
  • VS Code 使用 bash 語法是因為沒有 zsh 或 fish 語法,因此某些子指令無法被偵測。
  • 目前對檔案寫入的偵測極少,因此有可能透過終端機寫入檔案,而這在原本使用檔案編輯 Agent 工具時是不可能的。
  • 透過引號串接等各種技術來規避自動核准是可能的。例如 find -exec 通常會被封鎖,但 find -e"x"ec 則不會,儘管兩者作用相同。

如果可能存在提示詞插入風險或您處於高風險環境中,請考慮啟用 Agent 沙盒化或在容器內執行 VS Code。

沙盒化 Agent 指令

注意

Agent 沙盒化目前處於預覽階段,未來可能會進一步發展。

如需沙盒化運作方式、其保護對象以及作業系統層級實作詳細資料的概觀,請參閱 Agent 沙盒化

Agent 沙盒化會限制 Agent 執行之指令的檔案系統和網路存取。啟用沙盒化後,終端機指令會自動核准而不需要使用者確認,因為它們是在受控環境中執行的。

若要啟用 Agent 沙盒化,請將 chat.agent.sandbox 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定設為 true

啟用沙盒化時

  • 指令具有對整個檔案系統的讀取權限
  • 指令僅對目前工作目錄及其子目錄具有寫入權限
  • 所有網域的網路存取都被封鎖
  • 指令執行時不需使用者確認提示
重要

如果未安裝沙盒化所需的作業系統相依項目, VS Code 會提議安裝必要元件。如果您選擇不安裝,則不會啟用沙盒化。

設定檔案系統存取

使用 chat.agent.sandboxFileSystem.linux 在 VS Code 中開啟 在 VS Code Insiders 中開啟 chat.agent.sandboxFileSystem.mac 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來控制檔案系統存取。

您可以指定寫入權限的允許規則,以及讀取和寫入權限的拒絕規則。這些規則不支援 glob 模式。denyWritedenyRead 規則優先於 allowWrite 規則。

{
  "chat.agent.sandboxFileSystem.mac": {
    // Allow writes to the working directory
    "allowWrite": ["."],
    // Block writes to specific subdirectories
    "denyWrite": ["./secrets/"],
    // Block reads from specific paths
    "denyRead": ["/etc/passwd"]
  }
}

設定網路存取

預設情況下,啟用沙盒化時會封鎖所有網域的網路存取。使用 chat.agent.sandboxNetwork.allowedDomains 在 VS Code 中開啟 在 VS Code Insiders 中開啟 chat.agent.sandboxNetwork.deniedDomains 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來允許特定網域

{
    "chat.agent.sandboxNetwork.allowedDomains": [
        "api.github.com"
    ],
    "chat.agent.sandboxNetwork.deniedDomains": [
        "example.com"
    ]
}

使用工具集將工具分組

工具集是一組工具的集合,您可以在提示詞中將其作為單一實體引用。工具集可協助您組織相關工具,使其在聊天提示詞、提示詞檔案自訂聊天 Agent 中更易於使用。某些內建工具是預定義工具集的一部分,例如 #edit#search

建立工具集

若要建立工具集

  1. 從命令轉盤執行 聊天:設定工具集 (Chat: Configure Tool Sets) 指令,並選取 建立新的工具集檔案 (Create new tool sets file)。

    或者,選取「聊天」檢視中的省略號 (...) 功能表,選取 工具集 (Tool Sets),然後選取 建立新的工具集檔案

  2. 在開啟的 .jsonc 檔案中定義您的工具集。

    工具集具有以下結構

    {
      "reader": {
        "tools": ["search/changes", "search/codebase", "read/problems", "search/usages"],
        "description": "Tools for reading and gathering context",
        "icon": "book"
      }
    }
    

    工具集屬性

    • tools:工具名稱陣列 (內建工具、MCP 工具或擴充功能工具)
    • description:顯示在工具選取器中的簡短說明
    • icon:工具集的圖示 (參閱 產品圖示參考)

使用工具集

在提示詞中輸入 # 後接工具集名稱來引用工具集

  • "分析程式碼庫是否存在安全性問題 #reader"
  • "DB 連線字串定義在哪裡? #search"

在工具選取器中,工具集是以相關工具的摺疊組件形式提供。您可以選取或取消選取整個工具集,以快速一次啟用或停用多個相關工具。

常見問題

我該如何知道有哪些可用的工具?

在聊天輸入欄位中輸入 # 即可查看所有可用工具的清單。您也可以使用聊天中的工具選取器來檢視與管理作用中工具清單。

我收到一個錯誤,內容為「每次請求不得超過 128 個工具。」

一個聊天請求最多可同時啟用 128 個工具。如果您看到超過每次請求 128 個工具的錯誤

  • 開啟「聊天」檢視中的工具選取器,並取消選取某些工具或整個 MCP 伺服器以減少數量。

  • 或者,啟用 github.copilot.chat.virtualTools.threshold 在 VS Code 中開啟 在 VS Code Insiders 中開啟 設定來自動管理大型工具集。

為何 Agent 沒有使用我設定的終端機殼層 (Shell)?

Agent 使用您設定為終端機預設的殼層,但在 Windows 上排除 cmd (命令提示字元),在 macOS/Linux 上排除 sh。這是因為這些殼層不支援殼層整合,這意味著 Agent 對終端機內部發生情況的洞察力非常有限。Agent 無法取得指令執行或完成執行時的直接訊號,而必須依賴逾時並觀察終端機是否閒置來繼續。這會導致體驗緩慢且不穩定。

您仍然可以透過終端機設定檔設定將 Agent 配置為使用這些殼層,但與在 Windows 上使用 PowerShell 或在 macOS/Linux 上使用 bash/zsh 相比,這會導致體驗較差。

  • chat.tools.terminal.terminalProfile.windows 在 VS Code 中開啟 在 VS Code Insiders 中開啟 - 在 Windows 上覆寫殼層
  • chat.tools.terminal.terminalProfile.osx 在 VS Code 中開啟 在 VS Code Insiders 中開啟 - 在 macOS 上覆寫殼層
  • chat.tools.terminal.terminalProfile.linux 在 VS Code 中開啟 在 VS Code Insiders 中開啟 - 在 Linux 上覆寫殼層

我可以自動核准所有工具和終端機指令嗎?

您有幾個自動核准工具呼叫的選項

  • 權限層級:從權限選取器中選取 略過核准Autopilot 權限層級,為目前工作階段自動核准所有工具。
  • 全域設定:啟用 chat.tools.global.autoApprove 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯繫您的管理員進行變更。 設定,在您所有的工作區中自動核准所有工具。您也可以直接在聊天中使用 /yolo/autoApprove 斜線指令來啟用它,或使用 /disableYolo/disableAutoApprove 來停用它。第一次啟用全域自動核准時,會出現警告對話方塊要求您確認。
注意

這兩種方法都會停用手動核准提示,包括可能具破壞性的動作。它們移除了關鍵的安全性保護,並使攻擊者更容易入侵機器。請僅在您了解影響的情況下使用這些選項。詳情請參閱 安全性文件

chat.tools.global.autoApprove 在 VS Code 中開啟 在 VS Code Insiders 中開啟 此設定由組織層級管理。請聯繫您的管理員進行變更。 設定全域套用於您所有的工作區。如果您偏好將自動核准限制在目前工作階段,請使用工作階段範圍的權限層級

工具和聊天參與者之間有什麼區別?

聊天參與者是專門的助手,可讓您在聊天中詢問特定領域的問題。將聊天參與者想像成一位領域專家,您將聊天請求交給他,由他處理剩下的事情。

工具是作為 Agent 流程的一部分被叫用,用來貢獻並執行特定工作。您可以在單個聊天請求中包含多個工具,但一次只能有一個聊天參與者處於活動狀態。

我可以建立自己的工具嗎?

可以。您可以透過兩種方式建立工具

© . This site is unofficial and not affiliated with Microsoft.