搭配 Agent 使用工具

工具透過專用功能來擴展 Visual Studio Code 中的代理程式,以完成特定任務,例如搜尋程式碼、執行指令、獲取網頁內容或呼叫 API。VS Code 支援三種工具類型:內建工具、模型內容協定 (MCP) 工具和擴充功能工具。

關於工具類型以及工具如何在代理程式迴圈中運作的背景資訊,請參閱 工具概念

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

啟用聊天工具

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

提示

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

存取工具選擇器

  1. 開啟「聊天」檢視,並從代理程式選擇器中選擇代理程式

  2. 在聊天輸入欄位中選擇設定工具按鈕。

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

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

    使用搜尋方塊來篩選工具列表。

當您使用提示詞檔案自訂代理程式自訂聊天時,您可以指定哪些工具可用於特定的提示詞或模式。深入了解工具列表優先順序

在提示詞中使用工具

當使用代理程式時,代理程式會根據您的提示詞和請求上下文,從已啟用的工具中自動判斷要使用哪些工具。代理程式會自主選擇並在需要時呼叫相關工具來完成任務。

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

明確工具引用的範例

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

預設情況下,工具呼叫細節在聊天對話中會摺疊顯示。您可以透過在聊天中選取工具摘要行來展開它們,或是透過 chat.agent.thinking.collapsedTools ... (實驗性) 設定來變更預設行為。

權限層級

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

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

略過核准 (Bypass Approvals)自動駕駛 (Autopilot) 會略過手動核准提示,包括針對潛在破壞性的動作,如檔案編輯、終端機指令和外部工具呼叫。首次啟用任一等級時,會出現警告對話框要求您確認。僅在了解安全性影響的情況下使用這些等級。詳細資訊請參閱 安全性考量

權限等級適用於目前的聊天工作階段。您可以隨時在工作階段期間從權限選擇器中選擇不同的等級來進行變更。您可以隨時透過選擇停止按鈕來停止代理程式。

提示

預設情況下,新的聊天工作階段會以預設核准 (Default Approvals) 等級開始。若要跨工作階段保留您偏好的權限等級,請設定 ... 設定。

自動駕駛 (Autopilot) 如何運作

注意

自動駕駛目前處於預覽階段。

當您選擇 自動駕駛 (Autopilot) 權限等級時,代理程式的行為與標準代理程式工作階段不同:

  • 持續迭代:代理程式會持續自主工作,直到它判斷任務已完成。
  • 自動核准所有工具:所有工具呼叫都會自動核准,類似於略過核准等級。
  • 發生錯誤時自動重試:代理程式在遇到錯誤時會自動重試。
  • 自動回應問題:通常會阻擋並要求您輸入的工具(例如釐清問題)會自動回應,因此代理程式不會因等待回覆而停滯。此行為僅適用於 自動駕駛,不適用於 略過核准

... 設定啟用時(預設為開啟),「聊天」檢視中提供自動駕駛功能。

注意

自動駕駛消耗 AI 點數的方式與標準互動介面相同。深入了解 基於使用量的計費

工具核准

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

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

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

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

重要

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

管理工具核准

使用指令面板 (⇧⌘P) 中的 Chat: Manage Tool Approval (聊天:管理工具核准) 指令,集中檢閱和設定工具核准。快速選擇 (Quick Pick) 會顯示所有按來源(例如 MCP 伺服器或擴充功能)分組的工具。

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

  • 預先核准 (Pre-approval)(「無需核准」):在工具執行前跳過確認對話框。
  • 後續核准 (Post-approval)(「無需檢閱結果」):在工具輸出被加入聊天上下文之前,跳過檢閱輸出。這適用於回傳外部資料的工具,其內容可能包含提示詞注入嘗試。

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

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

預設情況下,您可以選擇自動核准任何工具。為防止意外核准,您可以透過 ... 設定停用特定工具的自動核准。將值設為 false,即可對該工具始終要求手動核准。

組織也可以使用裝置管理原則來強制要求特定工具的手動核准。詳情請見企業文件

URL 核准

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

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

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

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

    您可以選擇一次性核准,或自動核准未來對該特定 URL 或網域的請求。選擇自動核准不會影響對結果進行檢閱的需求。當您選擇 Allow requests to (允許請求至) 時,您可以選擇為該 URL 或網域設定預先核准和後續核准。

    注意

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

  • 後續核准:核准從該 URL 獲取的回應內容

    此步驟可確保您在獲取的內容被加入聊天或傳遞給其他工具之前進行審查,以防止潛在的提示詞注入攻擊。

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

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

    重要

    後續核准步驟與「信任的網域」功能無關,並且始終需要您的檢閱。這是一項安全性措施,旨在防止您原本信任的網域中出現不受信任的內容問題。

... 設定用於儲存您的自動核准 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) 中的 Chat: Reset Tool Confirmations (聊天:重設工具確認) 指令。

