WSL 中 VS Code Copilot 代理配置问题及解决方案
问题表现
如果你遇到以下情况之一: (图示:对话无输出) (图示:显示 fetch failed) (图示:模型名称不显示)
问题分析
查看 Copilot Chat 的 output 显示: (图示:Output 报错信息) (图示:Proxies 相关提示)
如果显示 proxies 相关问题,可以确定是 WSL 中运行的 VS Code 调用了宿主机的 proxy 设置的问题。 这个选项似乎是默认开启的,会在 VS Code 远程连接 WSL 开发中继承宿主机的 proxy 本地设置。问题就出在这里,如果你使用的是宿主机本机运行的代理程序,那么 proxy 的 ip 就会设置为 127.0.0.1,但是在 WSL 中想要访问宿主机的代理端口,ip 并不是 127.0.0.1(这会访问到 WSL 自己),而是需要通过如下方式查询宿主机 IP,然后访问到宿主机上的代理端口:
hostip=$(ip route show |grep -i default |awk'{ print $3}')
echo $hostip
我的输出:
172.25.48.1
因此 WSL 中要通过 172.25.48.1 ip 来访问宿主机上的端口。
问题解决
- 如果可以通过网络直连,直接关闭
http: Use Local Proxy Configuration。 - 如果依然需要设置代理,完成 1 后,修改如下设置: (图示:VS Code 代理设置界面)
注意:某些方案建议设置 Copilot 完全工作在宿主机上(即设置的 "GitHub.copilot": [ "ui" ]),但这会导致 Copilot 无法修改 WSL 中的文件,Agent 模式将失效。
WSL 和宿主机网络互访
上面已经说明了如何在 WSL 命令行中访问宿主机程序,那么我们可以将之应用到代理设置上,以下脚本解决了一个问题——在 WSL 命令行中如何利用宿主机代理软件?
#!/bin/sh
hostip=$(ip route show |grep -i default |awk'{ print $3}')
wslip=$(hostname -I |awk'{print $1}')
port=7890
PROXY_HTTP="http://${hostip}:${port}"
PROXY_SOCKS5="socks5://${hostip}:${port}"
set_proxy(){
export http_proxy="${PROXY_HTTP}"
export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"
export HTTPS_proxy=""
ALL_PROXY=
all_proxy=
git config --global http.https://github.com.proxy
git config --global https.https://github.com.proxy
}
(){
http_proxy
HTTP_PROXY
https_proxy
HTTPS_PROXY
ALL_PROXY
all_proxy
git config --global -- http.https://github.com.proxy
git config --global -- https.https://github.com.proxy
}
(){
resp=$(curl -I -s --connect-timeout 5 -m 5 -w -o /dev/null www.google.com)
[ = ];
}
[ = ];
set_proxy
[ = ];
unset_proxy
[ = ];
test_setting


