CoolFace
Apppublic

Davidchen8/AI_CustomerService

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
app.py213 linesDownload Raw Back to root
1import gradio as gr2import openai3import os4from langchain.chat_models import ChatOpenAI5from langchain.schema import AIMessage, HumanMessage6from langchain.prompts import PromptTemplate7from langchain.llms import OpenAI8from langchain.chains import LLMChain9from langchain.memory import ConversationBufferMemory10 11catagory_list = [12    "停车服务", "会员积分及兑换商品", "活动报名", 13    "投诉建议"]14 15members ="""16会员姓名:"David"17会员等级:"黄金会员"18积分:"10000"19 20会员姓名:"Liao"21会员等级:"白金会员"22积分:"20000"23"""24Events = """25活动126活动名称:"国庆节狂欢"27日期:“2023-10-1 到 2023-10-7”  28活动内容:“会员和家庭小朋友可以参加报名,与可爱的迪士尼米奇一起跳舞和唱歌。” 29活动对象: “黄金会员、白金会员”30需要抵扣积分: “5000”31 32活动233活动名称:“圣诞节玩雪”34日期:“2023-12-23 到 2023-12-25”  35活动内容: “会员和家庭小朋友可以参加报名,可以在白雪公主城堡玩雪。” 36活动对象: ”黄金会员、白金会员“37需要抵扣积分: “2000”38"""39 40gifts ="""41 42礼品名称: “华为mate 60 Pro”43兑换积分: “10000”44 45礼品名称: “小米mixed fold 3”46兑换积分: “5000”47"""48 49parking ="""50 51政策:会员可以通过积分抵扣免费停车。 52 53车牌号码:“粤A001”54已停时间:“60分钟”55需要积分:“600”56 57车牌号码:“粤A002”58已停时间:“100分钟”59需要积分:“1000”60"""61 62instructions = {63"停车服务": f"根据停车信息回答客户问题。\641.如果客户想缴停车费,问客户车牌号码。\652.如果客户提供了车牌号码从停车信息找到相关信息。\663.如果找不到客户的停车信息,请让客户联系人工客服。\674.如果找到客户的停车信息,告诉客户的车停了多久,需要多少积分抵扣停车费。\685.如果找到客户的停车信息,问客户是否需要用积分抵扣停车费,请问客户的名字并从会员信息了解情况。\696.如果客户有足够积分抵扣,请为客户用积分抵扣停车费并与客户确认。\707.如果客户不够积分抵扣,请告诉客户自行缴费。\718.如果客户用积分抵扣了停车费,告诉客户扣减活动积分后还有多少积分。\72停车信息以'''符号区分开。\73会员信息以'''符号区分开。\74停车信息:'''{parking}'''\75会员信息:'''{members}''' ",76    77"会员积分及兑换商品": "",78    79"活动报名": f"根据活动清单为客户解答关于活动的问题。\80根据活动清单,介绍活动内容及推介客户参加活动。\81如果客户想报名活动,请问客户的名字并从会员信息了解情况,判断客户有没有参加活动的资格。\82活动有会员等级及积分限定, 只有符合活动对象条件的会员可以参加。另外活动需要扣减积分,如果会员不够积分也无法参加。\83如果客户符合资格,请为客户报名。如果客户不够资格,请礼貌地回复不符合条件参加,并提醒客户可以通过消费获取积分达到参加条件。\84最后与客户确认报名信息并告诉客户扣减活动积分后还有多少积分。\85活动清单以'''符号区分开。\86会员信息以#符号区分开。\87活动清单:''' {Events}'''\88会员信息:#{members}#\89请确保按提供的信息回复问题,如果没有信息请让客户联系人工客户。",90    91"投诉建议":"礼貌地回复客户他的问题已记录,将会转交人工客服处理并尽快回复",92    93"其它": "礼貌地回复客户他的问题已记录,将会转交人工客服处理并尽快回复"}94 95def get_completion_from_messages(messages, 96                                 temperature=0,97                                 model="gpt-4",  98                                 max_tokens=8000):99    response = openai.ChatCompletion.create(100        model=model,101        messages=messages,102        temperature=temperature, 103        max_tokens=max_tokens, 104    )105    return response.choices[0].message["content"]106 107 108def format_chat(message, chat_history):109    prompt = []110    for turn in chat_history:111        user_message, bot_message = turn112        prompt.append({'role': 'user', 'content': user_message})113        prompt.append({'role': 'assistant', 'content': bot_message})114 115    prompt.append({'role': 'user', 'content': message})116 117    return prompt118 119def format_chat_trail(message, chat_history):120    prompt = []121    for turn in chat_history:122        user_message, bot_message = turn123        prompt.append({"user:", user_message})124        prompt.append({"assistant:", bot_message})125 126    prompt.append({"user:", message})127 128    return prompt129 130def get_completion(prompt, model="gpt-4"):131    messages = [{'role': 'user', 'content': prompt}]132    response = openai.ChatCompletion.create(133        model=model,134        messages=messages,135        temperature=0, # this is the degree of randomness of the model's output136    )137    return response.choices[0].message["content"]138 139def catagory(chat_history):140    prompt =[]141    instruction = f"""142    根据与客户的对话记录判断客户需要服务清单里的什么服务。\143    从客户的对话记录里客户如果有多个服务需要,请根据最后的服务需求从服务清单里判断最合适的服务。\144    请确保只输出结果,不需要解释。输出的结果仅限于服务清单里的名称,例如:停车服务、会员积分及兑换商品、活动报名。\145    如果清单里没有合适的服务输出“其它”。\146    服务清单以'''符号区分开。\ 147    服务清单:'''"停车服务", "会员积分及兑换商品", "活动报名", "投诉建议"'''\148    客户的对话记录以'''符号区分开。\ 149    客户的对话记录:'''{chat_history}'''\150    如何判断合适的服务按以下说明:\151    停车服务:停车或缴停车费相关的信息。\152    会员积分及兑换商品:关于会员消费后可获得的积分及使用积分兑换商品的信息。\153    活动报名:关于活动的信息及报名。\154    投诉建议:客户不满意或有什么优化服务的建议。 155    """156    prompt.append({'role': 'system', 'content': instruction})157    response = get_completion_from_messages(prompt)158    return response159 160def ToServe(message, chat_history):161    prompt = []162    chat_trail = format_chat_trail(message,chat_history)163    instruction = f"""164    你是一个大型, 高端商场的客户服务AI,\ 165    回答客户与商场活动、停车服务、会员权益相关的问题。\166    如果问题与商场不相关,请礼貌回复客户无法处理。\ 167    如果问题与商场相关,请以热情态度按以下方式为客户解答问题。\168    回答客户方式以'''符号区分开。 \169    回答客户方式: '''{instructions[catagory(chat_trail)]}'''\170    按提供的信息回复客户的问题。如果没有相关信息请礼貌回复客户不清楚并会将问题反馈给人工客服处理。 171    如果客户的问题不清晰请让客户补充信息。\172    如果客户可能在问某个问题但不确定,请不着急回答,先与客户确定问题。\173    174    按以下举例回复:175    <客户>:地球有多大?176    <AI>:我只能回答商场相关问题。有什么可以帮到您吗?177    178    <客户>:今天天气怎么样?179    <AI>:我只能回答商场相关问题。有什么可以帮到您吗?180    181    <客户>:有餐饮吗?182    <AI>:我没有相关信息。请稍等!我们人工客服会跟进您的问题。 183    184    <客户>:消费100元有多少积分?185    <AI>:我没有相关信息。请稍等!我们人工客服会跟进您的问题。186 187    """188    prompt.append({'role': 'system', 'content': instruction})189    prompt = prompt + format_chat(message, chat_history)190    response = get_completion_from_messages(prompt)191    return response192 193def respond(message, chat_history):194    if message != "":195            #prompt=[]196            #formatted_chat = format_chat(message, chat_history)197            #instruction = get_instruction(formatted_chat)198            #prompt.append({'role': 'system', 'content': instruction })199            #prompt.append(formatted_chat)200            #bot_message = get_completion_from_messages(prompt)201            bot_message = ToServe(message, chat_history)202            chat_history.append((message, bot_message))203    return "", chat_history204 205with gr.Blocks() as demo:206    chatbot = gr.Chatbot(height=400) #just to fit the notebook207    msg = gr.Textbox(label="你的对话:")208    btn = gr.Button("提交")209    clear = gr.ClearButton(components=[msg, chatbot], value="清空对话框")210    btn.click(respond, inputs=[msg, chatbot], outputs=[msg, chatbot])211    msg.submit(respond, inputs=[msg, chatbot], outputs=[msg, chatbot]) #Press enter to submit212    213demo.queue().launch()