rasa

大象笔记 > 标签 > rasa

对话机器人 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 中文系列教程 ...

阅读全文...

对话机器人 Rasa(十九):rasa 不同客户端类型区分处理 custom channel

使用场景 例如,用 Rasa 实现一个自动聊天机器人,要同时实现多端: 网页端 微信小程序端 Android / iOS 原生 App 端 Windows 端 每一端的回复内容会有些许差异,如: utter_greet 网页端:欢迎使用大象计算器,地球上最不强大的计算器 微信小程序端:欢迎使用大象计算器微信小程序,您也可以关注大象工具公众号接收各种骚扰信息 突然想到 Rasa channel 是否可以实现这个功能,于是查了一下官方文档,看起来很挺合适。 不同 channel 返回不同 response 参考: https://rasa.com/docs/rasa/connectors/ ...

阅读全文...

对话机器人 Rasa(二十):Custom Action 中无法读取 Slot 值

现象 rasa custom action 中的代码,无法获取到 slot 值: items = tracker.get_slot("items") 而我确实在之前的流程中已经设置了 slot 的值 return [ SlotSet("items", items), FollowupAction("action_a"), ] 疑惑 通过打印日志,可以确定的是,赋给 slot 的值不是空。 可是为何获取不到呢? 我怀疑是 story 中没有加入对应的流程,即 slot_was_set 逻辑。 解决方法 测试了一下,确实如此,加入 ...

阅读全文...

对话机器人 Rasa(二十二):返回自定义补充字段

需求 前端访问 Rasa 接口获取聊天对话的应答信息,除了想获取 text,和 buttons 之外,还想获取额外的信息。 例如,多个操作按钮对应的 item id。 查了很久才找到一点线索,然后尝试了一圈,发现两个可行的方法。 方案一: custom action 直接在 custom action python 代码中,utter_message 中指定 custom 字典参数: custom_data = { "field1": "value1", "field2": "value2", "i ...

阅读全文...

对话机器人 Rasa(二十三):重置 slot 的值

需求 在每次 rasa form 获取用户输入之后,将这个过程中用到的 slot 值重置。 即,置为 None。 防止下次进入同一个 form 时,slot 非空的情况导致未提示用户输入就进入之后的流程。 slot 重置 custom action 中,return 列表中加入 SlotSet 即可。例如: 在获取用户名之后,将用户名重置: return [ SlotSet("name", None), ] 错误的做法 SlotSet("name", None), return [ ] 这样,并不会生效。 custom action 中 retu ...

阅读全文...

对话机器人 Rasa(二十四):两例多返回额外消息的 bug 定位

今天又遇到一例 Rasa 对话多返回额外消息的 Bug,结合之前遇到的另外一例,都非常具有代表性, 有必要总结一下。避免之后再出现此类问题,浪费时间去调试。 具体细节就不贴日志了,直接上结论。 现象 表现的现象都是一样的,就是本来用过对一个消息返回一条回复,例如: response1 但是实际返回是 [response1, response2] 多返回了一条。而且这条还是固定的,但是找不到关联性在哪里。 Bug 1:未加 slot_was_set,导致两个 story 没有区分度 custom action 中对查询到数据和未查询到做了不同的回复。 但是由于没有区分,导致在返回查询结果时,总 ...

阅读全文...

对话机器人 Rasa(二十五):Form Slot 输入校验

需求背景 例如,我想让 Rasa 提示用户输入要购买的图书数量,需要输入 1 本到 100 本。 方案一 slots: book_number: type: float min_value: 1 max_value: 100 但是这里的 min_value 及 max_value 只是限制了范围, 在输入的数字超过范围时,自动修正为边界值,没有起到校验失败时提示的效果。 这个方案不好。 注: slot type 没有整型,只有 float 类型。 方案二 Rasa Custom Action validating: https://rasa.com/docs/ra ...

阅读全文...

对话机器人 Rasa(二十六):生产环境支持多并发的配置

默认,Rasa 服务器只使用 1 个 worker。 对于生产环境,这肯定是不能接受的。 rasa 多并发 单机高并发设置 环境变量 SANIC_WORKERS 设置为 1 以上 默认 Rasa custom action server 也只使用 1 个worker。将环境变量 ACTION_SERVER_SANIC_WORKERS 的值设置为 1 以上 注意:locker store 的设置不是 InMemoryLockStore 时, 才可以启用多个 worker。 为何直接增加 worker 数量行不通 因为每一次请求的回复都需要基于对话的历史,而同一个用户的多个请求分散到多个 wo ...

阅读全文...

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 ...

阅读全文...

对话机器人 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(二十八):添加逻辑的工作流/规范

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

阅读全文...

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

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

阅读全文...

排查一例 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(三十四): 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 ...

阅读全文...