追踪器存储¶
你的对话机器人的对话存储在追踪器存储中。Rasa 提供开箱即用的不同存储类型的实现,或者你可以创建自定义的存储。
InMemoryTrackerStore(默认)¶
InMemoryTrackerStore
是默认的追踪器存储。如果没有配置其他追踪器存储,则默认使用它。它将对话历史存储在内存中。
注意
由于此存储将所有历史记录保存在内存中,因此如果你重新启动 Rasa 服务器,则整个历史记录都会丢失。
配置¶
使用 InMemoryTrackerStore
无需任何配置。
SQLTrackerStore¶
你可以使用 SQLTrackerStore
将对话机器人的对话历史存储在 SQL 数据库中。
配置¶
要使用 SQL 设置 Rasa,需要执行如下步骤:
-
将所需的配置添加到
endpoints.yml
中:endpoints.ymltracker_store: type: SQL dialect: "postgresql" # the dialect used to interact with the db url: "" # (optional) host of the sql db, e.g. "localhost" db: "rasa" # path to your db username: # username used for authentication password: # password used for authentication query: # optional dictionary to be added as a query string to the connection URL driver: my-driver
-
要使 Rasa 服务器使用 SQL 后端,请添加
--endpoints
标识,例如: -
如果在 Docker Compose 中部署模型,请将服务添加到
docker-compose.yml
中: -
要将请求路由到新服务,请确保
endpoints.yml
中的 URL 引用服务名称:endpoints.ymltracker_store: type: SQL dialect: "postgresql" # the dialect used to interact with the db url: "postgres" db: "rasa" # path to your db username: # username used for authentication password: # password used for authentication query: # optional dictionary to be added as a query string to the connection URL driver: my-driver
配置参数¶
domain
(默认:None
):与此追踪器存储关联的领域对象。dialect
(默认:sqlite
):用于与 SQL 后端通信的方言。有关可用的方言,请参见 SQLAlchemy 文档。url
(默认:None
):SQL 服务器的 URL。port
(默认:None
):SQL 服务器的端口。db
(默认:rasa.db
):数据库路径。username
(默认:None
):用于身份验证的用户名。password
(默认:None
):用于身份验证的密码。event_broker
(默认:None
):用于发布事件的事件代理。login_db
(默认:None
):初始连接的备用数据库名称,并创建db
指定的数据库(仅限于 PostgreSQL)。query
(默认:None
):连接时要传递给方言和/或 DBAPI 的选项字典。
兼容的数据库¶
如下数据库与 SQLTrackerStore
官方兼容:
- PostgreSQL
- Oracel > 11.0
- SQLite
配置 Oracle¶
要将 SQLTrackerStore 与 Oracle 一起使用,还需要一些额外步骤。首先,在 Oracle 数据库中创建一个数据库追踪器并创建一个可以访问它的用户。使用如下命令在数据库中创建一个序列,其中 username
是创建的用户(有关创建序列的更多信息请参见 Oracle 文档):
接下来,你必须扩展 Rasa 镜像来包含必要的驱动程序和客户端。首先下载 Oracle Instant Client,将其重命名为 oracle.rpm
并将其存储在要构建 docker 镜像的目录中。将如下内容复制到名为 Dockerfile
的文件中:
FROM rasa/rasa:3.2.5-full
# Switch to root user to install packages
USER root
RUN apt-get update -qq && apt-get install -y --no-install-recommends alien libaio1 && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Copy in oracle instaclient
# https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
COPY oracle.rpm oracle.rpm
# Install the Python wrapper library for the Oracle drivers
RUN pip install cx-Oracle
# Install Oracle client libraries
RUN alien -i oracle.rpm
USER 1001
然后构建 docker 镜像:
现在可以如上述在 endpoints.yml
中配置追踪器存储,并启动容器了。此设置的方言参数为 oracle+cx_oracle
。更多信息请参见部署 Rasa 对话机器人。
RedisTrackerStore¶
可以使用 RedisTrackerStore
将对话机器人的历史记录存储在 Redis 中。Redis 是一种快速的内存键值存储,其可选的也可以持久化数据。
配置¶
要使用 Redis 设置 Rasa,需要执行以下步骤:
- 启动 Redis 实例。
-
将所需的配置添加到
endpoints.yml
中:endpoints.ymltracker_store: type: redis url: <url of the redis instance, e.g. localhost> port: <port of your redis instance, usually 6379> key_prefix: <alphanumeric value to prepend to tracker store keys> db: <number of your database within redis, e.g. 0> password: <password used for authentication> use_ssl: <whether or not the communication is encrypted, default `false`>
-
如果在 Docker Compose 中部署模型,请将服务添加到
docker-compose.yml
中:要将请求路由到新服务,请确保
endpoints.yml
中的 URL 引用服务名称:endpoints.ymltracker_store: type: redis url: <url of the redis instance, e.g. localhost> port: <port of your redis instance, usually 6379> db: <number of your database within redis, e.g. 0> key_prefix: <alphanumeric value to prepend to tracker store keys> password: <password used for authentication> use_ssl: <whether or not the communication is encrypted, default `false`>
配置参数¶
url
(默认:localhost
):Redis 实例的 URL。port
(默认:6379
):Redis 运行的端口。db
(默认:0
):Redis 数据库的数量。key_prefix
(默认:None
):添加到追踪器存储键的前缀。必须是字母数字。username
(默认:None
):用于认证的用户名(None
表示不认证)。password
(默认:None
):用于认证的密码(None
表示不认证)。record_exp
(默认:None
):过期秒数。use_ssl
(默认:False
):是否使用 SSL 进行传输加密。
MongoTrackerStore¶
可以使用 MongoTrackerStore
将对话机器人的对话历史存储在 MongoDB 中。MongoDB 是一个免费开源的跨平台面向文档的 NoSQL 数据库。
配置¶
- 启动 MongoDB 实例。
-
将所需的配置添加到
endpoints.yml
中:endpoints.ymltracker_store: type: mongod url: <url to your mongo instance, e.g. mongodb://localhost:27017> db: <name of the db within your mongo instance, e.g. rasa> username: <username used for authentication> password: <password used for authentication> auth_source: <database name associated with the user's credentials>
还可以通过附加到 URL 的参数来添加更高级的配置(例如启用 SSL),例如:
mongodb://localhost:27017/?ssl=true
。 -
要使用配置的 MongoDB 实例来启动 Rasa 服务器,请添加
--endpoints
标识,例如: -
如果在 Docker Compose 中部署模型,请将服务添加到
docker-compose.yml
中:docker-compose.ymlmongo: image: mongo environment: MONGO_INITDB_ROOT_USERNAME: rasa MONGO_INITDB_ROOT_PASSWORD: example mongo-express: # this service is a MongoDB UI, and is optional image: mongo-express ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: rasa ME_CONFIG_MONGODB_ADMINPASSWORD: example
要将请求路由到此数据库,请确保将
endpoints.yml
中的url
设置为服务名称,并指定用户名和密码:
配置参数¶
url
(默认:mongodb://localhost:27017
):MongoDB 的 URL。db
(默认:rasa
):数据库名称。username
(默认:0
):用于身份验证的用户名。password
(默认:None
):用于身份验证的密码。auth_source
(默认:admin
):与用户凭据关联的数据库名称。collection
(默认:conversations
):用于存储对话的集合名称。
DynamoTrackerStore¶
可以使用 DynamoTrackerStore
将对话机器人的对话历史记录存储在 DynamoDB 中。DynamoDB 是由 Amazon Web Services (AWS) 提供的托管 NoSQL 数据库。
配置¶
- 启动 DynamoDB 实例。
-
将所需的配置添加到
endpoints.yml
中: -
要使用配置的 DynamoDB 实例启动 Rasa 服务器,请添加
--endpoints
标识,例如:
配置参数¶
table_name
(默认值:states
):DynamoDB 表的名称。region
(默认值:us-east-1
):与客户端关联的区域名称。
自定义追踪器存储¶
如果你需要一个无法开箱即用的追踪器存储,可以实现一个自定义的。通过扩展基类 TrackerStore
并提供实现 serialise_tracker
方法的混入类来完成:SerializedTrackerAsText
或 SerializedTrackerAsDict
。
要编写自定义追踪器存储,需扩展 TrackerStore
基类。构造函数必须提供 host
参数。构造函数还需要使用 domain
和 event_broker
参数对基类 TrackerStore
调用 super
。
自定义追踪器存储类还必须实现如下三个方法:
配置¶
将模块路径放到自定义追踪器存储中,并将需要的参数放在 endpoints.yml
中:
tracker_store:
type: path.to.your.module.Class
url: localhost
a_parameter: a value
another_parameter: another value
如果在 Docker Compose 中进行部署,有两种选项可以将此存储添加到 Rasa 中:扩展 Rasa 镜像来包含模块,或将模块装载为卷。
确保也添加相应的服务。例如,将其安装为卷如下所示:
rasa:
<existing rasa service configuration>
volumes:
- <existing volume mappings, if there are any>
- ./path/to/your/module.py:/app/path/to/your/module.py
custom-tracker-store:
image: custom-image:tag
tracker_store:
type: path.to.your.module.Class
url: custom-tracker-store
a_parameter: a value
another_parameter: another value
回退追踪存储¶
如果 endpoints.yml
中配置的主追踪存储不可用时,rasa 代理将发出错误信息并使用 InMemoryTrackerStore
。每次都会启动一个新的对话会话,该对话会话将单独保存在 InMemoryTrackerStore
回退存储中。
一旦主追踪存储回复,它将取代回退追踪存储并保存从此刻开始的对话。但是请注意保存在 InMemoryTrackerStore
回退存储中的任何先前状态都将丢失。
使用同一个 Redis 作为锁存储和追踪器存储
不应该使用同一个 Redis 实例作为锁存储和追踪器存储。如果 Redis 实例不可用,会话将被挂起,因为没有为锁存储实线回退机制。