ChatGPT + LineBot + Vercel +Github+Python +flask 串起LINE聊天机器

LINE聊天机器人,真的不太好设定一个步骤有错都会卡关,我亦弄好久才得到初体验,分享给大家
参考来自
https://vocus.cc/article/639da520fd89780001e965d7
详细步骤流程:
1.取得OPEN API KEY(需自行设定取得)
2.LineBot Channel access token 、Channel secret(需自行设定取得)
3.Vercel 汇入 GitHub 原码 (建议用GitHub建Vercel 帐号)
4.GitHub 原码部分(上传以下三个档案到自已 GitHub)
index.py

from flask import Flask, request, abortfrom linebot import LineBotApi, WebhookHandlerfrom linebot.exceptions import InvalidSignatureErrorfrom linebot.models import MessageEvent, TextMessage, TextSendMessagefrom api.chatgpt import ChatGPTimport osline_bot_api = LineBotApi(os.getenv("LINE_CHANNEL_ACCESS_TOKEN"))line_handler = WebhookHandler(os.getenv("LINE_CHANNEL_SECRET"))working_status = os.getenv("DEFALUT_TALKING", default = "true").lower() == "true"app = Flask(__name__)chatgpt = ChatGPT()# domain root@app.route('/')def home():    return 'Hello, World!'@app.route("/webhook", methods=['POST'])def callback():    # get X-Line-Signature header value    signature = request.headers['X-Line-Signature']    # get request body as text    body = request.get_data(as_text=True)    app.logger.info("Request body: " + body)    # handle webhook body    try:        line_handler.handle(body, signature)    except InvalidSignatureError:        abort(400)    return 'OK'@line_handler.add(MessageEvent, message=TextMessage)def handle_message(event):    global working_status    working_status = True        if event.message.type != "text":        return        if working_status:        chatgpt.add_msg(f"Human:{event.message.text}?\n")        reply_msg = chatgpt.get_response().replace("AI:", "", 1)        chatgpt.add_msg(f"AI:{reply_msg}\n")        line_bot_api.reply_message(            event.reply_token,            TextSendMessage(text=reply_msg))if __name__ == "__main__":    app.run()

chatgpt.py

from api.prompt import Promptimport osimport openaiopenai.api_key = os.getenv("OPENAI_API_KEY")class ChatGPT:    def __init__(self):        self.prompt = Prompt()        self.model = os.getenv("OPENAI_MODEL", default = "text-davinci-003")        #self.model = os.getenv("OPENAI_MODEL", default = "chatbot")        self.temperature = float(os.getenv("OPENAI_TEMPERATURE", default = 0))        self.frequency_penalty = float(os.getenv("OPENAI_FREQUENCY_PENALTY", default = 0))        self.presence_penalty = float(os.getenv("OPENAI_PRESENCE_PENALTY", default = 0.6))        self.max_tokens = int(os.getenv("OPENAI_MAX_TOKENS", default = 240))    def get_response(self):        response = openai.Completion.create(            model=self.model,            prompt=self.prompt.generate_prompt(),            temperature=self.temperature,            frequency_penalty=self.frequency_penalty,            presence_penalty=self.presence_penalty,            max_tokens=self.max_tokens        )        return response['choices'][0]['text'].strip()    def add_msg(self, text):        self.prompt.add_msg(text)

prompt.py

import oschat_language = os.getenv("INIT_LANGUAGE", default = "zh")MSG_LIST_LIMIT = int(os.getenv("MSG_LIST_LIMIT", default = 20))LANGUAGE_TABLE = {  "zh": "嗨!",  "en": "Hi!"}class Prompt:    def __init__(self):        self.msg_list = []        self.msg_list.append(f"AI:{LANGUAGE_TABLE[chat_language]}")        def add_msg(self, new_msg):        if len(self.msg_list) >= MSG_LIST_LIMIT:            self.remove_msg()        self.msg_list.append(new_msg)    def remove_msg(self):        self.msg_list.pop(0)    def generate_prompt(self):        return '\n'.join(self.msg_list)

5.Vercel Environment Variables 环境设定(带入PYTHON 参数)
http://img2.58codes.com/2024/20136076jy3C6alFZI.png
6.LineBot Webhook(一定要有成功画面)
http://img2.58codes.com/2024/20136076Af2Pi8qHDu.png

当以上这么多设定都成功后便会得到以下Line BOT 回应,成为真正的LINE聊天机器人,我试很久才弄出来如下:
http://img2.58codes.com/2024/20136076mOyi79RqlK.png


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章