运行HTTP服务
从服务获取模型
从远程存储获取模型
配置SSL / HTTPS
安全性考虑
节点配置
连接跟踪器存储
连接事件代理
运行HTTP服务
你可以运行一个简单的HTTP服务器,该服务器使用经过训练的Rasa模型处理用户请求:
rasa run -m models --enable-api --log-file out.log
所有节点公开的API都记录在在文档HTTP API中。
参数解释:
- -m: 包含Rasa 模型的文件夹路径,
- --enable-api: 使能外部API
- --log-file: 日志文件路径.
Rasa可以通过三种不同的方式加载模型:
- 从服务器获取模型(查看 Fetching Models from a Server),
- 从远程存储中获取模型 (看 Cloud Storage)
- 使用 -m 参数从本地系统存储中加载
Rasa会按上述顺序加载模型,即如果没有没有配置模型服务和远程存储,将尝试从本地系统存储中加载模型。
警告
请确保你的服务安全,可以通过限制访问(例如,防火墙)或者启用身份验证的方式(Security Considerations)。
注意
如果你要使用自定义action,请确保你的action服务正常运行(查看Start an Action Server)。 如果你的action服务运行在其他服务器或者没有使用Rasa SDK,请更新你的endpoints.yml文件。
注意
如果你仅仅使用了NLU模型启动服务,你不能调用所有的节点。注意,某些节点服务可能会返回409状态码,因为这些节点需要训练过的Core模型来响应请求。
注意
默认情况下,HTTP服务器作为单独进程运行的。你可以使用环境变量SANIC_WORKERS改变工作进程的数量。建议你把工作进程数量设置为CPU核数的数量(查看文档Sanic docs了解更多详细信息)。着只能与RedisLockStore结合使用(参考Lock Stores)。
从服务获取模型
你可以通过配置HTTP服务从其他URL中获取模型:
rasa run --enable-api --log-file out.log --endpoints my_endpoints.yml
在节点配置文件(my_endpoints.yml)中指定模型服务,Rasa会在你指定的URL中定期查询压缩的Rasa模型:
models:
url: http://my-server.com/models/default@latest
wait_time_between_pulls: 10 # [optional](default: 100)
注意
如果你只需下载一次模型文件,可以把wait_time_between_pulls设置为 None。
注意
你的模型必须是zip压缩的并用 {"ETag": <model_hash_string>} 作为头信息之一。如果模型的hash值改变,Rasa将重新下载模型。
Rasa给模型服务发送数据时,头信息中会包含参数值为当前模型的hash值的参数If-None-Match。如果发送的hash值和模型服务中的hash值不一样,模型服务会返回新的zip格式压缩文件,在参数ETag中包含了新的模型的hash值。否则,将返回状态码为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
模型将被下载并存储在本地存储系统的临时目录中。更多信息查看Cloud Storage。
配置SSL/HTTPS
默认情况下,Rasa服务使用HTTP协议进行通信。如果要使用SSL加密通信,你需要提供有效的证书和相应的私钥文件。
你可以在rasa run命令中指定这些文件:
rasa run --ssl-certificate myssl.crt --ssl-keyfile myssl.key
如果在创建时你使用密码加密了密钥文件,你需要在命令中添加密码:
rasa run --ssl-certificate myssl.crt --ssl-keyfile myssl.key --ssl-password mypassword
安全考虑
我们建议你不要对外公开Rasa服务,而是通过私有连接从后端连接它(例如使用docker容器)。
不过,Rasa服务内置了两种安全验证方法:
基于令牌的验证:
启动服务时使用参数--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验证。请求时头信息Authorization中需要携带有效的JWT令牌,令牌使用HS256算法进行加密签名。
用户必须有username和role属性。如果role的值是admin则可以访问所有节点。如果role的值是user,只有用户请求携带的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文件中指定节点配置。Rasa运行时携带标志
--endpoints <path to endpoint configuration.yml>.
例如:
rasa run \
--m <Rasa model> \
--endpoints <path to endpoint configuration>.yml
注意
可以在配置文件中使用环境变量,方法是使用${name of environment variable}指定它们。这些占位符随后被环境变量的值替换。
连接跟踪器存储
在节点配置中配置跟踪存储,请参阅Tracker Stores
连接事件代理
在节点配置中配置事件代理,请参阅 Event Brokers