Sign inSign up

mouxan/copilot

By mouxan

•Updated over 2 years ago

一个快速简便的方式来使用copilot的api服务

Image
2

3.0K

mouxan/copilot repository overview

⁠Copilot API 服务

Docker Image Size (tag) Docker Pulls

  • 一款快速简便的方式来使用copilot的api服务
  • copilot⁠ 是一个GitHub的AI应用,他不仅是您代码的领航员还是一个可以智能聊天助手
  • 免费的API:https://copilot.mouxan.cn⁠,内置某宝的copilot

⁠Copilot Token获取方法

首先,你的账号需要开通 Github Copilot 服务

获取 Github Copilot Plugin Token 的方式目前有以下四种方式:

⁠1. 通过启动本项目的/token页面进行获取(极力推荐)

启动本项目后可访问:https://copilot-api.up.railway.app/token⁠ 进行访问授权 承诺不会存储您的token,api是使用的github官方api,如果无法请求访问请配置代理

⁠2. 通过 Python 脚本获取,只需要 requests 库(极力推荐)

下载脚本,用python环境进行运行:get_copilot_token.py⁠

⁠3. 通过 Github Copilot CLI⁠ 授权获取(推荐)

Linux 平台获取

# 如下脚本会自动安装 Github Copilot CLI 并通过授权获取 Github Copilot Plugin Token 
bash -c "$(curl -fsSL https://raw.githubusercontent.com/mouxans/copilot-api/main/shells/get_copilot_token.sh)"

Windows 平台获取

下载批处理脚本,双击运行即可:get_copilot_token.bat⁠。

可能因为环境不同会导致一些未知的报错等,这个就自行百度或问ChatGPT自行解决

⁠4. 通过第三方接口授权获取(不推荐)

目前已知的第三方获取平台有:

cocopilot⁠

目前项目还支持第三方cocopilot⁠的公车Token:ccu_xxx

获取ccu_xxx的方式:打开cocopilot⁠,复制页面上的'手动 Token: ccu_xxx',保留自行保存,为服务调用api的key使用

Tips: 目前cocopilot⁠的Token暂时是不上车也是可以免费使用的,但哪天会噶犹未可知,所以可以用这个站点找人开公车一块公用一个官方的Copilot Token是可以的,此处就不过多解释了,懂得都懂,不懂也没办法解释

⁠不建议方式
  1. 以公共服务的方式提供接口 多个 Token 在同一个 IP 地址进行请求, 容易被判定为异常行为

  2. 同客户端 Web(例如 ChatGPT-Next-Web) 以默认 API 以及 API Key 的方式提供公共服务 同一个 Token 请求频率过高, 容易被判定为异常行为

  3. Serverless 类型的提供商进行部署 服务生命周期短, 更换 IP 地址频繁, 容易被判定为异常行为

  4. 其他滥用行为或牟利等行为。

⁠⚠️ 非常重要

非常重要:以上不建议的方式,均可能会导致 Github Copilot 被封禁,且封禁后可能无法解封。

非常重要:以上不建议的方式,均可能会导致 Github Copilot 被封禁,且封禁后可能无法解封。

非常重要:以上不建议的方式,均可能会导致 Github Copilot 被封禁,且封禁后可能无法解封。

⁠部署方式

⁠Railway一键部署
  • 1.注册Railway⁠

  • 2.点击一键部署:Deploy on Railway

  • 3.点击部署的服务,进入Settings->Networking->Generate Domain(生成随机域名)/Custom Domain(绑定自定义自己的域名),然后就可以通过这个域名进行原神启动!

Tips: 如果你不是新用户,五刀用完了,别慌,点击右上角头像进入settings->General->拉到最下面Delete Account,对,这是注销解绑,然后再重新用github登录绑定,然后你会发现,又有五刀了

⁠Docker部署
  • docker run快速开始:
  docker run -d \
  --name copilot-chatgpt \
  -p 8080:8080 \
  -e WORKERS=5 \
  mouxan/copilot:latest
  • docker-compose.yml:
version: '3.3'
services:
  copilot-api:
    container_name: copilot-api
    image: mouxan/copilot:latest
    restart: always
    environment:
      WORKERS: 5
    ports:
      - 8080:8080
  • docker 环境变量说明:
