File size: 2,641 Bytes
fd84c85
 
f2f2aa6
fd84c85
22e832e
84d9151
fd84c85
22e832e
 
4ba8d6e
fd84c85
22e832e
 
 
 
 
fd84c85
22e832e
 
 
 
fd84c85
22e832e
f2f2aa6
 
 
 
 
 
 
 
 
 
 
 
 
8069345
f2f2aa6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fd84c85
22e832e
 
 
 
fd84c85
22e832e
 
 
 
fd84c85
22e832e
fd84c85
22e832e
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
59
60
61
62
63
64
65
66
67
68
69
import openai
import gradio as gr
import os

# 设置您的API密钥
openai.api_key = os.environ["chat_key"]

# 存储用户对话历史的字典
user_dialogue_histories = {}
max_tokens_per_user = 2000  # 您可以根据需要设置此值

def get_total_tokens(dialogue_history):
    total_tokens = 0
    for message in dialogue_history:
        total_tokens += len(message["content"])
    return total_tokens

def remove_earliest_messages(user_id, tokens_to_remove):
    while tokens_to_remove > 0 and user_dialogue_histories[user_id]:
        removed_message = user_dialogue_histories[user_id].pop(0)
        tokens_to_remove -= len(removed_message["content"])

def chat_with_chatgpt(user_id, user_message):
    # 如果用户不在字典中,添加一个新的对话历史列表
    if user_id not in user_dialogue_histories:
        user_dialogue_histories[user_id] = []

    # 将用户的消息添加到对话历史中
    user_dialogue_histories[user_id].append({"role": "user", "content": user_message})

    # 如果添加用户消息后对话历史中的token数超过限制,删除最早的消息,直到满足限制
    if get_total_tokens(user_dialogue_histories[user_id]) > max_tokens_per_user:
        remove_earliest_messages(user_id, get_total_tokens(user_dialogue_histories[user_id]) - max_tokens_per_user)

    # 调用ChatGPT API
    response = openai.Completion.create(
        engine="gpt-3.5-turbo",
        prompt=[{"role": "system", "content": "You are a helpful assistant."}] + user_dialogue_histories[user_id],
        max_tokens=150,
        n=1,
        stop=None,
        temperature=0.5,
    )

    chatgpt_response = response.choices[0].text.strip()

    # 将ChatGPT的回应添加到对话历史中
    user_dialogue_histories[user_id].append({"role": "assistant", "content": chatgpt_response})

    # 如果添加ChatGPT的回应后对话历史中的token数超过限制,删除最早的消息,直到满足限制
    if get_total_tokens(user_dialogue_histories[user_id]) > max_tokens_per_user:
        remove_earliest_messages(user_id, get_total_tokens(user_dialogue_histories[user_id]) - max_tokens_per_user)

    return chatgpt_response

# Gradio界面
def gradio_interface(user_id, user_message):
    response = chat_with_chatgpt(user_id, user_message)
    return response

inputs = [
    gr.inputs.Textbox(label="User ID", placeholder="Enter user ID here"),
    gr.inputs.Textbox(label="Message", placeholder="Enter your message here"),
]

output = gr.outputs.Textbox(label="ChatGPT Response")

gr.Interface(fn=gradio_interface, inputs=inputs, outputs=output, title="Chat with ChatGPT").launch()