扣子智能体实战-汽车客服对话机器人(核心知识:知识库和卡片)

devtools/2024/11/12 0:17:49/

这一节的主要内容是通过创建一个汽车客户对话机器人学习扣子平台知识库和卡片的使用。

机器人参考:

企业汽车客服

资深汽车销售

一,汽车销售机器人需求简介

汽车销售是一个需要 7*24h在线的客服咨询岗位,专业性强,但流动性非常大。

一家4S 店的销售有如下特点:

  • 7*24h 随时问答
  • 专业的知识问答

基于以上两个特点,汽车销售是一个非常适合用机器人的场景,特别是在大模型能力越来越强的情况下,针对客户提出的问题,机器人可以提供精准的答案。

此外,机器人的可以24小时工作,能做到及时响应客户问题。

通过一套智能且专业的解决方案,就能替代大部分人工。

二,创建一个Bot

在个人空间创建一个智能体,名字自取。

在这里插入图片描述

三,通过提示词设定人设和技能

# 角色
你是汽车销售市场的热情专业的汽车经销商客服小李,熟悉各品牌汽车最新行情及价格信息,能为用户提供准确详细的购车建议。## 技能
### 技能 1: 查询汽车行情信息
1. 当用户询问汽车行情时,迅速了解各品牌汽车的最新动态,包括但不限于新款发布、优惠活动等。
2. 准确为用户提供详细的汽车价格信息,包括指导价、优惠幅度、落地价等。回复示例:
=====-  🚗 汽车品牌及型号: <品牌及型号>-  💰 指导价: <价格>-  💲 优惠幅度: <具体优惠金额或百分比>-  🛬 落地价: <预估落地价格>-  🎉 最新行情: <简要描述当前行情动态>
=====### 技能 2: 解答疑问
1. 当用户提出关于购车流程、售前咨询等问题时,详细解答,包括贷款政策、保险选择、上牌流程等。
2. 根据用户需求和情况,提供专业的购车建议和指导。回复示例:
=====-  🤔 问题: <用户提出的问题>-  💡 答案: <详细的解答内容>
=====## 限制:
- 只处理与汽车相关的问题,拒绝回答与汽车无关的话题。
- 以专业、热情、耐心的态度服务用户,回复内容要准确、清晰、易懂。
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。

到这一步,一个有对话能力的机器人就创建成功了,不过这时他还比较弱智。

三,引入插件

1,添加懂车帝新车和二手车插件

在这里插入图片描述

懂车帝4CarSeries: 当你需要查询新车信息或者查询某个特定车系(如宝马3系,奔驰e级)信息的时候可以使用此0工具,可以获得新车价格,车辆结构,车辆生产年份,售卖链接等信息。

**SecondHandCar:**当你査询二手车的售卖信息时候可以使用此工具,可以获得二手车的价格、二手车车况图片等信息。

2,为插件设置卡片

在这里插入图片描述

卡片的作用是为了是输出信息格式化,通过插件查询到的信息是一种不直观的格式,我们可以通过卡片的形式选择显示哪些信息以及以什么格式显示。

有两种卡片。

2.1 官方卡片

在这里插入图片描述

  • 卡片样式:选择竖向列表
  • 为卡片绑定一个数组:点开下拉框直接选择,因为是绑定给插件,插件的信息是已知的
  • 为卡片的列表项绑定数据:从上面数组中选择要显示的信息
  • 点击卡片跳转:这个就类似超链接,点击后会跳转到一个新的页面。

卡片效果:

在这里插入图片描述

2.2 自定义卡片

2.2.1 点击新增进入卡片编辑界面

在这里插入图片描述

2.2.2 新增变量

这里所谓的变量是指数据来源,卡片要展示信息,信息的来源就是变量,变量实际指的是懂车帝插件查询的汽车信息。

在这里插入图片描述

点击上面新建变量后,弹窗如下:

在这里插入图片描述

  • 变量名称:car_serials,这个值不能随便填,它必须和懂车帝插件查询的数据中的名称保持一致
  • 变量类型:Array,数组的意思
  • 变量默认值:相当于提供一组demo数据,便于后面的步骤使用和卡片预览
[{"car_name": "宝马","detail_url":"http://dongchedi.com","price":"18.8~25.8","product_year":"2023"},{"car_name": "宝马","detail_url":"http://dongchedi.com","price":"18.8~25.8","product_year":"2023"}
]
2.2.3 卡片格式设计

进入卡片设计界面,如下。
在这里插入图片描述

  • 模板:表示已有的模板,可以直接使用,安装自己的需求做一些变动,更加方便快捷
  • 组件:有布局组件和基本组件,如果要从0开始设计,就可以直接到这里
  • 结构:查看组件结构

我们从0到1设计一个非常简单的卡片。

在这里插入图片描述

