mrcuizhe's picture
Update app.py
c4495c6 verified
import requests
import json
import gradio as gr
from datetime import datetime
def ai_record_analyze(score_prompt, standard_prompt, example_prompt, msg, chat_history):
sys_prompt = "你是一个销售培训专家, 我会给你完整的销售和客户沟通的对话资料, 其中每一行的会以[时间戳]和[角色]为开头,表示该对话发生的时间和说话的角色,你需要对我给你的会话进行打分和评价, 请你参照以下得分点和例子, 进行打分和评价:"
sys_prompt3 = """以上得分点中, 你需要给出打分,并给出打分的理由以及支撑你打分的对话语句;如果未得分或者得了0分,也必须要给出理由并给出优化建议,支撑语句输出空字符。请严格按照以下json格式返回,且仅返回json格式内的内容:\n[{'得分': 'xxx',\n'理由':'xxx',\n'优化建议': 'xxx',\n'支撑语句': '0:1:00-0:2:00\n0:2:01-0:3:01'}]\n其中得分你只返回所获得的分数,例如,例如1代表1分,2代表2分。优化建议中返回你认为可以改进的点或者优化的部分。支撑语句返回具体支撑语句的时间戳(每一行最前面的时间戳),你只返回时间戳,不返回该行的具体内容,如果对应多个时间戳则用换行符分隔。注意:我给你的打分标准可能会有多个,但是你返回的时候要把所有得分合并,json列表中只返回一个元素,且不以json代码块形式返回。注意:你返回的时间戳必须是一段时间范围,不要只返回单个时间点,且确保你返回的支撑语句可以支持你的理由,如果未得分则不用返回时间戳"""
usr_prompt = msg
messages = []
if example_prompt == "":
messages.append({
"role": "system",
"content": f"{sys_prompt}\n\n得分点: {score_prompt}\n标准: {standard_prompt}\n\n{sys_prompt3}"
})
else:
messages.append({
"role": "system",
"content": f"{sys_prompt}\n\n得分点: {score_prompt}\n标准: {standard_prompt}\n例如: {example_prompt}\n\n{sys_prompt3}"
})
messages.append({
"role": "user",
"content": usr_prompt
})
url = "http://117.50.195.92:8080/qwen72-not-quantize/v1/chat/completions"
payload_qs = {
"model": "HiPilot-V1.5-Chat",
"messages": messages,
"temperature": 0.9,
"max_tokens": 2048,
"stream": True
}
headers = {
'Content-Type': 'application/json'
}
response = requests.post(url, headers=headers, json=payload_qs, stream=True)
bot_message = ""
if example_prompt == "":
chat_history.append([f"得分点: {score_prompt}\n标准: {standard_prompt}", bot_message])
else:
chat_history.append([f"得分点: {score_prompt}\n标准: {standard_prompt}\n例如: {example_prompt}", bot_message])
for chunk in response.iter_lines():
if chunk: # 忽略空行
try:
chunk = chunk.decode('utf-8')
chunk = chunk.strip().split("data:")[-1]
chunk = json.loads(chunk)
if "content" in chunk["choices"][0]["delta"]:
bot_message += chunk["choices"][0]["delta"]["content"]
chat_history[-1][1] = bot_message
yield msg, chat_history
except json.JSONDecodeError as e:
print(f"Error decoding JSON: {e}")
return msg, chat_history
def update_prompt(template):
standard_dict = {
"一通电话同花顺开场白,总分1分": "关键字包括同花顺、云软件、回访、回馈、来电、软件使用情况等,只要满足其中任何一个或者其他相关开场白,即为完成开场白,得1分。未完成同花顺开场白, 则得0分",
"一通电话挖需求,总分5分": """总分5分,包括:
1.询问到了客户持仓股票(你在做什么股票, 帮你看一下,持股、有什么股票、持仓、做什么方向)
2.询问到了客户购买该股票的理由(为什么去买这个股票, 出于什么原因)
3.询问到了客户的买入价格(什么时候买的, 多少钱的买的,买了多久)
4.询问到了客户在该点买入的原因(为什么会在这个位置买,买入的原因)
5.询问到了客户如果看到主力资金流入流出是否还会购买(如果你看到机构资金在出货你还会买吗, 还会卖吗)
以上每点,如果销售只是发出询问,但客户未回答,则仍算0分,只有客户回答了问题,该点算完成并获得1分, 满分5分,且请给具体的股票、股票代码、时间、原因、理由等信息""",
"一通电话对比算账,总分1分": """总分1分,包括:
是否和客户对比过使用软件前后差异, 完成这一模块则得1分, 未完成则得0分。""",
"一通电话总结需求,总分1分": """总分1分,包括:
总结需求:回顾客户选股或者买卖点的需求, 完成得1分, 未完成得0分。""",
"一通电话灌输理念,总分1分": """总分1分,包括:
灌输理念:做股票要跟着国家政策主力资金, 完成得1分, 未完成得0分。""",
"一通电话引出产品,总分1分": """总分1分,包括:
引出产品:敢于说出产品的名字(产品包括超级level2/超级L2/手机短线宝/同花顺手机VIP/主力密码/荐股师/涨停助手/手机云参数/黄金十分钟/手机诊股/神奇电波选股/AI分时顶底/AI波段雷达/金牛情报/AI机构探测器/决策先锋/金融大师/大研究/财富先锋等), 完成得1分, 未完成得0分。""",
"一通电话产品介绍1,总分1分": """总分2分,包括:
是否论述: GS点(买入卖出信号)/主力资金(主力资金有明盘和暗盘)/AI机构活跃度(股票资金参与活跃情况, 活跃度高, 涨跌幅度大), 如均完成得2分, 完成部分得1分, 均未完成得0分。
""",
"一通电话产品介绍2,总分1分": """总分1分,包括:
是否案例补充, 存在案例补充得1分, 未完成则得0分。""",
"一通电话产品介绍3,总分1分": """总分1分,包括:
图片发送, 完成得1分, 未完成得0分。""",
"一通电话尝试成交1,总分1分": """总分1分,包括:
场景:在案例补充后(办理/合F/支付宝/付钱/微信), 完成得1分, 未完成得0分。""",
"一通电话尝试成交2,总分1分": """总分1分,包括:
答疑后:在答疑补充后(办理/合作/支付宝/付钱/微信), 完成得1分, 未完成得0分。""",
"一通电话尝试成交3,总分1分": """总分1分,包括:
优惠方案:定金,优惠券,限时活动(送个月), 完成得1分, 未完成得0分。""",
"一通电话收尾": """总分1分,包括:
以股票或者群服务, 或者是约下次打电话时间. 完成得1分,未完成得0分""",
"二通电话暖场,总分1分": """自我介绍、询问客户近期的操作,完成暖场, 得1分。未完成暖场, 则得0分。""",
"二通电话回顾需求,总分1分": """总分1分,包括:
回顾客户选股或买卖点的问题。完成得1分。未完成则得0分。""",
"二通电话引出产品,总分1分": """总分1分,包括:
再次说出产品, 完成则得1分, 未完成则得0分。""",
"二通电话产品介绍,功能介绍1,总分1分": """总分1分,包括:
强化介绍产品的几个核心功能, 完成得1分, 未完成得0分。""",
"二通电话产品介绍,功能介绍2,总分1分": """总分1分,包括:
论证:案例补充, 完成得1分, 未完成得0分。""",
"二通电话产品介绍,功能介绍3,总分1分": """总分1分,包括:
截图发送, 完成得1分, 未完成得0分。""",
"二通电话答疑,总分1分": """总分1分,包括:
解决客户的疑虑点, 完成得1分, 未完成得0分。""",
"二通电话尝试成交,总分1分": """总分1分,包括:
引导尝试客户成交例如(办理/合作/支付宝/付钱/微信), 完成得1分, 未完成得0分。""",
"二通电话结束语,总分1分": """总分1分,包括:
引发客户思考并预约, 完成得1分, 未完成得0分。""",
"空白模板":""
}
score_dict = {
"一通电话同花顺开场白,总分1分": "同花顺开场白",
"一通电话挖需求,总分5分": "挖需求",
"一通电话对比算账,总分1分": "对比算账",
"一通电话总结需求,总分1分": "总结需求, 灌输理念, 引出产品",
"一通电话灌输理念,总分1分": "总结需求, 灌输理念, 引出产品",
"一通电话引出产品,总分1分": "总结需求, 灌输理念, 引出产品",
"一通电话产品介绍1,总分1分": "产品介绍",
"一通电话产品介绍2,总分1分": "产品介绍",
"一通电话产品介绍3,总分1分": "产品介绍",
"一通电话尝试成交1,总分1分": "尝试成交",
"一通电话尝试成交2,总分1分": "尝试成交",
"一通电话尝试成交3,总分1分": "尝试成交",
"一通电话收尾": "收尾",
"二通电话暖场,总分1分": "暖场",
"二通电话回顾需求,总分1分": "回顾需求",
"二通电话引出产品,总分1分": "引出产品",
"二通电话产品介绍,功能介绍1,总分1分": "产品介绍,功能介绍",
"二通电话产品介绍,功能介绍2,总分1分": "产品介绍,功能介绍",
"二通电话产品介绍,功能介绍3,总分1分": "产品介绍,功能介绍",
"二通电话答疑,总分1分": "答疑",
"二通电话尝试成交,总分1分": "尝试成交",
"二通电话结束语,总分1分": "结束语",
"空白模板":""
}
example_dict = {
"一通电话同花顺开场白,总分1分": "",
"一通电话挖需求,总分5分": "",
"一通电话对比算账,总分1分": """如果当时跟我们做, 从什么时候开始做到什么时候结束, 你大概就可以赚, 少亏多少, 就可以覆盖这个软件的成本了, 或者是除去软件成本聂可以赚多少。""",
"一通电话总结需求,总分1分": """唐先生像你这样买卖点把握不好""",
"一通电话灌输理念,总分1分": """唐先生你还是要跟着资金和国家政策""",
"一通电话引出产品,总分1分": """像你的买卖点把握不好, 可以跟着我们决策先锋的主力资金来走, 决策的GS点, AI机构活跃度""",
"一通电话产品介绍1,总分1分": "",
"一通电话产品介绍2,总分1分": """先生300033, 主力资金连续进XX, GS又发出来G点买入信号, 从买入到现在位置, 多少个工作日涨幅多少XX。""",
"一通电话产品介绍3,总分1分": """唐先生, 我这个图发给你, 你看到没""",
"一通电话尝试成交1,总分1分": """想你买卖点把握不好,可以和我们合作起来,我们这个功能很好。""",
"一通电话尝试成交2,总分1分": """想你买卖点把握不好,可以和我们合作起来,我们这个功能很好。""",
"一通电话尝试成交3,总分1分": "",
"一通电话收尾": "",
"二通电话暖场,总分1分": """最近股票有操作吗?之前持有的、还在持有吗""",
"二通电话回顾需求,总分1分": """像你这样、买卖点把握不好、买高/卖早、很难获利、之前介绍的决策。""",
"二通电话引出产品,总分1分": """上次提到的直播间优惠活动、上次说的决策先锋、直播听完后、觉得怎么样?""",
"二通电话产品介绍,功能介绍1,总分1分": """G点买入、S点卖出、趋势启动、趋势终结、明盘资金、暗盘资金""",
"二通电话产品介绍,功能介绍2,总分1分": """XXX股票、XX个交易日、XX收益""",
"二通电话产品介绍,功能介绍3,总分1分": """截图发你了,你看一下;微信打开一下,图""",
"二通电话答疑,总分1分": "",
"二通电话尝试成交,总分1分": """"我带你办理一下、你是微信还是支付宝、你打开同花顺app、我给你发了个链接有看到吗、付好后发我一下截图. 优惠、活动、折扣、办理、合作、支付宝、微信、付钱,定金、赠送、价值1164、服务包.""",
"二通电话结束语,总分1分": """考虑清楚、能不能帮到你、想不想改变、下次再联系你、你可以关注一下""",
"空白模板":""
}
return score_dict[template], standard_dict[template], example_dict[template]
def download_prompt(score_prompt, standard_prompt, example_prompt):
current_time = str(datetime.now())
address = f"/mnt/data/code_generation/cuizhe/yunruanjian/prompt_{current_time}.txt"
with open(address,'w') as f:
if example_prompt == "":
f.write(f"得分点: {score_prompt}\n标准: {standard_prompt}")
else:
f.write(f"得分点: {score_prompt}\n标准: {standard_prompt}\n例如: {example_prompt}")
return address
if __name__ == "__main__":
with gr.Blocks(analytics_enabled = False) as demo:
chatbot = gr.Chatbot(height=800)
with gr.Row():
msg = gr.Textbox(placeholder="复制黏贴对话内容", scale=4, max_lines=20, label = "录音内容")
with gr.Row():
template_choice = gr.Radio(
choices=[
"一通电话同花顺开场白,总分1分", "一通电话挖需求,总分5分", "一通电话对比算账,总分1分",
"一通电话总结需求,总分1分", "一通电话灌输理念,总分1分", "一通电话引出产品,总分1分",
"一通电话产品介绍1,总分1分", "一通电话产品介绍2,总分1分", "一通电话产品介绍3,总分1分",
"一通电话尝试成交1,总分1分", "一通电话尝试成交2,总分1分", "一通电话尝试成交3,总分1分",
"一通电话收尾", "二通电话暖场,总分1分", "二通电话回顾需求,总分1分",
"二通电话引出产品,总分1分", "二通电话产品介绍,功能介绍1,总分1分",
"二通电话产品介绍,功能介绍2,总分1分", "二通电话产品介绍,功能介绍3,总分1分",
"二通电话答疑,总分1分", "二通电话尝试成交,总分1分", "二通电话结束语,总分1分",
"空白模板"
],
label="选择模板"
)
with gr.Row():
score_prompt = gr.Textbox(placeholder="得分点", scale=4, max_lines=20, label = "得分点prompt")
standard_prompt = gr.Textbox(placeholder="标准", scale=4, max_lines=20, label = "得分标准prompt")
example_prompt = gr.Textbox(placeholder="举例", scale=4, max_lines=20, label = "得分举例prompt")
with gr.Row():
submit = gr.Button("提交", variant="primary")
with gr.Row():
clear = gr.Button("清除")
stop = gr.Button("停止", variant="stop")
with gr.Row():
download_btn = gr.Button("生成文件")
prompt_file = gr.File(label="文件")
template_choice.change(fn=update_prompt, inputs=template_choice, outputs=[score_prompt, standard_prompt, example_prompt])
submit_event = submit.click(ai_record_analyze, inputs=[score_prompt, standard_prompt, example_prompt, msg, chatbot], outputs=[msg, chatbot])
download_btn.click(download_prompt, inputs=[score_prompt, standard_prompt, example_prompt], outputs=prompt_file)
clear.click(lambda: None, None, chatbot, queue=False)
stop.click(fn=None, inputs=None, outputs=None, cancels=[submit_event])
demo.queue()
demo.launch()