test / app.py
Browen0311's picture
Update app.py
f6ebebb verified
import os
import gradio as gr
# 安裝 groq 套件
try:
from groq import Groq
except ImportError:
os.system('pip install groq')
from groq import Groq
# 設置 API 金鑰
groq_key = os.getenv("groq_key")
client = Groq(api_key=groq_key)
# 定義聊天機器人回應函式
def chat_response(message, history):
"""
用戶端聊天回應函式,與 groq 客戶端交互。
:param message: 用戶輸入的訊息。
:param history: 聊天歷史記錄。
:return: 更新的聊天歷史。
"""
# 構建訊息歷史
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": message})
# 生成回應
try:
completion = client.chat.completions.create(
model="llama-3.1-70b-versatile",
messages=messages,
temperature=1,
max_tokens=1024,
top_p=1,
stream=True,
stop=None,
)
# 解析並累積回應
bot_message = ""
for chunk in completion:
if chunk.choices[0].delta.content:
bot_message += chunk.choices[0].delta.content
history.append((message, bot_message))
except Exception as e:
# 如果請求出錯,回應錯誤訊息
history.append((message, f"Error: {str(e)}"))
return history, history
# 構建 Gradio 界面
with gr.Blocks() as demo:
chatbot = gr.Chatbot(label="Groq 國文老師 Chatbot")
message = gr.Textbox(label="輸入你的訊息")
state = gr.State([])
def user_input(user_message, history):
"""
用戶輸入訊息,更新歷史。
:param user_message: 用戶的輸入訊息。
:param history: 聊天歷史記錄。
:return: 更新後的聊天歷史。
"""
return "", history + [[user_message, None]]
message.submit(user_input, [message, state], [message, state]) \
.then(chat_response, [message, state], [chatbot, state])
# 啟動應用程式
if __name__ == "__main__":
demo.launch()