rasa

大象笔记 > 标签 > rasa

对话机器人 Rasa(三十二):新建一个基于 socket.io 的自定义 channel

在之前的笔记中,整理了如何新建一个独立的 channel 来区分不同的客户端类型。 对话机器人 Rasa(十九):rasa 不同客户端类型区分处理 custom channel 但是这个是基于 HTTP 协议的,无法实现实时双向消息通信。例如,在一个 rasa 请求中, 需要执行一系列耗时的操作,需要在每个操作执行前,向客户端发送一个提示, 这个需求,用 HTTP 的接口是无法实现的。而,基于 WebSocket 协议的 Socket.IO 则能很好的解决这个问题。 此外,在需要人工客服向客户端主动推送消息的场景下,Socket.IO 也优势尽显。 可见,在聊天机器人领域,Socket.IO ...

阅读全文...

对话机器人 Rasa(三十三): 测试 socket.io channel 异步返回多条消息

测试场景 向 rasa server 发送一条消息,除非一连串的耗时操作,每个操作执行前都返回一条消息。 即,客户端发送一条聊天消息,rasa 机器人间隔返回多条消息回复。 同时作为统一消息格式的测试工具。 客户端模拟 本来打算用 python socket.io client 实现,但是考虑到目前大部分使用场景都是基于浏览器。 所以还是基于 html js 来实现一个客户端更合适。 也顺便把 socket.io 版本的 chatui.io 聊天界面实现。 测试逻辑 建立 socket.io 连接 建立连接后,发送消息,触发指定的 rasa custom action rasa custom ...

阅读全文...

对话机器人 Rasa(三十四): Socket.IO channel 设置 session id

在之前的 Rasa 笔记中记录过 Sender ID 的使用,即 session id 的管理: 对话机器人 Rasa(十二):用户会话 Session 管理 对于基于 HTTP 的自定义渠道,session id 比较好处理,直接获取请求中的 sender 等自定义的字段值即可。 但是,对于基于 socket.io channel 来说,代码修改相对复杂一些,还有额外的概念。这里记录一下。 session_persistence 参考官方文档: https://rasa.com/docs/rasa/connectors/your-own-website/ socketio: user_m ...

阅读全文...

排查一例 rasa 返回空消息的 bug

bug 现象 修改了一处不相干的 story/rule A,引起了另一个 B 流程返回空消息。 这不是一个典型的问题,也没有最终定位到 story 的问题,但是通过将 story 改写为 rule 解决。 这里只记录一下排查,及 debug 的思路。 思路 首先排除掉 intent 识别的问题。因为请求时直接使用的 /intent 的方式,不存在意图识别问题 首要目标:快速复现问题 大概率就是前面流程的 story / rule 写的有问题 TODO done: 整理思路 done: new branch done: model backup & 使用有问题的 model don ...

阅读全文...

对话机器人 Rasa(三十五): Socket.IO channel 请求返回 400 错误

实现了一个自定义的 Rasa Socket.IO channel, 但是发现在生产环境始终无法建立 websocket 链接,返回 400 错误。而在开发环境却一切正常。 在 Rasa 官网论坛找到了一个类似的问题: https://forum.rasa.com/t/urgent-connetions-problems-with-socketio-channel-and-sanic-workers-1/59139/1 大致意思是 SANIC_WORKERS 大于 1 时,总是返回 400 错误。 在生产环境将 SANIC_WORKERS 修改为 1 之后,发现确实可以正常建立连接了。 这就非 ...

阅读全文...

对话机器人 Rasa(三十六):rasa 开发智能客服的培训 PPT 大纲

