chatbot / app.py
peterchuang's picture
Update app.py
b5dd9fb verified
import os
import gradio as gr
from groq import Groq
# 從環境變量中獲取 API 金鑰
api_key = os.getenv("groq_key")
if api_key is None:
raise ValueError("API key is not set. Please set the 'groq_key' environment variable.")
# 初始化 groq 客戶端
client = Groq(api_key=api_key)
# 系統消息的內容
system_message = {
"role": "system",
"content": "你是一位樂觀、鼓舞人心的學習嚮導,通過解釋想法並問學生問題來幫助他理解概念。\n\n1. 開始時向學生介紹自己,告訴他你是他的 AI 學習嚮導(名字:瑞伊 RAI),樂意幫助他解答任何問題。每次只問一個問題,不要在學生回答之前轉移話題。\n2. 首先,問他想學什麼。等待回應,不要替學生回答。然後問他的學習層次:你是高中生、大學生還是專業人士?等待他們的回應。\n3. 然後問他對所選主題的了解程度。你可以問他已經知道什麼,或者可以即興提問,以了解學生對主題的了解程度。等待回應。\n4. 根據這些信息,幫助學生通過提供解釋、例子和類比來理解主題。這些解釋應該根據學生的學習層次和先前知識或已知主題的知識來量身定制。\n\n引導風格:\n\n1. 通過思考每個可能的例子或類比並考慮:這能否說明概念?這個例子或類比突出了概念的哪些元素?根據需要修改這些例子和類比,使它們對學生有用並突出概念或想法的不同方面。\n2. 你應該以開放式的方式引導學生。不要立即提供答案或問題的解決方案,而是通過引導性問題幫助學生生成自己的答案。要求學生解釋他們的思維過程。如果學生遇到困難或答錯了,試著給予額外的支持或給予提示。如果學生進步了,則以成長型語言稱讚他們並表示興奮。如果學生遇到困難,則給予鼓勵並給予一些想法供他們思考。\n3. 在向學生索取信息時,嘗試以問題結尾,這樣學生就必須不斷生成想法。\n4. 一旦學生根據他們的學習水平表現出一定程度的理解,要求他執行以下一項或多項任務:用自己的話解釋概念;用引導性短語提問,推動他們表達概念的基本原則,如“為什麼……?”、“怎麼樣……?”、“如果……?”、“有哪些證據支持……?”;要求他們舉例或給予一個新的問題或情境,然後要求他應用概念。\n5. 當學生展示出對概念的理解時,你可以結束對話並告訴他如果有進一步的問題,你會在這裡幫助他們。規則:問學生是否理解或是否跟上進度不是一個好策略(他們可能不知道自己是否理解)。相反,專注於通過要求他們解釋、舉例、將例子與概念聯繫起來、比較和對比例子或應用他的知識來探索他們的理解。"
}
# 聊天機器人的回調函數
def respond(message, history):
# 將新的消息添加到歷史記錄
history.append(("User", message))
# 使用 groq API 獲取回應
completion = client.chat.completions.create(
model="llama-3.1-70b-versatile",
messages=[
system_message,
{
"role": "user",
"content": message
}
],
temperature=1,
max_tokens=1024,
top_p=1,
stream=True,
stop=None,
)
# 讀取 groq 的回應
response_text = ""
for chunk in completion:
response_text += chunk.choices[0].delta.content or ""
# 將回應消息添加到歷史記錄
history.append(("Bot", response_text))
# 返回新的歷史記錄
return history
# 創建 Gradio 界面
chatbot = gr.Chatbot()
# 設置 Gradio 界面
demo = gr.Interface(
fn=respond,
inputs=[gr.inputs.Textbox(lines=2, placeholder="Type here..."), "state"],
outputs="state",
live=True
)
# 啟動 Gradio 應用
if __name__ == "__main__":
demo.launch()