最近阅读 VS Code 官方文档时,我注意到了 Local 和 Copilot 这两个名称。之前没有仔细区分,看到文档才了解到:它们对应的是两种不同的 agent harness。
Harness 可以理解为协调模型、上下文和工具的运行机制。它与选择哪个模型并不是一回事。
Local 与 Copilot 有什么区别?
由于公司目前只支持 GitHub Copilot,本文只关注 Local 和 Copilot 两种 harness。
根据官方文档,两者的主要区别如下:
| 对比项 | Local | Copilot |
|---|---|---|
| 运行机制 | VS Code 内置 harness,运行于 Extension Host | 使用 Copilot SDK,运行于 Agent Host |
| 与编辑器窗口的关系 | 关闭所属窗口会停止正在进行的工作 | Agent Host 保持运行时,关闭编辑器窗口后仍可继续工作 |
| 工具与配置 | 使用 Local 支持的工具和自定义配置 | 支持范围可能不同,迁移前需要检查兼容性 |
这里容易混淆的一点是:Local 不等于“模型在本机运行”,Copilot 也不等于“任务一定在云端执行”。两种 harness 都可以在本机执行任务,模型请求则可能发送到远程服务。
下面是我阅读时参考的对比截图,其中标注的功能已在我的环境中验证有效。
如何从 Local 交接到 Copilot?
阅读文档时,我对 handoff 比较感兴趣:已经在 Local 中进行的工作,能否交给 Copilot 继续,而不必重新解释背景?
官方文档给出的操作是在已有 Local 会话中,打开聊天输入区的 Session Target 下拉菜单,选择 Copilot。交接会将对话历史和上下文带到目标会话。
我也做了一个简单验证,操作如下:
- 新建聊天,明确选择 Local。
- 发送:
请记住测试标记 HANDOFF-742,并回复确认。 - 再发送一个涉及文件读取的请求,让历史中包含工具调用,并等待执行完成。
- 在输入框填写:
之前的测试标记是什么? - 通过当前界面提供的 Continue Chat in... → Copilot 入口继续,或在 Session Target 中选择 Copilot 后发送。
交接后,可以检查以下几项:
| 检查项 | 验证目标 |
|---|---|
| 当前 harness | 确认目标会话使用 Copilot |
| 对话历史 | 检查原有消息及工具调用记录如何呈现 |
| 上下文连续性 | 检查新回答能否识别 HANDOFF-742 |
能识别测试标记,可以帮助验证上下文是否延续,但不能据此认定所有历史记录和工具状态都被完整保留。
什么场景下需要交接?
我平时很少切换 harness。结合与 GPT 的讨论,一个比较容易理解的场景是:在 Local 中完成前期分析,再交给 Copilot 继续处理任务。
例如:
- 在 Local 中分析登录失败,读取日志,定位到 token 刷新逻辑的问题。
- 将会话交接给 Copilot。
- 继续提出要求:“按刚才的结论修复,并补充测试。”
这个场景的重点是保持任务连续性,减少重复解释背景。它不意味着 Local 只能分析、Copilot 只能实现,也不要求同时更换模型。
需要注意的是,上下文延续不等于执行能力完全一致。交接后可用的工具、权限和模型可能变化;如果任务依赖特定工具、MCP 服务或自定义配置,需要重新确认支持情况。具体入口和行为也应以当前版本及组织策略为准。