現已釋出!閱讀關於 11 月新增功能和修復的內容。

在聊天中使用工具

工具透過為完成特定任務(如搜尋程式碼、執行命令、獲取網頁內容或呼叫 API)提供專業功能來擴充套件 Visual Studio Code 中的聊天功能。VS Code 支援三種類型的工具:內建工具、模型上下文協議 (MCP) 工具和擴充套件工具。

本文件介紹了 VS Code 中可用的不同工具型別、如何在聊天提示中使用它們,以及如何管理工具呼叫和審批。

工具型別

VS Code 在聊天中支援三種工具供您使用

內建工具

VS Code 提供了一套全面的內建工具,這些工具可在聊天中自動使用。這些工具涵蓋了常見的開發任務,並針對在工作區內工作進行了最佳化。

內建工具無需任何安裝或配置,只要您開始使用聊天即可使用。

有關內建工具及其描述的完整列表,請參閱 聊天工具參考

MCP 工具

模型上下文協議 (MCP) 是一種開放標準,它使 AI 模型能夠透過統一的介面使用外部工具和服務。MCP 伺服器提供工具,您可以將這些工具新增到 VS Code 以擴充套件聊天的額外功能。

在使用 MCP 工具進行聊天之前,您需要安裝並配置 MCP 伺服器。MCP 伺服器可以在您的計算機本地執行,也可以遠端託管。

詳細瞭解 在 VS Code 中配置 MCP 伺服器

擴充套件工具

VS Code 擴充套件可以貢獻工具,這些工具與編輯器深度整合。擴充套件工具使用語言模型工具 API 提供專業功能,同時訪問 VS Code 擴充套件 API 的全部功能。

在安裝了提供擴充套件工具的擴充套件後,這些擴充套件工具便會自動可用。使用者除了安裝擴充套件本身外,無需進行單獨的安裝或配置。

對於希望建立擴充套件工具的開發者,請參閱 語言模型工具 API 指南

為聊天啟用工具

在聊天中使用工具之前,您需要在“聊天”檢視中啟用它們。您可以透過使用工具選擇器來逐個請求啟用或停用工具。您可以透過 安裝 MCP 伺服器擴充套件(提供工具)來新增更多工具。

提示

僅選擇與您的提示相關的工具,以提高結果質量。

訪問工具選擇器

  1. 開啟“聊天”檢視,然後從代理選擇器中選擇“**代理**”。

  2. 在聊天輸入欄位中選擇“**配置工具**”按鈕。

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

  3. 選擇或取消選擇工具以控制當前請求可用的工具。

    使用搜索框過濾工具列表。

當您使用 提示檔案自定義代理 來自定義聊天時,您可以指定為給定提示或模式可用的工具。詳細瞭解 工具列表優先順序順序

在提示中使用工具

在使用 代理時,代理會根據您的提示和請求的上下文,自動確定要從啟用的工具中選擇哪些工具。代理會自動選擇並按需呼叫相關工具以完成任務。

您也可以透過輸入 # 後跟工具名稱來顯式引用提示中的工具。當您希望確保使用特定工具時,此方法非常有用。在聊天輸入欄位中輸入 # 可檢視可用工具列表,包括內建工具、已安裝伺服器提供的 MCP 工具、擴充套件工具和工具集。

顯式工具引用的示例

  • "總結 #fetch https://vscode.com.tw/updates 的內容"
  • "Next.js 中的路由是如何工作的? #githubRepo vercel/next.js"
  • "修復 #problems 中的問題"
  • "解釋身份驗證流程 #codebase"

某些工具可以直接在提示中接受引數。例如,#fetch 需要一個 URL,而 #githubRepo 需要一個倉庫名稱。

提示

預設情況下,工具呼叫的詳細資訊在聊天會話中是摺疊的。您可以透過選擇聊天中的工具摘要行來展開它們,或者使用 chat.agent.thinking.collapsedTools 設定(實驗性)來更改預設行為。

工具審批

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

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

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

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

重要

在批准工具之前,請務必仔細檢查工具引數,特別是對於修改檔案、執行命令或訪問外部服務的工具。有關在 VS Code 中使用 AI 的 安全注意事項

啟用或停用工具自動審批(實驗性)

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

組織也可以使用裝置管理策略來強制對特定工具進行手動批准。詳細資訊請參閱 企業文件

URL 審批

當工具嘗試訪問 URL(例如使用 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 設定用於儲存您的自動審批 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))。

編輯工具引數

您可以在工具執行前審查和編輯輸入引數

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

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

  3. 選擇“**允許**”以使用修改後的引數執行工具。

