【GPT4】乘坐Copilot的顺风车免费使用无限制的GPT-4
1. 前提
- 需要有已激活
github copilot
的github账户, 且登录! python
环境go
环境
2. 获取Token
- 安装
requests
pip install requests
- 将下面代码保存为
get_copilot_token.py
#!/usr/bin/env python3
PROXY = {
"http": "",
"https": ""
}
import time
import typing
from enum import Enum
import sys
import os
import re
try:
import requests
except ImportError:
print("requests is not installed, please install it by running `pip install requests`")
sys.exit(1)
import requests
class LoginError(Enum):
AUTH_PENDING = 1
EXPIRED_TOKEN = 2
NETWORK_ERROR = 3
OTHER_ERROR = 4
HEADERS = {
"accept": "application/json",
"content-type": "application/json",
}
def getLoginInfo(proxy=None) -> (LoginError, typing.Union[dict, Exception]):
url = "https://github.com/login/device/code"
body = {
"client_id": "Iv1.b507a08c87ecfe98",
"scope": "read:user"
}
try:
resp = requests.post(url, headers=HEADERS, json=body, proxies=proxy, timeout=10)
except requests.exceptions.ConnectionError:
return LoginError.NETWORK_ERROR, None
except Exception as e:
return LoginError.OTHER_ERROR, e
return None, resp.json()
def pollAuth(device_code: str, proxy=None) -> (LoginError, str):
url = "https://github.com/login/oauth/access_token"
body = {
"client_id": "Iv1.b507a08c87ecfe98", # client_id of gh copilot
"device_code": device_code,
"grant_type": "urn:ietf:params:oauth:grant-type:device_code"
}
try:
resp = requests.post(url, headers=HEADERS, json=body, proxies=proxy, timeout=10)
except requests.exceptions.ConnectionError:
return LoginError.NETWORK_ERROR, None
except Exception as e:
return LoginError.OTHER_ERROR, e
data = resp.json()
if data.get("error") == "authorization_pending":
return LoginError.AUTH_PENDING, None
if data.get("error") == "expired_token":
return LoginError.EXPIRED_TOKEN, None
elif "access_token" in data:
return None, data["access_token"]
else:
return LoginError.OTHER_ERROR, data
def getToken(proxy=None) -> (LoginError, str):
# get login info
err, login_info = getLoginInfo(proxy)
if err is not None:
if err == LoginError.NETWORK_ERROR:
print("network error, please check your network.")
elif err == LoginError.OTHER_ERROR:
print("unknown error occurred when getting login info.")
print("error message:", login_info)
return err, None
interval = login_info['interval']
print(f"Please open {login_info['verification_uri']} in browser and enter {login_info['user_code']} to login.")
# poll for auth status
while True:
err, access_token = pollAuth(login_info['device_code'], proxy)
if err is None:
return None, access_token
elif err == LoginError.AUTH_PENDING:
pass
elif err == LoginError.EXPIRED_TOKEN:
print("session expired, please try again.")
return err, None
elif err == LoginError.NETWORK_ERROR:
print("network error, please check your network.")
return err, None
elif err == LoginError.OTHER_ERROR:
print("unknown error occurred when pulling auth info.")
print("error message:", access_token)
return err, None
time.sleep(interval)
if __name__ == "__main__":
for k, v in PROXY.items():
if v == "":
PROXY[k] = os.getenv(f"{k}_proxy".upper()) or os.getenv(f"{k}_proxy".lower()) or ""
if re.match(r"^.+://.+$", PROXY[k]) is None and PROXY[k] != "":
PROXY[k] = "http://" + PROXY[k]
err, token = getToken(PROXY)
if err is None:
print("Your token is:")
print(token)
- 运行
get_copilot_token.py
,并github授权,得到token
可能会报错 网络错误什么的。多重试几次就好了。
ghb_xxx
即token
3. 启动服务
拉取代码,直接启动,适合开发环境使用,请确保本地已经安装 Go 环境。
git clone https://github.com/aaamoon/copilot-gpt4-service && cd copilot-gpt4-service && go run .
则代表服务启动成功。
4. Usage
搭配ChatGPT-Next-Web来使用
5. 注意事项
详情请查看文档 copilot-gpt4-service
为之则易,不为则难。
本文作者:Code_You
本文链接:https://www.cnblogs.com/coderDemo/p/18051870
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步