在 SQL Server Management Studio 中使用 GitHub Copilot 代理模式(預覽)

SQL Server Management Studio(SSMS)中的 GitHub Copilot 代理模式(預覽)允許你用自然語言指定一個高階目標,並讓 Copilot 透過執行查詢、讀取檔案及反覆迭代輸出,直到任務完成或需要你的輸入。

備註

SQL Server Management Studio(SSMS)中的 GitHub Copilot 代理模式目前處於預覽階段。

與只回應一次就結束的詢問模式不同,代理人模式會持續執行步驟、調用工具並精進方法,直到達成目標。 所有查詢與指令皆在使用者登入與權限的上下文中執行,除非資料庫前置部分 CONSTITUTION.md指定自訂資料庫使用者或 SQL 登入。 如需詳細資訊,請參閱 SQL Server Management Studio 中 GitHub Copilot 的執行內容

Important

代理模式可以代你執行查詢並進行資料庫變更。 Copilot 在執行每個查詢或指令前都會先徵求你的批准。 在批准提案前,請仔細審查。 使用 SQL Server 的最低權限來強制存取控制。 安全邊界是 SQL Server 的權限強制,不是 Copilot 的審核系統。

詢問模式與代理模式

請參考下表決定哪種模式最適合你的任務:

詢問模式 代理模式
運作方式 每個提示只對應一則回應;你手動套用程式碼 多步驟執行;反覆迭代直到達成目標
執行 僅允許唯讀查詢 查詢與指令會在您核准後執行
結構變更 為你產生 T-SQL 供執行 如果你核准這些變更,且你的登入帳戶具有相關權限,即可執行結構變更
適用對象 探索想法,在應用前檢視已產生的程式碼 複雜的多步驟任務、調查、分析與迭代開發
中斷 單一回覆,你可以隨時取消 你可以隨時取消

先決條件

使用代理模式

在代理模式下,Copilot 會自動運作,並判斷你提示所需的上下文。 SSMS 中的 GitHub Copilot 代理模式使用本地 MCP 伺服器,sql-tools 進行整合,並附帶預設工具組。

  1. 在 SSMS 中,選擇 View>GitHub Copilot Chat 開啟聊天視窗。
  2. 在聊天視窗底部,展開模式下拉選單,選擇 「代理人」。
  3. 在聊天視窗右下角,選擇工具圖示以查看可用工具。
  4. 展開 sql-tools 即可查看預設工具。 將滑鼠移到工具名稱上方,可以了解更多它的功能。 如果你取消選掉所有工具,代理模式就不會如預期運作。
  5. 你無法停用工具 SSMS 清單。
  6. 輸入提示詞來描述高層級目標,並註明你正在使用的資料庫或伺服器名稱。 代理模式不會繼承主動查詢編輯器的上下文。

Important

為了達到最佳效果,建議在提示詞中包含資料庫或伺服器。 此納入減少歧義及工具呼叫次數。 如果你沒有提供連線資訊,Copilot 會讀取你的連線清單,以找出要使用的連線,或詢問使用哪個資料庫或伺服器。

  1. 若要提交提示詞,請選取 「傳送」,或按下 Enter 鍵。

    入門範例提示:

    - In the WideWorldImporters database on the SalesPRD server, analyze the `Sales.usp_QuarterlySalesSummary` stored procedure and its execution plan and tell me how to improve it
    - The AdventureWorks database on the SalesPRD server had high CPU between 1PM and 2PM today, investigate what caused it
    - Find the SQL Agent jobs on the SalesPRD server that failed in the last 24 hours, analyze the history and explain what happened and how to fix the jobs
    
  2. 代理模式可能會調用多種工具來完成您的請求。 例如,在讀取結構資訊、產生 Transact-SQL 以及分析結果時。 當每個步驟執行時,主動工具會出現在聊天室中。

  3. 當 Copilot 準備執行查詢或指令時,會暫停並請求你的批准。 檢視建議的行動,然後選擇 允許 繼續,或選擇駁 以跳過該步驟。

    您可以透過「 允許 」下拉選單來設定核准範圍:

    Option 影響
    允許一次 批准此單一召喚
    請允許這場會議 批准此工具在本次聊天會話的其餘時間內使用
    永遠允許 批准此工具用於所有後續的召喚

    要重設工具核准設定,請到 Tools>Options>GitHub>Copilot>Tools

  4. Copilot 會監控每個步驟的結果。 如果查詢回傳錯誤或結果未達目標,Copilot 會自動修正方法並重新嘗試。

  5. 任務完成後,Copilot 總結了任務內容。 檢視對資料庫或查詢編輯器所做的任何變更。

