通过 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远程开发时,我们指的是五种主要的体验
- 远程 - SSH - 通过使用SSH打开远程机器/虚拟机上的文件夹来连接到任何位置。
- 开发容器 - 在容器内部(或挂载到容器内部)使用单独的工具链或基于容器的应用程序。
- WSL - 在适用于Linux的Windows子系统(WSL)中获得Linux驱动的开发体验。
- 远程 - 隧道 - 通过安全隧道连接到远程机器,无需配置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
。扩展也可以贡献聊天参与者。
远程 - SSH扩展包含一个Copilot聊天参与者。向@remote-ssh
寻求帮助,配置或排查远程环境的元素。
该参与者也了解一般的SSH和远程开发主题
如果发生连接失败,使用Copilot诊断功能提供了一种快速了解问题的方法
Copilot将调查问题并提供可行的见解
在远程环境中安全运行自主编码会话
作为完成用户提示任务的一部分,代理模式可以运行工具和终端命令。代理模式之所以强大,是因为它不仅可以提出代码更改,还可以运行终端命令和工具。例如,它可以安装项目依赖项或运行测试。然而,其中一些操作可能具有破坏性,例如删除文件、修改本地配置等。因此,您需要在代理模式中批准使用工具和终端命令。
如果您想自动批准所有工具,现在可以使用实验性设置chat.tools.autoApprove
。为了为您提供一定程度的保护,防止意外的终端命令或工具调用,您可以选择仅在开发容器或远程机器中设置此项,以防止您的本地开发机器受到影响。
这将自动批准所有工具,当语言模型希望运行工具时,VS Code将不会要求确认。这可以通过赋予代理模式更多自主权来节省时间,但请记住,启用此设置后,您将没有机会取消模型可能采取的潜在破坏性操作。
请注意,作为您本地机器一部分的远程环境(如开发容器)或可以访问您凭据的远程环境将带来不同程度的风险。
下一步
我们对VS Code中远程开发和AI的未来感到兴奋。我们的月度版本中充满了令人兴奋的新功能,我们一直在展望下一步,例如支持网页版Copilot Chat(vscode.dev,github.dev)。
快乐(智能且远程)编码!Brigit、Christof、Josh和Olivia