🥇Pandora
目前最强大的ChatGPT逆向工程
项目GitHub地址:https://github.com/pandora-next/deploy
官方文档地址:https://fakeopen.org/PandoraNext/
2024.01.26更新:
出于一些众所周知的原因,Pandora也顶不住压力最终归档了,后续会不会再维护更新不得而知,真实可惜了一个如此完美的大项目

Pandora最好用的部分就是把网页端的ChatGPT通过逆向工程转换成API的请求格式,真正实现了GPT自由,既然Pandora倒了,我们就不得不寻找其他的逆向工程了,这几天也是尝试了好多不同的项目,最终找到了一个目前来说使用体验最好的:WarpGPT:https://github.com/oliverkirk-sudo/WarpGPT,该项目基于GO语言编写,安装GO运行环境的方法在最初的初始化配置章节
部署方法非常简单,可以在本地也可以在服务器部署,先创建一个环境变量(将原.env.templete文件重命名为.env)然后修改内容,注意本地部署需要添加代理,然后里面的代理池和redis我们是不需要的:
然后就可以构建并运行测试了:
运行后会实时输出日志,注意此时是一个命令行程序的形式,关闭终端后程序就会终止,成功运行后BaseURL就是http://ip:5000,API Key就是Access Token,测试没有问题后可以把日志等级改成info或者release,然后添加后台进程守护运行(然后建议添加反代实现https访问):
这里介绍的WarpGPT已经可以做到非常实用的ChatGPT网页版请求转API的格式,不过并不能完全取代Pandora,如果想要完全取代Pandora可以使用ninja项目:https://github.com/gngpp/ninja,ninja几乎实现了Pandora的全部功能(包括获取各种Token的接口、转API的格式、WebUI界面等等),因此对于大部分用户的需求来说我们建议直接使用ninja,不需要再考虑Pandora了,除非Pandora后期复出再来一波升级
ninja的使用方式也非常简单,官方文档:https://github.com/gngpp/ninja/blob/main/doc/readme_zh.md,别看文档有点复杂,其实简单来说只有三个步骤,第一步下载对应平台的编译文件,我们就用ubuntu平台的x86_64编译文件,解压后可以得到一个执行文件,直接在当前目录打开终端,用./ninja命令即可运行,具体来说,一共有以下这些命令(需要注意的是在桌面系统上,比如我使用的Ubuntu22LTS上需要./前缀才能执行编译文件,但是在某些服务平台上可能不需要,比如官方原文档就没有):
但是我们其实不推荐上面这些直接运行的命令,我们推荐通过配置文件运行的命令来自定义很多东西(最关键的就是代理,如果在国内运行是必须的):
配置文件这里大家可以参考我们的(其实我们只修改了代理部分,将其修改成了clash的7897端口)特别需要注意的是最后两个项目我们将其注释掉了,因为我们运行网页前端WebUI并不需要配置IP(无论是在本地端还是服务端,因为这个功能用于HTTPS连接,但是实际我们需要Nginx反代,真实的请求方式还是IP:Port的形式):
一般情况下直接用ninja start -C serve.toml运行即可,如果想要开机自启,需要手动配置描述文件,新建一个ninja.service文件,内容示例如下,可以自行修改(尤其是程序路径):
然后将这个文件复制到/etc/systemd/system/目录下,并用下面的命令创建自启动项:
部署Pandora
手动部署的步骤官方文档写的很详细,这里不再赘述,我主要按照我个人最喜欢的流程部署:
使用docker-compose安装:
注意这里部署完成后没法直接用的,因为没有配置文件,需要进入Portainer找到PandoraNext对应的Container容器用到的Volume库在Host中的路径,然后到对应的data文件夹中放入对应的config.json和tokens.json,官方示例文件和官方说明如下:
以下是一个示例
config.json文件
bind指定绑定IP和端口,在docker内,IP只能用0.0.0.0,否则映射不出来。如果你不打算套nginx等反代,
bind参数的IP请使用0.0.0.0!!!tls配置PandoraNext直接以https启动。enabled是否启用,true或false。启用时必须配置证书和密钥文件路径。cert_file证书文件路径。key_file密钥文件路径。
timeout是请求的超时时间,单位为秒。proxy_url指定部署服务流量走代理,如:http://127.0.0.1:8888、socks5://127.0.0.1:7980license_id指定你的License Id,可以在这里获取。public_share对于GPT中创建的对话分享,是否需要登录才能查看。为true则无需登录即可查看。site_password设置整站密码,需要先输入这个密码,正确才能进行后续步骤。充分保障私密性。不少于8位,且同时包含数字和字母!setup_password定义一个设置密码,用于调用/setup/开头的设置接口,为空则不可调用。不少于8位,且同时包含数字和字母!server_tokens设置是否在响应头中显示版本号,true显示,false则不显示。proxy_api_prefix可以给你的proxy模式接口地址添加前缀,让人意想不到。注意设置的字符应该是url中允许的字符。包括:a-zA-Z0-9-_.~proxy_api_prefix你必须设置一个不少于8位,且同时包含数字和字母的前缀才能开启proxy模式!/backend-api/conversationproxy模式比例1:4/v1/chat/completions3.5模型比例1:4/v1/chat/completions4模型比例1:10, 无需打码/api/auth/login登录接口比例1:100,无需打码/api/arkose/token获取arkose_token,比例1:10
isolated_conv_title现在隔离会话可以设置标题了,而不再是千篇一律的*号。disable_signup禁用注册账号功能,true或false。auto_conv_arkose在proxy模式使用gpt-4模型调用/backend-api/conversation接口是否自动打码,使用消耗为4+10。proxy_file_service在proxy模式是否使用PandoraNext的文件代理服务,避免官方文件服务的墙。custom_doh_host配置自定义的DoH主机名,建议使用IP形式。默认在+8区使用223.6.6.6,其余地区使用1.1.1.1。captcha配置一些关键页面的验证码。provider验证码提供商,支持:recaptcha_v2、recaptcha_enterprise、hcaptcha、turnstile、friendly_captcha。site_key验证码供应商后台获取的网站参数,是可以公布的信息。site_secret验证码供应商后台获取的秘密参数,不要公布出来。有些供应商也称作API Key。site_login是否在全站密码登录界面显示验证码,true或false。setup_login是否在设置入口登录界面显示验证码,true或false。oai_username是否输入用户名界面显示验证码,true或false。oai_password是否在输入登录密码界面显示验证码,true或false。
whitelist邮箱数组指定哪些用户可以登录使用,用户名/密码登录受限制,各种Token登录受限。内置tokens不受限。whitelist为null则不限制,为空数组[]则限制所有账号,内置tokens不受限。一个
whitelist的例子:"whitelist": ["[email protected]", "[email protected]"]
以下是一个示例
tokens.json文件
token支持示例文件中所写的所有类型。session token和refresh token可自动刷新。每个key被称为
token key,可在登录框作用户名输入。如上:test-1、test-2等,随意更改。如果设置了
password则输入完token key进入输入密码页面输入匹配。如果设置
shared为true,则这个账号会出现在/shared.html中,登录页面会出现它的链接。如果设置
shared为true,则这个账号不能再在用户名登录框进行登录。/shared.html中的账号和共享站功能相同,可以自行设置隔离密码进行会话隔离。plus用来标识/shared.html上账号是否有金光,没有其他作用。show_user_info表示/shared.html共享时是否显示账号邮箱信息,GPTs建议开启。现在可以直接内置用户名密码登录,此种方法必须设置
password且shared不可为true。内置账号密码的格式为:
邮箱,密码,此种是0额度消耗的。
遇到大部分报错信息的原因基本都是在修改这两个json文件的时候格式出错了,可以用https://www.bejson.com/检查json格式是否正确
配置好后重启对应的container容器即可通过ip:8181访问PandoraNext服务了,当然建议用上面讲过的方法进行反代来用域名访问。
这里是我搭建的服务(随时可能删除,仅供参考):https://pandora.stcdn.top/
在我搭建的服务中内置了user1,user2,user3三个默认用户,可供大家直接使用,如果要密码则是12345678
使用Pandora Proxy服务
官方吧唧吧唧说了一堆,其实就是直接用,BASE_URL是你部署的域名/<proxy_api_prefix>,API_KEY是你生成的Share-token或者Pool-token直接完事了,几乎所有的调用OpenAI API的平台都可以用这个方式替代,下面附上官方文档可以用来参考(实际上不需要看,也不需要管那些后缀,你只要知道一定要设置上并添加上<proxy_api_prefix>即可):
页面 /auth 使用账号密码,手动获取
access token和session token。只是给UI方便获取,1:100的消耗依然存在。页面 /fk 使用
access token或session token,手动获取share token,页面 /pk 使用
share token,手动组pool token。/backend-api/*
ChatGPT网页版接口,具体F12去页面上看。/public-api/*
ChatGPT网页版接口,具体F12去页面上看。/v1/* 所有
https://api.openai.com/v1/*开头的接口,每次调用1:1。/dashboard/* 所有
https://api.openai.com/dashboard/*开头的接口,每次调用1:1。GET /api/token/info/fk-xxx 获取share token信息,使用生成人的access token做为Authorization头,可查看各模型用量。
POST /api/auth/session 通过session token获取access token,使用urlencode form传递session_token参数。
POST /api/auth/refresh 通过refresh token获取access token,使用urlencode form传递refresh_token参数。
POST /api/auth/login 登录获取access token,使用urlencode form传递username 和 password 参数。
POST /api/token/register 生成share token
POST /api/pool/update 生成更新pool token
POST /v1/chat/completions 使用
ChatGPT模拟API的请求接口,支持share token和pool token。POST /api/arkose/token 获取arkose_token,目前只支持
gpt-4类型。使用urlencode form传递type=gpt-4参数。获取后可API方式调用GPTsPOST /api/setup/reload 重载当前服务的
config.json、tokens.json等配置。以上地址均需在最前面增加
/<proxy_api_prefix>,也就是你设置的前缀。
这里再推荐一个proxy的转接服务,也就是将/v1接口转发到/backend-api,以实现用api调用的方式询问真正的网页版ChatGPT(众所周知网页版的会比api版的更聪明一些),项目GitHub地址:https://github.com/Ink-Osier/PandoraToV1Api,因为此类项目更新较快,官方readme一定要好好看,很多步骤比较细节,截止到现在的操作步骤整理如下:
先把整个项目下载下来,然后修改docker-compose.yml 文件里的环境变量,注意BASE-URL地址如果套了反代可能会遇到443接口错误,修改成本地端口(注意主机IP是docker的映射IP,不是127.0.0.1)即可,下面是我的示例:
对于有PLUS账号的用户(对的就是官方20美元一月那个)可以设置GPTS的fk,没有的就不用填了,不填的需要将
gpts.json文件中的所有内容删除,只保留一对大括号{}然后就可以用
docker-compose up -d命令部署了,如果跟我一样用的是Protainer的Compose插件,那就是docker compose up -d
关于 license_id
复制
License Id:后的内容,填写在config.json的license_id字段。注意检查不要复制到多余的空格等不可见字符。
如果
config.json中没有填写license_id字段,启动会报错License ID is required。没有固定IP的情况,IP变动后会自动尝试重新拉取。
更换
License Id之后,通常需要手动删除license.jwt再启动。
上面这几条是官方文档,个人使用时注意额度消耗,可以访问上面的获取地址查看额度,如果想随时随地快捷获取,可以部署下面这个docker项目(原项目Github地址:https://github.com/Ink-Osier/getPandoraLicenseUsage),注意修改下面的LICENSE_ID:
部署完成后的默认请求地址:http://ip:53333/api/getPandoraNextLicUsage
或者使用我自己编写的简易PHP页面也可以完成,注意要修改下面网址中的<license_id>,这个api查询网址后期也可能发生变化,请关注Pandora项目的相关内容;这个PHP页面需要运行在搭建Pandora服务的服务器上以确保请求IP相同,否则会被Forbidden;如何在服务器上运行PHP文件?宝塔和docker二选一即可:
以上两种方法都推荐搭建反代直接用域名访问
自动获取并刷新Pool-token
在官方流程中,我们需要手动用十天就会过期一次的Access-token去获取Share-token并且组装成Pool-token,这个流程比较繁琐,可以使用下面的python脚本自动且快速实现:
脚本地址:https://raw.githubusercontent.com/bulianglin/demo/main/pandora-get-token.py
我们的备份:https://raw.githubusercontent.com/shentong0722/list/main/installsh/pandora-get-token.py
下载后修改这个这个脚本中的头部中的pool_token和api_endpoint两个参数,pool_token可以为空,为空则自动重新生成,填入则刷新该已有pool_token,api_endpoint是Pandora Proxy服务地址,在服务器端部署也就是http://127.0.0.1:8181/<proxy_api_prefix>
可以直接在自己电脑上运行,也可以在服务器运行,在服务器运行时使用下面的命令先抓取脚本:
wget https://raw.githubusercontent.com/bulianglin/demo/main/pandora-get-token.py
然后在同目录下新建一个名为session_tokens.txt的文件,并且在文件中以一行一个session_token的形式填入session_token(获取方法上一节中讲过),然后运行python3 pandora-get-token.py命令来运行脚本自动根据session_tokens获取Share-token并且自动组装成Pool-token
上面的方法需要自行获取session_token,比较麻烦,也可以通过脚本自动获取(但是需要注意的是这样每个账号的获取操作会扣除你pandora额度100条):在同目录下新建一个users.txt的文本文件,然后在里面填入帐号密码(中间用----连接)一行一组,然后运行脚本,命令与上面相同但是末尾需要加上-a参数,这样就可以把这些账号的session_token自动写入到session_tokens.txt文件中了
如果想要定期自动运行脚本来实现renew可以用nohup服务实现(注意-u参数):
nohup python3 -u pandora-get-token.py > gettoken.log 2>&1 &
然后使用cat gettoken.log命令显示日志文件查看运行状态
这边我可以给大家分享一下我自己的账号组装的token(貌似不会有什么问题,如果扣了什么额度我随时删除共享):pk-DHLxJLA2jjWXFZS3N0V3WJirB6SnglswoNlmHxc1XuE
最后分享一个由其他好心人提供的共享Pool Token:pk-this-is-a-real-free-pool-token-for-everyone,这个Pool Token内有几千个Share-token组成,大部分可用但是也不免有些已经过期,导致在调用时报错,是正常现象
最后更新于