这个卡片用来展示懂车帝查询到的汽车信息。

如下,这个卡片使用了单列布局,每一列包含三个文本框。

先把单列布局拖过来,在拖三个文本框到这个单列布局中作为它的内容。

如果有一定前端知识,就比较容易理解。

在这里插入图片描述
如果实在搞不懂,可以查看教程,在编辑区的中间的下部,有一个工具类,最后一个工具就是查看教程。

在这里插入图片描述

2.2.4 绑定卡片数据源

!!!需要注意的是,因为我们要展示很多个汽车的信息,数据源是一个数组,所以,需要开启循环渲染。

在这里插入图片描述

为每一个文本框绑定要显示的数据。

点击文本框,在右侧的基础配置中,点击[x],就会弹出可以选择数据源,比如第一个文本框要显示汽车名称即汽车品牌,我们就选择car_name

注意,这一步能选择的前提是上一步的循环渲染及数组绑定已经设置好。

在这里插入图片描述

3,为机器人设置开场白

在这里插入图片描述

你好!我是汽车销售,很高兴能为你提供服务。
作为一名专业的汽车服务人员,我熟悉各品牌汽车最新行情及价格信息,能为你提供准确详细的购车建议。

三,增加本地知识库增强机器人能力

目前这个机器人客服已经具备了基本的能力,但是还不够个性化。

它现在只能查询公网上的信息,如果要给客户提供优惠,就涉及到它所属的公司的知识,比如库存信息、优惠活动信息等等。

这些信息可以通过提供设置知识库的方式提供。

我们这里就模拟本地库存信息,因为我们没有实际库存数据,所以可以通过kimi或者Gpt4o来生成Pytyon脚本,让后执行脚本生成一些数据。

脚本如下:

import csv
import random# 定义可能的属性值
brands = ["本田", "丰田", "大众", "宝马", "奥迪"]
models = ["雅阁", "卡罗拉", "迈腾", "3系", "A4"]
locations = ["上海仓库", "北京仓库", "广州仓库", "深圳仓库", "成都仓库"]# 生成随机VIN
def generate_id():return ''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=17))# 生成单条汽车数据
def generate_car_data():return {"车辆序列号": generate_id(),"品牌": random.choice(brands),"车型": random.choice(models),"库存位置": random.choice(locations),"库存数量": random.randint(1, 20),"成本价": random.randint(100000, 300000),"建议零售价": random.randint(150000, 400000),"促销价格": random.randint(120000, 350000),}# 生成500汽车库存信息
car_inventory = [generate_car_data() for _ in range(500)]# 导出为CSV文件
with open('car_inventory.csv', mode='w', newline='', encoding='utf-8') as file:writer = csv.DictWriter(file, fieldnames=car_inventory[0].keys())writer.writeheader()writer.writerows(car_inventory)print("CSV文件已成功生成:car_inventory.csv")

1,新建并使用一个知识库

在这里插入图片描述

点击创建知识库,填写必要信息,选择表格格式,点击下一步。

在这里插入图片描述

过程中生成我们用python生成的csv文档,一直点击下一步,最后添加到bot,就为这个bot添加了知识库。

在这里插入图片描述

我们测试一下,询问丰田卡罗拉的库存。

在这里插入图片描述

当然,这样很傻,一般消费并不会关心库存,销售也不会告知具体的库存信息。

这只是为了演示知识库的用法。

四,使用工作流进一步优化机器人的能力

我们的机器人现在即具备插件能力,又具备知识库能力,但为了更准确的回答客户问题,我们需要根据客户意图选择使用何种能力。

业务流程图如下:

在这里插入图片描述

  • ① 用户输入
  • ② 识别用户意图,如果不能识别到用户的具体用途就转人工
  • ③ 如果用户是想查询购买的汽车的库存信息,就根据汽车品牌和类型,搜索知识库,返回购买信息和优惠价格
  • ④ 如果用户是想让销售推荐汽车,则通过懂车帝插件搜索再返回给客户

1,新建一个工作流

在这里插入图片描述

2,增加一个意图结点

添加两个意图:

在这里插入图片描述

3,咨询在售汽车信息分支

如果用户的意图是咨询在售汽车信息,则需要提供一个大模型,分析文本,搜索知识库,然后将结果交给一个文本处理节点,这个节点的作用是将文本格式化。

大模型节点配置如下:

在这里插入图片描述

提示词如下:

请理解用户以下问题:
{{input}}结合对话历史聊天记录,理解用户的具体问题,解答用户想要咨询的是哪个汽车系统的在售信息,返回具体的汽车车型即可,不做其他不相干的信息描述

大模型节点后增加一个知识库结点。

在这里插入图片描述

知识库结点后增加一个文本处理结点:

在这里插入图片描述

4,汽车推荐分支

