LLM系列 | 16: 构建端到端智能客服

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文将综合之前多篇文章搭建一个带评估功能的**端到端智能客服系统**。整体流程大致如下: 检查输入,看看用户输入的query是否能够通过审核API;抽取出商品和对应的类别;抽取出商品信息;模型根据商品信息回答用户问题;将模型的回复输入审核API对回复进行审核。

简介

漠漠水田飞白鹭,阴阴夏木啭黄鹂。

小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖海蛎煎的小男孩。紧接前面几篇ChatGPT Prompt工程和应用系列文章:

今天这篇小作文是吴恩达《Building Systems with the ChatGPT API》课程的第3篇笔记。本文将综合之前多篇文章搭建一个带评估功能的端到端智能客服系统。整体流程大致如下:

  • 检查输入,看看用户输入的query是否能够通过审核API。
  • 抽取出商品和对应的类别。
  • 抽取出商品信息。
  • 模型根据商品信息回答用户问题。
  • 将模型的回复输入审核API对回复进行审核。

完整代码请到微信公众号《小窗幽记机器学习》添加小编微信。

准备工作

import os
import openai
import sys
sys.path.append('../..')
import utils_cn as utils

import panel as pn  # GUI
pn.extension()

openai.api_key  = "sk-XXX"
os.environ['HTTP_PROXY'] = "xxx"
os.environ['HTTPS_PROXY'] = "xxx"


def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0, max_tokens=500):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, 
        max_tokens=max_tokens, 
    )
    return response.choices[0].message["content"]

智能客服

以智能客服为例,介绍完整的服务链路,包括对输入文本进行安全检查、通过用户咨询查找到相关产品和类别、回答用户问题、对回答结果进行内容安全检查、对回答结果进行问题关联检查。

def process_user_message(user_input, all_messages, debug=True):
    delimiter = "```"

    # Step 1: Check input to see if it flags the Moderation API or is a prompt injection
    response = openai.Moderation.create(input=user_input)
    moderation_output = response["results"][0]

    if moderation_output["flagged"]:
        print("Step 1: Input flagged by Moderation API.")
        return "Sorry, we cannot process this request."

    if debug: print("Step 1: Input passed moderation check.")

    products_and_category_dict = utils.get_products_and_category()
    if debug:
        print("products_and_category_dict=", products_and_category_dict)
        print("start do find_category_and_product_only")
    category_and_product_response = utils.find_category_and_product_only(user_input, products_and_category_dict)
    if debug: 
        print("category_and_product_response=", category_and_product_response)
        print("start do Extract the list of products")
    # Step 2: Extract the list of products
    category_and_product_list = utils.read_string_to_list(category_and_product_response)
    if debug: 
        print("category_and_product_list=", category_and_product_list)

    if debug: 
        print("Step 2: Extracted list of products.")

    # Step 3: If products are found, look them up
    product_information = utils.generate_output_string(category_and_product_list)
    if debug:
        print("product_information=", product_information)
    if debug:
        print("Step 3: Looked up product information.")

    # Step 4: Answer the user question
    system_message = f"""
    你是一位大型电子商店的客户助理。以友好和乐于助人的口吻回答,给出简明的答案。确保询问用户相关的后续问题。
    """
    messages = [
        {'role': 'system', 'content': system_message},
        {'role': 'user', 'content': f"{delimiter}{user_input}{delimiter}"},
        {'role': 'assistant', 'content': f"Relevant product information:\n{product_information}"}
    ]

    final_response = get_completion_from_messages(all_messages + messages)
    if debug:
        print("Step 4: Generated response to user question.")
        print("final_response=", final_response)
    all_messages = all_messages + messages[1:]

    # Step 5: Put the answer through the Moderation API
    response = openai.Moderation.create(input=final_response)
    moderation_output = response["results"][0]

    if moderation_output["flagged"]:
        if debug: print("Step 5: Response flagged by Moderation API.")
        return "Sorry, we cannot provide this information."

    if debug:
        print("Step 5: Response passed moderation check.")

    # Step 6: Ask the model if the response answers the initial user query well
    user_message = f"""
    你是一个客服助理,负责评估客服助理的回答是否足够回答客户的问题,并验证助理从产品信息中引用的所有事实是否正确。\
    产品信息、用户和客服助理的消息将用三个反引号分隔,即```.\
    请用一个字母回答,不带标点符号:\
    Y - 如果输出足够回答问题,并且回答正确使用了产品信息 \
    N - 否则 \

    只输出一个字母。

    Customer message: {delimiter}{user_input}{delimiter}
    Product information: {delimiter}{product_information}{delimiter}
    Agent response: {delimiter}{final_response}{delimiter}

    回复是否充分回答了问题?
    """
    messages = [
        {'role': 'system', 'content': system_message},
        {'role': 'user', 'content': user_message}
    ]
    evaluation_response = get_completion_from_messages(messages)
    if debug:
        print("Step 6: Model evaluated the response.")
        print("evaluation_response=", evaluation_response)

    # Step 7: If yes, use this answer; if not, say that you will connect the user to a human
    if "Y" in evaluation_response:  # Using "in" instead of "==" to be safer for model output variation (e.g., "Y." or "Yes")
        if debug: print("Step 7: Model approved the response.")
        return final_response, all_messages
    else:
        if debug: print("Step 7: Model disapproved the response.")
        neg_str = "很抱歉,我无法提供您所需的信息。我将为您转接到一位人工客服以获得进一步帮助。"
        return neg_str, all_messages

