通过 AI + 远程开发提高生产力
2025年5月27日,作者:Brigit Murtaugh、Christof Marti、Josh Spicer、Olivia Guzzardo McVicker
让 VS Code 如此灵活和强大的功能之一是远程开发。无论你是从本地桌面连接到安全的虚拟机,从平板电脑连接到性能强劲的计算机,还是连接到包含项目所需所有依赖项的容器化环境——VS Code 能够*随时随地开发任何东西*的能力,几乎可以在任何设置中提供帮助。
现在,将这些功能与 VS Code 中 AI 的灵活性和强大功能相结合,你将拥有一个极其通用的开发环境。你可以确保聊天对话具有关于远程工作区的上下文,获得 AI 帮助来设置和调试远程连接,并为代理模式提供一个更隔离的空间以自主工作。
在这篇博客中,我们将探讨如何增强你现有的远程设置,使其能够与 AI “无缝协作”,以及一些更定制化的 AI + 远程工作流,包括自定义指令、聊天参与者和代理自动批准。
什么是远程开发?
当我们描述 VS Code 远程开发时,我们指的是五种主要体验:
- Remote - SSH - 通过使用 SSH 在远程机器/虚拟机上打开文件夹,连接到任何位置。
- 开发容器 - 在容器内部(或挂载到容器中)使用独立的工具链或基于容器的应用程序。
- WSL - 在适用于 Linux 的 Windows 子系统中获得由 Linux 驱动的开发体验。
- Remote - Tunnels - 通过安全隧道连接到远程机器,无需配置 SSH。
- GitHub Codespaces - 为你托管的远程环境。
如何在远程环境中使用 AI?
我们希望让在 VS Code 中的 AI 编码体验尽可能无缝,无论你是在本地机器上工作还是连接到远程环境。如果你已经在本地使用 GitHub Copilot,我们会自动将其远程安装。GitHub Codespaces 也已配置好它!
虽然在远程环境中使用 AI 可以直接工作,但还有一些额外的 AI 功能可以让你的远程工作流更加强大:
- 自定义指令 - 为你的远程环境量身定制 AI 体验
- 聊天参与者 - 使用聊天来设置和排查你的远程环境问题
- 工具批准 - 在远程环境中安全地运行自主编码会话
为你的远程环境量身定制 AI 体验
我们从用户那里听到的关于使用 LLM 的首要请求之一是:我如何帮助 LLM 更好地理解我的代码和编码实践?你可以通过**自定义指令**来实现这一点,这些指令描述了通用的指南或规则,以获得符合你特定编码实践和技术栈的响应。自定义指令会自动将这些信息包含在每个聊天请求中,而不是在每个 AI 聊天查询中手动包含此上下文(在我们的近期博客文章中了解更多)。
在我们团队最近的自托管实践中,我们发现使用自定义指令不仅可以告诉 Copilot 关于我们的代码和编码实践,还可以提供更多关于我们所连接的远程环境类型的信息,例如:
- 这是哪种类型的远程环境(例如,是开发容器还是虚拟机)?
- 安装了哪些语言或工具链?它们的用途是什么?
- 工具链安装在哪里(例如,它们是否在
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.
要在远程环境中开始使用自定义指令,你可以远程使用与本地相同的指令文件。
为你的开发容器配置 AI
开发容器通过预先配置所有工具和依赖项,使项目入门变得更加容易。通过添加自定义指令,你可以确保 LLM 是为该环境量身定制的,而不是提供通用的答案。例如,一个用于 Python 编码的开发容器可能会有关于安装了哪些工具或应遵循哪些编码指南的自定义指令(如上例所示)。
我们团队已采取措施预配置自定义指令,让你在使用开发容器时更加轻松。我们发布开发容器资源(如镜像和功能),以简化创建和连接到开发容器的过程,现在我们还在这些文件中包含了自定义指令。以下是如何使用我们团队添加的自定义开发容器指令的示例:
-
使用我们的一个镜像或功能创建一个新的开发容器配置。你可以手动完成,也可以通过开发容器扩展提供的 **Dev Containers: Add Dev Container Configuration Files...** 命令来完成。
-
按照快速选择中的步骤操作。在本例中,我们将选择 Python 模板。
-
在 VS Code 中构建并连接到你的开发容器。
-
你已选择并连接的环境基于我们的 Python 模板,该模板通过 Python 功能包含了自定义指令。尝试在你的开发容器内与 Copilot 聊天——Copilot 会自动从 Python 镜像中提取自定义指令!
除了使用我们添加到镜像和功能中的自定义指令外,你还可以在项目的 devcontainer.json
中添加额外的自定义指令——我们已经确保了自定义指令可以在镜像和模板之间成功合并。你可以使用 "github.copilot.chat.codeGeneration.instructions"
设置,就像我们在上面描述的 Python 开发容器配置中所做的那样。
如果你发布了任何供他人使用的开发容器配置,我们建议你探索如何向其中添加自定义指令!这里是在 Python 开发容器功能中使用自定义指令的示例。
"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 交互)来增强你的聊天体验。在聊天输入字段中键入 @
查看并从可用参与者列表中选择——它们将在提问模式下可用。有几个内置的聊天参与者,如 @workspace
、@vscode
和 @terminal
。扩展也可以贡献聊天参与者。
Remote - SSH 扩展包含一个 Copilot 聊天参与者。向 @remote-ssh
寻求帮助以配置或排查远程环境的元素问题。
该参与者还了解关于通用 SSH 和远程开发的主题。
如果发生连接失败,**Diagnose with Copilot** 功能提供了一种快速理解问题的方法。
Copilot 将调查问题并提供可操作的见解。
在远程环境中安全地运行自主编码会话
作为完成用户提示任务的一部分,代理模式可以运行工具和终端命令。代理模式之所以强大,不仅在于它能提出代码更改建议,还能运行终端命令和工具。例如,它可以安装项目依赖项或运行测试。然而,其中一些操作可能具有破坏性,例如删除文件、修改本地配置等。因此,你需要批准在代理模式下使用工具和终端命令。
如果你想自动批准*所有*工具,现在可以使用实验性的 chat.tools.autoApprove
设置。为了给你提供一定程度的保护,防止无意的终端命令或工具调用,你可以选择只在开发容器或远程机器中设置此项,以防止你的本地开发机器受到影响。
这将自动批准所有工具,当语言模型希望运行工具时,VS Code 将不会请求确认。这可以通过赋予代理模式更多自主权来节省时间,但请记住,启用此设置后,你将没有机会取消模型可能要执行的潜在破坏性操作。
请注意,作为你本地机器一部分的远程环境(如开发容器)或可以访问你凭据的环境将带来不同程度的风险。
下一步计划
我们对 VS Code 中远程开发和 AI 的未来感到兴奋。我们的每月发布都充满了激动人心的新功能,我们也在不断展望未来,比如支持 Copilot Chat 在 Web 上(vscode.dev、github.dev)的使用。
祝你编码愉快(智能且远程)!Brigit、Christof、Josh 和 Olivia