了解代理模式工具

在代理模式下,Copilot 可以使用以下工具完成您的請求:

備註

代理模式僅適用於你可以存取或連接的資料庫與物件,或是透過資料庫檔案中的 CONSTITUTION.md 憑證來使用。 它不具備超出你的認證已擁有權限的更高權限。

要查看和管理代理模式中可用的工具,請在聊天視窗中選擇 工具 圖示。 根據工具的結果,Copilot 可能會叫用其他工具來完成整體要求。 例如,如果 T-SQL 程式碼編輯導致語法錯誤,Copilot 可能會探索其他方法並建議不同的變更。

你也可以透過 MCP 伺服器來擴充代理模式,連接Copilot外部工具與服務。 MCP 伺服器可用的工具並非自動啟用。 預設情況下,這些核取方塊未被選取,必須選取它們才能啟動工具。

管理工具核准流程

Copilot 會在執行任何查詢或呼叫外部工具前先確認。 此步驟能保護您免於意外變動。 預設情況下,每個行動都需要明確的批准。

核准工具時,請使用 「允許 」下拉選單來設定持久性:

  • 允許本次會話:目前聊天會話中不會再提示該工具
  • 一律允許:針對該工具在不同工作階段間持續生效

要檢視和重設核准,請前往 Tools>Options>GitHub>Copilot>Tools

接受或拒絕編輯

當代理模式對已開啟檔案套用變更時,聊天視窗會出現 「變更總 摘要」。 選取每個檔案以個別檢閱變更。 你可以使用 保留復原 按鈕,保留或還原對每個程式碼區段所做的編輯。 或者,在「變更總計」清單中,針對自上次選取「保留」或「復原」以來所做的所有編輯,選取「保留」或「復原」。

多檔案摘要檢視

從 SSMS 22.6 開始,當 Copilot 編輯多個檔案時,你可以在單一摘要視圖中檢視所有變更,而不必逐個切換檔案。

  1. Copilot 完成編輯後,請在 Copilot Chat 工作集中選取 開啟變更摘要檢視 按鈕。
  2. 會打開一個單一分頁,顯示所有變更後的檔案並列出差異。
  3. 你可以在不同細緻層級接受或撤銷變更:
  • 一次套用至所有檔案,使用全域的 保留檔案復原檔案 按鈕。
  • 每個檔案都使用 「保留所有變更 」和 「全部還原」 按鈕。
  • 對於每一項程式碼變更,使用 保留Ctrl + Y)和 復原Ctrl + N)。
  1. 使用視窗左上角的控制項來:
  • 將所有檔案內容合併,只顯示檔案標頭以便快速瀏覽
  • 利用下一頁和前一頁按鈕在不同區塊間快速切換變更,你也可以選擇任何檔案單獨開啟,查看完整上下文。

中斷代理模式請求

若要隨時停止正在進行的客服模式請求,請在聊天視窗中選擇 取消 。 取消會停止所有執行中的工具和待處理的查詢。 任何已執行且已核准的查詢不會自動回滾。 如果需要,取消多步驟操作後再確認你的資料庫狀態。

Scenarios

以下範例展示了代理模式如何處理常見的 SQL Server 任務。 這些範例是代表性的提示。 將它們調整成適合你的資料庫和目標。

建立並測試儲存程序

Within the WideWorldImporters database on the PRD-Sales server, create a stored procedure named Sales.GetTopCustomers that accepts a date range and a row count, and returns the top N customers by total order value in that date range. Include error handling and test it with sample parameters.

