Docker系列 基于OpenAI API自建ChatGPT

转自我的博客文章https://blognas.hwb0307.com/linux/docker/4201,内容更新仅在个人博客可见。欢迎关注!

前言

我用帐号/密码使用chatGPT已经有一段时间。但是,我有几个私交较密的朋友,他们并不具备使用chatGPT的条件;但又想体验一下这个神奇的工具。因此,最近我专门去了解自建ChatGPT有关的项目。在这里总结一下我自建chatGPT的经验。大家有什么好项目也可以在评论区推荐下!

我的自建chatGPT(基于gpt-3.5-turbo)大致如下:

msedge_yLBWgtDM4J

尽管该方案支持多用户和聊天数据保存(基于MongoDB),但也只是一个比较简陋的Demo,暂时还没有一些比较精细的功能。不过咱们也只是自己用一下,不是什么商业化项目,应该无所谓!后续有更好的开源免费项目,我也会陆续介绍。关于安全性,我只能说我暂时没有发现这个方案有主观恶意行为。API并没有异常扣费。

值得注意的是,只要你的API支持,这个方案也支持GPT-4,它是由OpenAI公司在2023年3月14日发布的一个比gpt-3.5更强大的语言模型。想进一步了解GPT-4的小伙伴可以看“跟李沐学AI”的视频:GPT-4论文精读。

准备工作

你需要使用非中国大陆和香港的IP访问openai.com,具体比较复杂。如果你不知道我在说什么,看到这里你就可以停了

你需要准备一个可用的OpenAI API。具体方案如下:

申请虚拟信用卡

首先,我们要有一张合适的虚拟信用卡。之前很多人介绍depay。但是,目前depay的身份验证通道是维护状态;并且需要使用USDT支付,这对很多人是一个很高的门槛。

