【问题标题】:How to manage context/state in a chat bot?如何在聊天机器人中管理上下文/状态?
【发布时间】:2017-12-26 14:03:00
【问题描述】:

我正在使用 Python、celery 和 MS bot 框架开发一个聊天机器人。我想添加如下小对话框:

用户:嗨

用户:给我点薯条。

机器人:好的。地址?

用户:xyz,状态,82288

机器人:知道了。我给你点薯条。

这里,如何在用户给我地址后临时存放薯条以访问它?

另外,如果用户在 2-3 分钟内没有响应,我认为我的用例忘记订单是什么应该是可以接受的。所以,我也可以为存储的变量设置一个超时时间。

我想到了使用redis。我正在考虑在 redis db 中存储类似以下内容:

{
 'conversationId':['orderitem':'fries','address':'state, pincode']
}

基本上是 key=conversationId 和 value='order,address' 的键值对。

那么,这看起来是一个不错的选择吗?

【问题讨论】:

  • 使用redis是一个不错的选择,但是为了更好的实践,请记住以下几点: 1.使用json格式保存数据。 2.你也应该有一个redis数据超时。因此,每当 redis 超时时,最好将用户数据保存在文件中。然后,每当用户再次回来时,您就可以检索他们的状态。这样,您就不会丢失用户的状态。

标签: redis bots botframework telegram-bot facebook-messenger-bot


【解决方案1】:

您应该考虑使用Bot State REST API 来管理机器人内的状态。

机器人可以管理 3 种类型的状态数据,开箱即用:

  1. 用户在特定频道 (UserData) 上的状态数据
  2. 特定频道上的对话状态数据 (ConversationData)
  3. 用户在特定对话上下文中的状态数据 (PrivateConversationData)

【讨论】:

  • 我已经经历过了。第一段本身以以下注释结尾:重要:The Bot State service is intended for prototyping only and is not designed for use by bots in a production environment. For performance and security reasons, you should implement your own mechanism for managing state data in the production environment.
  • 这里可以看到一些自定义实现:github.com/Microsoft/BotBuilder-Azure/tree/master/CSharp/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多