GitHub Copilot 的 @workspace/@terminal 参与者怎么用
参与者(chat participant)是 GitHub Copilot Chat 里以 @ 开头的专家代理,每个参与者专精一个领域、能调动对应的上下文来回答你的问题。 最常用的三个是 @workspace(懂你整个项目)、@terminal(懂命令行)、@vscode(懂编辑器本身)。用对参与者,等于给 AI 指了路——它知道该去哪里找答案,而不是凭空瞎猜。
这篇带你搞清楚这三个参与者各自管什么、什么时候用哪个,以及怎么配合 # 变量给出更精准的上下文。配合 GitHub Copilot 入门教程(规划中)一起看,能把 GitHub Copilot 的对话能力用到位。
参与者是什么,和直接提问有什么不一样
直接在 Copilot Chat 里打字提问,AI 默认只看当前打开的文件和你选中的代码——上下文很窄。一旦你问”这个函数在哪被调用""帮我看看整个项目的鉴权逻辑”,它就抓瞎。
参与者的作用,是把提问”路由”到一个有专门检索能力的代理。 你写 @workspace 项目用了哪个状态管理库,Copilot 不再只看当前文件,而是去索引整个工作区找答案。@ 后面跟的就是参与者名字,相当于在群里 @ 了对的那个人。
三个内置参与者的分工:
| 参与者 | 它懂什么 | 典型问题 |
|---|---|---|
@workspace | 你打开的整个项目(所有文件、结构、依赖) | 这个项目怎么组织的?某功能的代码在哪? |
@terminal | 集成终端、shell 命令 | 这条命令报错怎么办?怎么用 git 撤销提交? |
@vscode | VS Code 编辑器自身(设置、快捷键、扩展) | 怎么改这个配置?哪个快捷键能格式化? |
记住一句口诀:问代码用 @workspace,问命令用 @terminal,问编辑器用 @vscode。
还有一个容易被忽略的细节:参与者不是”永久记住”你的项目,每次提问它都会重新做一次检索。 这意味着你改完代码后接着问,它拿到的是最新状态;但也意味着每问一次都有检索开销,问题越具体、关键词越准,检索命中率越高,回答越快。别指望它像人一样”记得上次说过的那个文件”,每次提问最好把关键信息(文件名、函数名、报错关键字)写进去。
@workspace:让 AI 读懂你的整个项目
@workspace 是三个里最重要、用得最多的一个。它会扫描和索引你当前工作区,能回答”全局视角”的问题,而不局限于眼前这个文件。
适合用 @workspace 的场景:
- 找代码:
@workspace 用户登录的逻辑写在哪个文件 - 理解架构:
@workspace 这个项目的目录结构和分层是怎样的 - 跨文件改动:
@workspace 我想新增一个订单状态,需要改哪些地方 - 新人上手:刚 clone 下来的陌生项目,直接问
@workspace 这个项目是做什么的,怎么跑起来
它的工作机制是先对工作区做语义检索,挑出最相关的若干文件片段,再喂给模型生成回答。所以项目越规整、文件命名越清晰,它找得越准。
注意:@workspace 不是把你几万行代码全塞给模型——那超上下文窗口了。它是”检索 + 摘要”,所以对超大仓库可能漏掉边角文件。这时配合 # 变量手动指定范围会更稳(下文讲)。
再补一个实战案例,你就知道它到底怎么用了。 假设你接手一个陌生的 Node.js 项目,第一次跑起来报了一堆依赖错误,你可以这么问:
@workspace 这个项目用的什么包管理器和 Node 版本,怎么正确安装依赖
它会去扫 package.json、.nvmrc、pnpm-lock.yaml 这类文件,直接告诉你”用 pnpm、Node 版本要求 18+“,而不是让你自己翻文件找答案。再比如排查一个跨文件的 bug:
@workspace 订单状态从"待支付"变成"已支付"的流转逻辑在哪几个文件里,帮我列出调用链
它会给出类似”入口在 orderController.ts 的 payCallback 方法,中间经过 orderService.updateStatus,最终落库在 orderRepo.ts”这样的调用链条,比你自己用编辑器的全局搜索一个个点进去快得多。这类”我知道要问什么,但不知道答案在哪个文件”的场景,正是 @workspace 最值的用法。
还有个容易踩的坑:首次打开大项目时 @workspace 需要建索引,建索引期间提问可能得到”不完整”或”过时”的回答。 状态栏右下角一般会有索引进度提示,索引没跑完之前先别急着问复杂的架构问题,问简单的先热热身就行。索引完成后再问,准确率会明显上一个台阶。
@terminal:把命令行问题交给它
@terminal 专门处理命令行相关的事,它能看到你集成终端里的内容(包括最近的报错输出)。
适合用 @terminal 的场景:
- 写命令:
@terminal 怎么递归删除所有 node_modules 文件夹 - 解释报错:终端刚跑出一堆红字,直接问
@terminal 这个报错什么意思,怎么解决 - 查 git 操作:
@terminal 怎么把最近三次提交合并成一个
比起自己去搜命令,@terminal 的好处是它结合你当前的 shell 环境给答案,而不是给一条不一定适用的通用命令。在 VS Code 里还能一键把它给的命令插入终端运行。
@vscode:问编辑器自己的事
@vscode 管的是 VS Code 编辑器本身的使用问题——设置项、快捷键、扩展、命令面板里的功能。
适合用 @vscode 的场景:
@vscode 怎么开启保存时自动格式化@vscode 有没有快捷键能多光标编辑@vscode 怎么设置 Python 的默认解释器
它知道 VS Code 的命令和配置项,甚至能直接给出可点击执行的操作。这个参与者和你的业务代码无关,纯粹是”怎么用好这个编辑器”。
配合 # 变量给精准上下文
@ 选的是”谁来回答”,# 选的是”看哪些料”。两者配合才能让回答又准又省。常用的上下文变量:
#file:指定某个具体文件,如@workspace 解释 #file:auth.ts 的逻辑#selection:当前选中的代码#editor:当前编辑器里可见的内容#terminalLastCommand:终端里最后一条命令及其输出
典型组合:
@workspace #file:userService.ts 这个文件里有没有没处理的异常
这样 AI 既用了 @workspace 的全局检索能力,又被 #file 把注意力锁定到指定文件,回答会比单用任一个都精准。
具体支持哪些参与者、哪些
#变量,以及它们的确切行为,会随 Copilot 版本更新,以官方文档为准。
什么时候用哪个:决策清单
别纠结,照这个判断:
- 问题关于”我的代码/项目” →
@workspace(要锁定文件就加#file) - 问题关于”某条命令、终端报错、git 操作” →
@terminal - 问题关于”VS Code 怎么设置/用” →
@vscode - 只是改眼前这几行、补全当下这段 → 不用任何参与者,直接问或用内联补全更快
一个常见误区:什么都加 @workspace。如果你只是想让它改选中的那段代码,加 @workspace 反而让它分心去检索全局,又慢又容易跑偏。范围越小的活,越不需要参与者。
新手常见坑
@workspace找不到文件:多半是项目太大或没保存。先Ctrl+S存盘,或用#file直接点名要看的文件。- 把参与者名字拼错:
@后必须从弹出列表里选真实存在的参与者,自己瞎打的名字(如@code)不生效。 - 指望它执行危险命令:
@terminal给的命令(尤其删除、强推)一定自己看一遍再运行,别闭眼回车。 - 当成搜索引擎问通用知识:参与者的价值在”结合你的上下文”,问”什么是闭包”这种通用问题,加不加参与者都一样。
常见问题
Q:@workspace 和直接把文件粘进去提问有什么区别?
A:@workspace 会自动检索整个项目相关片段,适合”我也不知道在哪”的全局问题;手动粘文件适合你已经明确知道该看哪段。前者省事、后者精准,大项目里两者常配合用。
Q:@terminal 能直接帮我跑命令吗? A:它会生成命令并提供一键插入终端的入口,但是否回车执行由你决定。涉及删除、覆盖、git 强制操作的命令,务必先看懂再跑。
Q:除了这三个还有别的参与者吗?
A:有。Copilot 还支持来自扩展的第三方参与者,安装相应扩展后会出现在 @ 列表里。具体有哪些、怎么装,以官方文档和扩展市场为准。
Q:参与者要额外付费或单独开通吗?
A:参与者是 Copilot Chat 的内置功能,能用 Copilot Chat 就能用它们,在 @ 列表里直接选即可。具体可用范围以你的订阅和官方说明为准。
👉 看看我们的 AI 编程实战体系课,或逛 AI 编程教程大全 把基本功打扎实。