开源项目:copilot-gpt4-service

1 原理

将 Github Copilot 请求转换为 ChatGPT 请求,免费使用 GPT-4 模型。也就是说,如果你购买了 Copilot 包月,就可以用此方法免费使用 GPT-4 聊天了。

作者追踪数据包发现:Copilot Chat 后台使用的也是 OpenAI 的 ChatGPT,只是加入了很多提示,以避免闲聊与程序无关的问题。

连接过程并非直接使用 copilot token,还需要连接 github 获取用户信息,因此作者用 go 语言写了一个中转服务,消化了此步骤。

2 操作

从以下网址获得 github copilot token:

https://cocopilot.org/copilot/token

该 token 一般以 ghu_ 或 gho_ 开头。

3 在本地搭建中转服务

1
2
3
$ git clone https://github.com/aaamoon/copilot-gpt4-service 
$ cd copilot-gpt4-service
$ docker-compose up -d

注意:如果 build 时总是提示连不通,请在 docker-compose.yml 的 build 部分加代理。

4 安装 NextWeb 界面工具

1
2
3
4
$ docker pull yidadaa/chatgpt-next-web
$ docker run -d -p 3000:3000 \
--net=host \
yidadaa/chatgpt-next-web

在设置界面选择自定义接口:

(我的 8080 被其它服务占上了,所以部署在 8081 端口)

使用效果如下:

(问第一个问题时,使用 3.5,然后切成 4,问了第二个问题)

5 程序调用

目前测试只能在网页上使用,用 python openai 库调用,返回 200,但无内容。

项目代码量不大,主要逻辑在 main.go 中,初步判断是 python openai 库与命令行通讯协议不一致导致的。

实在想用,也可以在程序里使用命令行调用方式,只是比较麻烦:

1
2
3
4
5
6
7
8
curl -X POST http://localhost:8081/v1/chat/completions \
-H 'Authorization: Bearer 我的token' \
-H 'Content-Type: application/json' \
-d '{
"messages": [{"role": "user", "content": "1+1=?"}],
"max_tokens": 10,
"temperature": 0
}'

6 问题及解决

在云服务器上安装时,遇到一些问题,解决方法记录如下:

6.1 问题一:报错找不到 BUILDPLATFORM

1
2
Step 1/14 : FROM --platform=$BUILDPLATFORM golang:alpine as builder
failed to parse platform : "" is an invalid component of "": platform specifier component must match "^[A-Za-z0-9_-]+$": invalid argument

在 docker-compose.yml 中加运行参数 BUILDPLATFORM

1
2
3
4
5
6
services:
your-service:
build:
context: .
args:
BUILDPLATFORM: linux/amd64

在 Dockerfile 中把接收参数放在使用参数前

1
2
ARG BUILDPLATFORM
FROM --platform=$BUILDPLATFORM golang:alpine as builder

6.2 问题二:报错没打开 BUILDKIT

1
the --mount option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled

在运行 docker-compose 前设置环境变量

1
export DOCKER_BUILDKIT=1

6.3 问题三:docker-compose 时死机

可能由于 build image 时内存占用过大,导致机器不响应,解决方法是在其它机器上打好 image 后复制过去即可,go 语言的 image 很小,大概只有 18M 左右。

6.4 问题四:无法使用 openai api 访问

  • 设了 http_proxy 之后,即使用了 no_proxy,也影响连本地 ip。并非所有的应用都支持 CIDR 表示法(如 192.168.10.0/24),在 Python 中,requests 库是支持 NO_PROXY 环境变量的,但是它不支持 CIDR 表示法。需要为 NO_PROXY 环境变量指定一个逗号分隔的 IP 地址列表,而不是 CIDR 表示法的 IP 地址范围。
  • 连服务时没注意 openai v1 版本的 url 与之前有差异