在文章发出来后收到一些反馈,很多人对付Rasa也不太理解。
本文会从支配安装、常见观点、框架构造、运用示例几部分展开,来重点先容一下Rasa。

什么是Rasa智能机械人?若何与LLM结合?_动作_自界说 AI快讯

笔者自己本地上布署了一个用于查看景象预报的Rasa项目,运行后效果如下:

实际上,在AI运用风起云涌的本日,正如在RasaGPT项目中描述的那样,如果我们能在Rasa的根本上结合大模型的能力,必定也能够创造出一些特殊故意思的运用。

Rasa与大模型结合的案例:RasaGpt——一款基于Rasa和LLM的谈天机器人平台

一、先容、支配安装先容

Rasa是一个集成的开源对话机器人框架,包括语音和文本对话接口、核心对话管理和措辞理解组件,如下所示:

1.对话流程管理:掌握全体对话流程和状态的Tracker组件和DialoguePolicy组件。
2.措辞理解:处理用户输入文本并提取关键信息的RasaNLU组件。
3.对话天生:天生回答并转化为终极输出的RasaCore组件。
4.连接器和API:与用户交互的SDK和API(例如REST,WebSockets,Telegram etc.)组。
5.对话数据和实体存储:对话的繁芜性和机器人的智能性可以通过演习模型来提高。
为此,Rasa供应了用于存储演习、测试和验证数据的文件格式和API。

如果你还没有一个 Rasa 项目,你可以在 Docker 中构建一个,而无需在本地机器上安装 Rasa。
如果你已经有一个满意的模型,拜会 支配 Rasa 助手[1] 理解如何支配你的模型。

安装 Docker

如果你不愿定是否已安装 Docker,可以运行以下命令进行检讨:

docker -v

如果你的机器上已安装 Docker,输出应显示你所安装的 Docker 版本。
如果命令无法实行,你将须要安装 Docker。
详细信息请参阅 Docker 安装[2]。

设置你的 Rasa 项目

就像从头开始创建一个项目一样,你可以利用 rasa init 命令创建一个项目。
唯一的差异是你将在 Docker 容器内运行 Rasa,利用镜像 rasa/rasa。
要初始化你的项目,请运行:

docker run -v $(pwd):/app rasa/rasa:3.5.10-full init --no-prompt

这个命令的含义是什么呢?

•-v $(pwd):/app 将你确当前事情目录挂载到 Docker 容器内的事情目录。
这意味着你在电脑上创建的文件将在容器内可见,而在容器内创建的文件将会同步回你的电脑。
•rasa/rasa 是要运行的 Docker 镜像的名称。
'3.5.10-full' 是标签的名称,用于指定版本和依赖关系。
•Docker 镜像以 rasa 命令作为入口点,这意味着你无需键入 rasa init,只需键入 init 即可。

运行此命令将产生大量的输出。
详细发生了什么呢?

•创建了一个 Rasa 项目。
•利用项目的演习数据演习了一个初始模型。

要检讨命令是否成功完成,请查看你的事情目录的内容:

ls -1

初始项目文件以及包含演习模型的 models 目录该当都在个中。

把稳

如果碰着权限缺点,可能是由于 rasa/rasa 镜像按照最佳实践以用户 1001 运行,以避免给容器授予 root 权限。
因此,这些容器创建的所有文件将归用户 1001 所有。
如果你想以不同的用户身份运行容器,请参阅 Docker 文档[3]。

与助手交互

要与你的新演习的助手交谈,请运行以下命令:

docker run -it -v $(pwd):/app rasa/rasa:3.5.10-full

这将启动一个 shell,在这里你可以与你的助手谈天。
请把稳,此命令包括 -it 标志,这意味着你正在以交互办法运行 Docker,并且可以通过命令行输入内容。
对付须要交互输入的命令,比如 rasa shell 和 rasa interactive,你须要通报 -it 标志。

演习模型

如果你编辑了任何演习数据或编辑了 config.yml 文件,你须要重新演习你的 Rasa 模型。
你可以通过运行以下命令来实现:

docker run -v $(pwd):/app rasa/rasa:3.5.10-full train --domain domain.yml --data data --out models

