运行服务

运行HTTP服务

你可以使用经过训练的Rasa模型运行一个简单的HTTP服务来处理请求:

rasa run -m models --enable-api --log-file out.log

此API公开的所有端点都记录在HTTP API中。

各个参数分别代表: 1. -m: 包含Rasa模型的文件夹的路径 2. --enable-api: 启用此附加API 3. --log-file: 日志文件的路径

Rasa可以通过三种不同的方式加载你的模型:

  1. 从服务获取模型(请参阅下面从服务获取模型)
  2. 或从远程存储中获取模型(请参阅云存储
  3. 通过-m从本地存储系统加载指定的模型

Rasa尝试按上述顺序加载模型,即如果没有配置模型服务和远程存储,它只会尝试从本地存储系统加载模型。

警告: 确保通过限制对服务的访问(例如,使用防火墙)或启用身份验证方法来保护你的服务:安全注意事项

注意: 如果使用自定义操作,请确保操作服务正在运行(请参阅启动操作服务)。如果你的操作在另一台计算机上运行,​​或者你没有使用Rasa SDK,请确保更新你的endpoints.yml文件。

注意: 如果使用仅NLU模型启动服务,则不能调用所有可用端点。请注意,某些端点将返回409状态代码,因为需要经过训练的Core模型来处理请求。

从服务获取模型

你可以配置HTTP服务以从其他URL获取模型:

rasa run --enable-api --log-file out.log --endpoints my_endpoints.yml

模型服务在端点配置(my_endpoints.yml)中指定,你可以在其中指定服务URL。Rasah会定期查询压缩的Rasa模型:

models:
  url: http://my-server.com/models/default@latest
  wait_time_between_pulls: 10   # [可选](default: 100)

注意: 如果仅从服务拉取模型一次,请将wait_time_between_pulls设置为None

注意: 你的模型服务必须提供压缩的Rasa模型,并将{“ETag”:<model_hash_string>}作为其头部之一。如果此模型哈希发生更改,Rasa将下载新模型。

Rasa使用包含当前模型哈希的If-None-Match头部向模型服务发送请求。如果模型服务可以提供与你发送的散列不同的模型,则应将其作为zip文件发送,并带有包含新散列的ETag头部。如果没有,Rasa期望具有204或304状态码的空响应。

Rasa可能对你的模型服务提出的示例请求如下所示:

$ curl --header "If-None-Match: d41d8cd98f00b204e9800998ecf8427e" http://my-server.com/models/default@latest

从远程存储中获取模型

你还可以配置Rasa服务以从远程存储中获取模型:

rasa run -m 20190506-100418.tar.gz --enable-api --log-file out.log --remote-storage aws

模型被下载并存储在本地存储系统的临时目录中。有关更多信息,请参阅云存储

安全注意事项

我们建议不要将Rasa服务暴露给外部世界,而是通过专用连接(例如,在docker容器之间)从后端连接到它。

其中,内置了两种身份验证方法:

基于令牌的身份验证

启动服务时使用--auth-token thisismysecret传递令牌 :

rasa run \
    -m models \
    --enable-api \
    --log-file out.log \
    --auth-token thisismysecret

你的请求应该传递令牌,在我们的案例中是thisismysecret作为参数:

$ curl -XGET localhost:5005/conversations/default/tracker?token=thisismysecret

基于JWT的身份验证

使用--jwt-secret thisismysecret启用基于JWT的身份验证。对服务的请求需要在使用此密钥和HS256算法签名的Authorization头部中包含有效的JWT令牌。

用户必须具有usernamerole属性。如果roleadmin,则可以访问所有端点。如果roleuser,则只有sender_id与用户的username匹配时才能访问具有sender_id参数的端点。

rasa run \
    -m models \
    --enable-api \
    --log-file out.log \
    --jwt-secret thisismysecret

你的请求应该设置正确的JWT头部:

"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ"
                 "zdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIi"
                 "wiaWF0IjoxNTE2MjM5MDIyfQ.qdrr2_a7Sd80gmCWjnDomO"
                 "Gl8eZFVfKXA6jhncgRn-I"

端点配置

要将Rasa连接到其他端点,你可以在YAML文件中指定端点配置。然后使用参数--endpoints <path to endpoint configuration.yml>运行Rasa。比如:

rasa run \
    --m <Rasa model> \
    --endpoints <path to endpoint configuration>.yml

注意: 你可以在配置文件中使用$ {name of environment variable}指定环境变量。然后,这些占位符将替换为环境变量的值。

连接一个踪器存储

要在端点配置中配置跟踪器存储,请参阅跟踪器存储

连接一个事件代理

要在端点配置中配置事件代理,请参阅事件代理