File size: 1,609 Bytes
11e4790
 
9e3b21a
6530075
11e4790
9e3b21a
 
 
 
8414f72
 
 
 
 
 
3c6552e
9e3b21a
3c6552e
 
 
 
 
9e3b21a
 
 
 
3c6552e
9e3b21a
 
 
 
 
3c6552e
9e3b21a
3c6552e
9e3b21a
 
 
 
3c6552e
9e3b21a
 
 
3c6552e
9e3b21a
3c6552e
 
9e3b21a
 
11e4790
9e3b21a
 
3c6552e
9e3b21a
 
11e4790
9e3b21a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 转换为字符串
    return df.to_string()

def respond(user_message, df_string, chat_history):
    sys_content = f"你是一个资料分析师,以下是数据分析资料:\n{df_string}"
    messages = chat_history if chat_history is not None else []
    messages.append({"role": "system", "content": sys_content})
    messages.append({"role": "user", "content": user_message})

    request_payload = {
        "model": "gpt-4-1106-preview",
        "messages": messages,
        "max_tokens": 2000
    }

    response = client.chat.completions.create(**request_payload)
    response_text = response.choices[0].message.content.strip()

    messages.append({"role": "assistant", "content": response_text})

    return "", messages

with gr.Blocks() as demo:
    with gr.Row():
        file_upload = gr.File(label="Upload your file")
        df_string_output = gr.Variable()

    with gr.Row():
        chatbot = gr.Chatbot()

    with gr.Row():
        msg = gr.Textbox(label="请输入对话内容")
        send_button = gr.Button("发送")

    file_upload.change(process_file, inputs=file_upload, outputs=df_string_output)

    send_button.click(
        respond, 
        inputs=[msg, df_string_output, chatbot], 
        outputs=[msg, chatbot]
    )

demo.launch()