user_input = "给我介绍下SmartX Pro phone和fotosnap DSLR camera。还有,我也想了解下你们的电视。"
response,_ = process_user_message(user_input,[])
print(response)

输出结果如下:

Step 1: Input passed moderation check.
products_and_category_dict= {'计算机和笔记本电脑': ['TechPro超极本', 'BlueWave游戏笔记本电脑', 'PowerLite可转换本', 'TechPro台式机', 'BlueWave Chromebook'], '智能手机和配件': ['SmartX ProPhone', 'MobiTech PowerCase', 'SmartX MiniPhone', 'MobiTech Wireless Charger', 'SmartX EarBuds'], '电视和家庭影院系统': ['CineView 4K TV', 'SoundMax Home Theater', 'CineView 8K TV', 'SoundMax Soundbar', 'CineView OLED TV'], '游戏机和配件': ['GameSphere X', 'ProGamer Controller', 'GameSphere Y', 'ProGamer Racing Wheel', 'GameSphere VR Headset'], '音频设备': ['AudioPhonic Noise-Canceling Headphones', 'WaveSound Bluetooth Speaker', 'AudioPhonic True Wireless Earbuds', 'WaveSound Soundbar', 'AudioPhonic Turntable'], '相机和摄像机': ['FotoSnap DSLR Camera', 'ActionCam 4K', 'FotoSnap Mirrorless Camera', 'ZoomMaster Camcorder', 'FotoSnap Instant Camera']}
start do find_category_and_product_only
category_and_product_response= [{'category': '智能手机及配件', 'products': ['MobiTech PowerCase', 'SmartX MiniPhone', 'MobiTech Wireless Charger', 'SmartX EarBuds']}, {'category': '相机和摄像机', 'products': ['ActionCam 4K', 'FotoSnap Mirrorless Camera', 'ZoomMaster Camcorder', 'FotoSnap Instant Camera']}, {'category': '电视和家庭影院系统', 'products': ['CineView 4K TV', 'SoundMax Home Theater', 'CineView 8K TV', 'SoundMax Soundbar', 'CineView OLED TV']}]
start do Extract the list of products
category_and_product_list= [{'category': '智能手机及配件', 'products': ['MobiTech PowerCase', 'SmartX MiniPhone', 'MobiTech Wireless Charger', 'SmartX EarBuds']}, {'category': '相机和摄像机', 'products': ['ActionCam 4K', 'FotoSnap Mirrorless Camera', 'ZoomMaster Camcorder', 'FotoSnap Instant Camera']}, {'category': '电视和家庭影院系统', 'products': ['CineView 4K TV', 'SoundMax Home Theater', 'CineView 8K TV', 'SoundMax Soundbar', 'CineView OLED TV']}]
Step 2: Extracted list of products.
product_information= {
    "name": "MobiTech PowerCase",
    "category": "智能手机和配件",
    "brand": "MobiTech",
    "model_number": "MT-PC20",
    "warranty": "1年",
    "rating": 4.3,
    "features": [
        "5000mAh电池",
        "无线充电",
        "与SmartX ProPhone兼容"
    ],
    "description": "带有内置电池的保护壳,可延长使用时间。",
    "price": 59.99
}
{
    "name": "SmartX MiniPhone",
    "category": "智能手机和配件",
    "brand": "SmartX",
    "model_number": "SX-MP5",
    "warranty": "1年",
    "rating": 4.2,
    "features": [
        "4.7英寸显示屏",
        "64GB存储",
        "8MP相机",
        "4G"
    ],
    "description": "一款紧凑且价格实惠的智能手机,适用于基本任务。",
    "price": 399.99
}
{
    "name": "MobiTech Wireless Charger",
    "category": "智能手机和配件",
    "brand": "MobiTech",
    "model_number": "MT-WC10",
    "warranty": "1年",
    "rating": 4.5,
    "features": [
        "10W快速充电",
        "Qi兼容",
        "LED指示灯",
        "紧凑设计"
    ],
    "description": "一款便捷的无线充电器,为整洁的工作区提供便利。",
    "price": 29.99
}
{
    "name": "SmartX EarBuds",
    "category": "智能手机和配件",
    "brand": "SmartX",
    "model_number": "SX-EB20",
    "warranty": "1年",
    "rating": 4.4,
    "features": [
        "真无线",
        "蓝牙5.0",
        "触控控制",
        "24小时电池续航"
    ],
    "description": "通过这款舒适的耳机体验真正的无线自由。",
    "price": 99.99
}
{
    "name": "ActionCam 4K",
    "category": "相机和摄像机",
    "brand": "ActionCam",
    "model_number": "AC-4K",
    "warranty": "1年",
    "rating": 4.4,
    "features": [
        "4K视频",
        "防水",
        "图像稳定",
        "Wi-Fi"
    ],
    "description": "通过这款坚固而紧凑的4K运动相机记录您的冒险旅程。",
    "price": 299.99
}
{
    "name": "FotoSnap Mirrorless Camera",
    "category": "相机和摄像机",
    "brand": "FotoSnap",
    "model_number": "FS-ML100",
    "warranty": "1年",
    "rating": 4.6,
    "features": [
        "2010万像素传感器",
        "4K视频",
        "3英寸触摸屏",
        "可更换镜头"
    ],
    "description": "这款小巧轻便的无反相机具备先进功能。",
    "price": 799.99
}
{
    "name": "ZoomMaster Camcorder",
    "category": "相机和摄像机",
    "brand": "ZoomMaster",
    "model_number": "ZM-CM50",
    "warranty": "1年",
    "rating": 4.3,
    "features": [
        "1080p视频",
        "30倍光学变焦",
        "3英寸液晶屏",
        "图像稳定"
    ],
    "description": "通过这款易于使用的摄像机捕捉生活的瞬间。",
    "price": 249.99
}
{
    "name": "FotoSnap Instant Camera",
    "category": "相机和摄像机",
    "brand": "FotoSnap",
    "model_number": "FS-IC10",
    "warranty": "1年",
    "rating": 4.1,
    "features": [
        "即时打印",
        "内置闪光灯",
        "自拍镜",
        "电池供电"
    ],
    "description": "通过这款有趣便携的即时相机创造瞬间回忆。",
    "price": 69.99
}
{
    "name": "CineView 4K TV",
    "category": "电视和家庭影院系统",
    "brand": "CineView",
    "model_number": "CV-4K55",
    "warranty": "2年",
    "rating": 4.8,
    "features": [
        "55英寸显示屏",
        "4K分辨率",
        "HDR",
        "智能电视"
    ],
    "description": "一款具有生动色彩和智能功能的令人惊叹的4K电视。",
    "price": 599.99
}
{
    "name": "SoundMax Home Theater",
    "category": "电视和家庭影院系统",
    "brand": "SoundMax",
    "model_number": "SM-HT100",
    "warranty": "1年",
    "rating": 4.4,
    "features": [
        "5.1声道",
        "1000W输出",
        "无线低音炮",
        "蓝牙"
    ],
    "description": "一款强大的家庭影院系统,带来身临其境的音频体验。",
    "price": 399.99
}
{
    "name": "CineView 8K TV",
    "category": "电视和家庭影院系统",
    "brand": "CineView",
    "model_number": "CV-8K65",
    "warranty": "2年",
    "rating": 4.9,
    "features": [
        "65英寸显示屏",
        "8K分辨率",
        "HDR",
        "智能电视"
    ],
    "description": "通过这款令人惊叹的8K电视体验电视的未来。",
    "price": 2999.99
}
{
    "name": "SoundMax Soundbar",
    "category": "电视和家庭影院系统",
    "brand": "SoundMax",
    "model_number": "SM-SB50",
    "warranty": "1年",
    "rating": 4.3,
    "features": [
        "2.1声道",
        "300W输出",
        "无线低音炮",
        "蓝牙"
    ],
    "description": "通过这款时尚且功能强大的声音栏升级您的电视音频。",
    "price": 199.99
}
{
    "name": "CineView OLED TV",
    "category": "电视和家庭影院系统",
    "brand": "CineView",
    "model_number": "CV-OLED55",
    "warranty": "2年",
    "rating": 4.7,
    "features": [
        "55英寸显示屏",
        "4K分辨率",
        "HDR",
        "智能电视"
    ],
    "description": "通过这款OLED电视体验真正的黑色和生动色彩。",
    "price": 1499.99
}

