VS Code Agent Host 架构
VS Code 在一个名为 Agent Host 的专用进程中运行 AI 编码 Agent,并通过 Agent Host 协议 (AHP) 与其通信。宿主独立于显示和控制客户端拥有 Agent 会话。
Agent Host 和 AHP 正在积极开发中,并正逐步向用户开放。
从扩展宿主到 Agent Host
一直以来,Copilot Chat 扩展提供了 VS Code 的许多 AI 体验,其 Agent 逻辑在扩展宿主中运行。扩展宿主对于可扩展性依然非常重要,但它是围绕扩展的生命周期和 API 设计的。长时间运行的自主工作有不同的需求。
VS Code 正在将 Agent 会话编排迁移到 Agent Host 中,它提供以下功能:
- 共享会话:多个客户端可以观察和控制同一会话,保持同步。
- 远程执行:宿主可以在另一台机器的工作区旁边运行,而客户端从其他地方连接。
- 独立执行:当没有编辑器或其他客户端连接时,Agent 会话也可以继续运行。
- 多种 Agent 实现:不同的 Agent 运行时接入到一个面向宿主的接口中,并向客户端呈现通用的会话概念。
- 专用进程:Agent 在其自己的进程中运行,不会被繁忙的扩展阻塞。
VS Code 扩展仍然可以贡献聊天自定义项,例如工具、MCP 服务器和自定义 Agent,但 Agent 运行时本身在 Agent Host 进程中运行。默认情况下,来自扩展的工具仅在运行该扩展的编辑器窗口中的聊天中可用。
进程架构
Agent Host 可以作为本地实用程序进程运行,也可以作为远程机器上的独立服务器运行。VS Code 使用消息端口进行本地 IPC,使用基于 WebSocket 的 AHP JSON-RPC 进行远程连接。
第一方 Agent 适配器在 Agent Host 进程内部运行。适配器在其 Agent 运行时与通用的 AHP 会话模型之间进行转换。
Agent Host 驻留在工作区附近。当宿主远程运行时,文件编辑和命令将在远程机器上执行。
Agent Host 协议
Agent Host Protocol 是宿主与其客户端之间的一个开放的、与 Agent 无关的协议。它使用 JSON-RPC 进行通信,并使用带有纯归约器(reducer)的不可变状态来进行同步会话数据。
宿主是唯一真实的源。每个客户端都订阅用于会话、聊天、终端和变更集等资源的 URI 寻址通道。客户端接收初始状态快照,随后接收有序操作。如果连接断开,客户端将重新连接并接收错过的操作或最新的快照。
自包含,带有可选的客户端工具
Agent Host 的核心原则是:Agent 可以在没有客户端的情况下运行。客户端只是一个可以随来随去的查看器和控制器。因此,宿主包含了管理会话和处理工作区所需的基线功能。
Agent 会话与其工作区窗口的生命周期无关。你可以关闭窗口,并在稍后从另一个窗口重新打开会话。只要 Agent Host 保持运行,活动的轮次(turn)就可以在没有连接客户端的情况下继续进行。
已连接的客户端也可以贡献工具。例如,VS Code 可以发布由客户端(如浏览器工具)或已安装的扩展所提供的工具。Agent Host 将这些定义添加到活动会话中,并将工具调用路由回贡献它的客户端。
本地和远程宿主
对于远程会话,Agent Host 作为独立进程运行,并通过 WebSocket 公开 AHP。Agents 窗口通过 SSH 或开发隧道访问它。
与 VS Code 远程开发 类似,用户界面保留在客户端上,而工作区操作则在靠近源代码和开发工具的地方运行。
要运行你自己的独立 Agent Host,请使用 code agent host。默认情况下,该命令会在 localhost 上启动一个服务器,并使用连接令牌对其进行保护。使用 --tunnel 选项可以通过开发隧道将其公开。