跳转至

追踪器存储

你的对话机器人的对话存储在追踪器存储中。Rasa 提供开箱即用的不同存储类型的实现,或者你可以创建自定义的存储。

InMemoryTrackerStore(默认)

InMemoryTrackerStore 是默认的追踪器存储。如果没有配置其他追踪器存储,则默认使用它。它将对话历史存储在内存中。

注意

由于此存储将所有历史记录保存在内存中,因此如果你重新启动 Rasa 服务器,则整个历史记录都会丢失。

配置

使用 InMemoryTrackerStore 无需任何配置。

SQLTrackerStore

你可以使用 SQLTrackerStore 将对话机器人的对话历史存储在 SQL 数据库中。

配置

要使用 SQL 设置 Rasa,需要执行如下步骤:

  1. 将所需的配置添加到 endpoints.yml 中:

    endpoints.yml
    tracker_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
    
  2. 要使 Rasa 服务器使用 SQL 后端,请添加 --endpoints 标识,例如:

    rasa run -m models --endpoints endpoints.yml
    

配置参数

  • 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 文档):

CREATE SEQUENCE username.events_seq;

接下来,你必须扩展 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 镜像:

docker build . -t rasa-oracle:3.2.5-oracle-full

现在可以如上述在 endpoints.yml 中配置追踪器存储,并启动容器了。此设置的方言参数为 oracle+cx_oracle。更多信息请参见部署 Rasa 对话机器人

RedisTrackerStore

可以使用 RedisTrackerStore 将对话机器人的历史记录存储在 Redis 中。Redis 是一种快速的内存键值存储,其可选的也可以持久化数据。

配置

要使用 Redis 设置 Rasa,需要执行以下步骤:

  1. 将所需的配置添加到 endpoints.yml 中:

    endpoints.yml
    tracker_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`>
    
  2. 要使用 SQL 后端启动 Rasa 服务器,请添加 --endpoints 标志,例如:

    ```shell rasa run -m models --endpoints endpoints.yml

配置参数

  • 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 进行传输加密。

使用同一个 Redis 作为锁存储和追踪器存储

不应该使用同一个 Redis 实例作为锁存储和追踪器存储。如果 Redis 实例不可用,会话将被挂起,因为没有为锁存储实线回退机制。

MongoTrackerStore

可以使用 MongoTrackerStore 将对话机器人的对话历史存储在 MongoDB 中。MongoDB 是一个免费开源的跨平台面向文档的 NoSQL 数据库。

配置

  1. 将所需的配置添加到 endpoints.yml 中:

    endpoints.yml
    tracker_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

  2. 要使用配置的 MongoDB 实例来启动 Rasa 服务器,请添加 --endpoints 标识,例如:

    rasa run -m models --endpoints endpoints.yml
    

配置参数

  • 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 数据库。

配置

  1. 将所需的配置添加到 endpoints.yml 中:

    endpoints.yml
    tracker_store:
        type: dynamo
        table_name: <name of the table to create, e.g. rasa>
        region: <name of the region associated with the client>
    
  2. 要使用配置的 DynamoDB 实例启动 Rasa 服务器,请添加 --endpoints 标识,例如:

    rasa run -m models --endpoints endpoints.yml
    

配置参数

  • table_name(默认值:states):DynamoDB 表的名称。
  • region(默认值:us-east-1):与客户端关联的区域名称。

自定义追踪器存储

如果你需要一个无法开箱即用的追踪器存储,可以实现一个自定义的。通过扩展基类 TrackerStore 并提供实现 serialise_tracker 方法的混入类来完成:SerializedTrackerAsTextSerializedTrackerAsDict

要编写自定义追踪器存储,需扩展 TrackerStore 基类。构造函数必须提供 host 参数。构造函数还需要使用 domainevent_broker 参数对基类 TrackerStore 调用 super

super().__init__(domain, event_broker, **kwargs)

自定义追踪器存储类还必须实现如下三个方法:

  • save:将对话保存到追踪器存储。(源代码
  • retrieve:检索最新对话会话追踪器。(源代码
  • keys:返回追踪器存储主键的值的集合。(源代码

配置

将模块路径放到自定义追踪器存储中,并将需要的参数放在 endpoints.yml 中:

endpoints.yml
tracker_store:
  type: path.to.your.module.Class
  url: localhost
  a_parameter: a value
  another_parameter: another value

回退追踪存储

如果 endpoints.yml 中配置的主追踪存储不可用时,rasa 代理将发出错误信息并使用 InMemoryTrackerStore。每次都会启动一个新的对话会话,该对话会话将单独保存在 InMemoryTrackerStore 回退存储中。

一旦主追踪存储回复,它将取代回退追踪存储并保存从此刻开始的对话。但是请注意保存在 InMemoryTrackerStore 回退存储中的任何先前状态都将丢失。