Coder Social home page Coder Social logo

howarder3 / chatgpt-linebot-using-python-flask-on-vercel Goto Github PK

View Code? Open in Web Editor NEW
227.0 4.0 391.0 91 KB

GPT-Linebot using python flask for vercel

Home Page: https://www.wongwonggoods.com/portfolio/personal_project/gpt-linebot-python-flask-for-vercel/

Python 100.00%
bot chatgpt flask gpt gpt-3 linebot python

chatgpt-linebot-using-python-flask-on-vercel's Introduction

ChatGPT-Linebot using python flask on vercel

作者註:本專案因為作者我的免費 API 額度已經用完了,然後我現在使用的是 ChatGPT Plus

如果之後要我本人更新可能要等我哪天改用 ChatGPT API 了...

現在最新的版本感謝網友 @willismax 提供的 PR:#17

但同樣的因為我沒有 ChatGPT API 的額度了... 所以也沒辦法測就直接 merge 了,

如果不能動再請大家幫忙發個 Issues/PR,感謝大大們🙏

  • last updated: 2023/10/9
    • 更新說明 by @willismax,與修正的 repo (merged)
      • vercel.json修正,改為第2版
      • 修正單純安裝Flask==2.2.2 會與 Werkzeug 衝突的問題,在 requirements.txt 添加 Werkzeug==2.3.7 (參考stack overflow)

本篇教學無經驗的新手也可學習,無須寫任何程式。

無經驗預計 15 ~ 20 分鐘都可以完成。老手最快可能 5 分鐘就搞定

  • 這是使用 python flask 套件撰寫的 ChatGPT-Linebot
  • 不需寫 code,只需去網頁設定一些內容,新手 15 分鐘內也能建立自己的 ChatGPT-Linebot
  • Why flask? 簡單好用,且支援 vercel
  • Why vercel? 免費!!!免費額度就很夠一般使用,是 heroku 不再免費後的好選擇

註:ChatGPT 與 gpt 是同樣任務的模型,而目前透過 API 只能使用到 GPT-3 (本程式使用的方法)

而非 ChatGPT 使用的 GPT-3.5

已經改為 GPT-4,與最新的 ChatGPT 相同,只是改為使用 OpenAI API 的方式實現

安裝步驟

主要會有四個地方要去:(這部份不看也沒關係,以下照著做就可以了!)

  • 我的 github repo:透過 python 串接 openai 的 API,並透過 linebot sdk 提供簡單的訊息回復
  • openai:申請 OpenAI 的 API KEY
  • line developer:創建機器人
  • vercel:提供訊息回復,雖然是 serverless 但已經很符合我們的需求

step 1. 至 github fork 專案

去我這個專案的 github repo

按下面的按鈕, fork 一份檔案到自己的帳號底下,等等我們會使用到

可以的話,旁邊的 Star 也幫我按一下,是對創作者最大的鼓勵!

step 2. 申請 OpenAI 的 API KEY

可以直接去這裡,一直往下拉,找到這個按鈕,並生成一個 API KEY

請務必複製下來,這個 KEY 我們取名為 OPENAI_API_KEY

step 3. 去 line developer 建立一個新的機器人

這邊熟悉的人動作應該超快,可以略過,

以下教學是針對完全沒經驗的新手

我們先到 line developer 的首頁註冊一下, 註冊完後,點選 Messaging API。

step 3-1. 創建新的 channel

第一次使用要創建一個新的 provider 與 channel, 一個 provider 可以有很多 channel, 「而一個 channel 對應的就是一個 chatbot」, 這邊以下都照自己想要的名字跟事實填就好。

step 3-2. 在 Basic Settings 的分頁,取得 LINE_CHANNEL_SECRET

在 Basic Settings 的分頁,往下找到 channel secret

請務必複製下來,這個 KEY 我們取名為 LINE_CHANNEL_SECRET

step 3-3. 在 Messaging API 的分頁,進行一些機器人初始設定 (並加機器人好友)

再來我們去上方,選擇 Messaging API 的分頁, 我們先關閉一些可能會吵的東西 (預設的自動回復之類的),

這邊可以順便掃一下 QR code 或透過 line ID ,加機器人的 line 好友! 

我自己是設定如下:

  • 允許加入群組要注意使用 openai 額度可能會超快
  • 自動回復訊息必關!!!」,那是 line 的自動回復,不是我們要的
  • 歡迎訊息也可以關,這邊我是開著

step 3-4. 在 Messaging API 的分頁,取得 LINE_CHANNEL_ACCESS_TOKEN

最後,在 Messaging API 的分頁的最下面, 找到 channel access token,點選右邊發行,並把他記下來。

