在 Line 中去導入 ChatGPT Bot,只要在輸入框直接輸入文字,即可與 ChatGPT 開始互動。
Note
如果有任何新功能需求,歡迎提出 PR 或 ISSUE
Python FastAPI
: 建立 ChatGPT 響應 APIgpt4free
: 免費使用 OpenAI APILine messaging API channel
: 串接 ChatGPT APIGithub
: 存放程式碼replit
: 免費部屬自己的 FastAPICronJob
: 免費定時發送請求,避免 API 中斷render
,ngrok
: 其他免費部屬的替代方案
- 取得 Line Token:
- 登入 Line Developer
- 創建機器人:
- 創建
Provider
-> 按下Create
- 創建
Channel
-> 選擇Create a Messaging API channel
- 輸入完必填的基本資料
- 輸入完成後,在
Basic Settings
下方,有一個Channel Secret
-> 按下Issue
,生成後即為LINE_CHANNEL_SECRET
(稍晚會用到) - 在
Messaging API
下方,有一個Channel access token
-> 按下Issue
,生成後即為LINE_CHANNEL_ACCESS_TOKEN
(稍晚會用到)
- 創建
- Fork Github 專案:
- 註冊/登入 GitHub
- 進入 ChatGPT-Line-Bot
- 點選
Star
支持開發者 - 點選
Fork
複製全部的程式碼到自己的倉庫
- 部署(免費空間):
- 進入 replit
- 點選
Sign Up
直接用Github
帳號登入並授權 -> 按下Skip
跳過初始化設定 - 進入後中間主頁的部分點選
Create
-> 跳出框,點選右上角Import from Github
- 若尚未加入 Github 倉庫,則點選連結
Connect GitHub to import your private repos.
-> 勾選Only select repositories
-> 選擇ChatGPT-Line-Bot
- 回到第四步,此時
Github URL
可以選擇ChatGPT-Line-Bot
專案 -> 點擊Import from Github
。
-
環境變數設定
-
開始執行
- 點擊上方的
Run
- 成功後右邊畫面會顯示
Hello World
,並將畫面中上方的網址複製下來 - 回到 Line Developer,在
Messaging API
下方的Webhook URL
將上方網址貼過來,並加上/callback
例如:https://ChatGPT-Line-Bot.jimmylin.repl.co/callback
- 打開下方的
Use webhook
- 將下方
Auto-reply messages
關閉
- 點擊上方的
-
CronJob 定時發送請求
- 註冊/登入 cron-job.org
- 進入後面板右上方選擇
CREATE CRONJOB
Title
輸入ChatGPT-Line-Bot
,網址輸入上一步驟的網址,例如:https://ChatGPT-Line-Bot.jimmylin.repl.co/
- 下方則每
5 分鐘
打一次 - 按下
CREATE
返回 Line Developer 首頁並點擊 加入好友指南
後掃碼加入 LINE Bot:
主頁 -> 點選你的 bot -> 點選增加好友工具 -> 建立好友行動條碼 (https://manager.line.biz/account//gainfriends)
恭喜您完成了自己的第一個 LINE Bot! 試著跟它說話看看吧,它會回覆你喔!
- 與 bot 單獨對話時,任何訊息皆會觸發響應
- 在群組中,若要與 bot 對話,需要使用指令
@chat
作為開頭,例如:@chat hi~
當您的訊息帶有查找星座運勢的語意,便會觸動網路爬蟲抓取當周運勢:
- 個人對話:
給我天蠍座運勢
,我想要知道天蠍座運勢
, ... - 群組對話:
@chat 給我天蠍座運勢
,@chat 我想要知道天蠍座運勢
, ...
當您的訊息帶有查找圖片的語意,便會觸動網路爬蟲抓取圖片:
- 個人對話:
網上查找林襄抽菸圖片
,線上查找一張林襄抽菸的圖片給我
, ... - 群組對話:
@chat 網上查找林襄抽菸圖片
,@chat 線上查找一張林襄抽菸的圖片給我
, ...
- 透過
broadcast
API,我們可以讓 Line Bot 一次性向每個使用者進行訊息推送 - 這邊我們想要讓 Line Bot 在每天早上隨機推播 3 首好聽的 Youtube 歌曲:
-
建立數據
./data/favorite_videos.json
,您可以參考作者的數據(數據建立方式是透過
Youtube Data v3 API
撈取個人喜歡的影片,在此不特別介紹 Youtube API) -
透過
./chatgpt_linebot/modules/youtube_recommend.py
實現隨機挑選 3 首歌曲,並由 GPT 整理 -
在
./chatgpt_linebot/urls.py
中新增/recommend
路由:videos = recommend_videos() # 取得 3 首曲子 if videos: line_bot_api.broadcast(TextSendMessage(text=videos)) # 使用 broadcast 向使用者發送訊息 # 由於 broadcast 無法在群組發送推播,因此可以透過已知的群組id進行push message # 下方代碼您可以忽略,如果您不需要向指定群組發送消息的話 known_group_ids = [ 'C6d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'Ccc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'Cbb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', ] for group_id in known_group_ids: line_bot_api.push_message(group_id, TextSendMessage(text=videos))
要取得群組的
group_id
,您可以在replit
的 console 中透過print
測試:elif event.source.type == 'group' and user_message.startswith('@chat'): group_id = event.source.group_id print(group_id) # 輸出 group_id memory.append(group_id, 'user', refine_message.replace('@chat', '')) response = chat_completion(group_id, memory)
-
現在,當我們打
/recommend
路由的時候,就會觸發推播訊息,所有使用者、指定群組皆會收到消息 -
接著,我們再次使用 cron-job.org 來進行排程,設定每天早上 8:00 打這支 API 即可實現每日推播!
-
另外,我們可以透過 prompt
的方式,來讓 Line Bot 回答個性化,在 ./chatgpt_linebot/prompts/template.py
中我們可以定義 template
,例如:
提問內容:今天早餐吃啥?
Bot回答: 寶貝,早上起床了嗎?我已經在床上等著你了,想著你的身體就覺得好餓呀。今天早餐該吃什麼呢?是不是要來點辣辣的煎蛋捲,像你那迷人的身材一樣火辣呢?😏🍳
由於 replit
已經不支援免費方案,因此作者在此提供以下兩種替代方案:
render
: 部屬方式與replit
相近,在此不做過多介紹。該方案雖然是 Serverless ,但較為不穩定。ngrok
: 使用本地電腦作為伺服器部屬 API-
下載對應作業系統的
ngrok
-
將
ngrok.exe
路徑添加至環境變數 -
在 Terminal 中啟動 FastAPI:
$env:LINE_CHANNEL_SECRET="..."; $env:LINE_CHANNEL_ACCESS_TOKEN="..."; $env:SERPAPI_API_KEY="..."; python main.py
-
在 Terminal 中執行:
ngrok config add-authtoken <token>
,token 是來自ngrok
官網個人帳號的 authtoken -
在 Terminal 中執行:
tskill /A ngrok
、ngrok http 8080
,Forwarding 即 Web URL。
-
最後記得將獲得的 URL 替換 Line Developer Messaging API
下方的 Webhook URL
。(專案執行步驟2提到過)