ChatGPT Plus 单账号共享合租服务

OpenAI,chatgpt web share,har,ninja,go-chatgpt-api

Views:  times Updated on June 20, 2024 Posted by elmagnifico on December 22, 2023

Foreword

单个ChatGPT Plus 账号共享合租,各自会话独立分割,就好像一个人使用一样,方便给一个组织或者多人使用。

CWS

源于chatgpt-web-share项目,适用于个人、组织或团队的 ChatGPT 共享方案。共享一个 ChatGPT Plus 账号给多人使用,提供完善的管理和限制功能。

https://github.com/chatpire/chatgpt-web-share

部署

新建目录

cd ~
mkdir cws && cd cws
mkdir -p data/config

配置初始密码

export MONGODB_PASSWORD=password  # MongoDB 密码
export INITIAL_ADMIN_PASSWORD=password  # 初始管理员密码

初步拉取docker镜像和基础设置

docker run -it --rm \
  -v $PWD/data/config:/tmp/config \
  maxduke/chatgpt-web-share:latest \
  python /app/backend/manage.py create_config -O /tmp/config --generate-secrets --mongodb-url "mongodb://cws:${MONGODB_PASSWORD}@mongo:27017" --initial-admin-password "${INITIAL_ADMIN_PASSWORD}" --chatgpt-base-url http://go-chatgpt-api:8080/chatgpt/backend-api/

设置mongodb的属性

echo "TZ=Asia/Shanghai" > .env
echo "MONGO_INITDB_DATABASE=cws" >> .env
echo "MONGO_INITDB_ROOT_USERNAME=cws" >> .env
echo "MONGO_INITDB_ROOT_PASSWORD=$MONGODB_PASSWORD" >> .env

新建docker-compose.yml 文件,如果要兼容老版本的数据库,需要选original的镜像,否则建议直接orignal

version: "3"

services:
  chatgpt-web-share:
    #image: ghcr.io/chatpire/chatgpt-web-share:latest 原版
    #image: maxduke/chatgpt-web-share:orignal 老数据库兼容
    image: maxduke/chatgpt-web-share:latest
    container_name: cws
    restart: unless-stopped
    ports:
      - 5000:80
    volumes:
      - ./data:/app/backend/data
    environment:
      - TZ=${TZ}
      - CWS_CONFIG_DIR=/app/backend/data/config
    depends_on:
      - mongo

  mongo:
    container_name: mongo
    image: mongo:6.0
    restart: always
    # ports:
    #   - 27017:27017
    volumes:
      - ./mongo_data:/data/db
    environment:
      MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}

  go-chatgpt-api:
    container_name: go-chatgpt-api
    image: maxduke/go-chatgpt-api:latest
    ports:
      - 127.0.0.1:8080:8080
    environment:
      - PORT=
      - TZ=Asia/Shanghai
      - PROXY=
      - OPENAI_EMAIL=
      - OPENAI_PASSWORD=
      - CONTINUE_SIGNAL=
      - ENABLE_HISTORY=
      - IMITATE_ACCESS_TOKEN=
    volumes:
      - ./harPool:/app/harPool
    restart: unless-stopped

启动

docker-compose up -d

查看log

docker logs cws -f

没有问题的话,此时以及可以登录cws了

http://<你的服务器 IP>:5000

登录管理员账号,和前面设置的宏密码

admin

ninja

ninja主要用来处理多人时会出现会话验证码等问题的,是必须的,23年3月18日后,ninja方案已经完全失效了,需要用go-chatgpt-api替代方案

由于token和HAR大概是10天过期一次,所以需要频繁操作HAR和token,还是有点烦的

获取HAR

此方法已经失效了

参考 ninja 的文档获取 HAR 文件

https://github.com/gngpp/ninja/blob/main/doc/readme_zh.md

F12捕捉,在GPT官网发送一次会话(GPT4或者3.5)

https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147

image-20231222184343139

将HAR的log文件下载下来

将 HAR 文件上传到新搭建的ninja中,传入到对应的版本中即可

http://你服务器的ip:7999/har/upload

image-20231222184528398

  • 注意这里的删除不生效,还是需要去目录下har中进行删除

Arkose Endpoint

2024年3月18日后,此方法也失效了

具体参考

https://cws-docs.pages.dev/zh/guide/manual.html

需要整个docker更新到0.4.8版本,然后启用Arkose

简单说给ninja一个独立域名,让系统里可以独立访问ninja,反代的话对应也要给出来

然后docker-compose中增加arkose的配置,并且取消掉HAR的配置即可

services:
  ninja:
    image: ghcr.io/gngpp/ninja:latest
    container_name: ninja
    restart: unless-stopped
    command: run --arkose-endpoint https://ninja.yourdomain.com
    ports:
      - "7999:7999"
    environment:
      - TZ=Asia/Shanghai
    #volumes:
    #  - "./har:/root/.ninja"    # <--- 已经不再需要
    networks:
      - cwsnetwork

在 CWS 的设置页面中,勾选“启用前端 Arkose 验证”,并在下方 Arkose Endpoint Base 处填入

 https://你的ninja域名/v2/
  • 注意,这个地址必须是前端可以访问到的地址

