纸飞机机器人自动续问的上下文缓存
3 个回答
数据库存储对话状态,比如MongoDB、Redis。用户发消息时,先去缓存取历史上下文。用户重新上线后,通过用户ID+会话ID等唯一标识找到历史消息。代码逻辑中加入异常重试机制,重要节点保存临时快照。这样续聊基本没有影响。
可以用数据库存储上下文,如Redis、PostgreSQL等,断线后从缓存读取上下文继续聊。注意要绑定用户ID和会话状态,而不是全局变量。消息队列可做最后的保障,如RabbitMQ暂存未处理的消息。代码中加个心跳检测,超时保存进度。不要过于复杂,核心是用户ID+状态持久化。
缓存设计要贴近业务场景,缓存用户状态要区分,用户重连是正常现象。利用消息体中的用户id,可以串联上下文信息。不要怕查库,用户体验为先。
数据库(PostgreSQL、Redis)存储用户对话状态,每次交互更新,下次交互恢复上下文。Telegram机器人框架aiogram(Python)支持中间件处理,匹配用户唯一标识(user_id)即可。