在 SQL Server Management Studio 中使用GitHub Copilot代理模式(预览版)

SQL Server Management Studio(SSMS)中的 GitHub Copilot 代理模式(预览版)允许你用自然语言指定一个高层次目标,并让 Copilot 通过执行查询、读取文件以及基于自身输出反复迭代来逐步完成任务,直到任务完成或需要你提供输入。

Note

GitHub Copilot 在 SQL Server Management Studio(SSMS)中的代理模式当前处于预览阶段。

与在单个响应后停止的 Ask 模式不同,代理模式将继续运行步骤、调用工具并优化其方法,直到达到目标。 所有查询和命令均在用户的登录名和权限上下文下执行,除非在数据库的 CONSTITUTION.md前面指定了自定义数据库用户或 SQL 登录名。 有关详细信息,请参阅 SQL Server Management Studio 中GitHub Copilot的Execution 上下文。

Important

代理模式可以执行查询,并代表你进行数据库更改。 Copilot在运行每个查询或命令之前请求审批。 在批准这些建议的操作之前,请仔细审查。 使用SQL Server的最小权限强制实施访问控制。 安全边界是 SQL Server 的权限强制机制,而不是 Copilot 的批准系统。

询问模式与代理模式

使用下表确定适合你的任务模式:

请求模式 代理模式
工作原理 每个提示仅对应一个响应;你需要手动应用代码 多步骤执行;迭代直到达到目标
执行 仅限只读查询 查询和命令将在获得你的批准后执行
架构更改 生成 T-SQL 供你运行 在您批准且您的登录名具有相应权限时,可以执行架构变更
最适用于 探索想法,在应用之前查看生成的代码 复杂的多步骤任务、调查、分析和迭代开发
中断 单次回复,可随时取消 可以随时取消

先决条件

使用代理模式

在代理模式下,Copilot自主操作,并确定提示的相关上下文。 GitHub Copilot 在 SSMS 中的代理模式使用本地 MCP 服务器,sql-tools 用于其集成,并随附一组预定义的工具。

  1. 在 SSMS 中,选择 View>GitHub Copilot 对话助手打开聊天窗口。
  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准备好执行查询或命令时,它会暂停并请求批准。 查看建议的操作,然后选择 “允许 继续”或“ 关闭 ”以跳过该步骤。

    可以使用 “允许 ”下拉列表配置审批范围:

    选项 Effect
    允许一次 批准此单个调用
    允许此会话 允许在当前聊天会话的剩余时间内使用此工具
    始终允许 批准此工具以用于所有后续调用

    若要重置工具批准设置,请转到 Tools>Options>GitHub>Copilot>Tools

  4. Copilot监视每个步骤的结果。 如果查询返回错误或不符合目标的结果,Copilot修改其方法并自动重试。

  5. 任务完成后,Copilot总结它执行的操作。 查看应用于数据库或查询编辑器的任何更改。

了解代理模式工具

在代理模式下,Copilot可以使用以下工具来完成请求:

Note

代理模式仅适用于可以访问或连接到的数据库和对象,或使用数据库 CONSTITUTION.md 文件中的凭据。 它不具备超出您的凭据现有所具有的更高权限。

若要查看和管理代理模式下可用的工具,请在聊天窗口中选择 “工具” 图标。 根据工具的结果,Copilot 可能会调用其他工具来完成总体请求。 例如,如果 T-SQL 代码编辑导致语法错误,Copilot可能会探索另一种方法并建议不同的更改。

还可以使用 MCP 服务器扩展代理模式以将Copilot连接到外部工具和服务。 MCP 服务器可用的工具不会自动启用。 默认情况下会清除其复选框,必须选中它们才能激活工具。

管理工具审批

在运行任何查询或调用外部工具之前,Copilot请求确认。 此步骤可保护你免受意外更改。 默认情况下,每个操作都需要显式批准。

批准工具时,使用 “允许 ”下拉列表设置持久性:

  • 允许此会话:当前聊天会话中没有针对该工具的进一步提示
  • 始终允许:在该工具的各次会话之间保留

若要查看并重置审批,请转到Tools>Options>GitHub>Copilot>Tools

接受或拒绝更改

当代理模式对打开的文件应用更改时,聊天窗口中会显示 “更改总数 ”摘要。 选择每个文件以单独查看更改。 可以使用 “保留 ”和 “撤消 ”按钮保留或撤消对代码的每个部分所做的编辑。 或者,在 “更改总数 ”列表中,为自上次选择 “保留 ”或“ 撤消 ”以来所做的所有编辑选择“ 保留 ”或“ 撤消”。

多文件摘要视图

从 SSMS 22.6 开始,Copilot编辑多个文件时,可以查看单个摘要视图中的所有更改,而不是单独切换文件。

  1. Copilot 完成编辑后,选择 Copilot 对话助手 工作集中的 打开更改摘要视图 按钮。
  2. 此时会打开一个选项卡,其中显示了列出差异的所有已更改文件。
  3. 可以在不同粒度级别接受或撤消更改:
  • 使用全局的保留文件撤销文件按钮,一次性对所有文件进行操作。
  • 对每个文件,使用 “保留所有更改”“全部撤消” 按钮。
  • 对于每个单独的代码更改,请使用 KeepCtrl + 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. 代理模式在执行每个查询或命令之前请求审批。 你可以选择仅在当前会话中允许某个工具,或始终允许该工具,以减少审批提示。

如果查询失败,会发生什么情况?

代理模式检测错误、分析错误并自动修改其方法。 它会尝试在无需你进一步输入的情况下解决该问题。 如果在多次尝试后无法解决此错误,它会报告失败并请求指导。

代理模式与 Ask 模式有何不同?

询问模式返回单个响应并停止。 决定是否应用生成的代码。 代理模式可自主执行多个步骤,经你批准后执行查询,监控结果并持续迭代。 如果希望完全控制每个步骤,请使用 Ask 模式;将代理模式用于仅提供指导的复杂多步骤任务。

是否可以将代理模式用于 MCP 服务器?

Yes. 必须处于代理模式才能使用 MCP 工具。 请参阅 在 SQL Server Management Studio 中使用 GitHub Copilot 的 MCP 服务器。

作为管理员,如何控制组织的代理模式?

管理员通过GitHub Copilot仪表板控制代理模式。 有关详细信息,请参阅 SQL Server Management Studio0 中GitHub Copilot的Admin 控件。