这个命令中发生了什么呢?

•-v $(pwd):/app:将你的项目目录挂载到 Docker 容器内,以便 Rasa 可以在你的演习数据上演习模型。
•rasa/rasa:3.5.10-full:利用标签为 '3.5.10-full' 的 Rasa 镜像。
•train:在容器内实行 rasa train 命令。
更多信息请参阅 命令行界面[4]。

在这种情形下,我们还通报了域文件、演习数据和模型输出目录的位置值,以展示如何自定义这些值。
你也可以省略它们,由于我们通报了默认值。

自定义你的模型选择一个标签

所有 rasa/rasa 镜像标签都以一个版本号开始。
当前版本是 3.5.10。
标签包括:

•{version}•{version}-full•{version}-spacy-en•{version}-spacy-de•{version}-spacy-it•{version}-mitie-en

{version}-full 标签包含了所有可能的流水线依赖项,许可你根据须要自定义 config.yml,无需担心短缺依赖项。
纯粹的 {version} 标签包含了运行 rasa init 创建的默认流水线所需的所有依赖项。

为了使镜像尽可能小,我们还发布了不同依赖项的 rasa/rasa 镜像的不同标签。
有关与你的流水线干系的更多依赖项信息,请参阅 附加依赖项[5]。
例如,如果你利用了来自 spaCy 或 MITIE 的预演习词向量的组件,你该当选择相应的标签。

如果你的模型有一个标签中没有包含的依赖项(例如,不同的 spaCy 措辞模型),你可以构建一个扩展了 rasa/rasa 镜像的 Docker 镜像。

把稳

你可以在 DockerHub[6] 上查看 Rasa Docker 镜像的所有版本和标签的列表。

把稳

latest 标签对应于最新稳定版本的构建。

添加自定义组件

如果你在 config.yml 中利用了自定义的 NLU 组件或策略,你须要将模块文件添加到你的 Docker 容器中。
你可以通过挂载文件或将其包含在你自己的自定义镜像中来实现。
确保你的模块位于 Python 模块搜索路径中,可以通过设置环境变量 PYTHONPATH=$PYTHONPATH:<你的模块所在目录> 来实现。

添加自定义动作

为了创建更繁芜的助手,你可能须要利用自定义动作[7]。
连续上面的例子,你可能想添加一个动作来见告用户一个笑话来让他们愉快起来。

利用 Rasa SDK 构建一个自定义动作,编辑 actions/actions.py,例如:

import requestsimport jsonfrom rasa_sdk import Actionclass ActionJoke(Action): def name(self): return "action_joke" def run(self, dispatcher, tracker, domain): request = requests.get('http://api.icndb.com/jokes/random').json() # make an api call joke = request['value']['joke'] # extract a joke from returned json response dispatcher.utter_message(text=joke) # send the message back to the user return []

在 data/stories.yml 中,将 utter_cheer_up 更换为自定义动作 action_joke,见告你的机器人利用这个新动作。

在 domain.yml 中,添加一个自定义动作的部分,包括你的新动作:

actions:- action_joke

在更新了你的域和故事之后,你须要重新演习你的模型:

docker run -v $(pwd):/app rasa/rasa:3.5.10-full train

你的动作将在与 Rasa 做事器分开的做事器上运行。
首先创建一个网络来连接这两个容器:

创建名为 my-project 的 Docker 网络:

docker network create my-project

然后可以利用以下命令运行动作做事器:

docker run -d -v $(pwd)/actions:/app/actions --net my-project --name action-server rasa/rasa-sdk:3.5.1

这是命令中发生的事情:

•-d:以分离模式运行容器,以便可以在同一个窗口中运行 Rasa 容器。
•-v $(pwd):/app:将项目目录挂载到 Docker 容器中,以便动作做事器可以运行 actions 文件夹中的代码。
•--net my-project:在特定网络上运行做事器,以便 Rasa 容器可以找到它。
•--name action-server:为做事器指定一个特定的名称,以供 Rasa 做事器引用。
•rasa/rasa-sdk:3.5.1:利用标签为 3.5.1 的 Rasa SDK 镜像。

