简介

override 项目:https://github.com/linux-do/override

新玩具,将 Github Copilot 的代码生成和对话转到我们自己的服务。

实现灵活计费,用就花钱,不用就不花。还可团队共享。还可以 chat2api 接入使用对话。

字少事大。更多的,自己体会吧。

工作原理

  1. 理论上,Chat 部分可以使用 chat2api ,而 Codex 代码生成部分则不太适合使用 chat2api
  2. 代码生成部分做过延时生成和客户端 Cancel 处理,很有效节省你的 Token。
  3. 有什么问题,请在论坛 https://linux.do 讨论

模型

本文使用的模型为:DeepSeek Coder

之前没像大家推荐是因为 CloseAI 的 补全模型 gpt-3.5-turbo-instruct 实在是不好用,还没性价比。

近期 DeepSeek API 升级,支持续写、FIM、Function Calling、JSON Output

DeepSeek FIM 能支持 8K 以上输入,生成代码质量也不错。

关于 DeepSeek Coder

文档:快速开始 | DeepSeek API Docs

如何购买:

https://platform.deepseek.com/ 在这里创建账号(使用国外 IP 打开,可以邮箱注册,无需实名认证。否则只有手机号注册)
购买额度可以支付宝等方式,很方便。拿到 key 开搞。

https://minio.kl.do/picture/images/blog/9d32da1c57b2344092c3cf7f5371e19c.png

Docker 部署

  1. 克隆项目

    1
    git clone https://github.com/linux-do/override.git
  2. 新建配置文件

    路径可自定义,我的路径是 /data/override/config.json

    1
    vim /data/override/config.json
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {
    "bind": "0.0.0.0:8181",
    "proxy_url": "",
    "timeout": 600,
    "codex_api_base": "https://api.deepseek.com/beta/v1",
    "codex_api_key": "sk-8cxxxx",
    "codex_api_organization": "",
    "codex_api_project": "",
    "codex_max_tokens": 500,
    "code_instruct_model": "deepseek-coder",
    "chat_api_base": "https://api.kl.do/v1",
    "chat_api_key": "sk-xxx",
    "chat_api_organization": "",
    "chat_api_project": "",
    "chat_max_tokens": 4096,
    "chat_model_default": "gpt-4o",
    "chat_model_map": {},
    "chat_locale": "zh_CN",
    "auth_token": ""
    }
  3. 修改项目的 docker-compose.yaml
    我这里修改了端口映射 18181 和配置文件映射

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    services:
    override-app:
    image: linux-do/override:latest
    container_name: override-app
    restart: always
    build:
    context: .
    dockerfile: Dockerfile
    volumes:
    - /data/override/config.json:/app/config.json
    ports:
    - "18181:8181"
  4. 部署项目

    1
    2
    3
    docker compose up -d

    docker compose ps

    https://minio.kl.do/picture/images/blog/e52d2610bba16888b760fb8dd1fb517c.png