終端命令

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

在聊天會話中,代理會顯示它執行的命令。您可以選擇命令旁邊的“**顯示輸出**”(>)以在聊天中內聯檢視命令的輸出。您還可以透過選擇“**顯示終端**”在整合終端中檢視完整輸出。

Screenshot showing terminal command output in chat.

使用實驗性的 chat.tools.terminal.outputLocation 設定來配置終端命令輸出顯示的位置:在聊天中內聯顯示,或在整合終端中顯示。

在終端窗格中,您可以檢視代理在聊天會話中使用的終端列表。您還可以透過終端列表中終端旁邊的聊天圖示來區分代理終端。

Screenshot showing the integrated terminal with multiple agent terminals.

自動批准終端命令

您可以使用 chat.tools.terminal.autoApprove 設定來配置要自動批准的終端命令。您可以指定允許和拒絕的命令。

  • 將命令設定為 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 屬性的物件語法來匹配整個命令列而不是單個子命令。

相關設定

注意

自動批准終端命令提供的是“*盡力而為*”的保護,並假設代理沒有惡意行為。啟用終端自動審批時,保護自己免受提示注入攻擊非常重要,因為某些命令可能會繞過檢測。以下是一些檢測可能失效的示例:

  • VS Code 使用 PowerShell 和 bash 的 tree sitter 語法來提取子命令,因此如果這些語法無法檢測到模式,則不會被識別。
  • VS Code 使用 bash 語法,因為它沒有 zsh 或 fish 語法,所以某些子命令無法被檢測到。
  • 檔案寫入檢測目前是有限的,因此可能可以透過終端向檔案寫入,而使用檔案編輯代理工具則無法做到這一點。

使用工具集組合工具

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

建立工具集

建立工具集

  1. 從命令面板執行“**聊天:配置工具集**”命令,然後選擇“**建立新的工具集檔案**”。

    或者,在“聊天”檢視 > “**工具集**” > “**建立新的工具集檔案**”中選擇“**配置聊天**”。

    Screenshot showing the Chat view and Configure Chat menu, highlighting the Configure Chat button.

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

    工具集具有以下結構

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

    工具集屬性

    • tools:工具名稱陣列(內建工具、MCP 工具或擴充套件工具)
    • description:顯示在工具選擇器中的簡短描述
    • icon:工具集的圖示(請參閱 產品圖示參考

使用工具集

透過輸入 # 後跟工具集名稱來在您的提示中引用工具集

  • "分析程式碼庫以查詢安全問題 #reader"
  • "資料庫連線字串定義在哪裡? #search"

在工具選擇器中,工具集作為相關工具的可摺疊組可用。您可以選擇或取消選擇整個工具集,以快速啟用或停用多個相關工具。

常見問題

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

在聊天輸入欄位中輸入 # 可檢視所有可用工具的列表。您還可以使用聊天中的工具選擇器來檢視和管理活動工具列表。

我收到了一個錯誤,說“每次請求最多隻能有 128 個工具。”

一次聊天請求最多可以啟用 128 個工具。如果您看到關於超出每次請求 128 個工具的錯誤:

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

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

為什麼代理不使用命令提示符作為終端 shell?

代理使用您配置為終端預設值的 shell,除了 cmd。這是因為命令提示符不支援 shell 整合,這意味著代理對終端內部發生的情況的可見性非常有限。代理需要依賴超時並觀察終端是否空閒才能繼續,而不是直接獲取命令何時執行或何時完成的訊號。這會導致體驗緩慢且不穩定。

您仍然可以使用 chat.tools.terminal.terminalProfile.windows 設定配置代理使用命令提示符,但這將比使用 PowerShell 帶來較差的體驗。

"chat.tools.terminal.terminalProfile.windows": {
  "path": "C:\\WINDOWS\\System32\\cmd.exe"
}

我可以自動批准所有工具和終端命令嗎?

注意

此設定將停用所有手動審批,包括潛在的破壞性操作。它消除了關鍵的安全保護,並使攻擊者更容易危害計算機。只有在您瞭解其影響的情況下才啟用此設定。有關更多詳細資訊,請參閱 安全文件

要允許所有工具和終端命令在不提示使用者確認的情況下執行,請啟用 chat.tools.global.autoApprove 設定。此設定適用於您所有工作區!

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

聊天參與者是專門的助手,它們使您能夠在聊天中提出領域特定的問題。您可以將聊天參與者想象成一個領域專家,您將聊天請求交給它,然後它會處理其餘的事情。

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

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

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

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