# huaweicloud-ai-dialogflow **Repository Path**: HuaweiCloudDeveloper/huaweicloud-ai-dialogflow ## Basic Information - **Project Name**: huaweicloud-ai-dialogflow - **Description**: 帮助用户使用对话流程来实现复杂的对话 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-20 - **Last Updated**: 2025-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 使用对话流程配置复杂场景的多轮对话 ## 1.介绍 ### 什么是对话机器人服务? [对话机器人服务](https://support.huaweicloud.com/productdesc-cbs/cbs_04_0000.html)(Conversational Bot Service)是一款基于人工智能技术,针对企业应用场景开发的云服务,主要包括智能问答、智能质检、定制对话机器人和任务型对话等功能。 ### 产品优势 - 智能的问答管理 1. 热点问题、趋势、知识自动分析统计。 2. 支持未知问题自动聚类,匹配相似问答,辅助人工不断扩充知识库。 3. 支持问答调测,点对点的监测智能应答过程。 4. 支持领域知识挖掘,提供易用的标注工具挖掘领域知识对。 - 全面的对话管理 1. 支持自然语言多能力融合,智能对话中控。 2. 灵活的知识库管理,支持对知识的批量操作。 3. 支持嵌入多轮对话技能,满足复杂的任务型对话场景。 - 高效训练部署 1. 基于modelarts的底层算法能力,提供更快的模型训练、部署能力。 2. 支持多算法模型效果验证,验证不同数据、参数、模型对问法效果的影响。 3. 支持模型最优参数组合推荐,保证问答效果。 ### 案例内容 对话机器人服务中的技能管理是打造任务型对话技能的工具平台。通过创建管理不同技能和词典,满足不同的用户需求,实现不同场景下的多轮对话能力。 在本案例中,您将使用CBS的技能管理为机器人快速配置技能,通过多轮对话实现机器人垃圾分类技能。 ### 案例目标 - 掌握使用CBS技能的使用方法。 - 掌握使用CBS创建垃圾分类流程配置的方法。 ### 您需要准备什么? - 一台电脑(Windows,Mac或Linux操作系统) - 谷歌浏览器 ## 2.准备工作 体验垃圾分类机器人配置,需要完成以下准备工作: ### 创建华为云账号并实名认证 参考[此链接](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0069252244.html),注册华为云账号。 参考[此链接](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0133456714.html),完成实名认证,推荐使用扫码认证。 **注意:请及时检查账号状态,避免账号处于欠费或冻结状态时资源被冻结,影响您的使用。** ## 3.下载数据 点击右侧的浏览代码按钮,整包下载数据压缩包至本地,解压后可以看到如下文件: ```yaml . ├── DB_query_rubbish_type.py └── rubbish_dict.txt ``` ## 4.创建试用版智能问答机器人 由于技能管理是专业版智能问答机器人下的功能,因此首先我们需要购买一个试用版专业版问答机器人。 点击[此链接](https://console.huaweicloud.com/cbs/?region=cn-north-4#/home/qa-robot),进入对话机器人服务智能问答机器人页面,点击右上角的购买问答机器人,进入问答机器人购买页面。 ![机器人购买页面](assets/001.png) 分别输入问答机器人名称,选择试用的计费模式,并点击立即购买完成支付,即完成试用专业版机器人创建。 ![购买机器人配置页面](assets/002.png) 问答机器人创建成功后,返回对话机器人服务主页面,等待机器人创建成功后,点击“机器人名称”进入机器人,左侧的标签栏中会有一项技能管理。 ![机器人管理页面](assets/003.png) ![技能管理页面](assets/004.png) ## 5.创建词典 ### 添加垃圾类型词典 **创建词典** 点击[此链接](https://console.huaweicloud.com/cbs/?region=cn-north-4#/home/qa-robot),进入对话机器人服务,点击进入相应的机器人,点击“技能平台”,再点击“实体管理”按钮,按照下图指导添加垃圾类型词典: ![创建词典页面](assets/005.png) 词典标识:rubbish 词典名称:垃圾物品 点击“确认”按钮,创建该词典,并进入“编辑”页面。 **导入词条** 点击页面上的“导入”按钮,然后点击“添加文件”按钮,上传本地文件夹下的`rubbish_dict.txt`文件,导入模式选“追加”,最后点击“确定”按钮,即可完成垃圾物品词典词条导入。如下图所示: ![导入词条页面](assets/006.png) ## 6.技能配置 本节将添加语料并标注,配置机器人的“垃圾分类”技能。 点击[此链接](https://console.huaweicloud.com/cbs/?region=cn-north-4#/home/qa-robot),进入对话机器人服务的“技能管理”,新建垃圾分类技能并进行技能配置。 ### 创建技能 点击“添加技能”按钮,选择“多轮对话技能”,点击下一步,输入技能名称:垃圾分类,如下图所示: ![添加技能页面](assets/007.png) ![添加技能页面](assets/008.png) ### 创建意图 技能创建完成后,点击进入“垃圾分类”技能,在意图列表中点击“创建”按钮,如下图指导填写: ![创建意图页面](assets/009.png) 意图标识:query_rubbish_type 意图名称:判断垃圾种类 然后点击“确认并继续设置”按钮,继续配置该意图。 ### 添加用户问法语料 进入“判断垃圾种类”意图的“用户问法”,点击“用户问法语料”输入框下方的蓝色字体“批量添加用户问法语料”,复制下方的语料至弹出对话框,点击“确认”完成用户问法预料导入。 ``` 书怎么处理 书是什么垃圾 其他垃圾包括牙签吗 其他垃圾里有护手霜 卫生纸如何回收 卫生纸属于哪种垃圾 厨余垃圾包括苹果皮吗 厨余垃圾里有土豆皮吗 可乐瓶应当怎样处理 可回收垃圾包括铁皮吗 ``` ![批量添加用户问法语料页面](assets/010.png) 语料添加完之后,滑动页面到最下方,点击“保存”。可以得到如下结果: ![用户问法语料页面](assets/011.png) ### 添加槽位 往下滑动页面,找到“槽位管理”页面,创建槽位:rubbish(垃圾类别) 然后点击“添加槽位”按钮,按照如下指导,添加rubbish_goods槽位: ![添加槽位页面](assets/012.png) ``` 关联槽位:不关联 槽位标识:rubbish_goods 槽位名称:垃圾物品 是否必须:是 追问轮数:1 输入框:你说的能再具体点吗? 词典选择:rubbish 答案候选:不勾选 ``` 然后点击“确定”按钮。槽位添加完成后,滑动页面到最下方,点击“保存”。 ### 语料标注 往上滑动页面,回到“用户问法”,对“用户问法语料”列表中的语料进行标注。 选中关键词,然后使用槽位对关键词标注。 标注完成后,如下图所示: ![标注槽位页面](assets/013.png) ### 添加用户问法模板 点击“用户问法”中的“用户问法模板”页面中添加模板。 点击“添加模板”按钮。模板内容如下图所示,在相应位置点击下方槽位名称插入相应槽位。完成配置后用户即可使用模板的问法与机器人进行对话。 添加模板: ![添加模板1页面](assets/014.png) 问法模板添加完成后,滑动页面到最下方,点击“保存”。 ### 配置对话流程 点击“配置对话流程”,完成复杂的对话逻辑配置。 从左侧节点栏拖拽一个“条件判断”节点到“对话开始”节点下方,并连接起来两个节点。 ![对话流程配置——条件判断](assets/015.png) 点击“条件判断”,完成如下图所示的设置: ![对话流程配置——条件判断节点设置](assets/016.png) 再从左侧节点栏拖拽一个“信息收集”节点到“条件判断”节点下方,并连接起来两个节点,如下图所示: ![对话流程配置——信息收集节点设置](assets/017.png) ![对话流程配置——条件判断节点设置](assets/018.png) ![对话流程配置——未提槽回复设置](assets/019.png) ![对话流程配置——已提槽函数配置](assets/020.png) 函数配置可参考[此链接](https://codelabs.developer.huaweicloud.com/codelabs/samples/039d02c2d9af4d3eba24b652675976f9)中的第六章节 ![对话流程配置——已提槽函数配置](assets/021.png) ### 函数参考代码如下 ```python #!/usr/bin/env python # -*- encoding: utf-8 -*- # @Version : Python 3.6 import json import requests # 定义一个垃圾类型的处理建议词典 rubbish_info = { 0: "分类投放可回收物时应保持清洁干燥,避免污染,轻投轻放;其中废纸尽量平整;立体包装物请清空内容物,清洁后压扁投放;有尖锐边角的,应包裹后投放。", 1: "充电电池、纽扣电池、蓄电池投放时应注意轻放;油漆桶、杀虫剂如有残留请密闭后投放;荧光灯、节能灯易破损连带包装或包裹后投放;废药品及其包装应一并投放进垃圾桶中。", 2: "有包装物的厨余垃圾应取出后分类投放;大块骨头和椰子壳、榴莲壳等不易生化降解,作为干垃圾进行投放;纯液体(如牛奶等)食物垃圾可直接倒入下水口;其余应沥干水分后再投放进厨余垃圾桶。", 3: "干垃圾应尽量沥干水分,投入干垃圾容器内。", } # 调用垃圾分类API def get_response(word, mode=1): """ 调用天行API接口 获取垃圾分类信息 :param word: 需要查询的垃圾物品 :return: 返回改垃圾物品的分类信息 """ key = "替换成apikey" # 可浏览https://www.tianapi.com/注册获取apikey url = "http://api.tianapi.com/lajifenlei/index" data = { "key": key, "word": word, "mode": mode, } headers = {'Content-type': 'application/x-www-form-urlencoded'} res = requests.post(url, data=data, headers=headers, verify=False) return res.json() # 函数入口 def handler(event, context): """ """ slot_temp = json.dumps(event, ensure_ascii=False) slot_info = json.loads(slot_temp) logg = context.getLogger() logg.info(slot_temp) # 获取槽位信息,即槽位取到的值 word = slot_info.get("goods", None) result = { "content": "我不知道这是什么,换个垃圾物品吧~" } if word: res = get_response(word) # 判断API响应码 if res['code'] != 200: result["content"] = "数据源资源不足!" return json.dumps(result, ensure_ascii=False) all_data_list = res.get("newslist", [{}]) filter_data_list = list(filter(lambda x: x.get("name", "") == word, all_data_list)) if filter_data_list: _type = filter_data_list[0].get("type", 4) rubbish_result = "" logg.info(word) # 根据垃圾类型拼接返回值 if _type == 0: rubbish_result = "{}是可回收垃圾。投放建议:{}".format(word, rubbish_info[_type]) elif _type == 1: rubbish_result = "{}是有害垃圾。投放建议:{}".format(word, rubbish_info[_type]) elif _type == 2: rubbish_result = "{}是厨余垃圾(即湿垃圾)。投放建议:{}".format(word, rubbish_info[_type]) elif _type == 3: rubbish_result = "{}是其他垃圾(即干垃圾)。投放建议:{}".format(word, rubbish_info[_type]) else: pass if rubbish_result: result["content"] = rubbish_result logg.info(json.dumps(result, ensure_ascii=False)) return json.dumps(result, ensure_ascii=False) ``` ## 7.模型训练发布 在“垃圾分类技能”页面中,进入“发布测试”页面,点击“训练模型”按钮,勾选“用户常用问法”,技能阈值默认即可。点击“确定”开始模型训练,训练时长大概3分钟。 ![技能信息页面](assets/023.png) 模型训练完成后,点击“线上发布”按钮发布模型。 ![发布模型页面](assets/037.png) ## 8.技能体验 模型发布完成后,回到“技能管理”页面,点击右上角“对话体验”按钮 下图是一组对话样例: ![对话体验页面](assets/022.png) ## 9. 参考文献 - https://support.huaweicloud.com/usermanual-cbs/cbs_01_0029.html - https://console.huaweicloud.com/cbs/?region=cn-north-4#/cbs/management/skills