rasa

大象笔记 > 标签 > rasa

Rasa 中 JiebaTokenizer, LanguageModelFeaturizer 与 DIETClassifier 各自的作用及区别

虽然我已经 用 Rasa 实现了中文自动问答机器人功能,但是里面 pipeline 的配置,其实我完全没看明白各个组件起到的作用。我已经很认真地读了几遍官方文档关于各个组件的描述,英文/中文文档都看了不少,对我来说太晦涩了,无法理解。 但是这个项目除了要实现功能,还要做成 PPT 给合作方讲解,对方有深度学习的专家教授,这就更尴尬了。只能临时抱佛脚求助 ChatGPT,没想到 AI 给出的解释通俗易懂,真大哥也。 除了口头禅 “总之”,其他都挺好的。 rasa 中 DIETClassifier 的作用 在 Rasa 中,DIETClassifier 是一种用于意图分类和实体提取的深度学习模型。 ...

阅读全文...

对话机器人 Rasa 中文系列教程

Rasa 是一个自然语言处理开源框架,用于构建聊天机器人和智能助手。它提供了一系列用于处理对话流程的工具和算法,包括自然语言理解(NLU)、对话管理、对话策略等。 使用 Rasa,可以创建一个可扩展、灵活且高度个性化的聊天机器人,该机器人可以与用户进行深入的交互,以满足他们的需求。 Rasa 是基于 Python 编写的,并且支持命令行和 API 接口的方式进行使用和集成。 它还有一个友好的社区,提供了很多文档、教程和示例来帮助开发者上手。 以下教程基于 Rasa 3.4.6 版本,我边学习,边整理的实战笔记,并经过测试。 对话机器人 Rasa(一):安装 对话机器人 Rasa(二): ...

阅读全文...

开源对话机器人框架 Rasa (一):安装

需求是实现一个特定领域的问答功能,交互模式类似跟 ChatGPT/文心一言聊天一样,或者是购物平台中的客服机器人。 基于 ChatGPT 的开源实现来训练模型肯定不现实,毕竟这么大的模型,训练成本极高,而且现实需求也不需要这么庞大的功能,只需要专业的领域知识即可。 此外,涉及到医疗领域,自动回复不能太随意,容易引起纠纷。所以最近经常看到有人在问“怎样使用 ChatGPT 构造一个客服机器人?”,我的感觉是,对场景理解有偏差。 找了一下发现一个不错的开源对话管理框架 Rasa。 Rasa Open Source is the most popular open source framework ...

阅读全文...

对话机器人 Rasa(八): actions 通过 Python 查询天气信息

非常典型地一个应用场景,即通过 rasa 从提交消息中提取城市和时间,然后调用三方天气接口查询天气,再返回用户。 但是按照官方文档,及电子书,网上资料里配置,jieba dict 也好,lookup table 也好,都会因为 DIETClassifier 报奇怪的异常。我感觉是版本的 bug,目前还没有定位到问题。 折腾了两天,没有头绪,看了部分 rasa 源代码,印象也非常不好,许多配置规则没有在文档中体现,需要看源码才能理清。 距离这个项目验收的时间不多了,我也懒得折腾,干脆直接在 actions 中直接获取消息原文,用 python 通过正则提取 entity,这本应由 DIETCla ...

阅读全文...

对话机器人 Rasa(九): docker compose 同时部署 rasa core 和 actions 服务

尝试手动启动了两个 docker containter: 一个用于 rasa core 一个用于 rasa actions 但是,发现测试对话不涉及 actions 服务的,一切正常返回; 但是跟 actions 相关的,没有任何返回。 查看 docker 容器日志 docker logs -f <containter-id> 这样就能实时查看 docker 容器中 rasa 的运行日志,跟 tail -f 效果等同。非常方便。 异常日志 查看了一下 rasa core 的日志: rasa.shared.exceptions.RasaException: Failed to ...

阅读全文...

对话机器人 Rasa(十): 回复消息格式化,加粗换行等