由于动作做事器以分离模式运行,如果要停滞容器,请利用 docker stop action-server。
您也可以随时运行 docker ps 查看当前正在运行的所有容器。

要指示 Rasa 做事器利用动作做事器,您须要见告 Rasa 动作做事器的位置。
在 endpoints.yml 中添加以下端点,并引用您为做事器指定的 --name(在本例中为 action-server):

action_endpoint: url: "http://action-server:5055/webhook"

现在,您可以再次通过 shell 命令与您的机器人交互:

docker run -it -v $(pwd):/app -p 5005:5005 --net my-project rasa/rasa:3.5.10-full把稳

如果您停滞并重新启动 action-server 容器,可能会涌现以下缺点:

docker: Error response from daemon: Conflict. The container name "/action-server" isalready in use by container "f7ffc625e81ad4ad54cf8704e6ad85123c71781ca0a8e4b862f41c5796c33530".You have to remove (or rename) that container to be able to reuse that name.

如果发生这种情形,解释您已经有一个(停滞的)利用相同名称的容器。
您可以通过以下命令删除它:

docker rm action-server支配您的助手

在您的机器人上事情,直到您拥有一个可以处理正常流程的最小可行助手。
之后,您将希望将您的模型支配以从真实的测试用户那里得到反馈。
为此,您可以通过我们的推举支配方法之一[8]支配您创建的模型。

二、常见观点

在Rasa中,常见的观点及其浸染包括:

1.Entity(实体):指的是中的详细元素,例如日期、韶光、人名、位置等。
在Rasa中,实体的识别与NER(Named Entity Recognition)干系。

2.Intent(意图):指的是用户在发送时所表达的意图,例如讯问景象、预定餐厅、查询航班等。
在Rasa中,意图的识别与NLU(Natural Language Understanding)干系。

3.Domain(领域):指的是对话机器人所涉及的问题域,例如餐厅预定、机票预订、景象查询等。
在Rasa中,领域的定义包括实体、意图、槽、动作以及对话策略等。

4.NLU(自然措辞理解):指的是对话机器人中的一部分,卖力将用户发送的自然措辞文本转换为机器可读的构造化数据,例快意图和实体。
在Rasa中,NLU利用机器学习算法和自然措辞处理技能来完成这一任务。

5.槽(slot):指的是与领域干系的关键数据,例如韶光、地点、人名、产品名称等。
在Rasa中,槽用于保存对话机器人与用户之间的状态信息,例如查询到的结果、正在进行的订单等。

6.Action(动作):指的是在对话中由对话机器人实行的操作或回应,例如展示菜单、供应预订做事、回答问题等。
在Rasa中,动作可以是特定的对话策略,也可以是对外部系统的调用(例如数据库等)。

7.模板(templates):指的是对话机器人在天生回合时所用到的文本,例如“您须要订购什么菜品?”等。
在Rasa中,模板用于定义对话机器人的快速回应,以便提升用户体验。

总而言之,上述各个观点在Rasa中都扮演着重要的角色,它们共同构成了一个完全而强大的对话机器人系统。

在Rasa框架中,以下观点扮演着不同的角色,并卖力不同的任务:

•Entity(实体):指一段文本中的详细工具,比如人名、公司名称或日期等。
在对话过程中,实体可以用来输入或输出特定类型的信息。
例如,中包含了“我要预订纽约的机票”,在这条中,“纽约”便是一个实体。
通过实体的提取,我们就可以获取到用户须要预订哪个地方的机票。

•Intent(意图):指用户在发出某条时须要实现的任务或目的。
例如,用户有可能向我们的客服小姐姐讯问机票预订干系问题,这个意图便是“讯问机票信息”。
在对话中,通过识别用户的意图,我们就可以有针对性地回答他们的问题,供应特定的做事。

•Domain(领域):指对话机器人的任务和目标。
在Rasa中,我们通过定义domain.yml文件定义机器人的针对性和目标领域,见告机器人如何回答用户的提问、如何实行任务、如何操作数据等。

•NLU(自然措辞理解):指对自然措辞文本进行解析、分类、理解的过程。
在Rasa中,我们利用Rasa NLU模块进行自然措辞文本的解析和分类。
利用NLU模块,我们可以识别意图和实体,并将其转化成可实行任务。