HOST=0.0.0.0 #服务监听地址,默认0.0.0.0,建议使用默认
PORT=8080 #服务监听端口号
WORKERS=5 #线程数
API_PREFIX=abc123 #copilot-api的api前缀,不填则直接使用v1,加了后您的api路径为:ip:端口/abc123/v1/chat/completions
COPILOT_TOKEN=ghu_xxxxx # 默认的 Github Copilot Token,此项不会影响请求时候传的token,当headers未传时则默认使用环境变量里配置的token作为请求
COPILOT_TOKEN_LIST='['ghu_1xxxx','ghu_2xxx']' # 和COPILOT_TOKEN一样,这个是copilot token的数组,设置了这个COPILOT_TOKEN则无效
TOKEN_PROXY=api.cocopilot.org #copilot获取token的代理地址,默认:api.cocopilot.org
IS_USE_TOKEN_PROXY=False #是否完全走copilot的代理地址,即:系统默认是gh开头的token走官方的获取token,ccu_走cocopilot接口,如果打开则完全走 TOKEN_PROXY 代理获取的token,可用某宝第三方token url
GITHUBCOPILOT_PROXY=api.githubcopilot.com #请求反代completions和embeddings,默认:api.githubcopilot.com走官方,如国内服务器可使用第三方反代,否则可能无法请求,或者配置PROXY
PROXY='' #代理路由地址,如果本地国内无法访问github可配置代理
CLIENT_ID='Iv1.b507a08c87ecfe98' # 这个为github插件应用id,默认为'Iv1.b507a08c87ecfe98',尽量不要去更改,默认为github copilot的插件应用id,改成其他的获取的token可能无法使用copilot,具体自行研究,不建议修改
SLEEP_TIME='0.3' # gpt4模型会出现短暂的卡顿,所以设立sleep进行解决卡顿问题,默认0.3s,设置为0则不sleep
TITLE='Copilot API' # 文档TITLE
DOCSURL=/docs # Fstapi的docs文档地址,默认/docs
REDOCURL='/redoc' # Fastapi的redoc文档地址,默认/redoc
GITHUB_USERNAME=xxxx # github的账号,用于自动每小时获取VScode版本号,不设置则可能会限速
GITHUB_PASSWORD=xxx # github的密码,用于自动每小时获取VScode版本号,不设置则可能会限速

⁠Api文档地址

默认地址:http://localhost:8080/redoc⁠ 和 http://localhost:8080/docs⁠ 例如:https://copilot-api.up.railway.app/redoc⁠ 和 https://copilot-api.up.railway.app/docs⁠ 如需修改请更换环境变量的文档地址

⁠获取GitHub的Copilot Token页面

启动项目后可访问:http://localhost:8080/token⁠ ,例如:https://copilot-api.up.railway.app/token⁠

  1. 复制或点击上面的链接,并复制授权码,注意当前的页面不可关闭
  2. 在新的页面访问上面链接,并输入复制的授权码
  3. 点击确认授权
  4. 返回刚才的token页面,此时你access token生成成功,复制并保存上面的token

⁠开发工具插件使用

Windows 平台使用

  1. 先安装好copilot系列的插件,此处就不过多解释了
  2. 下载一键处理脚本:cocopilot.bat⁠。
  3. 修改cocopilot.bat⁠脚本上的oauth_token改成你的github Token(ghu_xxx/gho_xxx/ccu_xxx),以及修改copilot_token_url改成你启动本服务的地址,保存脚本
  4. 双击修改后的脚本,提示“done. please restart your ide.”即可使用copilot进行起飞

macOS/linux 平台使用

macOS/linux系统执行cocopilot.sh⁠

VScode 插件使用

VSCode可使用vscode.bat⁠和vscode.sh⁠,VSCode中插件更新后需要重新执行脚本,JetBrains则不需要。

  • 如果发现无法使用,请检查之前是否使用某宝或者那些免费的插件脚本执行过,检查路径:c:/user/你的用户名/AppData/Local/github-copilot/hosts.json,如果有,请删除它,然后重新再执行上述操作
  • 可能因为环境不同会导致一些未知的报错等,这个就自行百度或问ChatGPT自行解决

⁠接口请求文档

请在启动服务后前往文档地址(环境变量配的DOCSURL和REDOCURL文档路径地址)查看最新的接口文档,此处的文档可能已过时

Tip: 如果设置了接口前缀,下方域名/ip:端口后面皆需增加接口前缀

  • completions接口
curl --location 'https://copilot-api.up.railway.app/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer gho_xxx' \
--data '{
  "model": "gpt-4",
  "messages": [{"role": "user", "content": "鲁迅打周树人"}]
}'
#或
curl --location 'https://copilot-api.up.railway.app/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer gho_xxx' \
--data '{
  "model": "gpt-4",
  "messages": [{"role": "user", "content": "鲁迅打周树人"}]
}'
  • embeddings接口
curl --location 'https://copilot-api.up.railway.app/v1/embeddings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer gho_xxx' \
--data '{
  "input":"鲁迅打周树人",
  "model":"text-embedding-ada-002"
}'
#或
curl --location 'https://copilot-api.up.railway.app/embeddings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer gho_xxx' \
--data '{
  "input":"鲁迅打周树人",
  "model":"text-embedding-ada-002"
}'
  • 获取可用模型接口
curl --location 'https://copilot-api.up.railway.app/v1/models'
#或
curl --location 'https://copilot-api.up.railway.app/models'
  • 获取Github Copilot设备应用授权链接和授权码接口,具体请求方式那些可参考官方文档授权OAuth⁠