Step 3: Looked up product information.
Step 4: Generated response to user question.
final_response= 当然,我很乐意为您介绍我们的产品。SmartX Pro phone是一款高端智能手机,具有先进的功能和性能。它配备了大屏幕、高像素相机、大内存和快速处理器。而Fotosnap DSLR相机则是一款专业级别的相机,具有高像素传感器、4K视频和可更换镜头等功能。至于我们的电视,我们有多种型号可供选择,包括4K和8K分辨率、HDR和智能电视等功能。您有什么具体的问题或需求吗?我可以为您提供更多详细信息。
Step 5: Response passed moderation check.
Step 6: Model evaluated the response.
evaluation_response= Y
Step 7: Model approved the response.
当然,我很乐意为您介绍我们的产品。SmartX Pro phone是一款高端智能手机,具有先进的功能和性能。它配备了大屏幕、高像素相机、大内存和快速处理器。而Fotosnap DSLR相机则是一款专业级别的相机,具有高像素传感器、4K视频和可更换镜头等功能。至于我们的电视,我们有多种型号可供选择,包括4K和8K分辨率、HDR和智能电视等功能。您有什么具体的问题或需求吗?我可以为您提供更多详细信息。

以ChatBot方式交流

以下使用panel构建一个简单的服务,通过对话框的方式进行交流。