若要檢閱並有選擇性地變更個別工具核准,而不是全部清除,請使用 Chat: Manage Tool Approval (聊天:管理工具核准) 指令。

編輯工具參數

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

  1. 當工具確認對話框出現時,選取工具名稱旁的箭頭以展開其詳細資訊。

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

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

終端機指令

代理程式可能會在工作流程中使用終端機指令來完成任務。當代理程式決定執行終端機指令時,它會使用內建的終端機工具在 VS Code 的整合終端機中執行這些指令。

在聊天對話中,代理程式會顯示它所執行的指令。您可以透過選取指令旁的 Show Output (顯示輸出) (>) 來檢視聊天中內嵌的指令輸出。您也可以透過選取 Show Terminal (顯示終端機),在整合終端機中檢視完整輸出。

Screenshot showing terminal command output in chat.

使用實驗性的 ... 設定來配置終端機指令輸出的顯示位置:內嵌於聊天中,或顯示於整合終端機。

在終端機窗格中,您可以查看代理程式用於聊天工作階段的終端機列表。您也可以透過終端機列表中的聊天圖示來辨識代理程式終端機。

Screenshot showing the integrated terminal with multiple agent terminals.

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

當代理程式執行長時間運行的終端機指令(如啟動開發伺服器或以監控模式執行建置)時,您可以將該指令推送到背景。這使得代理程式可以在不等待指令完成的情況下繼續處理其他任務。

當指令執行時,聊天對話中的終端機指令旁會出現一個 Continue in Background (在背景繼續) 按鈕。選擇此按鈕可將指令移至背景。指令會繼續執行,代理程式隨後可以檢查其輸出或將終端機用於其他任務。

代理程式在執行終端機指令時也可以指定逾時。當達到逾時時間時,代理程式會停止等待指令,並回傳目前為止收集到的輸出。使用 ... 設定來控制是否強制執行代理程式指定的逾時值。

代理程式也可以選擇直接在背景執行指令,無需使用者互動。您未顯示的背景終端機會在指令完成時自動清理,這可以防止閒置終端機在長時間的工作階段中累積。若要顯示背景終端機並在指令完成後保持開啟,請選取聊天工具呼叫標頭中的 Show (顯示) 連結。即使終端機已被清理,終端機輸出在聊天對話中仍保持可見。

自動核准終端機指令

您可以使用 ... 設定來配置哪些終端機指令會被自動核准。您可以指定允許和拒絕的指令

  • 將指令設為 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 屬性的物件語法,以針對完整指令列進行比對,而非個別子指令。

相關設定

  • ... :永久停用自動核准功能
  • ... (實驗性):當設為 outsideWorkspace(預設值)時,對於寫入工作區以外檔案的終端機指令要求核准。當工作階段層級的指令核准處於作用中狀態時,寫入作業系統暫存資料夾(macOS 和 Linux 為 /tmp,Windows 為 %TEMP%)則可豁免。
  • ... (實驗性):停用所有預設規則(包括允許和阻擋),從而對所有規則擁有完整控制權。
注意

自動核准終端機指令提供了盡力而為的保護,並假設代理程式不會惡意行事。啟用終端機自動核准時,保護自己免受提示詞注入攻擊非常重要,因為某些指令有可能會漏網。以下是一些偵測功能可能會失效的範例

  • VS Code 使用 PowerShell 和 Bash tree sitter 文法來提取子指令,因此如果這些文法無法偵測到它們,模式就不會被偵測到。
  • VS Code 使用 Bash 文法,因為沒有 zsh 或 fish 文法,所以某些子指令無法被偵測到。
  • 目前對檔案寫入的偵測非常有限,因此有可能透過終端機寫入檔案,而這在使用檔案編輯代理程式工具時是無法做到的。
  • 透過引號串接等多種技術,可以規避自動核准。例如,find -exec 通常會被阻擋,但 find -e"x"ec 卻不會,儘管它們執行的是相同的操作。

如果提示詞注入是一種可能性,或者您身處高風險環境,請考慮啟用代理程式沙盒或在容器內執行 VS Code。

沙盒化代理程式指令

注意

代理程式沙盒功能目前處於預覽階段,可能會持續演進。

關於沙盒如何運作、其防護內容以及作業系統層級實作細節的概述,請參閱 代理程式沙盒化

代理程式沙盒化會限制代理程式所執行指令的檔案系統和網路存取權限。啟用沙盒化後,終端機指令會被自動核准,無需使用者確認,因為它們是在受控環境中執行的。

您可以選擇完全隔離(限制檔案系統和網路存取)或僅限檔案系統的隔離(允許不受限制的對外網路流量)。

若要設定代理程式沙盒,請設定 ... 設定

說明
off(預設值) 沙盒已停用。
on 具有檔案系統和網路隔離的完整沙盒。除非明確允許網域,否則所有對外網路存取都會被阻擋。
allowNetwork 僅具有檔案系統隔離的沙盒。允許對外網路流量而無需設定網域,但檔案系統限制仍然適用。

