本文讨论的是 VSCode Copilot 插件 中使用 Claude 模型时的代理问题。Copilot 插件运行在 VSCode 进程内,代理配置方式与终端环境完全不同,踩了不少坑,记录一下。

不同环境下在 VSCode Copilot 插件中使用 Claude 的条件

环境 是否需要科学上网
Windows 本机 不需要,直接可用
macOS 本机 需要科学上网
远程 SSH 服务器 需要在 VSCode Remote Settings 中手动指定代理地址

远程 SSH 服务器的配置方法

Ctrl+Shift+P → 搜索 Open Remote Settings → 在 settings.json 里添加:

1
2
3
4
{
"http.proxy": "http://127.0.0.1:7890",
"http.proxyStrictSSL": false
}

这样 VSCode 进程本身(包括所有插件)都会走代理,Copilot 才能正常访问 Claude 模型。

端口号 7890 请根据你本机的代理端口实际填写。


不 work 的方法

在找到正确方案之前,尝试过以下两种方法,但都无效。

1. 在 ~/.bashrc 的末尾设置环境变量

1
2
3
4
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890

或者直接加 clash on(效果等价)。每次新开终端确实会自动设置代理,终端里的命令(如 curl)也能走代理,但 Copilot 还是不行。

在 SSH config 里用 RemoteCommand 自动执行

在本机的 ~/.ssh/config 里配置:

1
2
3
4
5
Host 172.*.*.*
HostName 172.*.*.*
User tianlejin
RemoteCommand clash on; exec $SHELL -l
RequestTTY yes

SSH 连上服务器时会自动执行 clash on,同样只对终端 shell 生效,Copilot 依然无效。

原因: 这两种方法设置的都是终端 shell 进程的环境变量。VSCode Copilot 插件运行在 VSCode Remote Server 的独立进程中,不是从终端 shell 启动的,读不到这些环境变量,代理自然不会生效。

正确的做法是在 settings.json 里配置 http.proxy ,这才是直接告诉 VSCode 进程本身走代理,能真正影响到 Copilot 的网络请求。


补充:Copilot CLI 中使用 Claude 模型

Copilot CLI 直接运行在终端 shell 进程中,不存在上述问题。只需先开启科学上网,再启动 Copilot CLI 即可