請務必複製下來,這個 KEY 我們取名為 LINE_CHANNEL_ACCESS_TOKEN

請不要把這金鑰分享給別人,別人可能會拿去作壞事!!!

然後這邊網頁先不要關,等等還會用到!!!!

step 4. 去 vercel 設定相關的環境變數,完成啟動機器人!

step 4-1. 新增 project

vercel 首頁,add new project

Import Git Repository,選擇你剛剛 fork 的專案 import

step 4-2. 設定環境變數

選擇「Environment Variables」,把我們剛剛紀錄的 OPENAI_API_KEY、LINE_CHANNEL_SECRET、LINE_CHANNEL_ACCESS_TOKEN 都設定至環境變數, 按下 Deploy 等待一下就完成囉!

  • 完成後我們可以看到會有以下的三個環境變數

step 4-3. deploy 完成後,可以簡單確認是否有成功

去部屬完成的 vercel 頁面,紅框處可以拿到我們要用的網址,

把這個網址複製下來,等等要用

這個網址我們也可以點開,應該會出現我們在程式預先寫好的 Hello, World! (應該是一個只有 Hello, World! 的網頁) 我們可以藉此確定程式有正常的被 Deploy

step 5. 設定 webhook

回到 line developer 的 Messaging API 分頁, 將剛剛 step 4-3. 的網址填入,並在後面加上 「/webhook」,例如下圖 可以用 Verify 看看有沒有問題,通常應該會是寫「Success」

  • 記得開啟下面的使用 Use webhook

完成圖範例

此 linebot 的其他一些內建功能

機器人「說話開關」

這個本來是我除錯用的,因為有時候回復一些怪東西會很吵, 意外得到好評,所以這個功能就被保留下來

  • 輸入「說話」:機器人開啟說話模式,預設是開啟的
  • 輸入「閉嘴」:機器人暫停說話模式 (但一段時間會自動再起動),閉嘴後將不會對任何對話有反應。輸入「說話」可再次開啟對話。

其他環境參數功能

參考自 memochou1993/gpt-ai-assistant 的作法,下列參數也可藉由設定 vercel 的環境變數來作調控。

環境變數名稱 預設值 說明
OPENAI_MODEL text-davinci-003 請參考 OpenAI 對 model 的敘述
OPENAI_TEMPERATURE 0 請參考 OpenAI 對 temperature 的敘述
OPENAI_FREQUENCY_PENALTY 0 請參考 OpenAI 對 frequency_penalty 的敘述
OPENAI_PRESENCE_PENALTY 0.6 請參考 OpenAI 對 presence_penalty 的敘述
OPENAI_MAX_TOKENS 240 請參考 OpenAI 對 max_tokens 的敘述
MSG_LIST_LIMIT 20 prompt 參數往回參照的句數
INIT_LANGUAGE zh 決定初始語言,可設置為 "zh" 或 "en"

TODO List & Future Work

目前基本功能都已經有了,然後我比較忙可能沒空一直更新QQ

還有很多可以優化的地方,歡迎提供 PR!

  • (已調整完成) 回復文字感覺不是很順 (可能需要研究一下 API 使用方法)
  • (已調整完成) 記憶功能 ...

目前算法是「紀錄使用者與 AI 的前20句對話」,嘗試推論出下一句話應該要說什麼。以達成延續話題的效果。

靈感來源

參考資料

chatgpt-linebot-using-python-flask-on-vercel's People

Contributors

howarder3 avatar w95wayne10 avatar willismax avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

chatgpt-linebot-using-python-flask-on-vercel's Issues

TODO: support longer response

Currently, since we use max_token = 240. Some sentences will be cut due to the max length.
However, user can say "繼續" to continue the response.

Try to enhance this, there are many methods that can enhance this.

  • Reminder 1: Take care of unlimited responses. For example, use asks chatbot to respond in over 1000000 words. That I think it will be calculated in a REALLY LONG time.
  • Reminder 2: Vercel (Free account) will timeout after 10 secs no response. Take care of this.

TODO: support multiple chatroom

Since we use "global" in this codebase.
If user put this chatbot in "more than one chatroom", the reponse maybe weird.

ex:
A chatroom 閉嘴
B chatroom 說話
A chatroom ??? why we get response??

TODO: add version

Add version that we can verify some problem is not caused by different version.

Check timeout reason.

Currently, if we ask chatbot to response in long sentense.
Vercel will get timeout over 10 sec.

Need to check this is cause by

  1. openai api response too longer, then the system detect this line execute over 10 secs.
  2. From get message to reply message over 10 secs.

Which one?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.