def collect_messages(debug=True):
    user_input = inp.value_input
    if debug:
        print(f"User Input = {user_input}")
    if user_input == "":
        return
    inp.value = ''
    global context
    #response, context = process_user_message(user_input, context, utils.get_products_and_category(),debug=True)
    print("user_input=", user_input)
    print("context=", context)
    response, context = process_user_message(user_input, context, debug=debug)
    context.append({'role':'assistant', 'content':f"{response}"})
    panels.append(
        pn.Row('User:', pn.pane.Markdown(user_input, width=600)))
    panels.append(
        pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))

    return pn.Column(*panels)

panels = [] # collect display 

context = [ {'role':'system', 'content':"你是一个客户助理"} ]  

inp = pn.widgets.TextInput(placeholder='Enter text here…')
button_conversation = pn.widgets.Button(name="Service Assistant")

interactive_conversation = pn.bind(collect_messages, button_conversation)

dashboard = pn.Column(
    inp,
    pn.Row(button_conversation),
    pn.panel(interactive_conversation, loading_indicator=True, height=300),
)

客服助理.png

与ChatBot的交流结果如下:

User:

给我介绍下你们的相机

Assistant:

我们有多种不同类型的相机,包括数码相机、单反相机和无反相机。每种相机都有不同的功能和规格,您可以告诉我您需要相机用于什么目的,我可以为您提供更具体的信息。

User:

我想了解下Fotosnap DSLR

Assistant:

Fotosnap DSLR是一款功能强大的数码单反相机,具有24.2MP传感器、1080p视频、3英寸液晶屏和可更换镜头等功能。它适合那些想要更多控制和创造力的摄影师。您可以选择不同的镜头来适应不同的拍摄场景。这款相机的价格为599.99美元,我们还提供1年的保修服务。您是否还有其他问题需要了解?

