EduTechTeam's picture
Update app.py
535ef75 verified
raw
history blame
2.02 kB
import openai
import gradio as gr
import os
from dotenv import load_dotenv
# 載入 .env 環境變數(如果你有放 .env 檔案)
load_dotenv()
# 設定 API Key
openai.api_key = os.getenv("OPENAI_API_KEY")
if openai.api_key is None:
raise ValueError("請設定環境變數 OPENAI_API_KEY,確保 API Key 可用")
# 建立男友聊天機器人函數,加入 log 訊息
def boyfriend_chatbot(user_input, history):
history = history or []
log_messages = []
# 系統角色說明
messages = [{"role": "system", "content": "你是一個溫柔、貼心的男友,總是關心對方的感受,給予支持和鼓勵,用輕鬆、暖心的語氣回應。"}]
for user_msg, bot_msg in history:
messages.append({"role": "user", "content": user_msg})
messages.append({"role": "assistant", "content": bot_msg})
messages.append({"role": "user", "content": user_input})
try:
response = openai.ChatCompletion.create(
model="gpt-4o",
messages=messages
)
reply = response.choices[0].message.content
history.append((user_input, reply))
log = f"[✅ Success] 回應完成,共 {len(messages)} 則對話。"
except Exception as e:
reply = "抱歉,出現了一些錯誤 😢"
log = f"[❌ Error] {str(e)}"
return reply, history, log
# 使用 Gradio Blocks 來加上 log 顯示
with gr.Blocks(title="貼心男友聊天機器人") as demo:
gr.Markdown("# 💕 貼心男友聊天機器人 💕")
chatbot = gr.Chatbot()
msg = gr.Textbox(label="輸入你的訊息")
log_output = gr.Textbox(label="狀態日誌", interactive=False)
clear = gr.Button("清除對話")
def respond(user_input, history):
return boyfriend_chatbot(user_input, history)
msg.submit(respond, inputs=[msg, chatbot], outputs=[chatbot, chatbot, log_output])
clear.click(lambda: ([], "", ""), outputs=[chatbot, msg, log_output])
# 啟動介面
demo.launch(share=True)