最后更新于
最后更新于
项目GitHub地址:
官方文档地址:
出于一些众所周知的原因,Pandora也顶不住压力最终归档了,后续会不会再维护更新不得而知,真实可惜了一个如此完美的大项目
部署方法非常简单,可以在本地也可以在服务器部署,先创建一个环境变量(将原.env.templete文件重命名为.env)然后修改内容,注意本地部署需要添加代理,然后里面的代理池和redis我们是不需要的:
然后就可以构建并运行测试了:
运行后会实时输出日志,注意此时是一个命令行程序的形式,关闭终端后程序就会终止,成功运行后BaseURL就是http://ip:5000,API Key就是Access Token,测试没有问题后可以把日志等级改成info或者release,然后添加后台进程守护运行(然后建议添加反代实现https访问):
但是我们其实不推荐上面这些直接运行的命令,我们推荐通过配置文件运行的命令来自定义很多东西(最关键的就是代理,如果在国内运行是必须的):
配置文件这里大家可以参考我们的(其实我们只修改了代理部分,将其修改成了clash的7897端口)特别需要注意的是最后两个项目我们将其注释掉了,因为我们运行网页前端WebUI并不需要配置IP(无论是在本地端还是服务端,因为这个功能用于HTTPS连接,但是实际我们需要Nginx反代,真实的请求方式还是IP:Port的形式):
一般情况下直接用ninja start -C serve.toml
运行即可,如果想要开机自启,需要手动配置描述文件,新建一个ninja.service
文件,内容示例如下,可以自行修改(尤其是程序路径):
然后将这个文件复制到/etc/systemd/system/
目录下,并用下面的命令创建自启动项:
手动部署的步骤官方文档写的很详细,这里不再赘述,我主要按照我个人最喜欢的流程部署:
使用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:7980
public_share
对于GPT中创建的对话分享,是否需要登录才能查看。为true
则无需登录即可查看。
site_password
设置整站密码,需要先输入这个密码,正确才能进行后续步骤。充分保障私密性。不少于8
位,且同时包含数字
和字母
!
setup_password
定义一个设置密码,用于调用/setup/
开头的设置接口,为空则不可调用。不少于8
位,且同时包含数字
和字母
!
server_tokens
设置是否在响应头中显示版本号,true
显示,false
则不显示。
proxy_api_prefix
可以给你的proxy
模式接口地址添加前缀,让人意想不到。注意设置的字符应该是url中允许的字符。包括:a-z
A-Z
0-9
-
_
.
~
proxy_api_prefix
你必须设置一个不少于8
位,且同时包含数字
和字母
的前缀才能开启proxy
模式!
/backend-api/conversation
proxy模式比例 1:4
/v1/chat/completions
3.5模型比例 1:4
/v1/chat/completions
4模型比例 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": ["mail2@test.com", "mail2@test.com"]
以下是一个示例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
额度消耗的。
配置好后重启对应的container容器即可通过ip:8181访问PandoraNext服务了,当然建议用上面讲过的方法进行反代来用域名访问。
在我搭建的服务中内置了user1,user2,user3三个默认用户,可供大家直接使用,如果要密码则是12345678
官方吧唧吧唧说了一堆,其实就是直接用,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方式调用GPTs
POST /api/setup/reload 重载当前服务的config.json
、tokens.json
等配置。
以上地址均需在最前面增加 /<proxy_api_prefix>
,也就是你设置的前缀。
先把整个项目下载下来,然后修改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:
后的内容,填写在config.json
的license_id
字段。
注意检查不要复制到多余的空格等不可见字符。
如果config.json
中没有填写license_id
字段,启动会报错License ID is required
。
没有固定IP的情况,IP变动后会自动尝试重新拉取。
更换License Id
之后,通常需要手动删除license.jwt
再启动。
部署完成后的默认请求地址:http://ip:53333/api/getPandoraNextLicUsage
或者使用我自己编写的简易PHP页面也可以完成,注意要修改下面网址中的<license_id>,这个api查询网址后期也可能发生变化,请关注Pandora项目的相关内容;这个PHP页面需要运行在搭建Pandora服务的服务器上以确保请求IP相同,否则会被Forbidden;如何在服务器上运行PHP文件?宝塔和docker二选一即可:
以上两种方法都推荐搭建反代直接用域名访问
在官方流程中,我们需要手动用十天就会过期一次的Access-token去获取Share-token并且组装成Pool-token,这个流程比较繁琐,可以使用下面的python脚本自动且快速实现:
下载后修改这个这个脚本中的头部中的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组成,大部分可用但是也不免有些已经过期,导致在调用时报错,是正常现象
Pandora最好用的部分就是把网页端的ChatGPT通过逆向工程转换成API的请求格式,真正实现了GPT自由,既然Pandora倒了,我们就不得不寻找其他的逆向工程了,这几天也是尝试了好多不同的项目,最终找到了一个目前来说使用体验最好的:WarpGPT:,该项目基于GO语言编写,安装GO运行环境的方法在最初的初始化配置章节
这里介绍的WarpGPT已经可以做到非常实用的ChatGPT网页版请求转API的格式,不过并不能完全取代Pandora,如果想要完全取代Pandora可以使用ninja项目:,ninja几乎实现了Pandora的全部功能(包括获取各种Token的接口、转API的格式、WebUI界面等等),因此对于大部分用户的需求来说我们建议直接使用ninja,不需要再考虑Pandora了,除非Pandora后期复出再来一波升级
ninja的使用方式也非常简单,官方文档:,别看文档有点复杂,其实简单来说只有三个步骤,第一步下载对应平台的编译文件,我们就用ubuntu平台的x86_64编译文件,解压后可以得到一个执行文件,直接在当前目录打开终端,用./ninja
命令即可运行,具体来说,一共有以下这些命令(需要注意的是在桌面系统上,比如我使用的Ubuntu22LTS上需要./
前缀才能执行编译文件,但是在某些服务平台上可能不需要,比如官方原文档就没有):
license_id
指定你的License Id,可以在。
遇到大部分报错信息的原因基本都是在修改这两个json文件的时候格式出错了,可以用检查json格式是否正确
这里是我搭建的服务(随时可能删除,仅供参考):
这里再推荐一个proxy的转接服务,也就是将/v1接口转发到/backend-api,以实现用api调用的方式询问真正的网页版ChatGPT(众所周知网页版的会比api版的更聪明一些),项目GitHub地址:,因为此类项目更新较快,官方readme一定要好好看,很多步骤比较细节,截止到现在的操作步骤整理如下:
在这里获取:
上面这几条是官方文档,个人使用时注意额度消耗,可以访问上面的获取地址查看额度,如果想随时随地快捷获取,可以部署下面这个docker项目(原项目Github地址:),注意修改下面的LICENSE_ID:
脚本地址:
我们的备份:
目前最强大的ChatGPT逆向工程