阿丹:
Rasa 是一个开源的机器学习框架,用于构建会话式AI助手和聊天机器人。它包含了一系列命令行工具来帮助开发者管理、训练和测试他们的对话模型。以下是Rasa中一些常用命令及其用法和参数的概览:
初始化项目
- 命令:
rasa init
- 用途: 创建一个新的Rasa项目,生成基本的文件结构和示例数据。
- 参数:
- 无直接参数,但执行时会提示是否需要下载示例数据。
训练模型
- 命令:
rasa train
- 用途: 训练Rasa模型,包括自然语言理解(NLU)和对话管理(Core)部分。
- 参数:
--domain
: 指定领域文件路径,默认使用domain.yml
。--config
: 指定配置文件路径,默认使用config.yml
。--data
: 指定训练数据文件路径,默认结合nlu.md
和stories.md
或它们在data/
目录下的对应文件。--out
: 指定输出模型的目录,默认为models/
。--fixed-model-name
: 自定义模型文件名,而不是默认的.tar.gz
格式。--force
: 强制重新训练模型,即使数据和配置未更改。
训练特定部分
- 命令:
rasa train nlu
或rasa train core
- 用途: 分别仅训练NLU模型或Core模型。
- 参数: 类似于
rasa train
,但针对性地训练模型的一个部分。
运行交互式会话
- 命令:
rasa shell
- 用途: 在命令行界面启动一个交互式会话,以测试训练好的模型。
- 参数:
--model
: 指定要使用的模型路径,默认为最新模型。
测试模型
- 命令:
rasa test
- 用途: 根据测试数据评估模型的性能。
- 参数:
--stories
: 指定测试故事文件或目录。--nlu
: 指定NLU测试数据文件。--fail-on-prediction-errors
: 在预测错误时标记测试失败。
查看版本
- 命令:
rasa version
- 用途: 显示安装的Rasa版本信息。
服务部署
- 命令:
rasa run [server|actions|..."
- 用途: 运行Rasa服务器、动作服务器等。
- 参数:
--port
: 指定服务端口。--cors
: 设置跨源资源共享(CORS)策略。--credentials
: 指定认证凭据文件路径。
HTTP启动!!!!
如果想要通过开放API来运行Rasa,以便其他应用程序或服务可以通过HTTP请求与您的Rasa聊天机器人交互,您可以使用Rasa的HTTP API。以下是设置和使用Rasa HTTP API的基本步骤及命令:
启动Rasa HTTP API服务器
命令:
rasa run --enable-api [--port PORT] [--cors [ALLOWED_ORIGINS]]
--enable-api
: 开启HTTP API。--port PORT
: 指定API监听的端口号,默认是5005。--cors [ALLOWED_ORIGINS]
: 如果需要,设置允许跨域访问的来源。例如,--cors "*"
允许任何来源,或者--cors "http://example.com"
只允许特定域名。
API端点概述
一旦Rasa服务器以API模式运行,它将提供以下几个主要端点(假设默认端口5005):
发送消息并接收回复
- URL:
http://localhost:5005/webhooks/rest/webhook
- 方法:
POST
- 请求体示例
{
"message": "用户输入的消息",
"sender": "用户标识"
}
- 响应: 包含机器人的回复信息。
解析自然语言理解(NLU)
- URL:
http://localhost:5005/model/parse
- 方法:
POST
- 请求体示例
{
"text": "用户输入的文本"
}
- 响应: 包含NLU解析结果,如意图、实体等。
注意事项
- 确保在启动API之前,您的Rasa模型已经训练好,并且模型路径正确配置。
- 如果您在本地开发环境中测试API,请注意CORS设置,以免遇到跨域问题。
- 对于生产环境,可能需要考虑额外的安全措施,比如HTTPS、API密钥验证等。
以上步骤可以帮助您通过API方式运行Rasa,使其能够接收外部请求并与之交互。
痛点解决!在api开放下使用api来保证多轮对话!!!
在使用Rasa HTTP API进行多轮对话时,维护上下文和状态是关键,以确保对话的连贯性。Rasa通过会话ID(通常是通过sender_id
或自定义的会话跟踪机制)来实现这一点。以下是保持多轮对话连贯性的几种方法:
1. 使用会话ID(sender_id)
每次与API交互时,客户端应该提供一个唯一的会话ID(通常是sender_id
)。Rasa会根据这个ID保存和检索对话的上下文。在发送消息的请求中包含这个ID,Rasa就能识别出这是同一个对话的延续。
示例:
{
"message": "我需要预订明天去纽约的票",
"sender": "user123" // 会话ID
}
2. 管理会话状态
Rasa本身支持会话状态管理,但具体实现细节取决于你如何配置和使用它。如果你使用Rasa SDK构建自定义动作服务,可以利用其提供的会话管理工具来维护状态。
3. 跟踪对话历史
客户端应存储每次交互的响应,特别是当Rasa返回的响应中包含了对上下文有影响的信息时(如通过插槽填充确认的信息)。这样,在后续的请求中,可以将必要的上下文信息一并发送,帮助Rasa理解当前对话状态。
4. 利用Tracker Store
对于更复杂的需求,可以配置Rasa的Tracker Store,它负责存储对话追踪器(Trackers),即对话的历史记录。Rasa支持多种Tracker Store,包括内存中的、SQL数据库等。这使得即使在重启Rasa服务后,也能恢复之前的对话状态(只要配置得当)。
实现示例
在实际调用API时,确保每个用户或每个对话有一个稳定的sender_id
,并且在连续的请求之间保持这个ID不变。如果需要在不同平台或设备间维持对话状态,确保sender_id
能跨平台识别同一对话。
总结
多轮对话的连贯性主要依赖于会话ID的管理和状态的恰当传递。Rasa提供了必要的机制来支持这一点,但实现细节需要开发者在设计客户端和服务端交互逻辑时仔细考虑。正确实施上述策略,即可在开放API环境下保持流畅的多轮对话体验。