代理模式會讀取資料庫的結構以識別適當的資料表,草擬儲存程序,執行 CREATE PROCEDURE 語句,然後執行帶有範例參數的測試執行以驗證輸出結果。

最佳化查詢效能

The query in the active editor, connected to AdventureWorks on the TEST-AW server is running slowly. Analyze its execution plan and suggest options to improve performance.

代理模式可以產生查詢的估計執行計畫,使用 查詢存放區 尋找計畫,或是使用實際的計畫作為參考。 它能識別查詢與執行計畫中的反模式,包括缺少的索引。 它會建議特定的程式碼和架構變更,包括 CREATE INDEX 語句,如果你同意,也能實作這些變更。 在將變更套用到生產資料庫之前,務必先在測試或開發環境中實施。

檢查記錄

Analyze the SQL ERRORLOG for the PRD-HR server for the last month and give me a list of errors and problems and solutions for fixing them.

代理模式會審查該實例的 ERRORLOG 檔案,建立已識別問題的清單,並產生解決建議。

審核並修正權限缺口

Review the permissions for the Reporting role in the CustomerSales database on the PRD-Sales server and identify any tables in the Sales schema that it can't access. Add the missing SELECT permissions.

代理模式會查詢權限目錄檢視,識別空白,產生 GRANT 語句,並在你核准時執行。

執行上下文與權限

代理模式執行的所有查詢和命令,都會在你已驗證帳戶的內容中執行,除非你在資料庫的 CONSTITUTION.md 中為 GitHub Copilot 指定資料庫使用者或 SQL 登入作為 agentExecuteAsUser

  • 如果你的登入沒有修改資料表的權限,代理模式也無法修改資料表,即使你批准了該查詢。
  • Copilot 的審核系統不是安全界線。 在資料庫中應用最小權限原則:只授予使用者對特定物件所需的權限。
  • 如果您想為資料庫指定資料庫使用者或 SQL 登入,請參閱 SQL Server Management Studio 中 GitHub Copilot 的執行內容
  • 如果指定了資料庫使用者或 SQL 登入,而 GitHub Copilot 的使用者沒有 IMPERSONATE 權限,他們就無法使用 GitHub Copilot 來管理該資料庫。

預設情況下,代理模式設定為 READ_ONLY。 如果你的登入帳號,或 agentExecuteAsUser 帳號,有修改資料或資料庫結構的權限,GitHub Copilot 預設不會執行這些查詢。

你可以在 mcp.json 檔案中將代理模式改成 READ_WRITE 。 然而,如果你的登入 agentExecuteAsUser 或帳號沒有修改資料或資料庫架構的權限,任何查詢都會因 SQL 安全權限而失敗。

常見問題

代理模式會自動執行查詢,不需要我問嗎?

No. 代理模式在執行每個查詢或指令前都會先徵求你的批准。 你可以選擇在當前會話中啟用某個工具,或總是減少批准提示。

如果查詢失敗會怎樣?

代理模式會偵測錯誤、分析錯誤,並自動修正其方法。 它會嘗試在沒有你進一步介入的情況下解決問題。 如果多次嘗試仍無法解決錯誤,系統會回報失敗並請你提供指導。

Agent 模式和 Ask 模式有什麼不同?

問答模式回傳單一回應後停止。 你決定是否套用產生的程式碼。 代理模式能自動執行多步驟,經你批准後執行查詢,監控結果並反覆進行。 想要完全掌控每個步驟時,請使用詢問模式;使用代理模式處理複雜且多步驟的任務,只提供指導。

我可以在 MCP 伺服器上使用 Agent 模式嗎?

Yes. 你必須處於代理模式才能使用 MCP 工具。 請參閱在 SQL Server Management Studio 中將 GitHub Copilot 與 MCP 伺服器搭配使用

作為管理員,我該如何控制我組織的代理模式?

管理員透過 GitHub Copilot 儀表板控制代理模式。 如需詳細資訊,請參閱 SQL Server Management Studio 中 GitHub Copilot 的系統管理控制項