介绍VS Code中AI和远程开发功能的应用。内容泛泛而谈,缺乏具体技巧和案例。
2025 年 5 月 27 日,作者:Brigit Murtaugh、Christof Marti、Josh Spicer、Olivia Guzzardo McVicker
Remote Development 是让 VS Code 如此灵活、强大的功能之一。无论你是从本地桌面连接到安全的 VM,从平板电脑连接到性能极其强大的计算机,还是使用包含项目所需全部依赖项的容器化环境——VS Code 随时随地开发任何内容的能力,几乎可以为任何开发环境提供帮助。
现在,将这些能力与 VS Code 中 AI 的灵活性和强大功能结合起来,你就拥有了一个用途极其广泛的开发环境。你可以确保聊天对话能够获取远程工作区的上下文,借助 AI 设置和调试远程连接,还能为 agent mode 提供一个更加隔离的空间,让它自主工作。
在本文中,我们将探讨如何增强现有的远程开发环境,让它们能够与 AI「开箱即用」;同时也会介绍一些更加定制化的 AI + 远程开发工作流,包括自定义指令、聊天参与者和 Agent 自动审批。
我们所说的 VS Code Remote Development,主要指以下五种使用方式:
Remote - SSH——使用 SSH 打开远程计算机或 VM 上的文件夹,连接到任意位置。
Dev Containers——在容器内部,或挂载到容器中的环境里,使用独立的工具链或基于容器的应用程序。
WSL——在 Windows Subsystem for Linux 中获得由 Linux 驱动的开发体验。
Remote - Tunnels——通过安全隧道连接到远程计算机,无须配置 SSH。
GitHub Codespaces——由平台为你管理的远程环境。
无论你是在本地计算机上工作,还是连接到远程环境,我们都希望 VS Code 中的 AI 编程体验尽可能顺畅。如果你已经在本地使用 GitHub Copilot,我们会自动将它安装到远程环境中。GitHub Codespaces 也已经为你配置好了!
虽然 AI 在远程环境中可以直接使用,但还有一些额外的 AI 功能,能够让你的远程工作流变得更加强大:
自定义指令——针对远程环境定制你的 AI 体验
聊天参与者——使用聊天设置远程环境并排查问题
工具审批——在远程环境中安全运行自主编程会话
在使用 LLM 时,我们从用户那里听到最多的问题之一是:如何帮助 LLM 更好地理解我的代码和编程实践?你可以通过自定义指令来实现这一点。自定义指令用于描述通用的准则或规则,让生成的回答符合你特定的编程实践和技术栈。你不必在每一次 AI 聊天查询中手动加入这些上下文,自定义指令会自动将这些信息附加到每次聊天请求中。
在团队最近的一次内部试用中,我们发现,自定义指令不仅适合用来告诉 Copilot 我们的代码和编程实践,还可以提供更多有关当前所连接远程环境的信息,例如:
这是哪一种远程环境(例如 dev container 还是 VM)?
安装了哪些语言或工具链?它们分别有什么用途?
工具链安装在哪里(例如,它们是否可以通过 PATH 使用)?
下面是我们团队认为很有帮助的一条示例指令:
This is a dev container that includes `python3` and `pip3` pre-installed and available on the `PATH`, along with the Python language extensions for Python development.
要在远程环境中开始使用自定义指令,你可以直接在远程环境中使用之前已在本地使用的相同指令文件。
Dev container 预先配置好了所有工具和依赖项,让你可以更轻松地开始处理项目。通过添加自定义指令,你可以确保 LLM 针对当前环境提供回答,而不是给出泛泛的答案。例如,用于 Python 编程的 dev container 可以通过自定义指令说明安装了哪些工具,或者应该遵循哪些编程规范,就像上面的示例一样。
我们的团队已经开始预配置自定义指令,让你在使用 dev container 时更加省心。我们会发布 dev container 资源(例如镜像和 Features),简化创建和连接 dev container 的流程;现在,我们也会在这些文件中加入自定义指令。下面是一个示例,展示如何使用我们团队添加的自定义 dev container 指令:
使用我们的某个镜像或 Feature 创建新的 dev container 配置。你可以手动完成,也可以使用 Dev Containers 扩展提供的 Dev Containers: Add Dev Container Configuration Files... 命令:
使用我们的某个镜像或 Feature 创建新的 dev container 配置。你可以手动完成,也可以使用 Dev Containers 扩展提供的 Dev Containers: Add Dev Container Configuration Files... 命令:
按照 quick pick 中的步骤操作。在这个示例中,我们将选择 Python Template:
按照 quick pick 中的步骤操作。在这个示例中,我们将选择 Python Template:
在 VS Code 中构建并连接到你的 dev container:
在 VS Code 中构建并连接到你的 dev container:
你选择并已经连接到的环境基于我们的 Python Template,其中通过 Python Feature 包含了自定义指令。试着在 dev container 中与 Copilot 聊天——Copilot 会自动从 Python 镜像中提取自定义指令!
你选择并已经连接到的环境基于我们的 Python Template,其中通过 Python Feature 包含了自定义指令。试着在 dev container 中与 Copilot 聊天——Copilot 会自动从 Python 镜像中提取自定义指令!
除了使用我们已经添加到镜像和 Features 中的自定义指令,你还可以在项目的 devcontainer.json 中添加更多自定义指令——我们已经让来自镜像和 Templates 的自定义指令能够顺利合并。你可以使用 "github.copilot.chat.codeGeneration.instructions" 设置,就像前面介绍的 Python dev container 配置一样。
如果你发布了供其他人使用的 dev container 配置,建议你研究一下如何为它们添加自定义指令!下面是在 Python dev container Feature 中使用自定义指令的示例:
"github.copilot.chat.codeGeneration.instructions": [
{
"text": "This dev container includes `python3` and `pip3` pre-installed and available on the `PATH`, along with the Python language extensions for Python development."
}
],
聊天参与者可以提供特定领域的知识,例如如何与数据库或特定 API 交互,从而增强你的聊天体验。在聊天输入框中输入 @,即可查看可用参与者列表并从中进行选择——它们可以在 Ask mode 中使用。系统内置了多个聊天参与者,例如 @workspace、@vscode 和 @terminal。扩展也可以提供聊天参与者。
Remote - SSH 扩展包含一个 Copilot 聊天参与者。你可以向 @remote-ssh 寻求帮助,配置远程环境中的各个部分或排查相关问题:
这个参与者也了解 SSH 和远程开发方面的常规知识:
如果连接失败,Diagnose with Copilot 功能可以帮助你快速理解问题所在:
Copilot 会调查问题并提供可实际执行的建议:
在完成用户 prompt 所要求的任务时,agent mode 可以运行工具和终端命令。Agent mode 的强大之处在于,它不仅可以提出代码修改建议,还能实际运行终端命令和工具。例如,它可以安装项目依赖项或运行测试。然而,其中一些操作可能具有破坏性,例如删除文件、修改本地配置等。因此,在 agent mode 中使用工具和终端命令时,你需要进行审批。
如果你希望自动批准所有工具,现在可以使用实验性的 chat.tools.autoApprove 设置。为了对意外执行的终端命令或工具调用提供一定程度的保护,你可以选择只在 dev container 或远程计算机中启用此设置,避免影响本地开发计算机:
这会自动批准所有工具。当语言模型希望运行工具时,VS Code 不会再请求确认。通过赋予 agent mode 更高的自主性,这项功能可以帮你节省时间;但请记住,启用此设置后,如果模型准备执行可能具有破坏性的操作,你将没有机会将其取消。
需要注意的是,属于本地计算机一部分的远程环境(例如 dev container),以及能够访问你凭据的远程环境,会带来不同程度的风险。
我们对 VS Code 中 Remote Development 与 AI 的未来感到非常兴奋。每个月的版本都会带来令人期待的新功能,而我们也一直在思考接下来要做什么,例如在 Web 端(vscode.dev、github.dev)支持 Copilot Chat。
祝大家享受(智能又远程的)编程!——Brigit、Christof、Josh 和 Olivia