Vscode 使用

  1. 安装 Github Copilot

    https://minio.kl.do/picture/images/blog/5f54323b4896544a60af815b575135c8.png

  2. 编辑配置文件
    使用快捷键 ctrl+shift+p 唤出指令输出栏

    https://minio.kl.do/picture/images/blog/d27ce75226b1e8243c21e19d065932a5.png

  3. 编辑 Github Copilot 配置

    1
    2
    3
    4
    5
    6
    7
    "github.copilot.advanced": {
    "debug.overrideCAPIUrl": "http://你的ip:18181/v1",
    "debug.overrideProxyUrl": "http://你的ip:18181",
    "debug.chatOverrideProxyUrl": "http://你的ip:18181/v1/chat/completions",
    "authProvider": "github-enterprise"
    },
    "github-enterprise.uri": "https://cocopilot.org",
  4. 重启 vscode

  5. 使用 Github Copilot

    chat

    https://minio.kl.do/picture/images/blog/018cc18cb09ea0432e1135e3c8f458a3.png

    代码补全

    首次使用延迟可能会比较高,使用一会就好一些。

    https://minio.kl.do/picture/images/blog/48ffee806bb97c5b6d134d0043833b42.png

  6. codex_max_tokens 脚本 Patch

    codex_max_tokens 工作并不完美,已经移除。JetBrains IDE 完美工作VSCode 需要执行以下脚本 Patch 之:

    • macOS
      1
      sed -i '' -E 's/\.maxPromptCompletionTokens\(([a-zA-Z0-9_]+),([0-9]+)\)/.maxPromptCompletionTokens(\1,2048)/' ~/.vscode/extensions/github.copilot-*/dist/extension.js
    • Linux
      1
      sed -E 's/\.maxPromptCompletionTokens\(([a-zA-Z0-9_]+),([0-9]+)\)/.maxPromptCompletionTokens(\1,2048)/' ~/.vscode/extensions/github.copilot-*/dist/extension.js
    • Windows 可以用如下的 python 脚本进行替换
    • 因为是 Patch,所以:Copilot 每次升级都要执行一次
    • 具体原因是客户端需要根据 max_tokens 精密计算 prompt,后台删减会有问题。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # github copilot extention replace script
    import re
    import glob
    import os

    file_paths = glob.glob(os.getenv("USERPROFILE") + r'\.vscode\extensions\github.copilot-*\dist\extension.js')
    if file_paths == list():
    print("no copilot extension found")
    exit()

    pattern = re.compile(r'\.maxPromptCompletionTokens\(([a-zA-Z0-9_]+),([0-9]+)\)')
    replacement = r'.maxPromptCompletionTokens(\1,2048)'

    for file_path in file_paths:
    with open(file_path, 'r', encoding="utf-8") as file:
    content = file.read()

    new_content = pattern.sub(replacement, content)
    if new_content == content:
    print("no match found in " + file_path)
    continue
    else:
    print("replaced " + file_path)

    with open(file_path, 'w', encoding='utf-8') as file:
    file.write(new_content)

    print("replace finish")

JetBrains 等使用

注意:Github Copilot 插件的最高版本为 1.5.8.5775
如果已升级的佬友,在这里回滚至 1.5.8.5775
历史版本下载地址: https://plugins.jetbrains.com/plugin/17718-github-copilot/versions/stable

ja-netfilter 搭配 plugin-env.jar 设置环境变量(推荐)

项目地址: https://gitee.com/ja-netfilter/plugin-env

由于 JetBrains 系列 IDE 需要设置环境变量,而使用脚本设置根据平台不同还有所区别。总之非常麻烦还可能没生效。
所以就有了这个 ja-netfilter 插件:plugin-env
这下使用 ja-netfilter 的佬友再也不用为环境变量发愁了。具体使用可以查看插件的 README.md,理论上能做更多的事情。

先从这里下载发行版,丢进你的 plugins-jetbrains 文件夹。
然后在你的 config-jetbrains 目录新建 env.conf 文件。

以下是一个替代 CoCopilot 脚本的 env.conf 配置:

1
2
3
4
5
[ENV]
PREFIX,AGENT_DEBUG_OVERRIDE_CAPI_URL=http://你的ip:18181/v1
PREFIX,AGENT_DEBUG_OVERRIDE_PROXY_URL=http://你的ip:18181
PREFIX,GITHUB_COPILOT_OVERRIDE_CAPI_URL=http://你的ip:18181/v1
PREFIX,GITHUB_COPILOT_OVERRIDE_PROXY_URL=http://你的ip:18181

重启 IDE 即可

配置环境变量(不支持高版本,不推荐)

override\scripts 所有脚本中的 127.0.0.1:8181 替换为你的 ip:端口

按照 Cocopilot Dashboard (cocopilot.org) 页面截图配置后,执行对应系统的脚本后重启 IDE:

  • scripts/install.sh 适用于 macOSLinux
  • scripts/install-all-users.vbs 适用于 Windows,为电脑上所有用户配置,需要有管理员权限。
  • scripts/install-current-user.vbs 适用于 Windows,为当前用户配置,无需管理员权限。
  • scripts/uninstall 相关脚本与之对应,为卸载配置。