video_bot_999 / app.py
youngtsai's picture
back
ef94623
raw
history blame
No virus
2.41 kB
import gradio as gr
import pandas as pd
import os
from openai import OpenAI
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=OPENAI_API_KEY)
def process_file(file):
# 读取文件
if file.name.endswith('.csv'):
df = pd.read_csv(file)
else:
df = pd.read_excel(file)
# 将 DataFrame 转换为字符串
df_string = df.to_string()
# 返回 DataFrame 字符串,以用作聊天机器人的系统提示
return df_string
def respond(user_message, chat_history):
print("=== 變數:user_message ===")
print(user_message)
print("=== 變數:chat_history ===")
print(chat_history)
sys_content = f"你是一個資料分析師,請用 {df_string_output} 為資料進行對話"
messages = [
{"role": "system", "content": sys_content},
{"role": "user", "content": user_message}
]
print("=====messages=====")
print(messages)
print("=====messages=====")
request_payload = {
"model": "gpt-4-1106-preview",
"messages": messages,
"max_tokens": 2000 # 設定一個較大的值,可根據需要調整
}
response = client.chat.completions.create(**request_payload)
print(response)
response_text = response.choices[0].message.content.strip()
# 更新聊天历史
new_chat_history = (user_message, response_text)
if chat_history is None:
chat_history = [new_chat_history]
else:
chat_history.append(new_chat_history)
# 返回聊天历史和空字符串清空输入框
return "", chat_history
with gr.Blocks() as demo:
with gr.Row():
file_upload = gr.File(label="Upload your file")
df_string_output = gr.Textbox(label="DataFrame as String", visible=False)
with gr.Row():
chatbot = gr.Chatbot()
with gr.Row():
with gr.Column():
with gr.Group():
# password_input = gr.Textbox(label="Password", type="password")
msg = gr.Textbox(label="請输入對話內容")
send_button = gr.Button("發送")
# 当文件上传时,更新 DataFrame 字符串
file_upload.change(process_file, inputs=file_upload, outputs=df_string_output)
# 处理聊天机器人的对话
send_button.click(
respond,
inputs=[msg, chatbot],
outputs=[msg, chatbot]
)
demo.launch()