(缺失内容请访问原文: https://blognas.hwb0307.com/linux/docker/4201)

获得OpenAI API

你可以通过“Account API Keys - OpenAI API”新建一个API。这个过程太简单了,没啥好说的,直接点Create new secret key即可:

msedge_slHCHbf1sm

这个API Key只展示一次,你应该记录一下。如果忘记了,新建一个再删除旧的即可,然后记住新的key即可。

你可以在“Account - OpenAI API”中查看消费情况:

msedge_RdK2eaGpTq

建议限制一下高额消费提醒:

msedge_FiUb2uepcm

你可以在“Pricing”中查看服务单价(每1000 token)。token大致就是单词片段,这个概念主要来自transformer模型,大家简单了解一下就好。总之,gpt-3.5的API价格还是挺亲民的,个人用户目前用它即可;gpt-4的价格就比较高了,适合企业级用户:

msedge_FPMIkQbjmU

测试环境

我的自建chatGPT布署在博客的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/Linuxdocker --version # Docker version 23.0.3, build 3e7cbfddocker-compose --version # Docker Compose version v2.4.1

自建ChatGPT

不了解docker的小伙伴请先看:《Docker系列 配置Docker全局环境》;《Docker系列 了解Docker Compose的配置文件》。

完成准备工作后,我们通过docker自建ChatGPT。我目前使用的项目是: Kerwin1202/chatgpt-web,它提供了使用MongoDB托管后台数据的接口。该项目衍生于Chanzhaoyu/chatgpt-web: 用 Express 和 Vue3 搭建的 ChatGPT 演示网页——仅提供了一个ChatGPT前端的Demo,比较原始。

文件夹和端口

首先,我们新建工作目录:

work=/docker/kerwin_chatgpt
mkdir -p $work; cd $work

如果你也使用了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:源项目这个是登陆密钥。这里暂时不知道有什么用;注册用户似乎不需要这个。
  • MongoDB:数据库名chatgpt,用户名user01,密码password01
  • Mongo-Express:用户名user02,密码password02。这是登陆MongoDB GUI时用的。如果不设置,任何知道数据库网址的人都可以访问数据库!

新建docker-compose.yml文件:

vi $work/docker-compose.yml

填入下面的内容。如果你用过mongomongo-express,可以改为自己正在使用的tag,这样比较节省镜像空间。有按需修改提示的也要按自己的实际情况修改:

version: '3'services:app:# 在https://hub.docker.com/r/kerwin1202/chatgpt-web/tags 里获得tag。或者写latestimage: kerwin1202/chatgpt-web:latestrestart: unless-stoppedports:- 1004:3002depends_on:- databaseenvironment:TZ: Asia/Shanghai# 从OpenAI后台里获得OPENAI_API_KEY: sk-XXX # 按需修改# 访问jwt加密参数,可选 不为空则允许登录 同时需要设置 MONGODB_URLAUTH_SECRET_KEY: 12345678abcdefg # 按需修改# 超时,单位毫秒,可选TIMEOUT_MS: 60000# 网站名SITE_TITLE: BenszChat # 按需修改。写个自己喜欢的名字就行# 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-32PASSWORD_MD5_SALT: tNJ%M&D # 按需修改# 开启注册之后 超级管理员的邮箱ROOT_USER: hwb2012@qq.com # 按需修改# 开启注册之后网站域名 不含 / 。注册的时候发送验证邮箱使用SITE_DOMAIN: https://chatgpt.hwb0307.com # 按需修改# 开启注册之后 发送验证邮箱配置SMTP_HOST: smtp.qq.comSMTP_PORT: 465SMTP_TSL: trueSMTP_USERNAME: hwb2012@qq.com # 按需修改SMTP_PASSWORD: xxxxxxxx # 按需修改links:- databasedatabase:image: mongo:3.6restart: unless-stoppedexpose:- '27017'volumes:- ./mongodb:/data/dbenvironment:MONGO_INITDB_ROOT_USERNAME: user01MONGO_INITDB_ROOT_PASSWORD: password01MONGO_INITDB_DATABASE: chatgptgui:image: mongo-express:1.0.0-alpharestart: unless-stoppedports:- "1005:8081"environment:# 选择主题。详见: http://codemirror.net/demo/theme.htmlME_CONFIG_OPTIONS_EDITORTHEME: ambiance# 数据库信息ME_CONFIG_BASICAUTH_USERNAME: user02ME_CONFIG_BASICAUTH_PASSWORD: password02ME_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.yml要自定义的东西还挺多的。如果大家使用时有什么疑问,可以在评论区留言!

最后直接上线即可:

cd $work && docker-compose up -d

其它docker相关操作和一般的docker应用是类似,这里就不细说了。

NPM设置

不了解Nginx Proxy Manager(NPM)用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。

准备两个域名并在域名托管商(比如Cloudflare),比如chatgpt.hwb0307.comchatgptgui.hwb0307.com

  • chatgpt.hwb0307.com给chatGPT的前端使用,反代地址http://172.17.0.1:1004
  • chatgptgui.hwb0307.com给chatGPT的后端使用,反代地址http://172.17.0.1:1005

反代过程并不需要设置特别的参数。

前端基本界面如下:

msedge_yLBWgtDM4J

后端数据库界面如下:

msedge_GifyaaFR8d

基本介绍

第一个用户默认是管理员用户,请使用docker-compose.yml文件里约定的管理员邮箱注册,并在邮箱里点击验证链接即可。其它用户也是类似的。目前,如果你的目标用户已经注册完毕,你可以在docker-compose中设置REGISTER_ENABLED: false,重启docker stack生效。当然,可能在网站配置里设置更合理。总之,这些配置和docker-compose.yml文件里定义的参数是相一致的。

所有的设置都可从左下角的设置按钮进入查看:

msedge_EegIbiJemj

总览

总览界面基本上和数据库内容是一一对应的:

msedge_IcCkoq7r6U

总览里还可以导入/导出聊天记录(以.json格式),也是挺不错的!

我这里简单展示其它选项的内容:

高级

设定角色。一般是默认的。

msedge_ykePHnElZX

基本配置

这里展示了API的余额,不是用量。

msedge_TYrZA4gn1d

网站配置

这里的注册登录功能最好不要点暗,否则容易出bug,导致所有用户无法登陆。数据库里直接修改似乎无法生效,感觉这是bug,或者是缓存问题:

msedge_vXFuaJFrSP

这个方案应该是有效的。大家试试看!

点亮新用户表明你开放注册;点亮新用户审核表明该用户需要你审核才可以使用。如果你开放注册,一般建议这两者都要点亮。如果你不想开放注册,将新用户点暗即可。

msedge_VqFsyqLiU1

邮箱配置

密码是SMTP专用密码,不是QQ邮箱密码。

msedge_1I3vrTj3TO

提示词商店

它内置了一些提示词链接:

msedge_9HDeSbzt9I

有个英文版的Prompts项目也挺不错: f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.,大家可关注下。基本上涵盖了日常生活中比较常用的功能。但这个Prompts似乎是仅在浏览器里缓存的,更新后就没了,要重新搞。感觉不太合适。

不过,一般我都是比较喜欢自己写Prompts。这也是可玩性的一部分吧!以后有机会,我也总结一下大佬们一般是怎么写Prompts的。讲究还挺多 (ฅ´ω`ฅ)

非注册用户

由于我们使用了数据库托管,所以可以轻易地操作数据库以生成新用户。这里我简单展示如何新增一个用户。

首先,我们登陆MongoDB,进入chatGPT数据库的user collection:

msedge_HydN9CrFiJ

这里我创建了一个测试用户test@qq.com。我们双击该记录查看具体信息,如下:

{_id: ObjectId('6434ececdf45624abb1d190a'),name: 'test@qq.com',email: 'test@qq.com',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暂时不知道是什么。createTimeverifyTime代表创建和验证时间,差不多是间隔1分钟左右;没研究过这个时间间隔有没有要求,大家可以试试看。

这里的password其实是一段基于md5的哈希值。假设密码是a,盐值(即docker-compose文件里的PASSWORD_MD5_SALT参数的值)是tNJ%M&D,则password的取值为:

# Linux Shell命令。 密码+盐值组成新字符,空间不留任何空隙
echo -n 'atNJ%M&D' | md5sum | cut -c 1-32

输出结果为a3fedefc90692555644896f3c41c26eb,与我的记录是不同的。这是因为每个人的密码和盐值都是不同的,按需生成即可。

只要我们确定好这些参数,再左击New Document新增一条记录并保存,这样就可以在不开放注册的情况下添加用户

msedge_ZWndX6exJT

大家也可以尝试一下如何批量生成新用户喔!

小结

关于自建chatGPT的介绍暂时到这里。我没有介绍太多MongoDB的设置,因为我暂时也不太熟悉;而且,我怀疑由于前端项目的限制,数据库的能力并没有被充分发挥,现在应该也不是介绍后端的最好时机。该项目还有以下缺陷:

  • 不支持流量/付费控制
  • 不支持具体某个聊天记录的markdown输出
  • 重启docker stack后,尽管聊天内容还在,但无法依据前面的聊天内容继续聊天
  • 刷新网页后,要点一下某个聊天记录可以显示历史聊天内容(不知是不是和nginx设置有关)、
  • Prompts并不保存在数据库内

还有一个类似的衍生项目: gouguoyin/chatgpt-web,它的文档“展示”了许多功能,包括登录注册、管理后台、设置首次登录赠送免费提问次数、key轮询池、卡券套餐管理、对话管理、敏感词管理、自定义回复管理、提示词prompt管理、卡密套餐管理、卡密生成和核销等。但它似乎是一个付费和闭源的应用。只能说,感兴趣的小伙伴可以了解喽 (ฅ´ω`ฅ)

如果你可以利用OpenAI的帐户和密码免费使用chatGPT,推荐该项目:lencx/ChatGPT: 🔮 ChatGPT Desktop Application (Mac, Windows and Linux)。它的功能比较官方网站要完善一些,也支持Prompts导入、markdown/pdf/图片输出等:

ChatGPT_UBXT84r8Gx

以后有更多使用心得再来更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3216.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从开发到上线,三分钟拥有自己的 ChatGPT !

OpenAI 已经公布了 ChatGPT 正式版 API,背后的新模型是 gpt-3.5-turbo,这是 OpenAI 目前最先进的模型,响应速度更快,价格更便宜。 作为开发人员,我们还是希望通过 API 将 ChatGPT 和相关模型集成到自己的产品和应用中&…

基于Tushare量化分析示例

1. 量化神器Tushare介绍 大家都知道量化分析离不开数据支撑,那下面就简单说一下一个简单好用的量化神器——Tushare。 Tushare 提供免费的数据接口,包含沪深股票数据、财务报表数据、指数、基金、期权、期货、港股、美股、宏观经济等数据,甚…

零代码量化投资:用ChatGPT获取新浪财经上的股票实时行情

现在很多免费的股票数据库,比如akshare,其实是从新浪财经或者东方财富网站上爬取下来的。如果能直接从新浪财经或者东方财富网站上爬取数据,可以获取更全面更即时的信息。 可以在ChatGPT中输入提示词如下: 写一段Python代码&…

ChatGPT:搞『量化投资』我是认真的!

量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W关注者,曾荣获AMMA优秀品牌力、优秀洞察力大奖,连续4年被腾…

如何利用ChatGPT学习量化投资?

引言 最近,ChatGPT持续火了很长时间,占领各大热点和头版头条,成为A股开年以来最大的热点之一。ChatGPT是OpenAI开发的一种语言生成模型,可以理解为智能问答机器人。最近围绕量化投资在上面试了很多问题,大部分回答还是…

ChatGPT在社工攻击和反钓鱼中的应用

概述 ChatGPT是一种基于神经网络的自然语言处理模型,可以生成自然流畅的文本或对话。在钓鱼攻击中,攻击者可以使用ChatGPT生成虚假电子邮件或消息,更好地伪装成受害者所信任的个人或组织,从而获取受害者的个人信息。这种行为对个…

看ChatGPT这形势,留给我们开发人员的时间不多了

程序员一直所做的工作是什么?恐怕想到最后,每个努力的程序员都是在让自己努力的走向失业。最近ChatGPT爆火,他能做什么?能写文章,写的很好,可以代替你发邮件,一直到发现OpenAI的深度加持&#x…

ChatGPT其实并不想让开发人员做这5件事情

前言 ChatGPT已经火爆了快半年了吧,紧接着国内也开始推出了各种仿制品,我甚至一度怀疑,如果人家没有推出ChatGPT,这些仿制品会不会出现。而很多人也嗨皮得不行,利用各种方法开始科学上网,用ChatGPT做各种觉…

让ChatGPT连接进互联网世界

大家知道ChatGPT是没有链接到互联网的,所以只能回答2021年之前的知识,对于这么强劲的大脑这有点可惜了,现在有办法了: 使用WebChatGPT插件(chrome) 安装插件: 上图是安装前 安装后的效果&…

chatGPT打不开问题(个人亲测有效)

chatGPT打不开问题(个人亲测有效) ChatGPT打不开 Access denied !Access denied !Access denied !相信今天很多国内的小伙伴们打开 Open AI ChatGPT 都会出现:“Access denied You do not have access to …

小狐狸ChatGPT付费创作系统V2.1.0独立版 +WEB端+ H5端 + 小程序端安装教程

播播资源针对ChatGPT付费创作系统V2.1.0提供最新的对应版本小程序端全套测试,上一版本增加了PC端绘画功能,绘画功能采用其他绘画接口-意间AI,本版新增了百度文心一言接口。后台一些小细节的优化及一些小BUG的处理,前端进行了些小细…

ChatGPT 官方 API 来了,价格直接打骨折,未来……

大家好,我是校长。 ChatGPT 自去年年底公布以来,最近这几个月一直处于火热的状态当中,堪称引起了人工智能旋风。 01 官方 API 来了 昨天凌晨 2 点左右(美西时间 3 月 1 日(周三)),Op…

2023年ChatGPT商业版免授权源码/AI绘画/付费系统

正文: 2023 最新 ChatGPT商业版源码,该产品支持用户付费套餐,AI 绘画,支付对接,卡密购买兑换等功能,并且可以免费使用,同时附带详细的教程文档。 AI程序采用NUXT3LARAVEL9开发 字节网盘&#…

小狐狸ChatGPT付费创作系统1.6.1独立开源版 + 小程序VUE前端

小狐狸GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序,是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。小程序版本,包含全插件,开源可二开!接口模型升级至GTP3.5,修复一句可能会出bug的代码…

小狐狸ChatGPT付费创作系统1.8.9独立版源码,H5端 + 小程序端

v1.8.9 1、增加后台手动加绘画次数 2、增加新用户送绘画次数 3、云存储改成在超管后台配置 4、修复H5首次进入会弹网络错误的问题 5、修复其他几个小问题

重磅!阿里版本【ChatGPT】开放测评!

前两天突然爆出惊人消息:阿里版ChatGPT开放测评了! 在本月初,已经有诸多关于阿里巴巴即将推出类似ChatGPT产品的传闻。 数日前,首批曝光的天猫精灵“鸟鸟分鸟”脱口秀版GPT基于大型模型的“精简版”,凭借其出色的表现吸…

阿里版 ChatGPT 突然官宣!我们用 16 个提问,火速进行了测评……

整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 平地一声雷!今天中午阿里版类 ChatGPT 「通义千问」突然官宣: 没错,就这 3 行简短介绍 1 个官网地址,再无其他“剧透”。 好在,CSDN 有幸拿…

猿如意|chat GPT测评

文章目录 猿如意猿如意传送门猿如意个人使用感受好的一面:可以改进的一面: 什么是猿如意 chat GPT测评chat GPT关于通用的问题问题1-如何写一篇会计论文问题2 -如何规划自己的人生目标问题3 -如何自学称为一名中医问题4 -未来哪些行业更具有持续发展问题5 现在选择什…

关于虚拟数字人你想知道的都在这里

2022年底,微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红,5天用户量超百万,在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业,AI虚拟数字人就是其中之一,一个随着元宇…

ChatGPT的探索研究

开篇:随着人工智能的迅速发展,众多令人兴奋的技术突破应运而生,其中之一是ChatGPT。ChatGPT是一种强大的对话模型,它使得计算机与人类更自然地交流成为可能。ChatGPT的问世意味着计算机在人类语言理解和生成方面获得了巨大的进步。…