吳佳鑫
社會觀察者、社會企業家、教育創新者、遊戲人、媒體人、廚師,小人物與您分享眼見耳聞的生活大小事。
Anything will understand slightly a spot, life more color spots
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 valuesignature = request.headers['X-Line-Signature']# get request body as textbody = request.get_data(as_text=True)app.logger.info("Request body: " + body)# handle webhook bodytry:line_handler.handle(body, signature)except InvalidSignatureError:abort(400)return 'OK'@line_handler.add(MessageEvent, message=TextMessage)def handle_message(event):global working_statusif event.message.type != "text":returnworking_status = Trueif 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()
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.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)
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)
Flask==2.2.2
Flask==2.2.2line-bot-sdkopenai
{"builds": [{"src": "api/index.py","use": "@vercel/python"}],"routes": [{"src": "/(.*)","dest": "api/index.py"}]}
@app.route("/webhook", methods=['POST'])
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()
import openaiopenai.api_key = "YOUR_API_KEY"response = openai.Completion.create(engine="chatbot",prompt="Hello, how are you today?",max_tokens=20)print(response.text)
def __init__(self):self.prompt = Prompt()self.model = "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()