如果用户的意图是汽车推荐,则需要提供一个大模型,分析文本,使用懂车帝搜索,然后将结果下一个大模型进行处理,整理成推荐信息,最后交给一个文本结点,这个节点的作用是将文本格式化。

大模型节点配置如下:

在这里插入图片描述
提示词如下:

请理解用户提的以下问题:
{{input)}请基于用户的蹦天信息,总结一下用户对于汽车造型的偏好和需求,并理解用户的具体问题,解答用户想要咨询的是哪个汽车系列的信息,近回具体的汽车车型助可,不做其他不相关的信息描述

懂车帝插件节点配置如下:

在这里插入图片描述

请理解用户提的以下问题:
{{input)}请基于用户的蹦天信息,总结一下用户对于汽车造型的偏好和需求,并理解用户的具体问题,解答用户想要咨询的是哪个汽车系列的信息,近回具体的汽车车型助可,不做其他不相关的信息描述

处理懂车帝结果的大模型配置如下:

在这里插入图片描述

根据懂车帝搜索结果,整理汽车推荐信息:"""
{{input[0]}}
"""

知识库结点后增加一个文本处理结点:

在这里插入图片描述

5,其他意图分支

其他意图分支比较简单,一般是转人工,这里随便写个网址代替。

在这里插入图片描述

6,结束结点配置

三个分支的文本节点都要指向结束结点。

在这里插入图片描述

到此这个机器人就完成了,我们使用知识库、意图节点、插件节点、文本节点、大模型节点。


http://www.ppmy.cn/devtools/115509.html

相关文章

2、论文阅读:用于超高清交通监控的双域引导实时低光图像增强

用于超高清交通监控的双域引导实时低光图像增强 前言动机传统弱光增强方法的缺陷基于深度神经网络方法的缺陷解决贡献双域导引微光图像增强网络高斯拉普拉斯算子(边缘特征的抽取)二阶导数离散卷积核 KL 生成 梯度特征图高斯平滑滤波来降低噪声对图像的干扰前言 弱光条件下拍…

C# 找到给定点集的简单闭合路径(Find Simple Closed Path for a given set of points)

给定一组点&#xff0c;将这些点连接起来而不相交 例子&#xff1a; 输入&#xff1a;points[] {(0, 3), (1, 1), (2, 2), (4, 4), (0, 0), (1, 2), (3, 1}, {3, 3}}; 输出&#xff1a;按以下顺序连接点将 不造成任何交叉 {(0, 0), (3, …

QT<24> Qt和windows中获取CPU序列号号以及主板序列号

前言&#xff1a;在qt中获取CPU和主板唯一序列号&#xff0c;可以在程序构造函数中判断是否与windows中一致&#xff0c;不一致可以直接退出程序&#xff0c;防止程序daoyong。 一、获取电脑CPU唯一序列号 QString MainPage::get_cpu() {QString cmd"wmic cpu get proc…

hive分区详细教程

为什么要分区&#xff1f; 为了提高sql的查询效率 比如&#xff1a; select * from orders where create_date20230826; 假如数据量比较大&#xff0c;这个sql就是全表扫描&#xff0c;速度肯定慢。 可以将数据按照天进行分区&#xff0c;一个分区就是一个文件夹&#xff0c;当…

第52课 Scratch游戏入门:五子棋

五子棋 故事背景: 会下五子棋么?五个颜色一样的棋子,横竖斜向有五个连在一起,就胜利,让我们一起来绘制一个五子棋的棋盘,同时一起开始下棋吧! 开始编程 1、删除预设的猫咪角色,使用绘制工具绘制白色和黑色的棋子。(使用圆形和圆形渐变色填充棋子) 新绘制棋盘等其他角…

(PySpark)RDD实验实战——求商品销量排行

实验环境&#xff1a;提前准备好findspark&#xff0c;pyspark&#xff0c;py4j等库 import findspark from pyspark import SparkContext, SparkConffindspark.init() #初始化spark&#xff0c;默认为你所设定的环境变量 conf SparkConf().setAppName("jsytest"…

2024华为杯研赛E题保姆级教程思路分析

E题题目&#xff1a;高速公路应急车道紧急启用模型 今年的E题设计到图像/视频处理&#xff0c;实际上&#xff0c;E题的难度相对来说较低&#xff0c;大家不用畏惧视频的处理&#xff0c;被这个吓到。实际上&#xff0c;这个不难&#xff0c;解决了视频的处理问题&#xff0c;…

Java迭代器Iterator和Iterable有什么区别?

在 Java 中&#xff0c;我们对 List 进行遍历的时候&#xff0c;主要有这么三种方式。 第一种&#xff1a;for 循环。 for (int i 0; i < list.size(); i) {System.out.print(list.get(i) "&#xff0c;"); } 第二种&#xff1a;迭代器。 Iterator it list.i…