测试Arkose按钮,正确的话,就能看到成功的提示了

image-20240218154943411

获取token

访问openai获取access token

https://chat.openai.com/api/auth/session

在 CWS 的后台设置中的 credentials 中的选项一中填入

image-20231222184438411

  • 如果更换了账号,可能会在会话界面报错,建议直接重启docker服务

go-chatgpt-api

由于ninja方案失效了,所以这里替换一个后端即可继续使用,不过go-chatgpt-api也得使用老方法,需要获取har

F12捕捉,在GPT官网发送一次会话(GPT4)

image-20231222184343139

将HAR的log文件下载下来

将 HAR 文件上传到cws/harPool中即可

image-20240409010736832

修改doker-compose内容,用go-chatgpt-api取代原来的ninja

version: "3"

services:
  chatgpt-web-share:
    #image: ghcr.io/chatpire/chatgpt-web-share:latest
    image: maxduke/chatgpt-web-share:orignal
    container_name: cws
    restart: unless-stopped
    ports:
      - 5000:80
    volumes:
      - ./data:/app/backend/data
    environment:
      - TZ=${TZ}
      - CWS_CONFIG_DIR=/app/backend/data/config
    depends_on:
      - mongo

  mongo:
    container_name: mongo
    image: mongo:6.0
    restart: always
    # ports:
    #   - 27017:27017
    volumes:
      - ./mongo_data:/data/db
    environment:
      MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE}
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}

  go-chatgpt-api:
    container_name: go-chatgpt-api
    image: maxduke/go-chatgpt-api:latest
    ports:
      - 127.0.0.1:8080:8080
    environment:
      - PORT=
      - TZ=Asia/Shanghai
      - PROXY=
      - OPENAI_EMAIL=
      - OPENAI_PASSWORD=
      - CONTINUE_SIGNAL=
      - ENABLE_HISTORY=
      - IMITATE_ACCESS_TOKEN=
    volumes:
      - ./harPool:/app/harPool
    restart: unless-stopped

更新docker

docker-compose pull && docker-compose up -d

修改后端API,将原本的ninja7999改为http://go-chatgpt-api:8080/chatgpt/backend-api/

image-20240409010815153

关闭Arkose验证

image-20240409010907822

token的获取还是和之前一样,保存,重启一下,gpt就可以使用了

始皇接口

go-chatgpt-api失效时可以用这个方案

base url修改为始皇的接口,接口请求有限制,每10s10次,始皇接口需要gpt plus才行,如果只是gpt3,那就没必要了

https://chat.oaifree.com/dad04481-fa3f-494e-b90c-b822128073e5/backend-api/

测试

然后就可以在会话管理这里进行消息同步,把所有对话同步过来,然后就可以分配给各个用户了

image-20231222185038669

正常对话

image-20231222185219044

更新

这个项目更新还是比较快的,各种问题还是比较多

docker-compose pull && docker-compose up -d

数据库更新的话,记得打卡运行迁移

image-20240218153406902

常见问题

类似的问题基本都是token有问题或者是HAR有问题,还有就是项目更新了,接口变了,ninja不支持HAR的方式了,等等

image-20240218155237689

OpenAI 授权失败 (403 错误),请联系管理员处理
OpenAI 服务器错误 (500 错误),可能是 OpenAI 服务故障或者模型接口发生变更,请告知管理员

Caddy

安装Caddy 隐藏各种端口

apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

修改caddy配置

vi /etc/caddy/Caddyfile
你的cws域名 {
    reverse_proxy 127.0.0.1:5000
}

import sites/*

重启caddy

systemctl restart caddy

GPT-4-turbo

GPT-4和GPT-4-turbo(也称为GPT-4o)之间有一些关键的区别:

  1. 性能和成本:GPT-4-turbo通常被设计为更快且更高效,这使其在相同的硬件上可以处理更多的请求。它的运行成本通常也更低,因此可能在一些应用中更具经济性。
  2. 响应时间:GPT-4-turbo的响应时间通常比标准的GPT-4更快,这使得它在需要快速响应的应用场景中表现更好。
  3. 模型优化:GPT-4-turbo经过特定的优化,可以在保证输出质量的同时提高处理速度和效率。具体的优化细节可能涉及模型架构的调整、计算资源的更高效利用等。
  4. 应用场景:由于其性能和成本优势,GPT-4-turbo可能更适合用于大规模生产环境,如实时聊天机器人、自动化客户服务等。

虽然具体的技术细节和优化策略是由OpenAI内部决定的,但总体来说,GPT-4-turbo旨在提供一种更高效、更具成本效益的解决方案,同时保持高质量的输出。

image-20240514133021401

在设置中的模型代码映射中,将想使用的模型修改即可,这里把gpt4 mobile变成了gpt4o,就可以直接使用4o模型了

image-20240514133059430

数据截至日期是10月就是4o,如果是12月就是4

image-20240514133114677

Summary

image-20231222185519689

企微的gpt机器人和这个多人分享gpt同时在一个机器上跑,内存消耗的也很少

分享多人使用,还是挺不错的

Quote

https://cws-docs.pages.dev/zh/guide/quick-start.html

https://linux.do/t/topic/53338