•Slot(槽):指在对话中须要预留的某些位置,用来获取和存储某些值。
槽可以存储关于用户状态和机器状态的信息。
槽可以动态更新,在对话流程中累加信息。
例如,在机票预订流程中,我们须要获取用户的出发地点、目的地点、航班日期等信息。
通过定义对应的槽,我们就可以获取和存储用户输入的干系信息。

•Action(动作):指在对话中须要实行的详细任务和操作。
在Rasa中,我们定义一个由动作构成的action.py文件。
动作可以是一个返回文本的相应,可以是一个客户端API调用,也可以是一个数据库查询等。
在对话流程中当用户输入意图时,机器人会相应对应的动作,从而供应相应的做事。

•Template(模板):指在对话中用于相应某个特定意图的文本或。
在Rasa中,我们可以定义具有多个可更换槽的模板,并用添补槽来完成的组装。
在对话中,当用户输入了特定意图时,机器人会利用相应的模板来回答用户提问或完成任务。

总的来说,以上每个观点都包含了在对话机器人中的特定角色和任务,以此来卖力对话流程和任务的实行。
在Rasa的框架之下,我们可以定义适宜自己业务场景和业务需求的对话流程和逻辑,从而构建出强大的对话机器人。

三、Rasa框架架构Rasa框架模块组成Rasa框架图

Rasa opensource便是我们***rasa源码时候的主体部分,rasa通过这个主体可以外接知识图谱、Rasa SDK、Rasa X 可视化界面、做事器、API交互等各种集成,功能非常强大。

Rasa框架由以下几个核心模块组成:

1.NLU(Natural Language Understanding):卖力处理用户输入的自然措辞,并将其转化为构造化的数据。
包括实体识别、意图分类等功能。

2.Core:卖力对话管理和决策,处理对话流程的跟踪、状态管理、策略选择等。
它包含了对话状态跟踪器、对话策略选择器等组件。

3.Action:用于定义和实行自定义的对话动作,比如从外部API获取数据、发送给用户等。

4.Tracker:用于跟踪对话的状态和高下文信息,包括对话历史、当前状态、槽值等。

5.Agent:将NLU、Core和Action组件整合在一起,构成一个完全的对话代理。

6.Utils:包含一些实用工具和函数,用于处理数据、配置文件、日志等。

Rasa框架的架构紧张包括以下几个组件和交互流程:

1.用户输入:用户通过各种渠道(如命令行、谈天界面等)向Rasa发送自然措辞输入。

2.NLU处理:NLU模块吸收用户输入并进行自然措辞理解,将其转化为构造化的数据,快意图、实体等。

3.Core处理:Core模块吸收NLU输出的数据,根据对话状态和策略进行对话管理和决策,选择下一步的动作。

4.Action实行:选择的动作被发送到Action做事器,实行自定义的动作逻辑,可能包括与外部系统的交互。

5.Tracker更新:对话状态和高下文信息在Tracker中更新,以便后续利用。

6.相应天生:根据动作实行的结果,Rasa天生相应的相应,以回答用户的要求。

7.相应输出:天生的相应通过得当的渠道(如谈天界面、API等)发送给用户。

总的来说,Rasa框架通过NLU模块进行自然措辞理解,Core模块进行对话管理和决策,Action模块实行自定义的动作,通过Tracker跟踪对话状态和高下文信息,并天生相应输出给用户。
这些组件相互合营,形成一个完全的对话系统。

NLU

Rasa的NLU(Natural Language Understanding)处理紧张功能包括以下几个方面:

1.意图分类(Intent Classification):NLU模块通过剖析用户输入的自然措辞,识别用户的意图或意图种别。
意图分类的目标是确定用户在进行对话时的意图是什么,例如讯问、预订、取消等。

2.实体识别(Entity Extraction):NLU模块识别用户输入中的实体,如人名、地点、日期等主要信息。
实体识别的目标是从用户输入中抽取关键的实体信息,以便在对话过程中进行处理和利用。