client_id="Iv1.b507a08c87ecfe98"为GitHub Copilot Plugin应用的client_id,如果是要获取copilot的ghu

curl --location 'https://copilot-api.up.railway.app/login/device/code' \
--header 'Content-Type: application/json' \
--data '{
  "client_id": "Iv1.b507a08c87ecfe98",
  "scope": "read:user"
}'
  • 检测Github Copilot设备授权状态获取GitHub Copilot Plugin的Access Token
curl --location 'https://copilot-api.up.railway.app/login/oauth/access_token' \
--header 'Content-Type: application/json' \
--header 'Authorization: token {device_code}'
# 或
curl --location 'https://copilot-api.up.railway.app/login/oauth/access_token' \
--header 'Content-Type: application/json' \ 
--data '{
  "client_id": "Iv1.b507a08c87ecfe98",
  "device_code": device_code,
  "grant_type": "urn:ietf:params:oauth:grant-type:device_code"
}'
  • 使用Copilot Token获取鉴权token,可作为插件的授权接口使用
curl --location 'https://copilot-api.up.railway.app/copilot_internal/v2/token' \
--header 'Content-Type: application/json' \
--header 'Authorization: token gho_xxx'
⁠支持的模型
  • gpt-4
  • gpt-3.5-turbo
  • text-davinci-003
  • text-davinci-002
  • text-davinci-001
  • text-curie-001
  • text-babbage-001
  • text-ada-001
  • davinci
  • curie
  • babbage
  • ada
  • code-davinci-002
  • code-davinci-001
  • code-cushman-002
  • code-cushman-001
  • davinci-codex
  • cushman-codex
  • text-davinci-edit-001
  • code-davinci-edit-001
  • text-embedding-ada-002
  • text-similarity-davinci-001
  • text-similarity-curie-001
  • text-similarity-babbage-001
  • text-similarity-ada-001
  • text-search-davinci-doc-001
  • text-search-curie-doc-001
  • text-search-babbage-doc-001
  • text-search-ada-doc-001
  • code-search-babbage-code-001
  • code-search-ada-code-001
  • gpt2

你会发现,其实整这么多模型,真正的只有三个,一个gpt-4,不传或者传其他的都是默认gpt-3.5-turbo,最后一个就是嵌入模型embedding

⁠Copilot接口逆向原理,带你了解Copilot服务的逆向全过程

  1. 调用:https://github.com/login/device/code⁠ 获取到copilot的设备流验证地址和Code(传copilot插件的client_id:Iv1.b507a08c87ecfe98,如果不对或者更换了请在github进行获取:github.com->Settings->Applications->Authorized Github Apps->GitHub Copilot Plugin 然后查看网址url后面的Iv1.xxx的就是copilot插件的client_id)

  2. 用户用第一步获取的授权链接和CODE进行验证授权

  3. 第二步用户授权后调用:https://github.com/login/oauth/access_token⁠ 接口获取到copilot的插件token:ghu_xxx(传copilot的插件client_id和device_grant_type:urn:ietf:params:oauth:grant-type:device_code,和第一步接口获取的device_code)

  4. 获取到ghu_Xxx(这个token目前好像是长期的,具体能用多久就不清楚)后,调用copilot内部获取token的接口:https://api.github.com/copilot_internal/v2/token⁠ 获取到copilot内部接口请求鉴权token,这个token有效期为25分钟,接口有返回到期时间和刷新时间,这一步如果用的是第三方某宝购买的或者秦始皇的公车Token时,这个接口地址需进行更换他的对方的内部token url鉴权地址,比如秦始皇的是:https://api.cocopilot.org/copilot_internal/v2/token⁠ ,某宝购买的地址怎么趴呢,我在下面单独讲解吧

  5. 第四步完成后就可以调用copilot的chat或者embeddings接口了:https://api.githubcopilot.com/chat/completions⁠ 和 https://api.githubcopilot.com/embeddings⁠ ,请求方式同openai的接口相差无几,具体请看文档:openai文档⁠

Tips:好了,来讲解下某宝购买的远程授权脚本的token和token url怎么获取呢:

  1. 首先,你得先用他的脚本进行授权完跑一边,除非你会逆向他打包的脚本这个就可以忽视

  2. 在你windows电脑文件夹路径中:C:\Users\你的win用户名\AppData\Local\github-copilot,找到hosts.json,里面就有oauth_token就是类似与ghu_Xxx的token,只不过相当于走了他的服务器进行中转分发转发的token,copilot_token_url就是他的token url服务器地址,用于转换获取copilot内部鉴权token的地址

  • 如果没有的话是插件授权的直接把插件包改个后缀.zip然后解压进源码里查看这两个参数,具体就不多讲解了,目前市面上大多数都是可以直接在win本地路径中找到

Tag summary

Content type

Image

Digest

sha256:c23aefc71…

Size

105 MB

Last updated

over 2 years ago

docker pull mouxan/copilot