如何通过Python脚本将AWS S3存储的Rasa NLU模型加载到Rasa Server
Python脚本实现Rasa Server加载S3存储模型方案
你可以选以下两种落地方式,运行行为和你使用CLI启动完全一致:
前置准备
- 运行环境安装好对应版本的
rasa和AWS SDK依赖boto3 - 提前配置好AWS访问凭证:可以通过全局环境变量
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION配置,也可以在脚本内临时注入,Rasa的AWS远程存储模块会自动读取凭证 - 建议提前在项目的
endpoints.yml中明确指定S3桶名,避免拉取模型时找错存储位置,配置参考:
models: url: "你的S3存储桶名称" region_name: "桶所在的AWS区域"
方案1:调用Rasa原生Python接口启动(推荐)
该方式不需要启动额外子进程,和CLI启动走完全相同的内部逻辑,可控性更高:
from rasa.core.run import serve_application import os # 若已经配置了全局AWS凭证,可删除下面三行环境变量注入代码 os.environ["AWS_ACCESS_KEY_ID"] = "替换成你的AWS访问密钥ID" os.environ["AWS_SECRET_ACCESS_KEY"] = "替换成你的AWS秘密访问密钥" os.environ["AWS_DEFAULT_REGION"] = "替换成桶所在区域,如ap-southeast-1" if __name__ == "__main__": serve_application( model="spacynlu.tar.gz", # S3上存储的模型文件名 remote_storage="aws", # 指定从AWS S3拉取模型 port=5005, # 服务监听端口,默认5005 cors_origins=["*"], # 按需配置跨域规则,本地测试可设为* auth_token=None, # 按需配置接口鉴权token,不需要可留空 endpoints="endpoints.yml" # 指定读取提前配置的endpoints文件 )
脚本运行后会自动从指定S3桶拉取模型加载,启动完成后即可正常调用NLU解析接口。
方案2:子进程调用CLI命令启动
如果你的脚本需要和Rasa服务进程隔离,或者不想耦合Rasa内部模块依赖,可以直接用子进程执行原有CLI命令:
import subprocess import os # 复制当前系统环境变量,补充AWS凭证 run_env = os.environ.copy() # 若已经配置全局AWS凭证,可删除下面三行 run_env["AWS_ACCESS_KEY_ID"] = "替换成你的AWS访问密钥ID" run_env["AWS_SECRET_ACCESS_KEY"] = "替换成你的AWS秘密访问密钥" run_env["AWS_DEFAULT_REGION"] = "替换成桶所在区域" if __name__ == "__main__": start_cmd = [ "rasa", "run", "--model", "spacynlu.tar.gz", "--remote-storage", "aws", "--port", "5005", "--cors", "*", "--endpoints", "endpoints.yml" ] # 启动Rasa服务进程 rasa_process = subprocess.Popen(start_cmd, env=run_env) # 阻塞等待进程运行,如果你需要并行跑其他业务逻辑,可以去掉这行自行管理进程生命周期 rasa_process.wait()
验证方式
服务启动完成后,向http://localhost:5005/model/parse发送POST请求,传入待解析文本即可拿到意图分类、实体提取结果,和CLI启动的服务效果完全一致。
内容的提问来源于stack exchange,提问作者Niles
相关产品推荐
相关产品推荐