应邀做一个关于 Rasa 开发智能客服的培训,所以简单整理一下培训内容的大纲。 之前在公司内部做过一个 Rasa 的培训,实际谈不上培训,只能算是一个技术分享。 因为团队内部大部分是硬件工程师和嵌入式开发工程师,大家对于纯软件相关的了解不多,也不负责相关的开发,所以只能算是一个入门介绍,具体细节没有深入。 而这次不同,受众是软件开发团队,负责智能客服系统的开发,所以需要有针对性的做内容调整。同时,把自己踩过的坑分享一下。 先列一下大纲,然后再基于此做成 PPT。 培训大纲 rasa 原理及处理逻辑 配置规则:意图识别、回复模板、关联规则 如何通过界面管理 rasa 的 yaml 文件(rul ...

阅读全文...

对话机器人 Rasa(七):Action 支持 Python 查询今天星期几

场景 例如,跟 Rasa 机器人对话中,询问今天星期几,然后使用 Python 返回中文答复。 nlu.yml 增加自然语言解析: - intent: weekday examples: | - 今天是星期几 - 今天几号 - 今天的日期 domain.yml 增加 actions: intents: - weekday actions: - action_weekday rules.yml 配置映射关系 - rule: 星期几 steps: - intent: weekday - action: action_weekday actio ...

阅读全文...

对话机器人 Rasa(二十一):Rasa 项目的 gitignore 配置

rasa init 初始化项目之后,可以看到增加了很多不需要添加到 git 项目管理中的文件,例如 模型文件。默认的模型文件大小就有 24M。 cache 文件 等。 在开始动手修改各种 yml 配置文件之前,最好先提交原始的文件到 git 管理中,防止误操作。 网上找到一个规范的 rasa gitignore 文件,用来过滤这些文件。 参考 https://raw.githubusercontent.com/RasaHQ/rasa-nlu-examples/main/.gitignore gitignore 配置 # Byte-compiled / optimized / DLL fil ...

阅读全文...

Rasa NLU pipeline 组件列表

官方文档 https://rasa.com/docs/rasa/components 记录几个感觉比较重要的: 语言模型 Language Model MitieNLP: 预训练的语言模型之一,需要指定模型文件,网上有可以下载到的用百度知道和维基百科训练好的中文模型文件。 SpacyNLP: 另一个预训练的语言模型。也需要指定模型文件,以中文为例,有几个版本,https://spacy.io/usage/models, 小的几十M,大的几百M. 推荐使用至少中型模型,即 md,否则影响意图分类的性能。 在一些文章里看到说是官方推荐使用 SpacyNLP, 但是我在官方文档里没有找到这样的说 ...

阅读全文...

对话机器人 Rasa (二):中文支持

Rasa 安装之后,默认是不支持中文对话的。 学习、配置的策略 查到的示例,pipeline 配置各不相同,不动手试,难以知道相互间的优劣。 所以,先从能运行的最简单配置开始。例如使用《Rasa 实战:构建开源对话机器人》这本书上的推荐的中文 pipeline。 里面有个医疗机器人的 nlu 配置示例。当然,只包含了 nlu 部分的配置,即识别意图和实体,没有回复配置。 效果 基于 Rasa websocket 的网页组件 实现。 最简单的中文配置 打开项目根目录下的 config.yml 配置文件,修改如下: recipe: default.v1 language: zh pipeli ...

阅读全文...

对话机器人 Rasa (三):基于规则添加一个意图对应的回复

使用 Rasa rules.yml 是最简单的指定回复内容的方式,即,添加一条匹配规则。 添加一个意图对应的回复,需要编辑三个文件。 以回复用户的夸奖为例: nlu.yml 意图识别: data/nlu.yml - intent: praise examples: | - 你真聪明 - 你怎么这么聪明 - 你太智能了 - you are really smart - you are so clever domain.yml 编辑返回的内容模板。domain.yml 中添加: version: "3.1" intents: ...

阅读全文...

对话机器人 rasa (四):生产环境部署,Ubuntu 服务器基于 docker

由于线上生产环境使用的是腾讯云的服务器,Ubuntu server 版本比较低,是 18.04。自带的 python 版本为 3.6,不满足对话机器人框架 rasa 对 python 版本的最低要求。 而升级 python 版本可能破坏系统的一些工具。至于 virtualenv, miniconda 的方案我都非常反感,因为手动操作也不少,增加了重复部署的复杂度,而且长时间不用,命令就忘了。(目前大部分服务端程序,我都采用了 golang,已经很少用 python)我觉得目前最佳的部署方案是 docker。 这也是我第一次线上生产环境尝试 docker 部署,所以记录一下流程。 如果有一定 d ...

阅读全文...

对话机器人 Rasa 何时使用 rule,何时使用 story

在配置 Rasa 对话规则的时候,我一直有一个疑问。 Rasa 中 story 的意义是什么? 我在跟 Rasa 对话的时候,似乎也没发现按照 story 的流程走。 查了一下: Rasa 包含了两种方式来定义对话流程:规则(Rules)和故事(Stories)。 规则是一种简单而有限制的方式来定义对话流程。它们通常用于处理简单的用户请求,例如回答一个固定的问题或者执行某些操作。规则只能捕获单个意图(intent)并且不能处理槽位填充或多轮对话。该方法适用于简单的场景下。 相比之下,故事可用于更复杂的对话流程。故事中可以包含多个意图、槽位填充以及多轮对话。在故事中,您可以定义特定的对话场景,并 ...

阅读全文...

对话机器人 Rasa(五):自动化测试

自动化的必要性 手动跑一遍覆盖各种问题的对话,太耗费时间了。例如,即便最简单的有十几个意图识别的对话场景,手动测试一遍都需要很长时间。 而且记不住有哪些 rule ... 需要对照着 nlu.yml 文件才能记起来。 比较高效的方式是,跑一遍自动化测试,然后将失败的 case 摘出来,手动跑一遍交互式训练。 还有另外一个好处,就是之后现场演示的时候,可以照着自动化测试的 test case 来演示,以保证万无一失。避免像百度文心一言一样,发布会上连现场演示的勇气都没有。 测试文件 > ls tests/ test_stories.yml 似乎没有 test_rules.yml 这样的文 ...

阅读全文...

对话机器人 rasa(六): 基于 websocket 的网页组件

由于要现场演示 Rasa 对话机器人的实际效果,感觉用 Rasa Shell 命令来演示不太正式。 还是用网页版 Rasa 组件来演示更直观一些,也容易理解。 再就是我想把对话场景制作成一段小视频,或 gif,放到 PPT 里给客户演示。这种情况,也是网页端更简单直观。 页面效果 但是官方组件在手机端体验不太好,底部发送按钮有遮拦,在 iphone 上按钮超出右侧屏幕,原因是宽度都是用的 px 写死。 rasa websocket 配置 打开配置文件 credentials.yml: 增加 socketio: user_message_evt: user_uttered bot_me ...

阅读全文...