3.槽值添补(Slot Filling):NLU模块可以识别用户输入中的关键信息并将其添补到对话状态中的槽位(Slots)中。
槽位是对话状态中的变量,用于存储对话过程中的主要信息,如预订日期、目的地等。

4.模型演习和优化:NLU模块供应了模型演习和优化的功能,可以根据已有的演习数据对意图分类和实体识别模型进行演习,并进行参数调度和优化,以提高模型的准确性和性能。

总的来说,Rasa的NLU处理紧张卖力将用户输入的自然措辞进行解析和理解,包括意图分类、实体识别和槽值添补等功能,以便后续的对话管理和决策模块进行处理和相应。
通过NLU处理,Rasa能够更好地理解用户的意图和需求,从而供应更准确和个性化的对话体验。

rasa train

在Rasa中,当你运行rasa train命令时,将触发以下实行流程:

1.数据加载:Rasa会加载演习数据,包括NLU数据和对话流程数据。
NLU数据包括用户意图和实体,对话流程数据包括对话状态和对话行为。

2.特色提取:Rasa将从NLU数据中提取特色,这些特色将用于演习对话管理模型。
常见的特色提取方法包括词袋模型、TF-IDF、词嵌入等。

3.对话管理模型演习:Rasa利用提取的特色来演习对话管理模型,常日是基于机器学习的模型,如逻辑回归、支持向量机或深度学习模型。
这个模型会根据当前对话状态和可能的动作来预测下一个该当采纳的动作。

4.策略演习:在演习过程中,Rasa会考试测验不同的对话策略,以确定最佳的策略。
这些策略包括规则策略、Fallback策略、Memoization策略等。
通过比较不同策略的性能,选择最优的策略。

5.模型评估和选择:在演习完成后,Rasa会评估不同策略和模型的性能,并选择最佳的模型和策略组合。

6.模型保存:演习完成后,Rasa将保存终极的模型和配置文件。

在这个过程中,Rasa会涉及多个组件,包括:

•NLU组件:卖力加载和处理NLU数据,包括意图和实体的提取。

•对话管理组件:卖力对话状态的跟踪和管理,包括将对话状态转化为特色向量,预测下一个动作等。

•特色提取组件:卖力从NLU数据中提取特色,用于对话管理模型的演习。

•策略组件:卖力演习和选择最佳的对话策略,包括规则策略、Fallback策略、Memoization策略等。

这些组件的详细实行顺序和配置取决于Rasa配置文件中的设置。
可以根据项目的需求和特定的配置来调度和选择组件。

Action Server和Rasa Server

在Rasa中,动作做事器(Action Server)和Rasa做事器(Rasa Server)是两个独立的组件,它们共同事情来处理对话和实行动作。

Rasa做事器卖力处理和管理对话。
它处理自然措辞理解(NLU)的任务,从用户中提取意图和实体,利用Rasa Core进行对话管理来预测下一步动作,并利用自然措辞天生(NLG)来天生回答。

动作做事器则卖力实行自定义动作以响运用户输入。
这些自定义动作可以实行查询数据库、调用API或实行其他外部操作来知足用户要求的任务。
动作做事器设计为异步实行动作,并与Rasa做事器独立运行。

Rasa做事器和动作做事器之间的连接通过Webhook建立。
当Rasa做事器在对话流程中碰着自定义动作时,它会向动作做事器发送要求。
动作做事器处理要求,实行必要的动作,并将相应发送回Rasa做事器。
然后,Rasa做事器根据从动作做事器收到的相应连续对话流程。

总结一下,Rasa做事器卖力处理全体对话流程,包括NLU、对话管理和NLG,而动作做事器则实行由Rasa做事器触发的自定义动作。
这两个做事器共同事情,实现与谈天机器人或虚拟助手的互动和动态对话。

在Rasa中,actions是自定义的动作,用于响运用户输入或实行特界说务。
这些自定义动作定义在一个Python模块中,常日称为actions.py。
在该模块中,你可以编写处理特定意图或任务的自定义动作函数。

在Rasa项目中,你可以创建一个名为actions.py的Python文件,并在个中定义自己的动作函数。
这些动作函数须要吸收一个tracker参数,它包含与当前对话干系的所有信息,如对话状态、意图和实体等。
你可以在动作函数中编写逻辑来根据这些信息天生回答、查询数据库、调用API或实行其他任务。

