代理模式可让 GitHub Copilot 统筹调度由适用于 Visual Studio Code 的 MSSQL 扩展提供的工具。 安装并启用该扩展后,GitHub Copilot 可以通过自然语言提示列出 Microsoft SQL Server 连接、连接到服务器和数据库、检索架构元数据以及执行查询,且每项操作都需经你批准。
所有作都使用与 MSSQL 扩展相同的连接上下文和凭据。 代理模式不会引入其他身份验证或权限更改。
Tip
使用代理模式处理多步骤工作流程、进行大规模探索,以及委托执行更改。 需要单个答案或一次性查询时,请使用 询问模式 。 当你需要在编写 Transact-SQL(T-SQL)数据定义语言(DDL)之前先推敲设计时,请使用 计划模式。
关键结论
- 代理模式会自动选取 MSSQL 扩展工具。 无需提到
@mssql。 - 执行前,每个工具调用都需要你的批准。
- 代理模式通过其工具 进行架构感知 :每个工具调用都从连接的数据库返回真实数据。
- 有关 GitHub Copilot 在所有界面中的架构背景,请参阅GitHub Copilot 如何与 MSSQL 扩展配合工作。
何时使用代理模式
代理模式最适合:
- 多步骤工作流。 连接到 LocalDev,切换到 AdventureWorks,然后显示所有具有指向 Customer 的外键的表。
- 大规模探索。 “查找引用 SalesOrderHeader 的任何存储过程,并汇总每个存储过程的作用。
- 委托的更改。 “向 Sales 架构中的每个表添加审核列,并重新生成相关的存储过程。
当单个问题或一次性查询回答你的需求时,请使用 询问模式 。 了解所需的操作时,请使用 斜杠命令 。 如果想要在进行任何更改之前编写计划,请使用 计划模式 。
有关代理模式如何选择和执行工具的详细信息,请参阅有关代理模式的Visual Studio Code文档。
什么是代理模式?
代理模式允许 GitHub Copilot 使用 MSSQL 扩展执行 SQL 相关作,在执行之前需要用户确认。
可以使用聊天变量(例如 #mssql_connect,或发出等效的自然语言请求)来调用这些作,例如:
Connect to my Library database using my LocalDev profile
MSSQL 代理模式工具参考
本部分提供了 GitHub Copilot Agent Mode 中可用的 SQL 特定工具的详细参考。 MSSQL 扩展提供了这些工具,使 GitHub Copilot 能够通过聊天变量或自然语言提示执行作。 执行前,所有工具都需要用户确认。
Tip
还可以使用聊天变量(例如 #mssql_connect 直接调用这些工具),或者以自然语言编写提示,例如:
Connect to my development database
GitHub Copilot 自动处理工具选择。
连接管理
| 工具名称 | Description |
|---|---|
connect |
使用保存的连接配置文件或指定的服务器和数据库连接到数据库。 |
disconnect |
结束当前活动连接会话。 |
change_database |
更改现有连接会话的数据库。 |
get_connection_details |
获取特定 MSSQL 连接的连接详细信息。 |
list_servers |
列出环境中保存的所有 SQL Server 连接配置文件。 |
list_databases |
列出连接的 MSSQL 服务器的所有可用数据库。 |
Examples
使用以下短语与 GitHub Copilot 交互。
- Connect to my LocalDev environment
- Disconnect from my current database
- List my available connection profiles
- List all databases in the localhost server
- Set the active connection to localhost
- Set AdventureWorks as the active database
- Get the connection string for AdventureWorks on localhost
连接逻辑的工作原理
GitHub Copilot 代理模式支持通过引用已保存的配置文件或直接指定服务器和数据库来连接到 SQL 数据库的灵活方法。 下面是连接逻辑的工作原理。
使用已保存的配置文件进行连接时:
- 通过引用已保存的连接配置文件的名称进行连接。
- GitHub Copilot 使用
mssql_list_servers工具验证配置文件是否存在。 - 然后,
mssql_connect工具使用保存的profileId及其参数来建立连接。
通过指定服务器和数据库进行连接时:
如果保存的配置文件与指定的服务器和数据库匹配:
- GitHub Copilot 使用
mssql_list_servers查找匹配项。 - 然后,它使用完整配置调用
mssql_connect。
- GitHub Copilot 使用
如果已保存的配置文件只与服务器匹配:
- GitHub Copilot 查找匹配的服务器配置文件。
- 它尝试通过将用户请求的数据库替换到该配置文件中来进行连接。
- 如果连接失败,将显示错误。
如果没有任何配置文件与指定的服务器相匹配:
- GitHub Copilot 报告错误。
这种灵活的匹配系统允许GitHub Copilot处理一系列连接方案。 它可以最大程度地减少用户努力,同时确保安全且可确认的操作。
模式探索
| 工具名称 | Description |
|---|---|
show_schema |
显示连接的数据库架构的高级关系图,包括表和关系。 |
list_schemas |
列出连接的 MSSQL 服务器数据库中的所有架构。 |
list_tables |
列出连接 MSSQL 服务器的数据库中的所有表。 |
list_views |
列出连接的 MSSQL 服务器数据库中的所有视图。 |
list_functions |
列出连接的 MSSQL 服务器数据库中的所有函数。 |
Examples
使用以下短语与 GitHub Copilot 交互。
- Show me the schema for this database
- Show me all tables in the current database
- List all views from this MSSQL database
- Give me a list of all the functions available in this schema
- What schemas are available in this database?
查询执行
| 工具名称 | Description |
|---|---|
run_query |
针对连接的数据库运行 SQL 查询。 |
Examples
使用以下短语与 GitHub Copilot 交互。
- Give me the top five posts published this week
- Execute the current file to find how many comments each post has
- Get all categories along with the number of posts in each
如何在代理模式下管理工具
GitHub Copilot 可以在处理请求时使用特定于 MSSQL 的工具和其他扩展贡献的工具。 可以在 “工具” 菜单下的“代理模式”界面中看到这些工具,也可以在其中打开或关闭特定工具。
调用工具时,尤其是在它与计算机或数据库交互时,GitHub Copilot 会要求确认以确保安全执行。 可以只允许当前会话、工作区或永久使用该工具。
有关工具可见性和审批的详细信息,请参阅 管理工具审批。
代理模式确认工作流
当 GitHub Copilot 选择工具时,它会提示你显示有关所请求作的详细信息的确认对话框。 必须先显式批准请求,然后才能执行与计算机或数据库交互的任何命令:
- 在此会话中允许
- 允许在此工作区中使用
- 始终允许
此确认步骤有助于确保与开发环境进行安全、有意的交互。
Note
有关在代理模式下所有工具中确认工作原理的详细信息,请参阅 有关工具审批的 Visual Studio Code 文档。
代理模式提示目录
使用这些自然语言提示通过代理模式调用 MSSQL 扩展工具。 对于每个类别,都会交叉引用一个对应的 斜杠命令 或 提问模式提示词。
连接管理
Connect to my LocalDev profile and set AdventureWorks as the active database.
List all my saved connection profiles and tell me which one I'm currently connected to.
Disconnect from my current database.
等效的斜杠命令:/connect、、/listServers/changeDatabase、/disconnect。
模式探索
Show me every table in the SalesLT schema, grouped by whether they're
referenced by a foreign key from another table.
Find all stored procedures that reference SalesLT.SalesOrderHeader and
summarize what each one does in one sentence.
Which tables in the current database have no primary key?
等效表达提问提示:请参阅与@mssql参与者聊天。
查询执行
Run a query to count the number of active customers in SalesLT.Customer,
then show me the top 10 by order total.
Show me the execution plan for this query: SELECT ... FROM ...
Execute the last query I ran against my Dev database instead.
多步骤工作流
Connect to LocalDev, switch to AdventureWorks, list all tables with a
foreign key to SalesLT.Customer, and save the list to a file called
customer-dependents.md.
Find every stored procedure that uses dynamic SQL and open each one
in a new editor tab so I can review them.
委托的架构更改
Note
架构更改非常适合先通过 计划模式 运行。 规划更改,查看这些更改,然后将计划交给代理模式以供执行。
Add createdAt and updatedAt audit columns to every table in the Sales
schema that doesn't already have them. Use DATETIME2(7) with a default
of GETUTCDATE().
Regenerate every stored procedure that inserts into SalesLT.Customer
to include the new email column.