dsaigc commited on
Commit
fd4eeea
·
1 Parent(s): c7df5a6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +89 -0
app.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import openai
2
+ import os
3
+
4
+
5
+ import gradio as gr
6
+ import openai
7
+ import backoff # for exponential backoff
8
+ from reportlab.lib.pagesizes import letter
9
+ from reportlab.lib import colors
10
+ from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
11
+ from reportlab.lib.styles import getSampleStyleSheet
12
+ from reportlab.lib.enums import TA_CENTER
13
+
14
+ openai.api_key = os.environ['chat_key']
15
+
16
+ class SessionManager:
17
+ def __init__(self):
18
+ self.sessions = {}
19
+
20
+ def add_message(self, session_id, message):
21
+ if session_id not in self.sessions:
22
+ self.sessions[session_id] = []
23
+ self.sessions[session_id].append(message)
24
+
25
+ def get_messages(self, session_id):
26
+ return self.sessions.get(session_id, [])
27
+
28
+ # 自定义一个函数,用于将对话消息整理为简短概要
29
+ def summarize_message(message):
30
+ # 在这个示例中,我们简单地返回原始消息。
31
+ # 你可以根据需要替换为更复杂的逻辑,以提取关键信息并生成简短概要。
32
+ return message
33
+
34
+ session_manager = SessionManager()
35
+ def chat_gpt(session_id, user_message, model="gpt-3.5-turbo", max_tokens=4096):
36
+ # 将用户消息添加到对应的会话中
37
+ summarized_message = summarize_message(f"User: {user_message}")
38
+ session_manager.add_message(session_id, summarized_message)
39
+
40
+ # 获取当前会话的消息列表
41
+ message_list = session_manager.get_messages(session_id)
42
+
43
+ # 组合聊天历史
44
+ conversation = "\n\n".join(message_list)
45
+
46
+ # 检查对话历史是否超过模型的token限制
47
+ tokens_length = len(conversation.split())
48
+
49
+ if tokens_length > max_tokens:
50
+ # 移除早期消息,直到满足token限制
51
+ while tokens_length > max_tokens:
52
+ message_list.pop(0)
53
+ conversation = "\n\n".join(message_list)
54
+ tokens_length = len(conversation.split())
55
+
56
+ # 生成聊天回复
57
+ response = openai.ChatCompletion.create(
58
+ model= model,
59
+ messages=[{"role": "system", "content": "你好,请问有什么问题我可以帮您解答吗?"}] +
60
+ [{"role": "user", "content": msg} for msg in message_list],
61
+ # system 中 定义回答问题的具体类型等
62
+ temperature=0.5,
63
+ max_tokens=150,
64
+ top_p=1,
65
+ frequency_penalty=0,
66
+ presence_penalty=0,
67
+ stop=["\n\n"],
68
+ )
69
+ assistant_response = response.choices[0].message.content
70
+
71
+ # 将助手回复添加到对应的会话中
72
+ summarized_message = summarize_message(f"Assistant: {assistant_response}")
73
+ session_manager.add_message(session_id, summarized_message)
74
+
75
+ return assistant_response
76
+
77
+ #示例
78
+ session_id = "session_1"
79
+
80
+
81
+ def gradio_chat_gpt(input_text):
82
+ session_id = "gradio_session"
83
+ return chat_gpt(session_id, input_text)
84
+
85
+ input_text = gr.inputs.Textbox(lines=5, placeholder="请输入你的问题...")
86
+ output_text = gr.outputs.Textbox()
87
+ iface = gr.Interface(fn=gradio_chat_gpt, inputs=input_text, outputs=output_text, title="ChatGPT", description="与GPT模型聊天")
88
+
89
+ iface.launch()