首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在chatbot中实现多个会话支持

在chatbot中实现多个会话支持
EN

Stack Overflow用户
提问于 2019-05-17 12:13:14
回答 1查看 1.1K关注 0票数 0

我目前纯粹在python中实现一个聊天机器人。

在我当前的实现中,每次用户从会话启动新的聊天时,都会启动另一个Chatbot实例,因此聊天机器人从初始状态开始。

我希望改变这种行为,使之类似于Facebook/Messenger上的聊天,在这种情况下,您可以在会话之间无缝移动,同时进行一次没有不一致的聊天。也就是说,我想要这些属性:

  1. 如果用户输入任何内容,比如会话A,它应该在所有正在进行的会话中立即可见。同样,聊天机器人应答应立即在所有设备中可见。
  2. 所有会话都显示相同的聊天历史

为了实现第一点,我使用了django通道文档中的这个例子,并通过为每个用户创建一个组/聊天室对其进行了修改。来自同一个用户的所有会话都连接到同一个组/聊天室,因此接收组/聊天室中的所有消息,而不管它们是从哪里发送的。

但是,这个实现目前有一个错误。每次连接用户时,它都会初始化一个Chatbot实例,该实例再次从初始状态开始,而旧的连接具有当前处于不同状态的Chatbot实例。

这导致不一致的答复,这是不同的,根据哪个窗口,用户键入的东西。

基本上,我们没有让两个会话与同一个Chatbot实例对话,而是有两个会话与两个不同的Chatbot实例对话,所有这四个源的消息都被添加到同一个聊天室中。

此外,我们通过保持每个用户多个Chatbot实例来浪费资源,这会随着当前活动会话的数量而增加。

我希望所有的用户窗口都与同一个Chatbot实例进行交互。实现这一目标的最佳方式是什么?

目前,我可以想到三种解决方案:

  1. 创建另一个Django项目Chatbot并向该HTTP服务器发出请求。在该服务器中维护Chatbot状态,来自用户的任何请求都将转到同一个Chatbot实例。
    • 这对于我来说实现起来很简单(只需拆分另一台服务器)。
    • 这自然地解决了所有有关状态的问题,因为所有实例都将查询同一个Chatbot对象。

  1. 创建一个主通道线程,它将保存实际的Chatbot实例( python对象),任何新的通道都将服从它,以获得来自Chatbot的答复。
    • 这将是复杂的实现。
    • 我必须维护哪个线程是主人,哪个线程是奴隶。
    • 在用户关闭主线程连接的情况下,我将以某种方式将一个从连接更改为主连接并传递整个对象(?!)或者至少传递状态变量并重新创建chatbot实例。

  1. 在python中为chatbot实例生成一个独立的线程/进程,并让所有通道连接与该线程/进程对话。
    • 这对我来说很难实现,因为我目前还不知道如何在python中实现IPC

还有其他解决办法吗?什么是理想的解决方案?

我正在使用以下技术:

  1. 姜戈作为主要后端,Django频道用于WebSockets
  2. RASA NLU用于chatbot的NLU组件和一个使用跃迁实现的有限状态机模型,用于python中的对话框管理。
EN

回答 1

Stack Overflow用户

发布于 2019-06-19 09:39:10

你看过rasa (Rasa + Rasa )吗?如果使用Facebook信使频道,所需的行为是默认行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56186192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档