Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
import json | |
import requests | |
from typing import List, Tuple | |
# 環境變數設置 | |
XAI_API_KEY = os.getenv("XAI_API_KEY") | |
if not XAI_API_KEY: | |
raise ValueError("Please set XAI_API_KEY environment variable") | |
def call_grok_api(messages: List[dict]) -> str: | |
"""調用Grok API""" | |
headers = { | |
"Content-Type": "application/json", | |
"Authorization": f"Bearer {XAI_API_KEY}" | |
} | |
data = { | |
"messages": messages, | |
"model": "grok-beta", | |
"stream": False, | |
"temperature": 0.7 | |
} | |
try: | |
response = requests.post( | |
"https://api.x.ai/v1/chat/completions", | |
headers=headers, | |
json=data | |
) | |
response.raise_for_status() | |
return response.json()["choices"][0]["message"]["content"] | |
except requests.exceptions.RequestException as e: | |
return f"Error calling Grok API: {str(e)}" | |
def format_history(history: List[Tuple[str, str]]) -> List[dict]: | |
"""將聊天歷史格式化為Grok API需要的格式""" | |
formatted_messages = [ | |
{ | |
"role": "system", | |
"content": """You are Grok, a chatbot inspired by the Hitchhikers Guide to the Galaxy. | |
Please respond in Traditional Chinese (繁體中文). | |
Keep your responses natural and conversational while maintaining Traditional Chinese characters.""" | |
} | |
] | |
for user_msg, assistant_msg in history: | |
if user_msg: | |
formatted_messages.append({ | |
"role": "user", | |
"content": user_msg | |
}) | |
if assistant_msg: | |
formatted_messages.append({ | |
"role": "assistant", | |
"content": assistant_msg | |
}) | |
return formatted_messages | |
def respond(message: str, history: List[Tuple[str, str]]) -> Tuple[str, List[Tuple[str, str]]]: | |
"""處理用戶輸入並生成回應""" | |
# 格式化歷史記錄並添加新消息 | |
history_for_api = format_history(history + [(message, None)]) | |
# 獲取Grok的回應 | |
response = call_grok_api(history_for_api) | |
# 返回更新後的歷史記錄和空字符串(用於清除輸入框) | |
history.append((message, response)) | |
return "", history | |
# 創建Gradio界面 | |
with gr.Blocks() as demo: | |
gr.Markdown(""" | |
# Grok 聊天機器人 | |
與 Elon Musk 的 Grok AI 聊天!這個聊天機器人使用了 xAI 的 Grok API。 | |
""") | |
chatbot = gr.Chatbot( | |
value=[], | |
height=500, | |
bubble_full_width=False, | |
show_copy_button=True, | |
) | |
with gr.Row(): | |
msg = gr.Textbox( | |
placeholder="輸入訊息...", | |
container=False, | |
scale=7, | |
autofocus=True, # 自動聚焦到輸入框 | |
) | |
clear = gr.ClearButton([msg, chatbot], variant="secondary", scale=1) | |
# 注意這裡輸出添加了msg,用於清除輸入框 | |
msg.submit(respond, [msg, chatbot], [msg, chatbot], api_name="chat") | |
demo.queue() | |
# 啟動應用 | |
if __name__ == "__main__": | |
demo.launch() |