2023年7月24日 星期一

Chatgpt的Linebot專案發布到Render伺服器

 Heroku免費帳號到2022年12月31日全面失效,因此使用Render伺服器來代替Heroku。

Render簡介

Render支援非常多種語言的建構服務,幾乎涵蓋平常會用到的需求了,如Python Web Service、PostgreSQL、Redis等。

Render免費計畫提供的免費運行時間是每個月450個小時,而450小時運行時間在只有一個服務,且24小時不間斷使用下可以用18天左右,對一般用戶足夠了!

至於在Heroku上的自動休眠機制Render也有,如果有連續15分鐘未使用會進入休眠,休眠後的甦醒時間約是30秒。

建立Github專案

由於Render專案需置於Github中,Render也可以Github帳號登入,因此使用者必須擁有Github帳號。若是沒有Github帳號,開啟「https://github.com/」網頁,按「Sign up」鈕申請一個Github新帳號。

在Github建立名稱為chatgptrender的Repository,其中有兩個檔案,< app.py>內容為:(Github的操作請自行參考相關資料)

from flask import Flask

app = Flask(__name__)


from flask import request, abort

from linebot import  LineBotApi, WebhookHandler

from linebot.exceptions import InvalidSignatureError

from linebot.models import MessageEvent, TextMessage, TextSendMessage

import openai

import os


openai.api_key = os.getenv('OPENAI_API_KEY')

line_bot_api = LineBotApi('你的Channel access token')

handler1 = WebhookHandler('你的Channel secret')


@app.route('/callback', methods=['POST'])

def callback():

    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)

    try:

        handler1.handle(body, signature)

    except InvalidSignatureError:

        abort(400)

    return 'OK'


@handler1.add(MessageEvent, message=TextMessage)

def handle_message(event):

    text1=event.message.text

    response = openai.ChatCompletion.create(

        messages=[

            {"role": "user", "content": text1}

        ],

        model="gpt-3.5-turbo",

        temperature = 0.5,

    )

    try:

        ret = response['choices'][0]['message']['content'].strip()

    except:

        ret = '發生錯誤!'

    line_bot_api.reply_message(event.reply_token,TextSendMessage(text=ret))


if __name__ == '__main__':

    app.run()

及安裝模組檔<requirements.txt>,內容為:

Flask

Gunicorn

line-bot-sdk

openai

部署Render專案

開啟「https://render.com/」網頁,如果沒有帳號就申請一個Render新帳號,然後登入進入它的 Dashboard。

點選「New Web Service」,於Connect a repository頁面點選chatgptrender右方的「Connect」鈕連結Github專案。

Namw欄位輸入名稱chatgptrender,Region選擇主機地區(此處選新加坡)。 

若是將Openai API Key置於Github的檔案中會有洩露疑慮,Openai會自動將該API Key移除,因此上面<app.py>使用讀取環境變數方式取得API Key:

openai.api_key = os.getenv('OPENAI_API_KEY')

此處需建立環境變數來儲存API Key:捲到頁面下方,點選「Add Enviroment Variable」鈕。

左方輸入環境變數名稱「OPENAI_API_KEY」,右方輸入API Key,最後點選「Create Web Service」鈕建立服務。

部署需一段時間,當顯示「Your service is live.」表示部署完成。頁面左上角的網址就是應用程式網址。

到LINE Bot Developer修改「Webhook URL」的值為App網址(此處為https://chatgptrender.onrender.com),此後就可隨時使用這個Chatgpt的 LINE Bot 了!


沒有留言:

張貼留言