【分享开源】Copilot后端代理服务|本地中转服务|离线Copilot本地|FIM模型本地补全

Github Copilot 后端代理服务

基于 Docker 部署的本地离线服务, 仅需四步即刻拥有离线的Copilot小助手同款服务,速度更快,更稳定,更安全。

借助其他FIM模型(如DeepSeek)来接管GitHub Copilot插件服务端, 廉价的模型+强大的补全插件相结合, 使得开发者可以更加高效的编写代码。

理论上支持任何符合 OpenAI 接口格式的FIM模型API, 当然也可以自己实现一个, 参考本地部署FIM模型

特性

  • 使用Docker部署, 简单方便
  • 支持多种IDE, 如: VSCode, Jetbrains IDE系列, Visual Studio 2022, HBuilderX
  • 支持任意符合 OpenAI 接口规范的模型, 如: DeepSeek-v2
  • GitHub Copilot 插件各种API接口全接管, 无需担心插件升级导致服务失效
  • 代码补全请求防抖设置, 避免过度消耗 Tokens

如何使用?

在使用之前确保自己的环境是干净的, 也就是说不能使用过其他的激活服务, 可以先检查自己的环境变量将 GITHUB COPILOT 相关的环境变量删除, 然后将插件更新最新版本后重启IDE即可.

模型超参数说明

  • CODEX_TEMPERATURE : 模型温度, 默认值为 1, 可以调整为 0.1-1.0 之间的值.
  • 此参数可以略微影响补全结果, 但是不建议调整, 除非你知道你在做什么.

内存占用说明

  1. 运行 docker-compose up -d 后, 会占用大约 30MB-40MB 内存, 但是随着时间的推移, 内存会逐渐增加, 但是不会超过 50MB 内存.
  2. Windows环境的Docker Desktop会占用大约 200MB 内存 (不考虑有其他镜像服务的情况下).
  3. MacOS环境的Docker Desktop会占用较大, 建议 Orbstack 软件来代替Docker Desktop, 该软件占用内存会大幅度降低.
  4. Linux环境的Docker服务占用内存较小, 大约 80MB 内存 (不考虑有其他镜像服务的情况下.).

本地部署FIM模型

显存占用约为 12GB, 请确保你的显卡支持, 且显存足够. 此方案未做测试, 仅供参考有问题可以提issue.

  • 借助 Ollama 来本地部署 DeepSeek-v2 的FIM模型, 用于替换 OpenAI 的模型, 以达到离线使用的目的.
  • 模型权重文件可以在 DeepSeek-v2 , 直接使用 Ollama 启动即可
  • 然后将 Ollama 的地址配置到 docker-compose.yml 文件中即可.

Copilot后端代理服务: Copilot中转服务,借助其他FIM模型(如DeepSeek)来接管GitHub Copilot插件服务端 (gitee.com)

68 个赞

mistral 是不是也可以 FIM,适配吗

1 个赞

我看文档是说可以,你试试看,我也是今天才发现的,还没部署

1 个赞

mark 一下

不错,明天试一下效果如何。

1 个赞

先mark一下,copilot后端代理

1 个赞

感谢分享。。

2 个赞

感谢大佬分享

感谢大佬分享

有点厉害支持~~

大佬 用我自已的API接口怎么补全代码报错了呀

2024-09-24 12:26:55.779 [info] [fetchCompletions] request.response: [http://copilot-proxy.mycopilot.com:11110/v1/engines/copilot-codex/completions] took 224 ms

2024-09-24 12:26:55.780 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\u4f60”, “index”: 1, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.780 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\u597d”, “index”: 2, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\u5440”, “index”: 3, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\uff0c”, “index”: 4, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\u6211”, “index”: 5, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\u7684”, “index”: 6, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\u670b”, “index”: 7, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “\u53cb”, “index”: 8, “finish_reason”: “null”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [error] [streamChoices] Error parsing JSON stream data {“id”: “3bad1c34-0a49-4b9b-9aed-dde736e4631c”, “created”: 1727152015, “model”: “gpt-35-turbo”, “choices”: [{“text”: “”, “index”: 9, “finish_reason”: “stop”, “logprobs”: null, “p”: “aaaaaaa”}]}

2024-09-24 12:26:55.781 [info] [streamChoices] request done: headerRequestId: model deployment ID:

代码补全必须FIM模型的吧,你这普通的文本生成模型肯定不兼容的

有哪些免费的FIM模型吗?或者可以把本地搭建的对话模型的返回格式改成FIM模型的格式吗

代码补全要的是FIM模型的格式,你仔细看看文档,

1 个赞

有没有格式内容啊 大佬

4 个赞

佬试了?搞个更详细的教程?

1 个赞

add insert support to generate endpoint by mxyng · Pull Request #5207 · ollama/ollama (github.com)

mike/deepseek-coder-v2 (ollama.com)

哎,我还想把本地转发的c3.5的模型替换上去呢,看来没戏了

1 个赞

大佬们 那个免费的模型用着最舒服啊 copilot自带的gpt3.5太难用了

强势关注,我自己也在写一个rust版本的这玩意呢。