16 KiB
Github Copilot 后端代理服务
借助其他支持 FIM 接口的模型(如DeepSeek)来接管GitHub Copilot插件服务端, 廉价的模型+强大的补全插件相结合, 使得开发者可以更加高效的编写代码。
✨ 免费的公共服务端点: mycopilot.noteo.cn, 感谢 硅基流动 提供免费的模型服务
🚨 破坏性更新提示: v0.1.0 版本更新之后需要做配置调整, 具体参考: 升级指南 部分内容.
🚨 破坏性更新提示: v0.1.6 版本更新对 Embeddings模型 进行了调整, 如果还想继续使用阿里灵石的模型, 请自行借助 One API 之类的中转系统进行接入.
功能特性
- 使用
docker-compose部署, 简单方便 - 多种IDE, 如: VSCode, Jetbrains IDE系列, Visual Studio 2022, HBuilderX
- 任意符合
OpenAI接口规范的模型, 和Ollama部署的本地模型 GitHub Copilot插件各种API接口全接管, 无需担心插件升级导致服务失效- 代码补全请求防抖设置和自定义 prompt 精简, 避免过度消耗 Tokens
- 使用 Github Copilot 官方服务, 参考: 使用GitHub Copilot官方服务
- VSCode 对话编辑模式
- 代码补全APIKEY支持多个轮询, 避免限频
- 无需自有域名, 自动配置和续签
Let's EncryptSSL证书 (每 60 天自动更新一次证书, 自动重载 https 服务) - 局域网共享, 可多台电脑共享一个服务端, 参考: 局域网共享方案
- 完全纯离线部署, 无需任何外部网络支持, 参考: 纯内网离线部署方案
- 本地部署的 Embeddings 模型支持, 参考: README.md
如何使用?
在使用之前确保自己的环境是干净的, 也就是说不能使用过其他的激活服务, 可以先检查自己的环境变量将 GITHUB COPILOT 相关的环境变量删除, 然后将插件更新最新版本后重启IDE即可.
⚠️ 如果你本地有使用科学上网工具, 那必须将域名 copilot.supercopilot.top 系列域名添加直连名单中, 否则无法正常使用!
快速使用步骤
- 部署服务: 可以使用下载文件直接部署使用 或 使用docker部署.
- 配置IDE: 详细参考下面的IDE设置方法.
- 重启IDE: 点击登录
GitHub Copilot插件即可.
Docker部署
(推荐) 懒人推荐使用此方案, 比较简单
模型API KEY 替换为你的, 然后执行以下命令即可启动服务:
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 更新服务
1. docker-compose pull
2. docker-compose down
3. docker-compose up -d
# 查看日志
docker-compose logs -f
镜像全部上传到阿里云容器镜像服务, 每个版本都有对应的镜像可使用或回滚.
下载文件直接部署使用
- 下载最新版本的对应系统的可执行文件访问 releases.
- 在可执行文件同级目录下创建
.env文件, 参考 .env.example 文件配置. - 启动服务后然后按照IDE设置方法配置IDE.
- 重启IDE,登录
GitHub Copilot插件.
自有服务器部署
- 使用
docker-compose或下载可执行文件运行起程序 (如果已有 nginx, 避免 443 端口占用可直接修改其他端口, 后面借助nginx 反向代理实现 https) - 解析四个域名到服务器IP, 假设你的域名是:
domain.com, 那么你需要解析的域名分别是 (特别注意: 域名前缀不可变):
domain.com
api.domain.com
copilot-proxy.domain.com
copilot-telemetry-service.domain.com
- 将四个域名全部配置好
SSL证书 - 配置 Nginx 反向代理或伪静态规则, 参考配置如下:
location ^~ /
{
proxy_pass http://127.0.0.1:1188/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
add_header X-Cache $upstream_cache_status;
proxy_redirect off;
proxy_buffering off;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
#Set Nginx Cache
set $static_filer5CIeZff 0;
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_filer5CIeZff 1;
expires 1m;
}
if ( $static_filer5CIeZff = 0 )
{
add_header Cache-Control no-cache;
}
}
- 最后将以上域名修改到对应的环境变量配置文件中.
- 最终使用 https 方式访问四个域名必须是正常的, 不能有任何问题, 否则插件无法正常使用.
环境变量参数说明
详细参考: 环境变量参数说明
IDE设置方法
VSCode
- 安装插件:
GitHub Copilot - 修改 VSCode 的 settings.json 文件, 添加以下配置:
"github.copilot.advanced": {
"authProvider": "github-enterprise",
"debug.overrideCAPIUrl": "https://api.copilot.supercopilot.top",
"debug.overrideProxyUrl": "https://copilot-proxy.copilot.supercopilot.top",
"debug.chatOverrideProxyUrl": "https://api.copilot.supercopilot.top/chat/completions",
"debug.overrideFastRewriteEngine": "v1/engines/copilot-centralus-h100",
"debug.overrideFastRewriteUrl": "https://api.copilot.supercopilot.top"
},
"github-enterprise.uri": "https://copilot.supercopilot.top"
Jetbrains IDE系列
- 找到
设置>语言与框架>GitHub Copilot>Authentication Provider - 填写的值为:
copilot.supercopilot.top
Visual Studio 2022
- 更新到最新版本(内置 Copilot 版本)至少是
17.10.x以上 - 首先, 开启
Github Enterprise账户支持:工具->环境->账户->勾选包含 Github Enterprise 服务器账户 - 然后, 重启你的
Visual Studio 2022编辑器 - 最后, 点击添加 Github 账户,切换到 Github Enterprise 选项卡,输入
https://copilot.supercopilot.top即可。
HBuilderX
⚠️ 注意, 插件中的相关 domain 已经写死无法修改, 所以必须使用默认的 copilot.supercopilot.top 域名配置.
- 下载 copilot-for-hbuilderx-v1.zip 插件到本地
- 将插件安装到 plugin目录下, 详细参考: 离线插件安装指南
- 重启 Hbuilder X 后点击登录
GitHub Copilot即可.
局域网共享方案
如果是局域网多台电脑共用一个服务端,只需要更改hosts文件指向到内网服务器 ip 即可, 例如:
在局域网服务器(192.168.80.40)部署了copilot-proxies服务,那么局域网内其他机器仅需要修改host为以下即可,可以工作。 ( @pennbay 提供实测反馈 )
192.168.80.40 copilot.supercopilot.top
192.168.80.40 api.copilot.supercopilot.top
192.168.80.40 copilot-proxy.copilot.supercopilot.top
192.168.80.40 copilot-telemetry-service.copilot.supercopilot.top
纯内网离线部署方案
v0.1.0 版本之后 ssl 证书调整为从网络上下载同步, 这对于纯内网部署造成了一些困难, 下面我提供一个简单的方案你需要做如下操作:
- 从外网下载最新证书文件, 远程下载地址参考 certificate.go, 注意证书最长只有 60 天, 需要手动更新.
- 将两个证书文件放在
/cert目录下. - 因为也无法连接公共 DNS 服务器, 所以也需要更改本机 hosts 文件, 将以下域名手动指向到本机的
127.0.0.1:copilot.supercopilot.topapi.copilot.supercopilot.topcopilot-proxy.copilot.supercopilot.topcopilot-telemetry-service.copilot.supercopilot.top
- 启动主程序.
还有一种方案, 依旧使用 v0.1.0 之前版本的自签证书, 但这会在未来 GitHub Copilot 插件更新后可能无法正常使用.
支持的模型
大部分Chat模型都兼容, 因此下面列出的模型是支持 FIM 的模型, 也就是说支持补全功能.
| 模型名称 (区分大小写) | 类型 | 接入地址 | 说明 |
|---|---|---|---|
| Qwen/Qwen2.5-Coder-7B-Instruct | 免费 | 查看地址https://api.siliconflow.cn/v1/completions |
硅基流动官方支持的 FIM 补全模型, 完美适配且免费 |
| DeepSeek (API) | 付费 | 查看地址https://api.deepseek.com/beta/v1/completions |
👍🏻完美适配且价格实惠, 推荐使用 |
| deepseek-ai/DeepSeek-V2.5 | 付费 | 查看地址https://api.siliconflow.cn/v1/completions |
硅基流动官方支持的 FIM 补全模型, 完美适配 |
| deepseek-ai/DeepSeek-Coder-V2-Instruct | 付费 | 查看地址https://api.siliconflow.cn/v1/completions |
硅基流动官方支持的 FIM 补全模型, 完美适配 |
| codestral-latest (API) | 免费 / 付费 | 查看地址https://api.mistral.ai/v1/fim/completions |
Mistral 出品, 免费计划有非常严重的频率限制 |
| stable-code | 免费 | 查看地址http://127.0.0.1:11434/v1/chat/completions |
Ollama部署本地的超小量级补全模型 |
| codegemma | 免费 | 查看地址http://127.0.0.1:11434/v1/chat/completions |
Ollama部署本地的补全模型 |
| codellama | 免费 | 查看地址http://127.0.0.1:11434/v1/chat/completions |
Ollama部署本地的补全模型 |
| qwen-coder-turbo-latest | 收费 | 查看地址https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions |
阿里通义代码补全模型 |
| mike/deepseek-coder-v2 | 免费 | 查看地址http://127.0.0.1:11434/api/generate |
Ollama支持的 suffix 参数方式实现 |
| deepseek-coder-v2 | 免费 | 查看地址http://127.0.0.1:11434/api/generate |
Ollama支持的 suffix 参数方式实现 |
💡以上接入的模型除了 DeepSeek 模型与 硅基流动 模型之外, 效果均不理想, 这里仅做接入更多模型的Demo参考.,
理论上后续如果有API支持标准的FIM补全, 都可以接入.
使用Github Copilot官方服务
前提条件: 必须有官方正版的
GitHub Copilot订阅权限, 否则无法使用.
应用场景:
- 适用于 "月抛" 的Github账号, 避免每个月切换Github账号后都要重复登录多个IDE中的插件操作, 只需要更改环境变量中的
COPILOT_GHU_TOKEN参数一处即可. - 适用于 "多人共享" 的Github账号, 共享者只需要使用此服务即可, 不需要告知Github账号密码.
使用方法
- 设置环境变量参数
COPILOT_CLIENT_TYPE=github(设置此参数后其他的Copilot相关配置都可以不用设置了, 因为这里已经使用了官方的服务). - 启动服务访问 https://copilot.supercopilot.top/github/login/device/code 获取
ghu_的参数 - 将获取到的
ghu_参数填写到COPILOT_GHU_TOKEN环境变量中. - 重启服务, 重启IDE即可.
全代理模式
即所有请求走依旧服务端,然后由服务端发起请求到github, 在多人共享账号的情况下所有请求全部统一出口, 可以略微降低被风控的情况.
- 设置环境变量参数
COPILOT_PROXY_ALL=true(默认值为false). - 重启服务即可.
- 全代理模式的
/embeddings和/chunks接口即将推出.
🚨 全代理模式有封号的风险, 请自行甄别谨慎使用. 补全和对话接口的请求频率都有阀值限制的, 共享人数过多肯定会触发风控.
Embeddings模型配置
目前仅 VSCode 最新版本的
Github Copilot Chat插件支持使用 Embeddings 模型, 其他IDE可以不用考虑.
支持使用任意符合 OpenAI 接口格式的模型, 推荐本地Docker部署bge-m3的模型, 具体步骤如下参考: README.md 中的Docker运行部分内容.
然后配置服务端
修改下面相关环境变量文件内容:
EMBEDDING_API_BASE=http://127.0.0.1/v1/embeddings
EMBEDDING_API_KEY=sk-aaabbbcccdddeeefffggghhhiiijjjkkk
EMBEDDING_API_MODEL_NAME=bge-m3
EMBEDDING_DIMENSION_SIZE=1024
如果你是 One API 之类的中转站, 也可以按照上面环境变量内容直接接入.
⚠️ 如果使用第三方API的Embedding模型, 可能会有隐私相关风险以及请求限频问题.
问题排查
如果本地部署遇到了 无法登录 无法对话 无法补全 等问题, 可以参考下面的排查方法:
- 确认最新版本服务
ping copilot.supercopilot.top是否指向127.0.0.1,如果不是则表明受到了代理工具影响- 访问 https://copilot.supercopilot.top 是否出现帮助页面
- 检查目录下是否含有
cert目录 - 特别注意检查 https 端口不可被占用
注意事项
- 请勿将本服务用于商业用途, 仅供学习交流使用
- 请勿将本服务用于非法用途, 一切后果自负