例如,我想在 Rasa actions.py 中,对 dispatcher.utter_message 返回的消息进行格式化。 加粗 这里类似 Markdown 的语法,需要加粗的文本前后加双星号即可。 换行 使用 \n Rasa 会自动 trim 掉前后的空格。 示例: dispatcher.utter_message( text=f"**Reservation No.{index+1}** \n Name: {item['name']}" ) 效果: 注意 如果换了其他前端方案,例如 ChatUI,就不支持 markdown 语法了。需要自己去兼容。 ...

阅读全文...

对话机器人 Rasa(十八):使用 docker compose 及 dockerfile 部署 python flask 图片服务

使用 Flask 的原因 因为我觉得用 Rasa 处理图片 base64 编码是不合理的,不适合 intent 识别,再者影响 rasa 接口的性能。 所以,独立出一个 flask 服务来处理图片上传的使用场景。 使用 docker 的原因 原本想在服务器上直接用自带的 python 3.8 部署一个 flask 服务,用来模拟一套接口, 方便 Rasa Actions 服务来调用测试数据。 其中 Rasa Actions 服务部署在 docker 容器中,但是其无法直接访问宿主机中的 flask 服务。 尝试了几种方式都不行,所以想干脆也把 flask 采用 docker 的部署方式。 ho ...

阅读全文...

对话机器人 Rasa(十一):custom actions 中使用 python 设置 slot 值

例如,我想在 Rasa 对话过程中,缓存当前用户选择的服务 ID。 方便在调用其他业务接口时使用该 slot 的值。 custom actions 代码示例 actions.py 中,假设要将 my_slot 设置为 some_value: from typing import Any, Text, Dict, List from rasa_sdk import Action, Tracker from rasa_sdk.events import SlotSet class MyCustomAction(Action): def name(self) -> Text: ...

阅读全文...

对话机器人 Rasa(十二):用户会话 Session 管理

Rasa 可以管理用户 session,每个 session 由 conversation_id 唯一标识。 当你从 web 聊天组件或者 telegram app, fackbook messager 等不同的 channel 向 rasa webhook 发送一条消息时, 你所指定的 sender_id 即被转换为 conversation_id, 然后传递给 Rasa Core。 注意,默认情况下,Rasa session 是存储在内存中,即一旦你关闭 rasa 服务,session 就会丢失。 可以通过将对话信息存储到数据库来解决这个问题,例如,MongoTrackerStore, R ...

阅读全文...

对话机器人 Rasa(十三):GUI 管理系统 Botfront 部署

Botfront 是一个非常方便的 Rasa GUI 图形化管理后台。可以在网页里: 编辑所有的 Rasa 配置文件 执行训练 使用 web 聊天组件 非常适合没有 linux 服务器操作经验的用户。 整个安装配置过程参考 https://botfront.io/docs/installation/server-cluster 即可。 这里只是记录一下文档中没有提及的细节。 版本 botfront@1.0.5 目录结构 $ tree -a . ├── .botfront │   ├── botfront.yml │   └── docker-compose-template.yml ├── ...

阅读全文...

对话机器人 Rasa(十四):Botfront 自带的 MongoDB 端口问题

漏洞现象 在部署好 botfront,并创建了管理员账号之后,第二天发现账号消失了。 我本以为是本地目录权限问题,导致 mongodb 没有将数据写入磁盘。 但是,修改了本地目录权限之后,这个问题又出现了。 感觉出大问题了。 查看 mongodb 日志 通过 docker logs 查看了 mongodb 镜像的日志。 {"t":{"$date":"2023-07-10T12:33:33.424+00:00"},"s":"I", "c":"-", ...

阅读全文...

对话机器人 Rasa(十五):slot type 与 influence conversation

domain.yml 中的 slot 配置 以下是一段有问题的 slot 配置 slots: email: type: any influence_conversation: true mappings: - type: from_text conditions: - active_loop: email_form 训练时的错误信息 > rasa train --force InvalidSlotConfigError: An AnySlot cannot be featurized. Please use a dif ...

阅读全文...