User:

还想买一台手机,你们有哪些型号

Assistant:

很抱歉,我无法提供您所需的信息。我将为您转接到一位人工客服以获得进一步帮助。

User:

介绍下SmartX的产品

Assistant:

我们的SmartX品牌提供了多种电子产品,包括智能手机、平板电脑、笔记本电脑、智能手表和智能家居设备等。我们的产品都采用最新的技术和设计,以提供最佳的用户体验。您可以告诉我您需要哪种类型的产品,我可以为您提供更具体的信息。

User:

我想了解下SmartX ProPhone

Assistant:

SmartX ProPhone是一款功能强大的智能手机,具有6.1英寸显示屏、128GB存储、12MP双摄像头和5G等功能。它适合那些需要高速数据传输和大存储空间的用户。这款手机的价格为899.99美元,我们还提供1年的保修服务。您是否还有其他问题需要了解?
相关文章
|
6天前
|
开发框架 人工智能 安全
Promptic:轻量级 LLM 应用开发框架,提供完善的底层功能,使开发者更专注于构建上层功能
Promptic 是一个轻量级的 LLM 应用开发框架,支持通过一行代码切换不同的 LLM 服务提供商。它提供了类型安全的输出、流式支持、内置对话记忆、错误处理和重试等功能,帮助开发者专注于构建功能,而不是底层的复杂性。
37 6
Promptic:轻量级 LLM 应用开发框架,提供完善的底层功能,使开发者更专注于构建上层功能
|
5天前
|
存储 人工智能 Serverless
AI助手测评 | 3步快速构建主动式智能导购AI助手
本文介绍了如何利用阿里云的百炼平台构建主动式智能导购AI助手。在当前经济形势下,企业通过AI技术可以有效降低成本并提升服务质量。主动式智能导购AI助手不仅具备专业知识和耐心,还能24小时不间断服务用户,帮助企业节省夜班客服费用。通过创建API-KEY、部署函数计算应用和集成百炼商品检索应用,企业可以在短短几步内快速构建这一智能系统。此外,文章还提供了详细的部署步骤和测评建议,确保企业在实际应用中能够顺利实施。
|
2天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
4天前
|
弹性计算 自然语言处理 数据库
通过阿里云Milvus和LangChain快速构建LLM问答系统
本文介绍如何通过整合阿里云Milvus、阿里云DashScope Embedding模型与阿里云PAI(EAS)模型服务,构建一个由LLM(大型语言模型)驱动的问题解答应用,并着重演示了如何搭建基于这些技术的RAG对话系统。
27 3
|
1月前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
118 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
23天前
|
自然语言处理 数据可视化 搜索推荐
构建一个基于通义千问的智能客服系统
公司开发一个智能客服系统,帮助用户快速找到他们需要的商品信息、解决问题,并提供个性化的购物建议。系统需要能够处理大量的用户提问,并以自然语言的形式给出准确的回答。
66 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
文档智能和检索增强生成(RAG)——构建LLM知识库
本次体验活动聚焦于文档智能与检索增强生成(RAG)结合构建的LLM知识库,重点测试了文档内容清洗、向量化、问答召回及Prompt提供上下文信息的能力。结果显示,系统在自动化处理、处理效率和准确性方面表现出色,但在特定行业术语识别、自定义向量化选项、复杂问题处理和Prompt模板丰富度等方面仍有提升空间。
83 0
|
2月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
547 2
|
2月前
|
机器学习/深度学习 人工智能 运维
企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门
本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统的理论讲解与实践操作,学员将了解LLM的基本知识、模型架构及其在实际运维场景中的应用,如日志分析、故障诊断、网络安全与性能优化等。
87 2
|
2月前
|
机器学习/深度学习 数据采集 人工智能
文档智能 & RAG 让AI大模型更懂业务 —— 阿里云LLM知识库解决方案评测
随着数字化转型的深入,企业对文档管理和知识提取的需求日益增长。阿里云推出的文档智能 & RAG(Retrieval-Augmented Generation)解决方案,通过高效的内容清洗、向量化处理、精准的问答召回和灵活的Prompt设计,帮助企业构建强大的LLM知识库,显著提升企业级文档管理的效率和准确性。