日志
本教程已不是博主所知的使用个性化LLMs的最佳实践。请移步至《Docker系列 开源大语言模型UI框架LobeHub》。
- 2024-05-09:优化了部分过时的内容。 chatgpt-web-dev/chatgpt-web – v2.17.0也有不少新特性和优化:为新注册用户设置全局初始次数,并且同步全局次数限制的开关;优化统计图表渲染;修复当用户上传非png图片给vision模型时报错;在聊天使用记录中添加型号名称;增加弹窗功能;快速删除当前消息;添加上传礼品卡页面;渲染LaTeX;支持添加页面水印等。
- 2024-02-18:2024年2月中旬左右linweiyuan/go-chatgpt-api已经不支持Access Token,同期很多类似项目都不能支持。API模式不受影响。详见issue。续观 Σ( ° △ °|||)︴
- 2023-12-31:Kerwin1202/chatgpt-web: v2.13.8。新增单独设置API地址、设置最大上下文计数(默认为20)、允许过滤用户统计、支持自定义聊天模型(比如文心一言)。
- 2023-12-01:鉴于linweiyuan/go-chatgpt-api项目已经archived,用法已固定,因此更新精简相关教程,删除旧教程。
- 2023-11-12:Kerwin1202/chatgpt-web: v2.13.7更新,支持:新模型 gpt-4-1106-preview 和 gpt-4-vision-preview;修复:UI展示。
- 2023-10-29:Kerwin1202/chatgpt-web: v2.13.6更新(太难得了),支持:更改密码和启用2FA、支持编辑用户备注、允许添加新用户、允许关闭登录模式、显示用户角色、在多个打开的浏览器上同步用户信息。修复:调用api时跳过历史记录中已删除的消息。
- 2023-07-10:Kerwin1202/chatgpt-web: v2.13.5+更新,新增模型、用户登录权限相关接口的限流、GUI添加新用户、允许Access Token模式计费。优化NPM设置以达到反爬目的,详见
API自建ChatGPT——NPM设置
。添加反爬后,建议旧API删除并切换新API。 - 2023-07-07:OpenAI全面开放gpt-4-8k,本项目也可以使用这个模型喔!
- 更多历史日志见这里。
前言
感谢Chanzhaoyu/chatgpt-web、Kerwin1202/chatgpt-web和linweiyuan/go-chatgpt-api等项目的开发大大们的无私奉献!欢迎大家关注他们的工作喔 (ฅ´ω`ฅ) 还要感谢
@wang
小伙伴的指点!由于第三方API很容易获得且价格比较便宜,Access Token是一种不再推荐的方式。
我用帐号/密码使用chatGPT已经有一段时间。但是,我有几个私交较密的朋友,他们并不具备使用chatGPT的条件;但又想体验一下这个神奇的工具。因此,最近我专门去了解了一波自建ChatGPT的相关项目。在这里,我总结一下在Linux系统中自建chatGPT的经验。大家有什么好项目也可以在评论区推荐下!
自建OpenAI的ChatGPT一般基于两种授权方式:API或Access Token模式。对本教程而言,这两种方案的区别大致如下:
API | Access Token(非Plus) | |
基本要求 | OpenAI帐号+ 绑定国外的虚拟信用卡 | 仅OpenAI帐号 |
收费情况 | 使用收费 | 免费 |
基础Prompt | 支持 | 不支持 |
超参数支持 | Temprature/Top_p | 不支持 |
单位时间请求数 | 较高,适合多人使用 | 较低,适合个人使用 |
响应速度 | 较快 | 较慢 |
token长度 | 较长 | 较短 |
绕过Cloudflare的反向代理 | 不需要 | 需要 |
稳定性 | 较高 | 较低 |
我使用的项目是Kerwin1202/chatgpt-web,基于MongoDB后端,支持API或Access Token模式。目前的功能包括:多用户登录/注册、数据库管理、对话云端保存和管理、敏感词管理、自定义提示词、多Key轮询、用户管理、用户统计、自定义模型等(v2.13.0起)。最重要的是,该项目是完全开源和免费的!关于安全性,我只能说我暂时没有发现这个方案有主观恶意行为;API并没有异常扣费。
我的自建chatGPT(gpt-3.5-turbo
)在PC端的界面大致如下(基于API):
在移动端的界面大致如下(基于Access Token):
值得注意的是,只要你的API支持,这个方案也支持GPT-4——由OpenAI公司在2023年3月14日发布的一个比gpt-3.5更强大的语言模型。想进一步了解GPT-4的小伙伴可以看“跟李沐学AI”的视频:GPT-4论文精读。2024-04起还支持GPT-4-Vision模型:
下面咱们开始布署自建ChatGPT吧。Go, Go, Go!
准备工作
你需要使用非中国大陆和香港的IP访问openai.com,具体比较复杂。如果你不知道我在说什么,看到这里你就可以停了
如果你使用Access Token的方式,要特别注意本文的Access Token自建ChatGPT
小节;这部分准备工作可以忽略。后面的内容最好都看看,提高对该项目的熟悉程度。
由于前段时间我的个人API被封了,感觉自己折腾API还是不太稳定。经小伙伴推荐,我找了一个第三方的API——OhMyGPT。它整合了多种模型的API,和chatgpt-web这种应用搭配还是挺合适的:
个人用起来响应速度还可以。感兴趣的话大家可以试试看,有免费额度。
测试环境
我的自建chatGPT布署在博客所在的RackNerd VPS上:
uname -a # Linux racknerd-XXXXX 5.4.0-28-generic #32-Ubuntu SMP Wed Apr 22 17:40:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
docker --version # Docker version 23.0.3, build 3e7cbfd
docker-compose --version # Docker Compose version v2.4.1
我的VPS上搭载了各种docker应用,有20个docker stacks,合计47个containers,包括两个自建的chatGPT(一个用Access Token一个用API)。如果你还没有自己的VPS,强烈推荐选购一台喔!
如无特殊说明,本文所有代码都是使用root用户运行。这是由于数据库往往需要部分root权限才可以成功,为了避免权限相关的bug,咱们还是使用root用户比较稳。高手可以无视此限制。
本文所使用的chat-gpt web项目是:
本文所使用的反向代理项目是:
API自建ChatGPT
不了解docker的小伙伴请先看:《Docker系列 配置Docker全局环境》;《Docker系列 了解Docker Compose的配置文件》。
完成准备工作后,我们通过docker自建ChatGPT。我目前使用的项目是: Kerwin1202/chatgpt-web,它提供了使用MongoDB托管后台数据的接口。该项目衍生于Chanzhaoyu/chatgpt-web: 用 Express 和 Vue3 搭建的 ChatGPT 演示网页——仅提供了一个ChatGPT前端的Demo,比较原始。
另外,对于使用OpenAI API的朋友如果是在家里搭建的,一定要关注自己节点的可靠性——这是因为https请求应该会附带API相关的明文信息,理论上对方只要设定一些筛选规则就可以获取你使用的API,从而造成API泄露。这也是为什么我是在Racknerd VPS里搭建自建ChatGPT的原因,除了网络连接问题,最重要的考量其实是安全性。如果你觉得某个API不安全了,请及时删除它喔!
文件夹和端口
首先,我们新建工作目录:
work=~/docker/kerwin_chatgpt
mkdir -p $work; cd $work
该目录用于保存docker stack的重要数据,便于迁移和备份。
如果你也使用了ufw,应该开放一下端口(没用防火墙的可以忽略此步):
sudo ufw allow 1004/tcp comment 'kerwin_chatgpt' && sudo ufw reload
sudo ufw allow 1005/tcp comment 'kerwin_chatgpt GUI' && sudo ufw reload
如果你的VPS后台还有防火墙,也要相应开放(没用防火墙的可以忽略此步)。
yml文件
这里有很多帐户和密码,大家多关注:
OPENAI_API_KEY
:OpenAI后台的API key。SMTP
系列:这是给注册用户发送邮件时用的。AUTH_SECRET_KEY
:源项目是登陆密钥。这里暂时不知道有什么用。注册过程似乎用不到AUTH_SECRET_KEY
选项,但必须要提供,否则可能报错。MongoDB
:数据库名chatgpt
,用户名user01
,密码password01
。这里要注意mongodb url的书写格式——mongodb://user01:password01@database:27017
,其中database
是该stack中数据库的“小名”,而27017
是暴露于stack局域网中的端口号,是默认端口,我也没有改动。如果这两个参数你都使用了自定义,应该要做相应改动。Mongo-Express
:用户名user02
,密码password02
。这是登陆MongoDB Express时用的。如果不设置,任何知道数据库网址的人都可以访问数据库——这是十分危险的!
无论什么时候,都不建议大家使用弱密码。我推荐使用自建bitwarden进行密码管理。希望大家要做好安全防护,不然被人扫描出来进行弱密码暴破甚至是直接登陆就不好了。除了密码外,基于Nginx Proxy Manager的https也是很关键的。
如果你用过mongo
或mongo-express
镜像,可以改为自己正在使用的tag
,这样比较节省磁盘空间。有按需修改
提示的参数也要按自己的实际情况修改。
上面的帐号/密码理清后,我们新建docker-compose.yml
文件:
vi $work/docker-compose.yml
kerwin1202/chatgpt-web:v2.12.5是我比较喜欢的版本,bug不多;如果大家不喜欢latest也可以用它。写入以下内容:
version: '3'
services:
app:
image: kerwin1202/chatgpt-web:latest
restart: unless-stopped
ports:
- 1004:3002
depends_on:
- database
environment:
TZ: Asia/Shanghai
# API or Access Token模式
OPENAI_API_MODEL: ChatGPTAPI # 在较新版本时可能需要该参数
# 默认模型。默认是gpt-3.5-turbo
# OPENAI_API_MODEL: gpt-3.5-turbo-0613
# 从OpenAI后台里获得
OPENAI_API_KEY: sk-XXX # 按需修改
# 访问jwt加密参数,可选 不为空则允许登录 同时需要设置 MONGODB_URL
AUTH_SECRET_KEY: 12345678abcdefg # 按需修改
# 超时,单位毫秒,可选
TIMEOUT_MS: 60000
# 网站名
SITE_TITLE: APIChat # 按需修改。写个自己喜欢的名字就行
# mongodb 的连接字符串
MONGODB_URL: 'mongodb://user01:password01@database:27017' # 按需修改
# 网站是否开启注册
REGISTER_ENABLED: true # 完成注册后,可以直接在前端页面关闭注册。
# 开启注册之后 网站注册允许的邮箱后缀 如果空 则允许任意后缀
REGISTER_MAILS: '@qq.com,@gmail.com,@163.com' # 按需修改
# 加密盐。算法: echo -n 'passwordsalt' | md5sum | cut -c 1-32
PASSWORD_MD5_SALT: tNJ%M&D # 按需修改
# 开启注册之后 超级管理员的邮箱
ROOT_USER: [email protected] # 按需修改
# 前面一定要有https://或http://,且末尾不含/。注册的时候发送验证邮箱使用。
SITE_DOMAIN: https://chatgpt.hwb0307.com # 按需修改
# 开启注册之后 发送验证邮箱配置
SMTP_HOST: smtp.qq.com
SMTP_PORT: 465 # 也可以尝试587
SMTP_TSL: true
SMTP_USERNAME: [email protected] # 按需修改
SMTP_PASSWORD: xxxxxxxx # 按需修改
links:
- database
database:
# image: mongo:3.6 # 为了支持v2.13.0+版本,不再使用mongodb 3.x
image: mongo:4.0
restart: unless-stopped
expose:
- '27017'
volumes:
- ./mongodb:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: user01 # 按需修改
MONGO_INITDB_ROOT_PASSWORD: password01 # 按需修改
MONGO_INITDB_DATABASE: chatgpt
gui:
image: mongo-express:1.0.0-alpha
restart: unless-stopped
ports:
- "1005:8081"
environment:
# 选择主题。详见: http://codemirror.net/demo/theme.html
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
# 数据库信息
ME_CONFIG_BASICAUTH_USERNAME: user02 # 按需修改
ME_CONFIG_BASICAUTH_PASSWORD: password02 # 按需修改
ME_CONFIG_MONGODB_URL: 'mongodb://user01:password01@database:27017'
ME_CONFIG_MONGODB_ENABLE_ADMIN: true # 可能不是必要的
ME_CONFIG_MONGODB_ADMINUSERNAME: user01 # 可能不是必要的
ME_CONFIG_MONGODB_ADMINPASSWORD: password01 # 可能不是必要的
请注意,SITE_DOMAIN
参数中https://chatgpt.hwb0307.com
这个域名是不存在的,你应该改成自己的域名。另外,听说有小伙伴用http的时候存在新用户无法正常注册和验证。但出于安全性考虑,你应该使用https。
这个docker-compose.yml要自定义的东西还挺多的。如果大家使用时有什么疑问,可以在评论区留言!
最后直接上线即可:
cd $work && docker-compose up -d
若想更新chatgpt-web
,只要依次运行下列命令:
docker-compose down # 下线
docker-compose pull # 拉取chatgpt-web latest镜像。mongo/mongo-express用的是固定tag,一般不会更新
docker-compose up -d # 重新上线
完成更新后,旧镜像不会自动删除,而是回退为其它tag或标记为none
。这时可以手动删除,比如用docker rmi xxx
或者去Portainer后台删除。
其它docker相关操作和一般的docker应用是类似,这里就不细说了。
NPM设置
不了解Nginx Proxy Manager(NPM)用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。
准备两个域名并在域名托管商(比如Cloudflare)的后台完成解析。比如,使用chatgpt.hwb0307.com
和chatgptgui.hwb0307.com
:
chatgpt.hwb0307.com
给chatGPT的前端使用,反代地址http://172.17.0.1:1004
chatgptgui.hwb0307.com
给chatGPT的后端使用,反代地址http://172.17.0.1:1005
反代过程最好添加一些反爬的nginx配置(感谢@Eric Erek
的提醒),比如:
if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot")
{
return 403;
}
填到Advanced——Custom Nginx Configuration
即可:
我使用wget测试的效果如下:
最后,ChatGTP-Web的前端基本界面如下:
后端数据库界面如下:
简单使用
注册
第一个用户默认是管理员用户,请使用docker-compose.yml文件里约定的管理员邮箱注册,并在邮箱里点击验证链接即可。其它用户的注册也是类似的,点击注册即可。不过,由于我的用户都是家人和同事,我个人比较喜欢直接使用数据库添加非邮箱注册的用户(详见数据库后端——添加非注册用户
)。
如果你的目标用户已经注册完毕,你可以在docker-compose中设置REGISTER_ENABLED: false
,重启docker stack生效。当然,可能在网站配置
里设置更合理(见后面)。
总之,这些配置和docker-compose.yml文件里定义的参数是相一致的。当然,这部分我觉得还不太合理——可能经常变化的参数不应该在docker-compose.yml里定义。
连续/非连续对话
这里提醒下,对话输入框左边有个时钟标记,绿色时聊天会携带之前的对话信息;红色时则不会。后者会比较节省token。这个技巧是非常实用的——如果你只需要ChatGPT一问一答,建议点红该时钟:
从
基础Prompt
在v2.12.4后,Kerwin1202/chatgpt-web开始支持个性化设置某个对话的基础Prompt:
这是一个非常实用的功能。每个对话都可以实现一个基础角色。 默认是这样的:
You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.
比官方强太多啦!
复制和导出
导出目前只支持图片功能,希望之后可以支持更多格式(最好有markdown这种可编辑文本)。当然,复制时的格式是markdown/html格式的 (ฅ´ω`ฅ)
如果你不知道什么是markdown,你就要去我的这篇文章里补补课了: Typora 地表最强Markdown编辑器之一。半个小时入门markdown应该问题不大!
更改默认模型
随着OpenAI的可用模型越来越多,我们可能想会指定一下特别的模型作为默认模型:
目前只要在对话里直接选择即可;它是一个全局设置,所有的对话都会改为新选择的模型:
这里我更改为gpt-3.5-turbo-0613
,一个在2023年6月中旬提出的支持function calling功能的新chatGPT模型。
另外,你也可以直接去数据库后台(chatgpt——config
)修改:
这对于新用户来说可能是有用的。
设置
所有的设置都可从左下角的设置按钮进入查看:
总览
总览界面基本上和数据库内容是一一对应的:
总览里还可以导入/导出聊天记录(以.json
格式),也是挺不错的!
我这里简单展示其它选项的内容:
高级
设定角色。一般是默认的。
在较新版本(2023-04-16之后
)中还支持Temprature
和Top_p
超参数:
一般来说,Temperature
和 Top-p
是生成文本任务中可以影响模型生成结果的超参数。
- Temperature 是一个控制输出概率分布平滑程度的指标。具体来说,它可以被视为一个用于在概率分布上取样的“温度值”,当温度较高时,模型会生成更加多样化和出奇的结果;温度较低时,则会生成更加保守和可预测的结果。
- Top-p 参数是一个控制生成文本长度和多样性的参数。它基于概率累积函数(CDF)来截取最高概率的 token,防止一些重复或者不好的词语出现。 在这种情况下, 模型会根据当前概率分布中的 token 累计概率进行采样,然后选择累计概率达到 p 的所有 token 中的一个作为下一个输出token。 当p接近于1时,生成的文本就趋向于确定性,而当p逐渐减小时,生成的文本将变得更加多样化。
大家可以根据实际需要进行调整。你也可以问一下ChatGPT噢 (ฅ´ω`ฅ)。
统计
v2.13.0+以后才有的特性
有一个统计token的可视化图表,不过目前暂不支持指定用户。值得期待!
v2.13.8以后支持某个用户的用量查看,感觉棒棒嗒 (~ ̄▽ ̄)~
基本配置
这里展示了API的余额,它并不是当月余额,而是当月限额-全部用额(这个设定不太合理)。
Api模型建议使用gpt-3.5-turbo
,这也是目前最流行的gpt-3.5模型。其它选项按需要填写即可。如果你使用https/socks代理,一定要明确该代理是安全的!
从2.12.6版本起,开发者新增了接口类型选项。不过,我还是习惯将API和Access Token分开为2个docker stack管理——我只给小伙伴用API,这样更加稳定;我自己则两者都用。
网站配置
建议注册登录
功能最好不要点暗(在2023-04-16之后的新版本中已不可操作,这是对的),否则容易出bug,导致所有用户无法登陆:
数据库里直接修改似乎无法生效。感觉这是bug,或者是缓存问题,我暂时还没有头绪:
此外,点亮新用户
表明你开放注册;点亮新用户审核
表明该用户需要你审核才可以使用。如果你开放注册,一般建议这两者都要点亮。当新用户注册后,他会在自己的邮箱里收到验证邮件。点击验证后,管理员的邮箱里也会收到审核邮件,需要点击审核链接。完成这两步后,新用户才可以登陆和使用。
如果你不想开放注册,将新用户
点暗即可。即时生效,不用重启docker stack。
邮箱配置
密码是SMTP专用密码,不是QQ邮箱密码。关于SMTP密码的获取,我在《Docker系列 WordPress系列 WP Mail SMTP插件》也有提及,大致的步骤是需要向腾讯给定的电话号码发送一条短信,然后点击获取。设置好SMTP信息,你可以点测试
给自己发一封邮件,看看是否可以收到。
敏感词审核
v2.12.x以后版本才支持
本项目有敏感词审核功能,不过我没怎么用过:
用户管理
v2.13.x以后版本才支持
本项目支持简单的用户管理功能,后面应该会做得更好(v2.13.5+起管理员可以直接在GUI里添加新用户):
Key管理
v2.13.x以后版本才支持
支持多个Key的管理,某个Key可以指定一到多个模型。这个功能以后可以随便扩展至非ChatGPT模型,比较看好:
v2.13.8后支持自定义模型:
提示词商店
它内置了一些提示词(Prompts)链接:
有个英文版的Prompts项目也挺不错: f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.,大家可关注下。这些项目基本上涵盖了日常生活和工作中比较常用的功能。不过,一般我都是比较喜欢自己写Prompts。这也是可玩性的一部分吧!以后有机会,我也总结一下大佬们一般是怎么写Prompts的。讲究还挺多 (ฅ´ω`ฅ)
2023-04-17后chatgpt-web
有一个比较方便的、不是json格式的提示词添加功能,大家也可以试试看:
另外还要吐槽下,Prompts似乎是仅在浏览器里缓存的,更新缓存或cookie后就没了,还要重新添加。这种设定感觉不太合理,希望作者后续可以改进。
数据库后端
备份数据和恢复数据只是演示。大家按需测试即可。
基本架构
根据docker-compose的设定,该stack的数据库名为chatgpt
,它目前包含chat
、chat_room
、config
和user
等4个collection:
较新的版本里还有统计token数量的collection——chat_usage
。每个collection都是由若干document组成。比如,chat
包含每一个对话(即document):
{
_id: ObjectId('6434eb321da04a227fxxxxxx'),
status: 1,
roomId: 1681189xxxxxx,
uuid: 1681189xxxxxx,
prompt: '您好',
options: {
messageId: 'chatcmpl-740WYC6ne0yHRvyRl8D3IHjxxxxxx'
},
dateTime: 1681189xxxxxx,
response: '你好!有什么我能为你效劳的吗?'
}
chatroom
包含某个聊天房的信息:
{
_id: ObjectId('643509fc02c3279e5dxxxxxx'),
status: 0,
userId: '6434ea07160af6b018xxxxxx',
title: '美波小姐',
roomId: 1681197xxxxxx
}
config
包含了前端应用的基本设置,目前仅包含1个document:
{
_id: ObjectId('64350bb802c3279e5xxxxxx'),
timeoutMs: 60000,
apiKey: 'sk-xxxxxx', // OpenAI API Key
apiDisableDebug: false,
accessToken: null,
apiBaseUrl: null,
apiModel: 'gpt-3.5-turbo', // 用了什么模型
reverseProxy: null,
socksProxy: '',
socksAuth: '',
httpsProxy: null,
siteConfig: {
siteTitle: 'BenszChat',
loginEnabled: true,
loginSalt: 'xxxxxx', // 盐值用于加密用户密码
registerEnabled: false,
registerReview: true,
registerMails: '@qq.com,@gmail.com,@163.com',
siteDomain: 'https://xxxxxx.hwb0307.com' // 自建chatGPT网址
},
mailConfig: {
// SMTP信息
smtpHost: 'smtp.qq.com',
smtpPort: 465,
smtpTsl: true,
smtpUserName: '[email protected]',
smtpPassword: 'xxxxxx'
}
}
user
的具体细节见“添加非注册用户
”。
添加非注册用户
由于我们使用了数据库托管,所以可以轻易地操作数据库以生成新用户。这里我简单展示如何新增一个用户。
首先,我们登陆MongoDB,进入chatGPT
数据库的user
collection:
这里我创建了一个测试用户[email protected]
。我们双击该记录查看具体信息,如下:
{
_id: ObjectId('6434ececdf45624abb1d190a'),
name: '[email protected]',
email: '[email protected]',
password: '36d78f8755a4d79de6b21034f7bbb207',
status: 0,
createTime: '4/11/2023, 1:23:24 PM',
verifyTime: '4/11/2023, 1:24:23 PM'
}
其中_id
就是代表用户ID,类似于身份证号,只要与现存帐号不一样即可。name
是用户名,email
是用户邮箱。status
暂时不知道是什么。createTime
和verifyTime
代表创建和验证时间,差不多是间隔1分钟左右;没研究过这个时间间隔有没有要求,大家可以试试看。
这里的password
其实是一段基于md5的哈希值。假设密码是a
,盐值(即docker-compose文件里的PASSWORD_MD5_SALT
参数的值)是tNJ%M&D
,则password的取值为:
# Linux Shell命令。 rawPassword代表用户密码;salt代表盐值;使用时替换为自己的值即可。
rawPassword='a'; salt='tNJ%M&D'
echo -n ${rawPassword}${salt} | md5sum | cut -c 1-32
输出结果为a3fedefc90692555644896f3c41c26eb
,与我的记录是不同的。这是因为每个人的密码和盐值都是不同的,按需生成即可。
只要我们确定好这些参数,再左击New Document
新增一条记录并保存,这样就可以在不开放注册的情况下添加用户:
大家也可以尝试一下如何批量生成新用户喔!
备份数据
备份和恢复的过程和mysql数据库是十分相似的。
一般来说,我们可以利用Mongo Express
单独备份某个collection:
但我还是建议直接使用mongoDB默认的方式备份整个数据库。
首先,我们在映射到宿主机的mongodb
文件夹中创建一个文件夹以托管备份文件:
# 思考一下这里的路径为什么是/data/db/?
docker exec kerwin_chatgpt-database-1 mkdir -p /data/db/benszbackup
然后,备份chatGPT的数据库:
# docker exec <数据库container名> mongodump -h localhost:27017 -d <chatgpt数据库名> -u <chatgpt数据库用户> -p <chatgpt数据库密码> -o /data/db/benszbackup --authenticationDatabase admin
# 上述信息按实际情况修改
docker exec kerwin_chatgpt-database-1 mongodump -h localhost:27017 -d chatgpt -u user01 -p password01 -o /data/db/benszbackup --authenticationDatabase admin
输出类似:
2023-04-11T23:50:29.532+0000 writing chatgpt.chat to
2023-04-11T23:50:29.533+0000 writing chatgpt.chat_room to
2023-04-11T23:50:29.533+0000 writing chatgpt.user to
2023-04-11T23:50:29.534+0000 writing chatgpt.config to
2023-04-11T23:50:29.541+0000 done dumping chatgpt.chat_room (12 documents)
2023-04-11T23:50:29.543+0000 done dumping chatgpt.chat (55 documents)
2023-04-11T23:50:29.548+0000 done dumping chatgpt.config (1 document)
2023-04-11T23:50:29.553+0000 done dumping chatgpt.user (6 documents)
就代表备份成功了!我们看看备份了啥:
# docker exec kerwin_chatgpt-database-1 ls -hlt /data/db/benszbackup/<chatgpt数据库名>
docker exec kerwin_chatgpt-database-1 ls -hlt /data/db/benszbackup/chatgpt
输出类似于:
-rw-r--r-- 1 root root 585 Apr 12 07:56 config.bson
-rw-r--r-- 1 root root 1.4K Apr 12 07:56 user.bson
-rw-r--r-- 1 root root 54K Apr 12 07:56 chat.bson
-rw-r--r-- 1 root root 1.4K Apr 12 07:56 chat_room.bson
-rw-r--r-- 1 root root 126 Apr 12 07:56 chat.metadata.json
-rw-r--r-- 1 root root 131 Apr 12 07:56 chat_room.metadata.json
-rw-r--r-- 1 root root 128 Apr 12 07:56 config.metadata.json
-rw-r--r-- 1 root root 126 Apr 12 07:56 user.metadata.json
主要就是一些json文件和相应的metadata。
恢复数据
假设,以后我们在一个叫test_mongodb
的文件夹中恢复数据:
work2=~/docker/test_mongodb
mkdir -p $work2; cd $work2
根据以前的内容,咱们创建类似的docker-compose.yml
:
vi $work2/docker-compose.yml
填入类似内容(先不包含chatgpt-web镜像,这样可以避免来自chagpt-web对数据的干扰):
version: '3'
services:
database:
image: mongo:3.6
restart: unless-stopped
expose:
- '27017'
volumes:
- ./mongodb:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: user01
MONGO_INITDB_ROOT_PASSWORD: password01
MONGO_INITDB_DATABASE: chatgpt
gui:
image: mongo-express:1.0.0-alpha
restart: unless-stopped
ports:
- "1005:8081"
environment:
# 选择主题。详见: http://codemirror.net/demo/theme.html
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
# 数据库信息
ME_CONFIG_BASICAUTH_USERNAME: user02
ME_CONFIG_BASICAUTH_PASSWORD: password02
ME_CONFIG_MONGODB_URL: 'mongodb://user01:password01@database:27017'
ME_CONFIG_MONGODB_ENABLE_ADMIN: true # 可能不是必要的
ME_CONFIG_MONGODB_ADMINUSERNAME: user01 # 可能不是必要的
ME_CONFIG_MONGODB_ADMINPASSWORD: password01 # 可能不是必要的
这时在新的mongo-express观察一下数据库的组成:
由于是初始化状态,这里并没有关于chatgpt的任何数据。我们尝试恢复数据 (ฅ´ω`ฅ)
首先,将之前的chatgpt备份文件夹复制到映射到宿主机的mongodb
目录里
cp -r <之前的chatgpt备份文件夹> ~/docker/test_mongodb/mongodb
直接恢复数据:
# docker exec test_mongodb-database-1 mongorestore -h localhost:27017 -d <chatgpt数据库名> -u <chatgpt数据库用户> -p <chatgpt数据库密码> /data/db/<chatgpt备份文件夹名> --authenticationDatabase admin
docker exec test_mongodb-database-1 mongorestore -h localhost:27017 -d chatgpt -u user01 -p password01 /data/db/chatgpt --authenticationDatabase admin
输出类似于:
2023-04-12T00:10:19.121+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2023-04-12T00:10:19.121+0000 building a list of collections to restore from /data/db/chatgpt dir
2023-04-12T00:10:19.122+0000 reading metadata for chatgpt.chat from /data/db/chatgpt/chat.metadata.json
2023-04-12T00:10:19.122+0000 reading metadata for chatgpt.user from /data/db/chatgpt/user.metadata.json
2023-04-12T00:10:19.123+0000 reading metadata for chatgpt.chat_room from /data/db/chatgpt/chat_room.metadata.json
2023-04-12T00:10:19.224+0000 reading metadata for chatgpt.config from /data/db/chatgpt/config.metadata.json
2023-04-12T00:10:19.224+0000 restoring chatgpt.chat_room from /data/db/chatgpt/chat_room.bson
2023-04-12T00:10:19.301+0000 restoring chatgpt.chat from /data/db/chatgpt/chat.bson
2023-04-12T00:10:19.369+0000 restoring chatgpt.user from /data/db/chatgpt/user.bson
2023-04-12T00:10:19.515+0000 no indexes to restore
2023-04-12T00:10:19.515+0000 finished restoring chatgpt.chat_room (12 documents)
2023-04-12T00:10:19.515+0000 no indexes to restore
2023-04-12T00:10:19.515+0000 finished restoring chatgpt.user (6 documents)
2023-04-12T00:10:19.515+0000 restoring chatgpt.config from /data/db/chatgpt/config.bson
2023-04-12T00:10:19.516+0000 no indexes to restore
2023-04-12T00:10:19.516+0000 finished restoring chatgpt.chat (55 documents)
2023-04-12T00:10:19.517+0000 no indexes to restore
2023-04-12T00:10:19.517+0000 finished restoring chatgpt.config (1 document)
2023-04-12T00:10:19.517+0000 done
此时,在新的Mongo Express
里刷新数据库,可见已经完全恢复:
之后下线整个stack,在新的docker-compose.yml
里加入chatgpt-web
的相关内容后重新上线,整个应用即可恢复如初。
Access Token自建ChatGPT
请特别关注“合并方案”。对大多数普通用户来说,这应该是使用Access token和反向代理的最佳实践之一。如果正常使用过程中失效(比如
fetch failed
等报错),重启反向代理的stack或更新镜像后再重启stack即可。
对于没有API的小伙伴们,kerwin1202/chatgpt-web
也是完全支持Access Token
的喔!如果玩过阿里云WebDav的小伙伴应该对Access Token
不陌生。
Access Token是一种常用的API访问方式,它可以被用来授权第三方应用或用户访问某个受保护的资源。Access Token通常由授权服务器签发,以表示授权的有效性和权限范围。我们在OpenAI官方网站登陆帐号后,就会获得一个官方颁发的Access Token,它是一个比较长的随机字符串。我们访问OpenAI时,浏览器使用Access Token作为凭证,向OpenAI的资源服务器请求访问受保护的资源。一般来说,Access Token具有时效性,其有效期由授权服务器设置,并且在一定时间后会自动失效(OpenAI是15-30天);失效后往往会有类似[OpenAI]提供错误的API密钥 | Incorrect API key provided
之类的error信息。此外,Access Token还可以被撤销,例如当用户取消了对第三方应用的授权时。通俗地讲,只要你的第三方应用包含了浏览器user-agent或其它header信息,Access Token即可被用于模拟人类登陆浏览器的行为。
OpenAI的Access Token可以通过访问https://chat.openai.com/api/auth/session(返回的json文件中有一个accessToken
字段)或者F12自己在application里找。由于是拟人登陆,所以OpenAI后台会保存Access Token相关的聊天数据。由于目前gpt-3.5对登陆用户是免费开放的,所以使用Access Token
暂时也是免费的 (ฅ´ω`ฅ) 不过稳定性就很难说了,只能说试试看。有人说不好用,有人说还行。我使用的时候就经常出现ChatGPTUnofficialProxyAPI.sendMessage: conversationId and parentMessageId must both be set or both be undefined
这种报错;而且同时使用多个对话不如API稳定。使用Access Token
对于VPS的位置不太敏感——只要可以和OpenAI的反向代理正常连接即可。
在VPS里自建反向代理
适合有国外VPS的小伙伴尝试
由于存在Cloudflare验证,需要建立一个反向代理绕过验证才可以使用类似API的方式访问chatGPT。这是一些比较常用的公共反向代理:
- pengzhile提供:https://ai.fakeopen.com/api/conversation
- acheong08提供:https://bypass.churchless.tech/api/conversation。似乎已经失效?
一般来说,公共反向代理都不太稳。因此,有能力的小伙伴建议自建反向代理,比如基于linweiyuan/go-chatgpt-api项目或linweiyuan/java-chatgpt-api项目。应该还有其它类似的项目,小伙伴有了解的可以在评论区推荐下。一般来说,这些方法对VPS的IP纯净程度要求较高;但使用WARP的话对IP的纯净度要求应该会变低。总体上,自建反向代理的稳定性比一些公共地址更高。
这里我们以linweiyuan/go-chatgpt-api为例,其实项目README也说得挺清楚了。另外一位小伙伴的文章dqzboy/ChatGPT-Porxy: ChatGPT Porxy也写得不错,可以看看。具体如下:
首先,创建工作目录:
work3=~/docker/go-chatgpt-api
mkdir -p $work3; cd $work3
防火墙方面(这里的教程仅限Ubuntu的ufw
;其它Linux系统自己想办法),一般使用这个规则就够了:
sudo ufw allow 8080/tcp comment 'proxy for chatgpt access token' && sudo ufw reload
这个8080
,如果大家映射到宿主机的是其它端口,相应改动即可。另外,这个防火墙的规则并不能阻止某些陌生IP白嫖我们的节点。我觉得比较好的方法应该是将反向代理建在chatgpt-web的局域网中,比如下面的“合并方案”;或者是像《Docker系列 两大神器NPM和ddns go的安装》的“NPM——注意事项——防火墙
”小节所描述的方案。
下面,我介绍几种经实测可行的自建反向代理方案,大家酌情选用其中之一即可。
无WARP布署
新建docker-compose.yml文件并填入以下内容:
services:
go-chatgpt-api:
container_name: go-chatgpt-api
image: linweiyuan/go-chatgpt-api:latest # 最新
ports:
- 8080:8080 # 宿主机8080端口可按需改为其它端口
environment:
- GIN_MODE=release
# - GO_CHATGPT_API_PROXY=
restart: unless-stopped
完成部署后,我们查看日志:
docker-compose logs -f
平时可以这样监控访问记录:
docker logs -f go-chatgpt-api
# [GIN] 2023/04/19 - 23:38:00 | 200 | 21.785759553s | 192.168.0.1 | POST "/conversation"
这个200
就代表成功访问。
这时,该自建IP的访问地址为http://<vps-ip>:8080/chatgpt/backend-api/conversation
,它可以作为下面的docker-compose.yml中API_REVERSE_PROXY
参数的值。如果你在浏览器访问该地址,会出现{"errorMessage":"Missing accessToken."}
的提示,这是正常的,不用惊慌(具体见该issue)。这里提个小问题:出于安全性要求,有无必要为该反向代理专门反代一个https地址?大家可以将答案留在评论区内喔!
请注意,如果该反向代理和你的chatgpt-web布署在同一个docker网段,你还可以使用局域网地址: http://172.17.0.1:8080/chatgpt/backend-api/conversation
。具体原理为:docker在安装时会自动创建一个名为docker0
的虚拟网络接口,并分配地址172.17.0.1
作为网桥的默认网关地址。
基于WARP布署
如果显示Access denied
之类的报错,提示IP被屏蔽。这时可以使用Cloudflare WARP——Cloudflare开发的VPN工具。基于Cloudflare的全球边缘网络,WARP将用户的网络流量路由到Cloudflare分布在世界各地的海量服务器上来保护用户的网络连接。当用户使用WARP连接到Cloudflare的VPN服务器时,其网络流量将会被路由到最接近目标网站的服务器上,从而可以绕过目标网站所设置的地理位置限制和IP封锁。此外,WARP还使用了一些高级的加密和安全措施来保护用户的数据和隐私。这些措施包括TLS 1.3加密、AES-256-GCM加密等。这些措施可以确保用户的网络连接和数据是安全的,并且不会被恶意方获取和利用。
我的RackNerd VPS就是基于WARP成功自建反向代理的:
services:
go-chatgpt-api:
container_name: go-chatgpt-api
image: linweiyuan/go-chatgpt-api:latest # 最新
ports:
- 8080:8080 # 宿主机8080端口可按需改为其它端口
environment:
- GIN_MODE=release
- GO_CHATGPT_API_PROXY=socks5://chatgpt-proxy-server-warp:65535
depends_on:
- chatgpt-proxy-server-warp
restart: unless-stopped
chatgpt-proxy-server-warp:
container_name: chatgpt-proxy-server-warp
image: linweiyuan/chatgpt-proxy-server-warp
environment:
- LOG_LEVEL=INFO
restart: unless-stopped
与chatgpt-web同网段
推荐比较了解docker的小伙伴选用。一种更加安全的使用反向代理的方法。
在本地Linux系统自建反向代理
适合本地有可通过帐号/密码访问OpenAI的节点、有长期开启的Linux主机/虚拟机、对docker较熟悉的小伙伴
有些朋友问:如果我在本地可以访问OpenAI,并且有个Linux系统(比如NAS或虚拟机),是否可以自建一个类似WARP的绕过检查的反向代理?答案是肯定的。具体步骤如下:
Access Token相关Docker Compose
关于Access Token功能的最新进展可关注该issue: Bug: 使用access token时存在 Cannot read properties of undefined (reading ‘choices’) 报错 · Issue #24 · Kerwin1202/chatgpt-web。
建议优先尝试latest版本 (ฅ´ω`ฅ) Access Token的yaml内容和API类似:
version: '3'
services:
app:
image: kerwin1202/chatgpt-web:latest
restart: unless-stopped
ports:
- 1004:3002
environment:
TZ: Asia/Shanghai
# 访问jwt加密参数,可选 不为空则允许登录 同时需要设置 MONGODB_URL
AUTH_SECRET_KEY: 12345678abcdefg # 按需修改
# API or Access Token模式
OPENAI_API_MODEL: ChatGPTUnofficialProxyAPI # 在较新版本时需要该参数
# 你的openai access token
OPENAI_ACCESS_TOKEN: xxx # 这一串很长很长的。
# OpenAI绕过Cloudflare验证的反向代理
# API_REVERSE_PROXY: https://bypass.churchless.tech/api/conversation
API_REVERSE_PROXY: 你的自建反向代理或某个可用反向代理
# 超时,单位毫秒,可选
TIMEOUT_MS: 60000
# 网站名
SITE_TITLE: TokenChat # 按需修改。写个自己喜欢的名字就行
# mongodb 的连接字符串
MONGODB_URL: 'mongodb://user01:password01@database:27017' # 按需修改
# 网站是否开启注册
REGISTER_ENABLED: true # 完成注册后,可以在前端页面关闭注册
# 开启注册之后 网站注册允许的邮箱后缀 如果空 则允许任意后缀
REGISTER_MAILS: '@qq.com,@gmail.com,@163.com' # 按需修改
# 加密盐。算法: echo -n 'passwordsalt' | md5sum | cut -c 1-32
PASSWORD_MD5_SALT: tNJ%M&D # 按需修改
# 开启注册之后 超级管理员的邮箱
ROOT_USER: [email protected] # 按需修改
# 前面一定要有https://或http://,且末尾不含/。注册的时候发送验证邮箱使用。
SITE_DOMAIN: https://chatgpt.hwb0307.com # 按需修改
# 开启注册之后 发送验证邮箱配置
SMTP_HOST: smtp.qq.com
SMTP_PORT: 465 # 也可以尝试587
SMTP_TSL: true
SMTP_USERNAME: [email protected] # 按需修改
SMTP_PASSWORD: xxxxxxxx # 按需修改
links:
- database
depends_on:
- database
database:
# image: mongo:3.6 # 为了支持v2.13.0+版本,不再使用mongodb 3.x
image: mongo:4.0
restart: unless-stopped
expose:
- '27017'
volumes:
- ./mongodb:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: user01
MONGO_INITDB_ROOT_PASSWORD: password01
MONGO_INITDB_DATABASE: chatgpt
gui:
image: mongo-express:1.0.0-alpha
restart: unless-stopped
ports:
- "1005:8081"
environment:
# 选择主题。详见: http://codemirror.net/demo/theme.html
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
# 数据库信息
ME_CONFIG_BASICAUTH_USERNAME: user02
ME_CONFIG_BASICAUTH_PASSWORD: password02
ME_CONFIG_MONGODB_URL: 'mongodb://user01:password01@database:27017'
ME_CONFIG_MONGODB_ENABLE_ADMIN: true # 可能不是必要的
ME_CONFIG_MONGODB_ADMINUSERNAME: user01 # 可能不是必要的
ME_CONFIG_MONGODB_ADMINPASSWORD: password01 # 可能不是必要的
直接上线:
docker-compose up -d
更新方式同API,不再细说。
合并方案
由于我还是想保持足够的灵活性,并没有将chatgpt-web和反向代理合并在同一个docker stack里。
如果你的自建反向代理只有chatgpt-web使用,建议这样安装chatgpt-web和反向代理:
version: '3'
services:
# chatgpt-web
app:
image: kerwin1202/chatgpt-web:latest
restart: unless-stopped
ports:
- 1004:3002
environment:
TZ: Asia/Shanghai
# 访问jwt加密参数,可选 不为空则允许登录 同时需要设置 MONGODB_URL
AUTH_SECRET_KEY: 12345678abcdefg # 按需修改
# API or Access Token模式
OPENAI_API_MODEL: ChatGPTUnofficialProxyAPI # 在较新版本时需要该参数
# 你的openai access token
OPENAI_ACCESS_TOKEN: xxx # 这一串很长很长的。
# 自建OpenAI绕过Cloudflare验证的反向代理
API_REVERSE_PROXY: http://go-chatgpt-api:8080/chatgpt/conversation
# 超时,单位毫秒,可选
TIMEOUT_MS: 60000
# 网站名
SITE_TITLE: TokenChat # 按需修改。写个自己喜欢的名字就行
# mongodb 的连接字符串
MONGODB_URL: 'mongodb://user01:password01@database:27017' # 按需修改
# 网站是否开启注册
REGISTER_ENABLED: true # 完成注册后,这一项要改为false
# 开启注册之后 网站注册允许的邮箱后缀 如果空 则允许任意后缀
REGISTER_MAILS: '@qq.com,@gmail.com,@163.com' # 按需修改
# 加密盐。算法: echo -n 'passwordsalt' | md5sum | cut -c 1-32
PASSWORD_MD5_SALT: tNJ%M&D # 按需修改
# 开启注册之后 超级管理员的邮箱
ROOT_USER: [email protected] # 按需修改
# 前面一定要有https://或http://,且末尾不含/。注册的时候发送验证邮箱使用。
SITE_DOMAIN: https://chatgpt.hwb0307.com # 按需修改
# 开启注册之后 发送验证邮箱配置
SMTP_HOST: smtp.qq.com
SMTP_PORT: 465 # 也可以尝试587
SMTP_TSL: true
SMTP_USERNAME: [email protected] # 按需修改
SMTP_PASSWORD: xxxxxxxx # 按需修改
links:
- database
depends_on:
- database
# 数据库
database:
image: mongo:3.6
restart: unless-stopped
expose:
- '27017'
volumes:
- ./mongodb:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: user01
MONGO_INITDB_ROOT_PASSWORD: password01
MONGO_INITDB_DATABASE: chatgpt
# 数据库图形界面
gui:
image: mongo-express:1.0.0-alpha
restart: unless-stopped
ports:
- "1005:8081"
environment:
# 选择主题。详见: http://codemirror.net/demo/theme.html
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
# 数据库信息
ME_CONFIG_BASICAUTH_USERNAME: user02
ME_CONFIG_BASICAUTH_PASSWORD: password02
ME_CONFIG_MONGODB_URL: 'mongodb://user01:password01@database:27017'
ME_CONFIG_MONGODB_ENABLE_ADMIN: true # 可能不是必要的
ME_CONFIG_MONGODB_ADMINUSERNAME: user01 # 可能不是必要的
ME_CONFIG_MONGODB_ADMINPASSWORD: password01 # 可能不是必要的
# 绕过Cloudflare验证的反向代理
go-chatgpt-api:
container_name: go-chatgpt-api
image: linweiyuan/go-chatgpt-api:20230504095144 # 较稳
# image: linweiyuan/go-chatgpt-api:latest # 最新
expose:
- '8080'
environment:
- GIN_MODE=release
- GO_CHATGPT_API_PROXY=socks5://chatgpt-proxy-server-warp:65535
depends_on:
- chatgpt-proxy-server-warp
restart: unless-stopped
chatgpt-proxy-server-warp:
container_name: chatgpt-proxy-server-warp
image: linweiyuan/chatgpt-proxy-server-warp
restart: unless-stopped
其中,我们的API_REVERSE_PROXY: http://go-chatgpt-api:8080/chatgpt/backend-api/conversation
直接使用了该stack里的反向代理go-chatgpt-api
,避免了反向代理的8080端口向宿主机映射,因此更加安全,不可能被外界IP白嫖。
更换反向代理
如果旧的代理如果要更换代理,可以按下列步骤操作:
- 在数据库后台、网页前台更换代理。
- 将
docker-compose.yml
的旧代理修改为新代理。 docker-compose restart
重启stack。- 通过
docker-compose logs -f
观察日志,并输入test
等命令测试代理是否更改。当且仅当日志中的代理地址改变,更换代理才算正式生效。
这样更改一般是可以成功的。自己试试看!
检查数据库
上线后登陆Mongo Express,进入config
:
双击该记录,检查参数是否正确:
如果参数不正确,记得改正。修改后按右下角的Save
保存即可。这些参数在数据库里改是最有效的。只在docker-compose.yml里改是不够的;这可能也是开发者考虑得不太周全的地方。
刷新chatGPT前端页面
打开无痕浏览器(防止缓存和cookie的影响),输入邮箱和密码进入chatGPT,测试一下是否正常:
如果返回的是正常聊天信息就说明成功了。这时在openai后台检查可看到同样的聊天:
如果有其它error,就要具体情况具体分析。有问题欢迎在评论区留言!
小结
总得来说,chatgpt-web-dev/chatgpt-web是一个不断开发中的项目,未来应该也会增加更多第三方API,未来可期。关于自建chatGPT的介绍暂时到这里。以后有更实用的项目,我会详细介绍的!欢迎加入tg群交流,或通过RSS免费订阅我的博客喔!
拓展阅读
项目
ChatGPT的第三方版本或类ChatGPT项目
-
Issues · Kerwin1202/chatgpt-web:本项目的官方issue地址。大家有什么问题也可以咨询开发者。之前旧的交流平台是:feat: 添加注册登录&同步聊天数据 by Kerwin1202 · Pull Request #589 · Chanzhaoyu/chatgpt-web。
-
turbobin/chatbot:此项目 Fork 自 Kerwin1202/chatgpt-web, 原始项目为 Chanzhaoyu/chatgpt-web,此项目在前面的基础上增加了一些定制功能,比如:用户注册&登录&重置密码、admin用户设置、用户VIP权限控制、历史会话保存,导出、自定义敏感词、每个会话独有角色设置等。此项目使用 github 托管前端,后端部署在腾讯云服务器,不需要去购买域名,因此也不必花费大量精力去搞域名备案,国内国外都可流畅访问。
-
xtekky/gpt4free:去中心化的大语言模型非官方API。有点大胆 (ฅ´ω`ฅ) 但根据开发者 Xtekky 的说法,OpenAI 已经发出信件,要求他在五天内撤下整个系统,否则将面临法律诉讼。
-
MiniGPT-4:使用高级大型语言模型增强视觉语言理解的轻量化方案。最近一个比较火的项目。相关报道: 华人团队迷你GPT-4抢跑看图聊天:OpenAI有的它都有,服务器已被挤爆;
-
mlc-ai/mlc-llm:陈天奇等人开源一种通用解决方案,允许将任何语言模型本地部署在各种硬件后端和本地应用程序上。此外,该项目还提供了一个高效的框架,供每个人根据自己的用例进一步优化模型性能。相关报道: 陈天奇等人新作引爆 AI 界:手机原生跑大模型,算力不是问题了 – 滚动 – 碳链价值。
-
GPTGenius/chatgpt-vercel: Create a private ChatGPT website with one-click for free using Vercel: 通过 Vercel 一键免费创建私有的 ChatGPT 站点。这个项目也比较早就有了:
- Yidadaa/ChatGPT-Next-Web: One-Click to deploy well-designed ChatGPT web UI on Vercel:一个不错的基于OpenAI API的自建私人用ChatGPT项目。收藏量也很惊人!咕咕也有教程。
- wieslawsoltes/ChatGPT:基于OpenAI API的 ChatGPT C# GUI客户端,可在 MacOS、Windows、Linux、Android、iOS 和浏览器上运行。由 Avalonia UI 框架提供支持。相关教程: 基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux – chingho – 博客园
- OpenAssistant:类ChatGPT应用。我当时测试的模型是
OpenAssistant/oasst-sft-6-llama-30b
,感觉还可以。相关报道:全球最大 ChatGPT 开源平替来了!支持 35 种语言,写代码、讲笑话全拿捏 – 滚动 – 碳链价值;
-
OpenLMLab/MOSS: An open-source tool-augmented conversational language model from Fudan University:复旦大学的ChatGPT开源大语言模型。
-
Bin-Huang/chatbox:可以在本地使用OpenAI API。
- lencx/ChatGPT: 🔮 ChatGPT Desktop Application (Mac, Windows and Linux):如果你可以利用OpenAI的帐户和密码免费使用chatGPT,推荐该项目。它的功能比较官方网站要完善一些,支持Prompts导入、markdown/pdf/图片输出等。
- moeakwak/chatgpt-web-share: 共享 ChatGPT 账号给多用户同时。基于 FastAPI + Vue3 开发。支持 ChatGPT Plus / 使用 GPT-4 / 用户请求限制等功能:用于共享 ChatGPT 账号(使用ChatGPT accessToken),而不是官方 API;优先支持 ChatGPT Plus 账号。
-
gyuannn/ChatEase: 更好的控制你与GPT之间的对话:可以随意把消息从prompt中移除,节约tokens花费。
-
(~ ̄▽ ̄)~ nomic-ai/gpt4all:基于 LLaMa 的 \~800k GPT-3.5-Turbo Generations 训练助手式大型语言模型的演示、数据和代码。相关报道:如何训练个人的ChatGpt4 – tokengo – 博客园
-
microsoft/DeepSpeed: a deep learning optimization library that makes distributed training and inference easy, efficient, and effective:Deep Speed是基于微软Deep Speed深度学习优化库开发而成,具备训练、强化推理等功能,还使用了人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF)技术,可将训练速度提升15倍以上,成本却大幅度降低。相关报道:微软开源“傻瓜式”类ChatGPT模型训练工具,成本大大降低,速度提升15倍-36氪;人手一个ChatGPT,微软DeepSpeed Chat震撼发布,一键RLHF训练千亿级大模型-36氪
-
Common Crawl:快速获取600亿网站的数据,助力大模型训练。详见助力大语言模型训练,无压力爬取六百亿网页 | 谢乾坤 | Kingname的相关介绍。
-
Google Bard:2023年5月前后已经全面开放,登陆用户可以随便用。一些简单的问题还行。
插件
官方ChatGPT的增强浏览器插件。
- xcanwin/KeepChatGPT:一个近期比较流行的chatGPT官网增强工具。让ChatGPT的使用过程中更高效、更顺畅。它完美解决ChatGPT网络错误,不再频繁地刷新网页,省去10个多余的步骤。还可以取消后台监管审计。解决了这几类报错: (1) NetworkError when attempting to fetch resource. (2) Something went wrong. If this issue persists please contact us through our help center at help.openai.com. (3) This content may violate our content policy. (4) Conversation not found. 据说效果不错!
- josStorer/chatGPTBox: 一个十分优秀的ChatGPT浏览器插件。支持随时调出任意页面的聊天对话框;支持移动设备;使用右键单击菜单总结任何页面;独立的对话页面;多种 API 支持(免费和 Plus 用户的 Web API、GPT-3.5、GPT-4、New Bing、Self-Hosted、Azure、Poe 等);集成各种常用网站(Reddit、Quora、YouTube、GitHub、GitLab、StackOverflow、知乎、Bilibili);集成到所有主流搜索引擎和自定义查询以支持其他站点;选择工具和右键菜单可执行翻译、摘要、润色、情感分析、段落划分、代码解释和查询等各种任务;静态卡片支持多分支对话的浮动聊天框;轻松保存完整聊天记录或部分复制;强大的渲染支持,无论是代码高亮还是复杂的数学公式;语言偏好支持;自定义 API 地址支持;所有站点适配和选择工具(气泡)可以自由打开或关闭,禁用不需要的模块;聊天以提高答案质量。
- binary-husky/chatgpt_academic: 科研工作专用ChatGPT/GLM拓展,特别优化学术Paper润色体验,模块化设计支持自定义快捷按钮&函数插件,支持代码块表格显示,Tex公式双显示,新增Python和C++项目剖析&自译解功能,PDF/LaTex论文翻译&总结功能,支持并行问询多种LLM模型,支持gpt-3.5/gpt-4/chatglm。
- C-Nedelcu/talk-to-chatgpt:Talk-to-ChatGPT 是 Google Chrome 和 Microsoft Edge 的扩展,允许用户使用他们的语音(语音识别)与 ChatGPT AI 交谈,并通过语音(文本到语音)聆听机器人的回答,而不仅仅是通过打字。使用此工具,用户可以与 AI 对话并接收语音回复,使交互感觉更加自然和对话。这可能在各种环境中都很有用,在这些环境中,与 AI 进行更像人类的交互会很有帮助。类似的项目还有Voice Control for ChatGPT。
应用
ChatGPT的衍生应用。
-
Poe – Fast, Helpful AI Chat:一个不错的第三方语言模型使用平台。网上教程挺多的,比如Poe – Fast AI Chat 一款集成AI工具 – 努力的小雨 – 博客园。
-
ChatGPT by xtekky:xtekky/gpt4free作者搭建的可以免费使用GPT-4的网站。可以去问一些非隐私或与安全性关联不大的问题。
-
Open Prompt:一个类似POE的平台。
-
JushBJJ/Mr.-Ranedeer-AI-Tutor:定制家庭教师的ChatGPT Prompts
-
lvwzhen/law-cn-ai: ⚖️ AI 法律助手:将中国法律法规喂给 ChatGPT,做成的法律问答引擎。在线网站:ai2045.com。来自阮一峰周刊。
-
Kuingsmile/word-GPT-Plus:2023-04-25前后活跃的一个开源免费项目——Word GPT Plus——将 chatGPT 模型集成到 Microsoft Word 中的 word 插件。支持官方和网络 api。相关教程:Word中使用ChatGPT,写文档如有神助 – 机器学习算法与Python – 博客园
-
ChatPDF – Chat with any PDF!:上传pdf后可以与之对话。感觉有点鸡肋。
-
ChatGPT Free – PromptBoom:一个免费的简易版第三方ChatGPT。来自阮一峰周刊。
-
Torantulino/Auto-GPT: An experimental open-source attempt to make GPT-4 fully autonomous:一个很火的强大GPT自训练项目;不过很多小伙伴试用说效果一般。相关报道:ChatGPT 过时啦!这个 GPT 全自动工作,干不好绝不停!| 果壳 科技有意思;超越 ChatGPT ?AutoGPT 爆火,两周斩获 50k+ Star:无需人类插手,自主完成任务-36氪;又一GPT神器,AutoGPT爆火,30分钟配置数字员工,可自问自答执行任务-36氪
-
yoheinakajima/babyagi:一个定位和Torantulino/Auto-GPT相似的应用。
-
因为穷,所以 Ai – ai-pig-fly.space:一个似乎值得探索的AI主题站。比如,它收录了Chat Prompt Genius | Chat With Genius,一个Prompt生成网站。
-
Trancy AI Talk – 又骗我学习外语系列:ChatGPT + Azure TTS 实现 AI 口语私教 – 小众软件:介绍了Trancy AI Talk如何帮助人们学习口语。
教程
使用(类)ChatGPT的技巧
-
【中文完整版全9集】第1集 引言-ChatGPT提示工程师|AI大神吴恩达教你写提示词|prompt engineering_哔哩哔哩_bilibili:学习如何写ChatGPT的Prompts。这个课在DeepLearning.AI网站上也有;小伙伴们也写过学习经验,如:使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记 – 小二十七。
-
GPT-4最全攻略来袭!OpenAI官方发布,六个月攒下来的使用经验都在里面了:带来了GPT-4的官方使用指南,总结为6大条:清晰的指令、参考文本、拆分复杂任务、给GPT时间“思考”、其它工具加持、系统测试和更改。
-
AI – 极客书房:介绍了不少ChatGPT的实用技巧
-
Claude:除ChatGPT外的另一种选择 – 睡觉谁叫 – 博客园:类ChatGPT应用Claude的使用教程。
观点
AIGC/AGI相关新闻或观点
-
OpenAI火力全开,ChatGPT连夜登陆iOS,免费无广告、还支持语音-36氪:ChatGPT IOS端上线(IOS 16.1或以上),尽管功能仍较简陋,暂不支持插件,但支持语音输入。Plus会员可以直接在IOS中购买和续费。
-
像用iPhone一样用ChatGPT?就从今天开始咯-36氪:近日OpenAI向ChatGPT Plus用户全面开放插件功能。
-
AI考公考编指日可待,微软华人团队发布全新基准AGIEval,专为人类考试而生-36氪:微软的研究人员发布了一个全新基准AGIEval用于评估基础模型在标准化考试中的表现。
-
大模型遭泄两月后,Meta意外变赢家 – 碳链价值:介绍了Meta开源LLM框架LLaMa的崛起之史。
-
不依赖人类反馈来评估反应?一文浅谈 Anthropic 的“宪法 AI”技术 – 滚动 – 碳链价值:一种赋予LLM价值观的技术,区别于ChatGPT所使用的人类反馈强化学习(RLHF)技术。
-
用AI分身,同时交往上千名“男友”,谈恋爱按分钟收费!23岁女网红年入4亿?专家警告风险: 网红与AI初创公司 Forever Voices 合作推出自己的虚拟人。
-
对话 Zilliz 星爵:大模型时代,需要新的「存储基建」-36氪:向量数据库可以让LLM更高效地存储和读取知识库;Zilliz 是 NVIDIA 的向量存储的官方合作伙伴。还讨论了大小模型的发展趋势。
-
宇宙的尽头是发币?ChatGPT之父推出加密钱包World App,并称区块链可以区分人与AI:World APP是一个可更加简单、方便地使用多种加密货币的应用。
-
谷歌一雪前耻,全新PaLM 2反超GPT-4,办公全家桶炸裂升级,Bard史诗进化-36氪:谷歌最近推出了PaLM 2与GPT-4竞争,并宣布取消Bard的等候名单。
-
The Inside Story of ChatGPT’s Astonishing Potential | Greg Brockman | TED – YouTube:OpenAI 总裁 Greg Brockman 对 chatGPT 的介绍。
-
【李自然说】AI 行业未来几年的趋势和变化?_哔哩哔哩_bilibili:从创业和投资的角度闲聊了AI行业的短期变化。
-
ChatGPT背后的打工人,月薪3000:大语言模型背后卑微的数据标注工作者。
-
对于未来,ChatGPT背后的老板并不担心,但他知道你可能会-36氪:简单介绍了OpenAI的联合创始人之一、现任首席执行官Sam Altman(山姆·奥特曼)的背景故事。
-
AI格局未定,英伟达先赚一步 – 滚动 – 碳链价值:英伟达为AI时代提供算力基础
-
教你用ChatGPT赚钱的人,赚的就是你的钱-36氪:与之相比,我还是希望看我博客的小伙伴能够学到些什么。如果有思想交流和碰撞更好 (ฅ´ω`ฅ)
-
关注大语言模型的安全性问题:专访 OpenAI「红队」:GPT 发布前,专家都做哪些测试? – 碳链价值谈论了幻觉、偏见。
-
OpenAI:下一个科技巨头?-36氪:关于OpenAI发布ChatGPT plugins以实现联网的若干思考。
-
Hugging Face:比CloseAI要Open的AI开放平台。相关报道:一张估值20亿的“笑脸”,正在拆掉OpenAI的围墙-36氪
-
金融人又慌了?ChatGPT解锁新用法:破解美联储“谜语”,预测股票走势-36氪:ChatGPT在金融政策识别和股市预测中的作用。
-
对话ChatGPT:Prompt是普通人“魔法”吗?-36氪:介绍了Prompts在大模型时代的重要地位及催生市场。
-
(~ ̄▽ ̄)~ 万字长文解读:从Transformer到ChatGPT,通用人工智能曙光初现-36氪:对AI的发展历史进行简单回顾,特别介绍了引发本次热潮Transformer模型、GPT系列采用的自语言回归模型。
-
Announcing OpenAI’s Bug Bounty Program:OpenAI宣布漏洞赏金计划。相关报道包括: OpenAI撒钱了,给ChatGPT挑毛病,全球最高悬赏14万-36氪;
-
吴军:ChatGPT 不算新技术革命,带不来什么新机会 – 滚动 – 碳链价值:讨论了chatGPT太热背后真正的进步是什么。当然还有其它观点:驳吴军:对 ChatGPT 的认知存在方向性重大偏差,会误人子弟 – 滚动 – 碳链价值。
-
是什么让ChatGPT变得如此聪明?仍然未知的大语言模型“能力涌现”现象-36氪:比较通俗的一篇文章
-
“模拟人生”——基于chatGPT的游戏角色自互动:不再是傀儡!ChatGPT或将让游戏角色拥有真正的“灵魂”| 果壳 科技有意思;用ChatGPT控制NPC,行动逼真到像正常人,斯坦福谷歌新研究炸场,赋予大模型准确记忆力-36氪
-
“提示工程师”作为一种新兴职业:不写代码、靠“玩”ChatGPT年入百万,提示工程师正变成硅谷新宠 – 滚动 – 碳链价值;
-
后GPT时代的变与不变-36氪:虽然有很多空话,但是可以大致了解一些想法。
寄语
后续有更好的开源免费项目,我也会陆续介绍。祝大家使用愉快!有问题记得加tg群或评论区留言!
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
你好啊, 你这个github的卡片效果怎么做的啊
这是argon主题的短码 ~ 请去argon主题的官方文档看哈!
博主您好,有些问题可以交流一下吗,qq:1216054879
交流可以加群: https://t.me/benszhub
国内阿里云终于部署成功了,是参考“10.4 合并方案”的compose代码,但是还是踩坑。
API_REVERSE_PROXY: http://go-chatgpt-api:8080/chatgpt/conversation
需要改为:API_REVERSE_PROXY: http://go-chatgpt-api:8080/chatgpt/backend-api/conversation
20230504095144
这个版本在hub.docker.com是没有了。# image: linweiyuan/go-chatgpt-api:latest # 最新
- GO_CHATGPT_API_PROXY=socks5://chatgpt-proxy-server-warp:65535
需要改为PROXY=socks5://chatgpt-proxy-server-warp:65535
注意:如果服务器是国内的,还需要对服务器进行科学上网,并将链接改为自己的代理链接。
参考这个可以在服务器上部署clash(前提是你已经有梯子的yml了)
root@ip-172-31-28-151:~/chatgpt# docker logs -f go-chatgpt-api
ERRO[0000] failed to start, please try again later: 403 Forbidden这个怎么解决呀
这提示您的VPS线路可能不太适合安装go-chatgpt-api。可能无解 Σ( ° △ °|||)︴
⠿ chatgpt-proxy-server Error 2.0s
⠿ go-chatgpt-api Error 2.0s
Error response from daemon: pull access denied for linweiyuan/chatgpt-proxy-server, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied
使用docker login之后依然报错
镜像显然还是存在的( https://hub.docker.com/u/linweiyuan ),但似乎作者不再维护了。 因此可能是其它问题。你下载其它镜像的时候会遇到类似的问题吗?
有一种可能性,就是你的镜像源里可能不存在这个镜像。但这种可能性不是很大,你注意排除下吧
docker search 镜像没有东西出来
我刚刚试了一下
docker pull linweiyuan/go-chatgpt-api:latest
是可以成功下载的。估计是你的镜像源的问题;或者是你的VPS的架构问题(x86 vs. ARM)。docker-compose logs go-chatgpt-api
一直是这个报错
go-chatgpt-api | ERRO[0000] failed to start, please try again later: 403 Forbidden
留个QQ,我加一下。准备好todesk,我抽空帮你看看
1761353979
博主可以出一篇chatgpt-web-share的教程么。看说明文档好混乱
恐怕不行,因为我并没有在使用chatgpt-web-share,也并不感兴趣 Σ( ° △ °|||)︴
楼主我想问一下,为什么我的设置只有总览、高级和统计三个部分,其他都没有。感觉是残血版了。是不是我的docker-compose.yml文件有问题
version: ‘3’
services:
app:
image: kerwin1202/chatgpt-web:latest
restart: unless-stopped
ports:
depends_on:
environment:
TZ: Asia/Shanghai
API or Access Token模式
OPENAI_API_MODEL: ChatGPTAPI # 在较新版本时可能需要该参数
默认模型。默认是gpt-3.5-turbo
OPENAI_API_MODEL: gpt-3.5-turbo-0613
从OpenAI后台里获得
OPENAI_API_KEY: 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 # 按需修改
访问jwt加密参数,可选 不为空则允许登录 同时需要设置 MONGODB_URL
AUTH_SECRET_KEY: 12345678abcdefg # 按需修改
超时,单位毫秒,可选
TIMEOUT_MS: 60000
网站名
SITE_TITLE: APIChat # 按需修改。写个自己喜欢的名字就行
mongodb 的连接字符串
MONGODB_URL: ‘mongodb://user01:password01@database:27017’ # 按需修改
网站是否开启注册
REGISTER_ENABLED: true # 完成注册后,可以直接在前端页面关闭注册。
开启注册之后 网站注册允许的邮箱后缀 如果空 则允许任意后缀
REGISTER_MAILS: ‘@qq.com,@gmail.com,@163.com’ # 按需修改
加密盐。算法: echo -n ‘passwordsalt’ | md5sum | cut -c 1-32
PASSWORD_MD5_SALT: tNJ%M&D # 按需修改
开启注册之后 超级管理员的邮箱
ROOT_USER: [email protected] # 按需修改
前面一定要有https://或http://,且末尾不含/。注册的时候发送验证邮箱使用。
SITE_DOMAIN: http://www.aptx-4869.eu.org:1004 # 按需修改
开启注册之后 发送验证邮箱配置
SMTP_HOST: smtp.qq.com
SMTP_PORT: 465 # 也可以尝试587
SMTP_TSL: true
SMTP_USERNAME: [email protected] # 按需修改
SMTP_PASSWORD: ybdivbbhutlfbjge # 按需修改
links:
database:
image: mongo:3.6 # 为了支持v2.13.0+版本,不再使用mongodb 3.x
gui:
image: mongo-express:1.0.0-alpha
restart: unless-stopped
ports:
environment:
选择主题。详见: http://codemirror.net/demo/theme.html
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
数据库信息
ME_CONFIG_BASICAUTH_USERNAME: user02 # 按需修改
ME_CONFIG_BASICAUTH_PASSWORD: password02 # 按需修改
ME_CONFIG_MONGODB_URL: ‘mongodb://user01:password01@database:27017’
ME_CONFIG_MONGODB_ENABLE_ADMIN: true # 可能不是必要的
ME_CONFIG_MONGODB_ADMINUSERNAME: user01 # 可能不是必要的
ME_CONFIG_MONGODB_ADMINPASSWORD: password01 # 可能不是必要的
volumes:
mongodb: {}
我的qq是1826387316,可以加个qq方便发图片吗?
你现在登陆的帐号是管理员帐号吗?如果不是就没有很多选项.
楼主大大,为什么我的设置只有总览、高级和统计三个部分的呢?感觉好残血版。是不是monggodb的部分哪里没有弄完全
version: ‘3’
services:
app:
image: kerwin1202/chatgpt-web:latest
restart: unless-stopped
ports:
depends_on:
environment:
TZ: Asia/Shanghai
API or Access Token模式
OPENAI_API_MODEL: ChatGPTAPI # 在较新版本时可能需要该参数
默认模型。默认是gpt-3.5-turbo
OPENAI_API_MODEL: gpt-3.5-turbo-0613
从OpenAI后台里获得
OPENAI_API_KEY: sk-qjgZEONyPWgGBaktvBkpT3BlbkFJPAx66xxxxxxx # 按需修改
访问jwt加密参数,可选 不为空则允许登录 同时需要设置 MONGODB_URL
AUTH_SECRET_KEY: 12345678abcdefg # 按需修改
超时,单位毫秒,可选
TIMEOUT_MS: 60000
网站名
SITE_TITLE: APIChat # 按需修改。写个自己喜欢的名字就行
mongodb 的连接字符串
MONGODB_URL: ‘mongodb://user01:password01@database:27017’ # 按需修改
网站是否开启注册
REGISTER_ENABLED: true # 完成注册后,可以直接在前端页面关闭注册。
开启注册之后 网站注册允许的邮箱后缀 如果空 则允许任意后缀
REGISTER_MAILS: ‘@qq.com,@gmail.com,@163.com’ # 按需修改
加密盐。算法: echo -n ‘passwordsalt’ | md5sum | cut -c 1-32
PASSWORD_MD5_SALT: tNJ%M&D # 按需修改
开启注册之后 超级管理员的邮箱
ROOT_USER: [email protected] # 按需修改
前面一定要有https://或http://,且末尾不含/。注册的时候发送验证邮箱使用。
SITE_DOMAIN: http://www.aptx-4869.eu.org:1004 # 按需修改
开启注册之后 发送验证邮箱配置
SMTP_HOST: smtp.qq.com
SMTP_PORT: 465 # 也可以尝试587
SMTP_TSL: true
SMTP_USERNAME: [email protected] # 按需修改
SMTP_PASSWORD: ybdivbbxxxxx # 按需修改
links:
database:
image: mongo:3.6 # 为了支持v2.13.0+版本,不再使用mongodb 3.x
gui:
image: mongo-express:1.0.0-alpha
restart: unless-stopped
ports:
environment:
选择主题。详见: http://codemirror.net/demo/theme.html
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
数据库信息
ME_CONFIG_BASICAUTH_USERNAME: user02 # 按需修改
ME_CONFIG_BASICAUTH_PASSWORD: password02 # 按需修改
ME_CONFIG_MONGODB_URL: ‘mongodb://user01:password01@database:27017’
ME_CONFIG_MONGODB_ENABLE_ADMIN: true # 可能不是必要的
ME_CONFIG_MONGODB_ADMINUSERNAME: user01 # 可能不是必要的
ME_CONFIG_MONGODB_ADMINPASSWORD: password01 # 可能不是必要的
volumes:
mongodb: {}
这是我的docker-compose.yml文件