多轮对话功能说明
🌳 功能概述
为问答Bot实现了上下文感知的多轮对话能力,让纳西妲能够记住对话历史,理解代词指代,提供更自然的交互体验。
✨ 核心特性
1. 会话管理
- 自动会话创建:用户首次发问时自动创建新会话
- 会话保持:30分钟内有新消息则继续当前会话
- 会话超时:超过30分钟无交互,下次消息创建新会话
- 会话ID:使用UUID唯一标识每个会话
2. 上下文记忆
- 对话历史存储:MySQL 数据库持久化存储
- 智能上下文注入:自动将历史对话添加到AI提示词中
- 代词理解:AI能够理解"它"、"那个"、"这个"等代词指代
- 历史限制:每个会话最多保留最近10轮对话(20条消息)
3. 用户体验优化
- 新会话提示:
🍃 *感知到了新的思绪脉络,让我们重新开始吧。* - 会话状态显示:
/status命令显示当前会话信息 - 清除对话历史:
/clear命令重置对话记忆 - 角色化提示:融入纳西妲的世界树设定
📋 技术实现
数据库结构
sql
CREATE TABLE conversation_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
session_id TEXT NOT NULL,
role TEXT NOT NULL, -- 'user' 或 'assistant'
content TEXT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT
);核心模块
core/conversation_manager.py - 会话管理器
get_or_create_session()- 获取或创建会话save_message()- 保存对话消息get_conversation_history()- 获取对话历史clear_user_history()- 清除对话历史format_conversation_context()- 格式化上下文
core/database.py - 数据库扩展
- 添加
conversation_history表 - 实现对话历史的CRUD操作
- 支持会话查询和统计
- 添加
core/qa_engine_v3.py - 问答引擎增强
- 修改
process_query()集成会话管理 - 修改
_generate_answer_with_rag()注入对话历史 - 提示词优化:引导AI理解代词和上下文
- 修改
qa_bot.py - Bot命令扩展
/status- 显示配额和会话状态/clear- 清除对话历史/help- 更新帮助文档
🎯 使用示例
多轮对话场景
用户: "最近有什么技术讨论?"
纳西妲: "根据历史总结,最近有关于GPT-4和Claude 3的讨论..."
用户: "那Claude 3有什么特点?" # 使用代词"那"
纳西妲: "Claude 3是Anthropic开发的大语言模型,具有长上下文窗口..." # AI理解指代
用户: "它和GPT-4相比呢?" # 使用代词"它"
纳西妲: "Claude 3相比GPT-4的优势在于..." # AI理解上下文会话超时场景
[30分钟前的对话]
用户: "今天有什么更新?"
纳西妲: "今天有3个新总结..."
[30分钟后]
用户: "详细说说" # 新会话
纳西妲: "🍃 *感知到了新的思绪脉络,让我们重新开始吧。*\n\n请问你想了解什么?" # 自动创建新会话清除对话历史
用户: /clear
纳西妲: "🍃 **所有的记忆已回归世界树。**
已清除 **X** 条对话记录。
现在,我的意识中只有此时此刻的你。
让我们重新开始吧,旅行者。"🔧 配置参数
会话超时时间
在 core/conversation_manager.py 中:
python
# 会话超时时间(分钟)
SESSION_TIMEOUT_MINUTES = 30历史消息限制
python
# 每个会话最大保留的消息条数(10轮对话 = 20条消息)
MAX_MESSAGES_PER_SESSION = 20数据清理
python
# 定期清理旧对话记录(保留天数)
conversation_mgr.cleanup_old_sessions(days=7)📊 数据统计
会话信息查询
使用 /status 命令查看:
🍀 **正在感知世界树的脉动...**
📊 **配额状态**
• 剩余次数: 3 次
🧠 **当前会话状态**
• 会话ID: `a1b2c3d4...`
• 消息数: 12 条
• 状态: 🟢 活跃中
📅 重置时间:每日 00:00 (UTC)🎨 提示词优化
AI提示词中加入了明确的代词理解指令:
要求(严格遵循):
1. 基于上述总结内容回答问题,不要编造信息
2. 如果有对话历史,优先利用历史上下文理解用户的代词(如"它"、"那个"、"这个"等)
3. 如果总结中没有相关信息,明确说明
4. 使用清晰的结构和要点
5. 语言简洁专业🔒 隐私保护
- 用户可以随时使用
/clear清除自己的对话历史 - 对话历史仅存储在项目配置的 MySQL 数据库中
- 系统定期清理超过7天的旧对话记录
- 不同用户的对话历史完全隔离
🚀 未来扩展
可能的增强方向
- 多话题并行:支持同一用户同时进行多个主题的对话
- 会话标签:为重要会话添加标签,便于回顾
- 会话导出:允许用户导出对话历史
- 智能总结:对长对话进行自动总结
- 情感追踪:记录用户对话的情感变化
📝 注意事项
- Token限制:保留过多历史会消耗大量token,当前限制为10轮对话
- 上下文污染:如果话题突变,建议使用
/clear清除历史 - 并发安全:使用 MySQL 连接池和事务机制,支持多进程并发读写
- 性能考虑:历史消息加载和格式化会增加少量延迟
🎉 总结
多轮对话功能让问答Bot从"单次查询工具"进化为真正的"智慧伴侣",配合纳西妲的角色设定,提供了更自然、更有温度的对话体验。