一旦你在actions.py文件中定义了自定义动作函数,你须要在Rasa配置文件(常日是config.yml)中指定动作做事器的地址和端口。
然后,当Rasa做事器在对话流程中须要实行自定义动作时,它会通过Webhook将要求发送到动作做事器,并实行相应的自定义动作函数。

须要把稳的是,在运行Rasa做事器之前,你须要确保已精确定义并运行了动作做事器。
可以利用rasa run actions命令来启动动作做事器,并确保它能够监听和处理来自Rasa做事器的动作要求。

除了启动Rasa动作做事器和Rasa做事器外,常日情形下不须要启动其他做事器。
Rasa动作做事器用于实行自定义动作函数,而Rasa做事器用于处理对话流程和与用户的交互。

但是,详细的项目需求可能会涉及到其他做事器或做事的利用。
例如,如果你在自定义动作中须要访问外部API或数据库,你可能须要确保这些外部做事在运行,并可以被动作做事器访问。

其余,如果你操持将Rasa支配莅临盆环境中,你可能须要考虑利用诸如Nginx或Apache等做事器来处理传入的HTTP要求,并对流量进行负载均衡和反向代理。

总之,在大多数情形下,你只须要启动Rasa动作做事器和Rasa做事器,它们可以处理Rasa对话流程中的大部分任务和交互。
额外的做事器或做事的需求取决于你的详细项目哀求。

Rasa X

Rasa X是Rasa框架的一个可选组件,它供应了一个基于Web的用户界面,供开拓职员和非开拓职员利用,以便与谈天机器人交互、测试、调试和审查模型。

Rasa配置文件先容

以下是Rasa框架的紧张配置文件:

1.credentials.yml,用来存储对话机器人与外界传输信息所须要的身份验证信息和认证信息的配置文件。
例如,访问外部API、数据库等须要身份验证的做事,都须要在这里配置相应的密钥、访问令牌等信息。

2.config.yml,是Rasa NLU和Rasa Core中的核心配置文件,用来定义模型的演习流程、参数、超参数等。
在这个文件中,你可以配置机器人中的干系核心组件,例如intent识别器、对话管理器、ner抽取器、措辞模型等的配置参数。

3.domain.yml,是用来定义机器人回答用户时的惯用话语和对话动作,包括对话流程、机器人快速回应、实体类型和槽位。
在这个文件中,你可以定义关于对话内容和对话实行的特定内容,例如如何相应某个意图、如何办理意图中的槽位添补问题、如何实行特定的操作等。

4.endpoints.yml,是用来定义外部做事的配置文件,例如与Rasa进行交互的谈天接口、对话流程追踪接口和其他同步或异步API做事。
在这个文件中,你可以定义针对Rasa机器人的各种接口和协议、要求头、IP地址和其他安全设置等。

四、 Rasa示例项目

有一个比较火的示例项目的github地址为:https://github.com/RasaHQ/rasa-demo,感兴趣的同学可以跑一跑这个示例。

五、参考资料

[1] Rasa:Menu[9]

[2] Rasa X:https://github.com/RasaHQ/rasa-x-helm

[3] Install Docker Engine | Docker Documentation[10]

References

[1] 支配 Rasa 助手: https://rasa.com/docs/rasa/docker/building-in-docker/#training-a-model[2] Docker 安装: https://docs.docker.com/install/[3] Docker 文档: https://docs.docker.com/edge/engine/reference/commandline/run/[4] 命令行界面: https://rasa.com/docs/rasa/command-line-interface[5] 附加依赖项: https://rasa.com/docs/rasa/installation/installing-rasa-open-source#additional-dependencies[6] DockerHub: https://hub.docker.com/r/rasa/rasa/[7] 自定义动作: https://rasa.com/docs/rasa/actions#custom-actions[8] 推举支配方法之一: https://rasa.com/docs/rasa/deploy/introduction#recommended-deployment-method[9] Menu: https://rasa.com/docs/rasa/[10] Install Docker Engine | Docker Documentation: https://docs.docker.com/engine/install/