轉自我的博客文章https://blognas.hwb0307.com/linux/docker/4201,內容更新僅在個人博客可見。歡迎關注!
前言
我用帳號/密碼使用chatGPT已經(jīng)有一段時間。但是,我有幾個私交較密的朋友,他們并不具備使用chatGPT的條件;但又想體驗一下這個神奇的工具。因此,最近我專門去了解自建ChatGPT有關的項目。在這里總結一下我自建chatGPT的經(jīng)驗。大家有什么好項目也可以在評論區(qū)推薦下!
我的自建chatGPT(基于gpt-3.5-turbo
)大致如下:
盡管該方案支持多用戶和聊天數(shù)據(jù)保存(基于MongoDB),但也只是一個比較簡陋的Demo,暫時還沒有一些比較精細的功能。不過咱們也只是自己用一下,不是什么商業(yè)化項目,應該無所謂!后續(xù)有更好的開源免費項目,我也會陸續(xù)介紹。關于安全性,我只能說我暫時沒有發(fā)現(xiàn)這個方案有主觀惡意行為。API并沒有異??圪M。
值得注意的是,只要你的API支持,這個方案也支持GPT-4,它是由OpenAI公司在2023年3月14日發(fā)布的一個比gpt-3.5更強大的語言模型。想進一步了解GPT-4的小伙伴可以看“跟李沐學AI”的視頻:GPT-4論文精讀。
準備工作
你需要使用非中國大陸和香港的IP訪問openai.com,具體比較復雜。如果你不知道我在說什么,看到這里你就可以停了
你需要準備一個可用的OpenAI API。具體方案如下:
申請?zhí)摂M信用卡
首先,我們要有一張合適的虛擬信用卡。之前很多人介紹depay。但是,目前depay的身份驗證通道是維護狀態(tài);并且需要使用USDT支付,這對很多人是一個很高的門檻。
(缺失內容請訪問原文: https://blognas.hwb0307.com/linux/docker/4201)
獲得OpenAI API
你可以通過“Account API Keys - OpenAI API”新建一個API。這個過程太簡單了,沒啥好說的,直接點Create new secret key
即可:
這個API Key只展示一次,你應該記錄一下。如果忘記了,新建一個再刪除舊的即可,然后記住新的key即可。
你可以在“Account - OpenAI API”中查看消費情況:
建議限制一下高額消費提醒:
你可以在“Pricing”中查看服務單價(每1000 token)。token
大致就是單詞片段,這個概念主要來自transformer模型,大家簡單了解一下就好。總之,gpt-3.5的API價格還是挺親民的,個人用戶目前用它即可;gpt-4的價格就比較高了,適合企業(yè)級用戶:
測試環(huán)境
我的自建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/Linux
docker --version # Docker version 23.0.3, build 3e7cbfd
docker-compose --version # Docker Compose version v2.4.1
自建ChatGPT
不了解docker的小伙伴請先看:《Docker系列 配置Docker全局環(huán)境》;《Docker系列 了解Docker Compose的配置文件》。
完成準備工作后,我們通過docker自建ChatGPT。我目前使用的項目是: Kerwin1202/chatgpt-web,它提供了使用MongoDB托管后臺數(shù)據(jù)的接口。該項目衍生于Chanzhaoyu/chatgpt-web: 用 Express 和 Vue3 搭建的 ChatGPT 演示網(wǎng)頁——僅提供了一個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
系列:這是給注冊用戶發(fā)送郵件時用的。 -
AUTH_SECRET_KEY
:源項目這個是登陸密鑰。這里暫時不知道有什么用;注冊用戶似乎不需要這個。 -
MongoDB
:數(shù)據(jù)庫名chatgpt
,用戶名user01
,密碼password01
。 -
Mongo-Express
:用戶名user02
,密碼password02
。這是登陸MongoDB GUI時用的。如果不設置,任何知道數(shù)據(jù)庫網(wǎng)址的人都可以訪問數(shù)據(jù)庫!
新建docker-compose.yml文件:
vi $work/docker-compose.yml
填入下面的內容。如果你用過mongo
或mongo-express
,可以改為自己正在使用的tag
,這樣比較節(jié)省鏡像空間。有按需修改
提示的也要按自己的實際情況修改:
version: '3'
services:
app:
# 在https://hub.docker.com/r/kerwin1202/chatgpt-web/tags 里獲得tag?;蛘邔憀atest
image: kerwin1202/chatgpt-web:latest
restart: unless-stopped
ports:
- 1004:3002
depends_on:
- database
environment:
TZ: Asia/Shanghai
# 從OpenAI后臺里獲得
OPENAI_API_KEY: sk-XXX # 按需修改
# 訪問jwt加密參數(shù),可選 不為空則允許登錄 同時需要設置 MONGODB_URL
AUTH_SECRET_KEY: 12345678abcdefg # 按需修改
# 超時,單位毫秒,可選
TIMEOUT_MS: 60000
# 網(wǎng)站名
SITE_TITLE: BenszChat # 按需修改。寫個自己喜歡的名字就行
# mongodb 的連接字符串
MONGODB_URL: 'mongodb://user01:password01@database:27017' # 按需修改
# 網(wǎng)站是否開啟注冊
REGISTER_ENABLED: true # 完成注冊后,這一項要改為false
# 開啟注冊之后 網(wǎng)站注冊允許的郵箱后綴 如果空 則允許任意后綴
REGISTER_MAILS: '@qq.com,@gmail.com,@163.com' # 按需修改
# 加密鹽。算法: echo -n 'passwordsalt' | md5sum | cut -c 1-32
PASSWORD_MD5_SALT: tNJ%M&D # 按需修改
# 開啟注冊之后 超級管理員的郵箱
ROOT_USER: hwb2012@qq.com # 按需修改
# 開啟注冊之后網(wǎng)站域名 不含 / 。注冊的時候發(fā)送驗證郵箱使用
SITE_DOMAIN: https://chatgpt.hwb0307.com # 按需修改
# 開啟注冊之后 發(fā)送驗證郵箱配置
SMTP_HOST: smtp.qq.com
SMTP_PORT: 465
SMTP_TSL: true
SMTP_USERNAME: hwb2012@qq.com # 按需修改
SMTP_PASSWORD: xxxxxxxx # 按需修改
links:
- 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
# 數(shù)據(jù)庫信息
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.yml要自定義的東西還挺多的。如果大家使用時有什么疑問,可以在評論區(qū)留言!
最后直接上線即可:
cd $work && docker-compose up -d
其它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
反代過程并不需要設置特別的參數(shù)。
前端基本界面如下:
后端數(shù)據(jù)庫界面如下:
基本介紹
第一個用戶默認是管理員用戶,請使用docker-compose.yml文件里約定的管理員郵箱注冊,并在郵箱里點擊驗證鏈接即可。其它用戶也是類似的。目前,如果你的目標用戶已經(jīng)注冊完畢,你可以在docker-compose中設置REGISTER_ENABLED: false
,重啟docker stack生效。當然,可能在網(wǎng)站配置
里設置更合理??傊?,這些配置和docker-compose.yml文件里定義的參數(shù)是相一致的。
所有的設置都可從左下角的設置按鈕進入查看:
總覽
總覽界面基本上和數(shù)據(jù)庫內容是一一對應的:
總覽里還可以導入/導出聊天記錄(以.json
格式),也是挺不錯的!
我這里簡單展示其它選項的內容:
高級
設定角色。一般是默認的。
基本配置
這里展示了API的余額,不是用量。
網(wǎng)站配置
這里的注冊登錄
功能最好不要點暗,否則容易出bug,導致所有用戶無法登陸。數(shù)據(jù)庫里直接修改似乎無法生效,感覺這是bug,或者是緩存問題:
這個方案應該是有效的。大家試試看!
點亮新用戶
表明你開放注冊;點亮新用戶審核
表明該用戶需要你審核才可以使用。如果你開放注冊,一般建議這兩者都要點亮。如果你不想開放注冊,將新用戶
點暗即可。
郵箱配置
密碼是SMTP專用密碼,不是QQ郵箱密碼。
提示詞商店
它內置了一些提示詞鏈接:
有個英文版的Prompts項目也挺不錯: f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.,大家可關注下?;旧虾w了日常生活中比較常用的功能。但這個Prompts似乎是僅在瀏覽器里緩存的,更新后就沒了,要重新搞。感覺不太合適。
不過,一般我都是比較喜歡自己寫Prompts。這也是可玩性的一部分吧!以后有機會,我也總結一下大佬們一般是怎么寫Prompts的。講究還挺多 (?′ω`?)
非注冊用戶
由于我們使用了數(shù)據(jù)庫托管,所以可以輕易地操作數(shù)據(jù)庫以生成新用戶。這里我簡單展示如何新增一個用戶。
首先,我們登陸MongoDB,進入chatGPT
數(shù)據(jù)庫的user
collection:
這里我創(chuàng)建了一個測試用戶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,類似于身份證號,只要與現(xiàn)存帳號不一樣即可。name
是用戶名,email
是用戶郵箱。status
暫時不知道是什么。createTime
和verifyTime
代表創(chuàng)建和驗證時間,差不多是間隔1分鐘左右;沒研究過這個時間間隔有沒有要求,大家可以試試看。
這里的password其實是一段基于md5的哈希值。假設密碼是a
,鹽值(即docker-compose文件里的PASSWORD_MD5_SALT
參數(shù)的值)是tNJ%M&D
,則password的取值為:
# Linux Shell命令。 密碼+鹽值組成新字符,空間不留任何空隙
echo -n 'atNJ%M&D' | md5sum | cut -c 1-32
輸出結果為a3fedefc90692555644896f3c41c26eb
,與我的記錄是不同的。這是因為每個人的密碼和鹽值都是不同的,按需生成即可。
只要我們確定好這些參數(shù),再左擊New Document
新增一條記錄并保存,這樣就可以在不開放注冊的情況下添加用戶:
大家也可以嘗試一下如何批量生成新用戶喔!
小結
關于自建chatGPT的介紹暫時到這里。我沒有介紹太多MongoDB的設置,因為我暫時也不太熟悉;而且,我懷疑由于前端項目的限制,數(shù)據(jù)庫的能力并沒有被充分發(fā)揮,現(xiàn)在應該也不是介紹后端的最好時機。該項目還有以下缺陷:
- 不支持流量/付費控制
- 不支持具體某個聊天記錄的markdown輸出
- 重啟docker stack后,盡管聊天內容還在,但無法依據(jù)前面的聊天內容繼續(xù)聊天
- 刷新網(wǎng)頁后,要點一下某個聊天記錄可以顯示歷史聊天內容(不知是不是和nginx設置有關)、
- Prompts并不保存在數(shù)據(jù)庫內
還有一個類似的衍生項目: gouguoyin/chatgpt-web,它的文檔“展示”了許多功能,包括登錄注冊、管理后臺、設置首次登錄贈送免費提問次數(shù)、key輪詢池、卡券套餐管理、對話管理、敏感詞管理、自定義回復管理、提示詞prompt管理、卡密套餐管理、卡密生成和核銷等。但它似乎是一個付費和閉源的應用。只能說,感興趣的小伙伴可以了解嘍 (?′ω`?)
如果你可以利用OpenAI的帳戶和密碼免費使用chatGPT,推薦該項目:lencx/ChatGPT: ?? ChatGPT Desktop Application (Mac, Windows and Linux)。它的功能比較官方網(wǎng)站要完善一些,也支持Prompts導入、markdown/pdf/圖片輸出等:
文章來源:http://www.zghlxwxcb.cn/news/detail-470244.html
以后有更多使用心得再來更新!文章來源地址http://www.zghlxwxcb.cn/news/detail-470244.html
到了這里,關于Docker系列 基于OpenAI API自建ChatGPT的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!