當啟用沙盒時 (onallowNetwork)

當檔案系統存取受限時,代理程式指令適用以下規則

  • 指令擁有對工作區資料夾、沙盒執行階段暫存資料夾,以及 VS Code 自動新增之每個指令路徑的讀取存取權(例如 gitnodenpmdotnet 所需的路徑)。預設會拒絕讀取您的家目錄 ($HOME)。
  • 指令僅擁有對目前工作目錄及其子目錄的寫入存取權
  • 指令在執行時無需使用者確認提示

當網路存取受限時,代理程式指令適用以下規則

  • 除非明確允許網域,否則所有對外網路存取都會被阻擋。
  • 您可以使用 ... ... 來設定網域層級的例外情況。拒絕的網域優先於允許的網域。
  • 當設為 allowNetwork 時,允許所有對外網路流量,且網域設定會被忽略。
重要

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

設定檔案系統存取

使用 ... ... 設定來控制檔案系統存取。

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

工作區資料夾、沙盒執行階段暫存資料夾以及每個指令的讀取路徑會自動被允許,因此您通常只需要 allowRead 來授予對工作區外部工具配置或資料的存取權。

{
  "chat.agent.sandbox.FileSystem.mac": {
    // Allow writes to the working directory
    "allowWrite": ["."],
    // Allow reads from an additional path outside the workspace
    "allowRead": ["/Users/me/.config/myapp"],
    // Block writes to specific subdirectories
    "denyWrite": ["./secrets/"],
    // Block reads from specific paths
    "denyRead": ["/etc/passwd"]
  }
}

設定網路存取

您可以透過啟用 ... 設定,限制代理程式工具(fetch 工具、整合瀏覽器)可以存取的網域。啟用後,網路存取由 ... ... 設定控制。當這兩個列表皆為空時,所有網域都會被阻擋。

當同時啟用沙盒時,這些網路規則會額外套用於代理程式執行的終端機指令。

拒絕的網域始終優先於允許的網域。兩個設定均支援萬用字元,例如 *.example.com

{
    "chat.agent.networkFilter": true,
    "chat.agent.allowedNetworkDomains": [
        "api.github.com"
    ],
    "chat.agent.deniedNetworkDomains": [
        "example.com"
    ]
}

使用工具集將工具分組

工具集是您可以作為單一實體在提示詞中引用的工具集合。工具集有助於組織相關工具,並使它們在聊天提示詞、提示詞檔案自訂聊天代理程式中更容易使用。部分內建工具屬於預定義的工具集,例如 #edit#search

建立工具集

建立工具集

  1. 從指令面板執行 Chat: Configure Tool Sets (聊天:設定工具集) 指令,然後選擇 Create new tool sets file (建立新的工具集檔案)

    或者,在「聊天」檢視中選擇省略號 (...) 選單,選擇 Tool Sets (工具集),然後選擇 Create new tool sets file (建立新的工具集檔案)

  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 伺服器以減少計數。

  • 或者,使用 ... 設定啟用虛擬工具,以自動管理大型工具集。

為什麼代理程式沒有使用我設定的終端機 Shell?

代理程式使用您設定為終端機預設的 Shell,Windows 上的 cmd (命令提示字元) 和 macOS/Linux 上的 sh 除外。這是因為這些 Shell 不支援 Shell 整合,這意味著代理程式對終端機內部的運作情況知之甚少。代理程式無法直接獲得指令何時執行或完成的訊號,必須依賴逾時和監看終端機是否閒置來繼續工作。這會導致緩慢且不穩定的體驗。

您仍然可以透過終端機設定檔設定來配置代理程式使用這些 Shell,但與在 Windows 上使用 PowerShell 或在 macOS/Linux 上使用 bash/zsh 相比,體驗會較差。

  • ... - 覆寫 Windows 上的 Shell
  • ... - 覆寫 macOS 上的 Shell
  • ... - 覆寫 Linux 上的 Shell

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

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

  • 權限等級:從權限選擇器中選擇 略過核准自動駕駛 權限等級,即可自動核准目前工作階段的所有工具。
  • 全域設定:啟用 ... 設定,即可自動核准所有工作區中的所有工具。您也可以直接透過聊天使用 /yolo/autoApprove 斜線指令來啟用它,或使用 /disableYolo/disableAutoApprove 來停用它。首次啟用全域自動核准時,會出現一個警告對話框要求您確認。
注意

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

... 設定會套用於您的所有工作區。如果您希望將自動核准限制在目前工作階段,請使用工作階段範圍的權限等級

工具和聊天參與者有什麼不同?

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

工具是在代理程式流程中被呼叫,以貢獻並執行特定任務。您可以在單一聊天請求中包含多個工具,但一次只能啟用一個聊天參與者。

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

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

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