今天要實作的語言是 Python 版,若希望使用 Node.js 或 C# 可以左轉其他大神的:
Node.js : memochou1993/ai-assistant
C# : isdaviddong/chatGPTLineBot
基本上串 ChatGPT 很簡單,尤其是 python 已經有套件的狀況下 都是看一下官方文件就可以串起來的簡單步驟 讀者們如果有 Docker 的基礎,應該二十分鐘內就可以串好並部署了!
- 申請 API key https://beta.openai.com/account/api-keys
- 設定 .env 並放在 manage.py 旁邊
DJANGO_SECRET_KEY=secret
DATABASE_URL=sqlite://YOUR_PASSWORD/db.sqlite3
EMAIL_URL=smtp://user:YOUR_PASSWORD@localhost:25
LINE_CHANNEL_ACCESS_TOKEN=
LINE_CHANNEL_SECRET=
CHAT_GPT_TOKEN=
連結在這:https://beta.openai.com/account/api-keys
切記,這個 api key 不可以推上來 github 喔,可能會不明人士盜用!
我在 repo 中有放置 .env.sample
,大家可以根據自己的環境設置不一樣的變數
https://github.com/Lanznx/HealthLineBot/blob/main/.env.sample
DJANGO_SECRET_KEY=secret
DATABASE_URL=sqlite://YOUR_PASSWORD/db.sqlite3
EMAIL_URL=smtp://user:YOUR_PASSWORD@localhost:25
LINE_CHANNEL_ACCESS_TOKEN=
LINE_CHANNEL_SECRET=
CHAT_GPT_TOKEN=
這邊要注意的是,你的 .env
應該要放置於跟 manage.py
相同的路徑底下
這樣我在專案設定的路徑 ENV_PATH = ".env"
才吃的到環境變數喔!
再來是 google 金鑰憑證的部分,這個金鑰是我朋友的陳年老金鑰,我想說方便才拿它來串 ChatGPT
我已經盡量把需要的地方拆出來了,但礙於申請這個 google API 金鑰可能會有點麻煩
而目前感覺起來應該也不太會有爆流量的問題,所以就先暫時暴露在 github 上給大家方便吧!
如果想要把金鑰替換成自己的,可以參考以下文章申請!
官方文件在這:Create completion
但這邊我跟官方文件使用的引入方式不太一樣,是使用 python-dotenv 這個套件
但功能基本上大同小異,讀者可以自行斟酌
基本上我都寫好了,所以只要環境變數有塞進去 .env 應該就可以跑起來了
我在第十三行引入 openai
的官方套件,並且完成 .env 的載入
這個套件很明顯還在實驗階段,版本只出到 0.25.0
下面是官方連結,有興趣可以看看:
接下來就是整個程式碼最核心的部分了!!
我定義了 chatGPT
這個函式,text
是使用者回覆的訊息
然後我呼叫了 openai.Completion.create
這個函式
必填的參數只有一個,就是一定要指定 model
而我所使用的語言模型是 text-davinci-003
,跟大家一般在網頁版所看到的並不一樣
但這部分我沒有多做研究,可能網頁版的模型已經釋出 API 讓大家玩了?
歡迎大家可以研究一下並讓我知道喔!
總之我覺得目前這個已經很厲害了
來簡單解釋一下我現在填進去的參數
-
model: 這個就不解釋了,可以在這裡查看所有的語言模型種類
-
prompt:使用者輸入的訊息,給模型的 input
-
max_tokens:模型回覆的長度
- 大部分的模型可以支援到 2048 個 token,就是回覆很長很多的意思!
- 詳細定義可以看這裡:https://beta.openai.com/tokenizer
-
temperature:溫度,我把它解讀為人性的「溫度」
- 這個參數應該是介於 0 ~ 1 之間,預設為 1
- 設成 0 的話模型給出的回覆會很無聊,1 的話會很更 creative,我自己是設定中庸的 0.8
最後最後,只要使用者不是輸入我們指定的字,我們就可以透過呼叫剛剛定義好的 chatGPT
這個函式來用 text-davinci-003 模型來回覆使用者囉!
我使用了 docker 去做打包,所以部署起來特別的方便
如果你是沒有用過 docker 的讀者,可以參考這篇教學學習一下
也可以用官方的連結安裝
最後我是開放 8000 port,如果希望使用別的 port 來開通服務的話可以去改
docker-compose.yaml
當中的 8000:8000
把左邊的八千改成你想要的 port
version: '3.8'
services:
server:
container_name: bot
build:
context: .
ports:
- 8000:8000 // 改左邊的 8000,他代表 host_port,右邊是 container_port 不用動
restart: always
Ngrok 的教學可以參考這篇
架設 Linebot 的教學可以參考這篇
Line Webhook URL 的路徑我是設定 /healthlinebot/callback
Line Webhook URL 的路徑我是設定 /healthlinebot/callback
Line Webhook URL 的路徑我是設定 /healthlinebot/callback
也就是 https://BASE_URL/healthlinebot/callback
最後輸入 docker compose up -d
以及 Ngrok 8000
就可以部署囉!
我在底下有放我當初設定這個圖文選單的 postman 設定
可以透過 import 進來,然後把參數改成自己的
教學的話可以參考這篇
恭喜大家!終於完成了一個附加功能有點多的 OpenAI 聊天機器人 還偷渡了一些 docker 進來 如果成功的話歡迎讓我知道你完成了! 也很歡迎點個星星或 fork 過去改寫喔!