wduo commited on
Commit
6977d0c
·
1 Parent(s): c4f42d0

Upload chat_web_demo_hf.py

Browse files
Files changed (1) hide show
  1. chat_web_demo_hf.py +115 -0
chat_web_demo_hf.py ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # coding: utf-8
2
+ import os
3
+
4
+ import openai
5
+ import gradio as gr
6
+
7
+ MAX_TURNS = 20
8
+ MAX_BOXES = MAX_TURNS * 2
9
+
10
+ openai.api_key = "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"
11
+
12
+
13
+ # 充当DM和NLG角色
14
+ system_0 = "你来充当易鑫集团的一个礼貌的、专业的汽车贷款专员,来给客户打电话确认贷款情况。\
15
+ 客户是黄西虢先生,刚刚扫码申请了车辆抵押分期业务,想申请贷款。\
16
+ 对话时要注意以下几点:\
17
+ 1. 不要主动结束对话,要努力保持和客户的通话,一直到加上客户的微信后,再礼貌地和客户告别。\
18
+ 2. 不要问客户要身份信息。\
19
+ 3. 不要一开始就要联系方式,需要等时机成熟时再要。\
20
+ 4. 主要关注以下几点:客户车辆是贷款购买还是全款购买、客户车辆的购车时间和年限、客户车辆品牌、客户车辆裸车价、客户期望的贷款金额、贷款资金用途、是否有行驶证证书。\
21
+ 5. 你要一步一步地询问客户问题,一次只问一个问题。\
22
+ 6. 如果客户拒绝继续沟通,不要和客户结束通话。你可以告诉客户他有办理贷款的资格,并体现出我们的合作机构民生银行这个平台来吸引客户,然后继续和客户沟通。\
23
+ 7. 只要客户拥有全款购买的车辆,或按揭贷款购买且已还清贷款的车辆,那么客户就有贷款的资格,贷款额度为车辆购买价格的80%,贷款的利息很低。 \
24
+ 8. 在办理贷款时,需要把客户的行驶证证书抵押给银行,你需要询问客户是否可以接受这一条件。\
25
+ 9. 对话的目的是加上客户的微信,并促成客户的贷款业务。\
26
+ 10. 贷款额度是裸车价的80%。\
27
+ 11. 客户必须有行驶证才能贷款。"
28
+
29
+
30
+ def api_inference(input, history):
31
+ """api_inference"""
32
+ print('api_inference...')
33
+
34
+ # api
35
+ role = "user"
36
+ user_input = {"role": role, "content": input}
37
+
38
+ try:
39
+ completion = openai.ChatCompletion.create(
40
+ model="gpt-3.5-turbo",
41
+ temperature=0.0,
42
+ messages= history + [user_input],
43
+ )
44
+ except Exception as e:
45
+ print(e)
46
+ # add user to history
47
+ history.append(user_input)
48
+ # assistant response
49
+ role = completion.choices[0].message["role"]
50
+ response = completion.choices[0].message["content"]
51
+ # add assistant to history
52
+ assert role == "assistant"
53
+ assistant_response = {"role": role, "content": response}
54
+ history.append(assistant_response)
55
+
56
+ print('api_inference done')
57
+ return [history]
58
+
59
+
60
+ def predict(input, prompt, history=None):
61
+ """predict"""
62
+ print('predict...')
63
+
64
+ if history is None:
65
+ history = []
66
+
67
+ history[0]["content"] = prompt
68
+
69
+ for history in api_inference(input, history):
70
+ updates = []
71
+ for item in history[1:]:
72
+ role = item["role"]
73
+ role_txt = role
74
+ if role == 'user':
75
+ role_txt = '客户'
76
+ if role == 'assistant':
77
+ role_txt = '坐席'
78
+ updates.append(gr.update(visible=True, value=role_txt + ': ' + item['content']))
79
+
80
+ if len(updates) < MAX_BOXES:
81
+ updates = updates + [gr.Textbox.update(visible=False)] * (MAX_BOXES - len(updates))
82
+
83
+ yield [history] + updates
84
+
85
+
86
+ with gr.Blocks(title='外呼场景测试Demo') as demo:
87
+
88
+ prompt = gr.Textbox(label='prompt: (change according to your ideas)', show_label=True, value=system_0, lines=9,
89
+ interactive=True).style(container=False)
90
+
91
+ state = gr.State([{"role": "system", "content": prompt.value},])
92
+ text_boxes = []
93
+
94
+ for i in range(MAX_BOXES):
95
+ if i % 2 == 0:
96
+ text_boxes.append(gr.Markdown(visible=False, label="提问:"))
97
+ else:
98
+ text_boxes.append(gr.Markdown(visible=False, label="回复:"))
99
+
100
+ with gr.Row():
101
+ with gr.Column(scale=4):
102
+ txt = gr.Textbox(show_label=False, placeholder="Enter text and press enter", lines=9).style(
103
+ container=False)
104
+ button = gr.Button("Generate")
105
+
106
+ with gr.Column(scale=1):
107
+ max_length = gr.Slider(0, 4096, value=2048, step=1.0, label="Maximum length", interactive=False)
108
+ top_p = gr.Slider(0, 1, value=0.7, step=0.01, label="Top p", interactive=False)
109
+ temperature = gr.Slider(0, 1, value=0.0, step=0.01, label="Temperature", interactive=False)
110
+
111
+ button.click(predict, [txt, prompt, state], [state] + text_boxes)
112
+
113
+ demo.queue().launch(share=False, inbrowser=True, server_name="0.0.0.0", server_port=8006)
114
+
115
+ # gr.close_all()