zhangyang6 commited on
Commit
9e62907
·
1 Parent(s): fcc0bf9

Add application file

Browse files
Files changed (2) hide show
  1. app.py +93 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+ import json
3
+ import requests
4
+
5
+ import gradio as gr
6
+
7
+ import time
8
+ import jwt
9
+
10
+ SYSTEM_PROMPT = """你是一个心理学家,擅长通过跟用户对话的方式,判断用户的意图和情绪。"""
11
+
12
+ TOPIC_PROMPT_TEMPLATE = """
13
+ 目前你想讨论的话题有["星座","旅行","音乐","其他"]。例如,
14
+ user: 今晚的星空很美
15
+ ai: 星座
16
+
17
+ user: 我曾经买过一把吉他
18
+ ai: 音乐
19
+
20
+ 根据下面的聊天记录
21
+ {history}
22
+
23
+ 请识别用户想谈论的话题,只返回["星座","旅行","音乐","其他"]中的一个,不要返回多余的内容,使用中文。
24
+ """
25
+
26
+ EMOTION_PROMPT_TEMPLATE = """
27
+ 根据下面的聊天记录
28
+ {history}
29
+
30
+ 判断用户的尬聊程度,10分是最尴尬,0分是最兴奋,请只给出分数的数字,不要返回多余的内容。
31
+ """
32
+
33
+
34
+ def encode_jwt_token(ak, sk):
35
+ headers = {
36
+ "alg": "HS256",
37
+ "typ": "JWT"
38
+ }
39
+ payload = {
40
+ "iss": ak,
41
+ "exp": int(time.time()) + 1800, # 填写您期望的有效时间,此处示例代表当前时间+30分钟
42
+ "nbf": int(time.time()) - 5 # 填写您期望的生效时间,此处示例代表当前时间-5秒
43
+ }
44
+ token = jwt.encode(payload, sk, headers=headers)
45
+ return token
46
+
47
+
48
+ def sensenova_classification(ak, sk, c_type, history):
49
+ messages = [{
50
+ "role": "system",
51
+ "content": SYSTEM_PROMPT
52
+ }]
53
+ if c_type == "话题":
54
+ messages.append({
55
+ "role": "user",
56
+ "content": TOPIC_PROMPT_TEMPLATE.format(history=history)
57
+ })
58
+ elif c_type == "情绪":
59
+ messages.append({
60
+ "role": "user",
61
+ "content": EMOTION_PROMPT_TEMPLATE.format(history=history)
62
+ })
63
+ else:
64
+ raise ValueError("不支持的识别类型")
65
+
66
+ data = {
67
+ "messages": messages,
68
+ "model": "nova-ptc-xl-v2-1-0-8k-internal",
69
+ }
70
+ logging.info("request data: %s", json.dumps(data, ensure_ascii=False, indent=2))
71
+
72
+ response = requests.post(url="https://api.sensenova.cn/v1/llm/chat-completions", headers={
73
+ "Authorization": "Bear " + encode_jwt_token(ak, sk),
74
+ }, json=data, stream=True)
75
+
76
+ if response.status_code == 200:
77
+ return response.json()["data"]["choices"][0]["message"]
78
+ return response.content
79
+
80
+
81
+ with gr.Blocks() as demo:
82
+ input_ak = gr.Textbox("AK", label="AK")
83
+ input_sk = gr.Textbox("SK", label="SK")
84
+ chat_history = gr.TextArea(placeholder="user: 今天星空很美\nai: ", label="聊天记录")
85
+ classification_type = gr.Dropdown(choices=["话题", "情绪"])
86
+ output = gr.Textbox(label="识别结果")
87
+ greet_btn = gr.Button("识别")
88
+ greet_btn.click(
89
+ sensenova_classification, inputs=[input_ak, input_sk, classification_type, chat_history],
90
+ outputs=output)
91
+
92
+ if __name__ == "__main__":
93
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ PyJWT==2.6.0
2
+ requests
3
+ gradio