Rasa简单介绍及demo实现

Thursday, Nov 3, 2022 | 1 minute read | Updated at Thursday, Nov 3, 2022

@
Rasa简单介绍及demo实现

chatgpt大火前搞得,现在,哎。。。。。

rasa 简单介绍及demo实现

ps. 本文基于rasa 3.1版本(python 3.8)

Rasa简介

Rasa是开源的机器学习框架,用于构建AI小助手和聊天机器人。支持自然语言处理、聊天会话和外部应用对接等。

Rasa有两个主要模块:

  • Rasa NLU 用于对用户消息内容的语义理解(用于聊天机器人中的意图提取和实体提取)
  • Rasa Core 用于对话管理(用于构建AI助手的对话引擎)

RasaX 帮助用户提升和部署由Rasa框架构建的AI小助手和聊天机器人(用于发布机器人的)

Rasa core消息处理流程(这部分未验证,根据demo执行看,基本一致)

https://upload-images.jianshu.io/upload_images/3285850-ece175b3a873ff90?imageMogr2/auto-orient/strip|imageView2/2/w/719/format/webp

  1. 将用户输入的Message传递到Interpreter(Rasa NLU模块),该模块负责识别Message中的"意图(intent)“和提取所有"实体”(entity)数据;
  2. Rasa Core会将Interpreter提取到的意图和识别传给Tracker对象,该对象的主要作用是跟踪会话状态(conversation state);
  3. 利用policy记录Tracker对象的当前状态
  4. 选择执行相应的action
  5. action执行,action 记录在Track对象中的?(暂时没明白)
  6. 将执行action返回的结果输出

Rasa 安装

按照官方教程安装 ps. 必须得使用python3.8(3.8以上,机器学习的库有版本冲突)

Rasa概念(自己理解,可能与官方文档有出入,供参考)

  • story: 一种训练数据的形式,是用户和BOT之间的对话表示。用户输入表示为intent,BOT响应表示为action
  • intent: 根据用户输入,经过NLU识别后认为用户的意图(目的)
  • action: 针对itent可执行的行为
  • entity: 就是识别出来的关键字
  • slot: 中间变量,结合关键字实现entity存储和逻辑控制
  • synonym: 同义词,entity同一关键字的不同说法
  • response: bot回复的模板

Rasa项目结构

执行rasa init后可得到基础结构

路径文件说明备注
actions自定义action代码路径custom action才需要,默认空
models初始训练的模型数据执行 rasa train 产生模型文件
tests
config.ymlNLU、Core配置文件pipeline nlu相关,policy core相关
domain.ymlRasa domain文件Core配置文件your assistant’s domain
endpoints.yml对接外部消息服务的endpoint
data数据
data/nlu.ymlRasa NLU的训练数据描述intent如何识别和entity如何提取的训练文件
data/stories.ymlRasa Stories数据描述针对不同的intent该采取的action
data/rule.ymlRasa Rule文件
credentials.ymldetails for connecting to other services

3.1 都是用yaml格式,且格式与内容跟之前版本都有所差别。官方提供了migrate工具(我没用起来,根据理解重新写的yml文件)

domain

bot配置文件 intent、slot、entity、action、response都这儿声明 intent 与nlu.yml和storeis.yml文件中的intent对应 slot 与原来格式相差较大,3.1指定了与entity的映射关系。与action结合使用,一般只有action 条件控制时才需要指定,其他NLU根据映射直接赋值了。 action 就是bot动作

  • utter开头的一般直接回复了用于简单动作
  • action 开头的可定制

response 就是回复模板

config

这部分内容涉及NLU处理流程,不太了解。仅转述根据相关资料 pipeline 配置NLU模块使用的算法?,按顺序执行

- name: "MitieNLP" # 预训练词向量
  model: "data/total_word_feature_extractor.dat"
- name: "JiebaTokenizer" # Jieba分词器,中文推荐
- name: "MitieEntityExtractor" # entity提取器
- name: "EntitySynonymMapper" # 同义词映射器 
- name: "MitieFeaturizer" # 特征化
- name: "SklearnIntentClassifier" # 意图分类器

policy 好像是响应选择

https://img-blog.csdnimg.cn/20200227102611889.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FuZHJFeHBlcnQ=,size_16,color_FFFFFF,t_70

rasa server

可以使用rasa SDK实现server端,或者根据其API要求,实现相关接口。 具体可参考 rasa action server

参考文档

© 2016 - 2025 Caisong's Blog

🌱 Powered by Hugo with theme Dream.

About Me

大龄程序员,喜欢折腾各种环境部署、软件应用。

博客记录日常。