AI

分类下相关文章

对话机器人 Rasa(三十八):哪些功能不适合用 Rasa 实现

周末被一个 rasa 控制硬件设备的功能所困扰,连做梦都在梳理对话流程。当然是没有搞定。周一早上刷牙的时候,大脑又不自觉地思考起来,我觉得这不是个办法。于是,转而一想,抛开这是个必须完成的任务的角度,如果从我独立开发的角度去看呢?🤔 目前的实现方案为何如此烧脑,是否有更简洁清晰的解决方案。 ⚡️ 功能描述 在 rasa 对话流程中, 由 rasa 后端下发一个硬件设备的运行指令 然后客户端软件收到指令后,检测本地设备状态,将数据发给 rasa,rasa 再透传给三方服务器接口,存储数据 rasa 将三方服务接口的调用结果返回给客户端 客户端再控制硬件设备开始运行 运行结束,客户端再将运行结果发 ...

阅读全文...

对话机器人 Rasa(三十七):服务器上搭建一套新的调试环境

需求 在服务器上搭建一套新的 Rasa 环境,用于联调。 使用不同的 model actions.py 也不同 之所以在生产服务器上新增一个联调环境,原因是: 只有一台服务器。。。 客户端开发跟服务端开发都是远程办公,无法在一个局域网环境下联调。 原环境已经正式使用,不能在上面直接改动,会影响到现有业务。 服务器内存确认 共 8G 内存, 目前已使用 2.4G。有足够的剩余内存搭建新的环境。 实测,两套环境同时运行,使用内存也才 3.8G,不到 4G。 大体思路 [X] 服务器上新建一个同步目录,用来同步联调用的环境。 [X] rasa 项目中,新建一个 rsync 脚本,同步联调环 ...

阅读全文...

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

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

阅读全文...

对话机器人 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 返回空消息的 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 设置 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(三十三): 测试 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

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

阅读全文...

对话机器人 Rasa(三十一):Form 的进阶用法,动态话术及 slot

需求背景 例如,诊所之类的预约场景下,到店需要核对预约号码,与预约的身份证号码,两个数据匹配成功,才能进入下一步的操作。 这里用一个 form 包含两个 slot 来实现信息录入,看起来是典型的 form 使用场景,没什么可说的。 但是如果在输入预约号码后,需要拉取身份证的掩码格式,让用户填写掩码部分,以减少用户输入。那么就需要在输入第一个 slot 后,调用其他服务的 api,获取身份证掩码。然后影响到第二个slot 的 utter ask 提示话术内容。 第二个需求是,如果第一个 slot 输入的预约号码查询不到,就不需要再提示身份证号码的输入了。那么就变成了一个动态的 form。 第二个 ...

阅读全文...

对话机器人 Rasa(三十):slot influence_conversation 引发的 intent 无法识别

问题现象 在某个对话流程之后,返回了两个按钮,点击一个按钮 预期的效果是:先返回一个 utter,然后进入 form 输入 loop。 bug 表现:要么返回空,要么返回完全不着边际的一个 utter,或者触发一个没有任何关联的一个 custom action。 我本以为是这个 intent,触发 form loop 这个 story 写的有问题。 但实际上,发现这两个按钮都不正常了,甚至所有 intent 都无法在这个操作之后正常被识别。 排除 intent 识别问题 按钮 payload 中的指定意图,类似这样的格式。 /intent 这个是不会有识别问题的。因为其 confiden ...

阅读全文...

对话机器人 Rasa(二十九):custom action 中获取请求 channel 来源

需求背景 Rasa custom action 的 Python 代码中,需要根据不同 channel 渠道,来做不同的逻辑处理。 所以,需要能获取当前消息的 channel 来源。 获取 channel channel = tracker.get_latest_input_channel() print(channel) 可能值 配置文件 credentials.yml 中有详情的 channel 清单。 例如: 默认 channel: rest 自定义的 channel: 例如 app 等 查看合集 📖 对话机器人 Rasa 中文系列教程 ...

阅读全文...

将 yolov5 内置模型导出为 pytorch mobile 格式

Google Colab 地址 使用 Colab 能利用 Google 免费提供的 GPU 资源,快速进行模型训练。比在我的弱鸡笔记本上训练,能节省大量时间。 在 Colab 上新建一个项目 https://colab.research.google.com 或者可以考虑继续沿用之前的项目。 安装 yolov5 新建一个代码块 #clone YOLOv5 and !git clone https://github.com/ultralytics/yolov5 # clone repo %cd yolov5 %pip install -qr requirements.txt # install ...

阅读全文...

对话机器人 Rasa(二十八):添加逻辑的工作流/规范

总结的一些 Rasa 开发过程中的经验和技巧,持续更新中 ... 第一步:流程图/对话逻辑图 原始的流程是怎样的 新流程逻辑分支 1 是怎样的 新流程逻辑分支 2 是怎样的 新流程逻辑分支 N 是怎样的 新流程逻辑抽象合并 第二步:utter_xxx 回复内容 domain.yml 中补充新增的 utter。 因为有了 utter,剩下的任务就把逻辑串联起来。 与此同时,通过完成简单的小任务,减少项目进度焦虑。 utter_xxx 前加上 intent 方便在 domain.yml 内可以搜索到所有的逻辑,省去了去 stories / rules 文件中去查找逻辑对应关系。 例如: utt ...

阅读全文...

对话机器人 Rasa(二十七):返回视频

虽然 Rasa 支持图片资源的返回,但是并不支持视频资源。 可以采用自定义字段的方式返回视频链接。 例如: utter_my_video: - text: "Watch video below" custom: video: "https://www.youtube.com/embed/qsKoT__cmAw?si=1hv4HoKA3ZcTvNCN" 这里的视频链接使用了 youtube 嵌入 iframe 中的视频源链接。 前端可以封装一个 video 卡片组件,将 youtube iframe 嵌入到页面中。 自定义字段直接返回 ifr ...

阅读全文...

Rasa in Docker: Could not load model due to Error deserializing graph schema

When deploying Rasa service in production Docker environment, error show: rasa.core.agent - Could not load model due to Error deserializing graph schema. Can't find class for graph component type 'rasa.graph_components.providers.forms_provider.FormsProvider' Reason This error typically occurs whe ...

阅读全文...