跳转到正文

多轮对话功能说明 ​

🌳 功能概述 ​

为问答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
);

核心模块 ​

  1. core/conversation_manager.py - 会话管理器

    • get_or_create_session() - 获取或创建会话
    • save_message() - 保存对话消息
    • get_conversation_history() - 获取对话历史
    • clear_user_history() - 清除对话历史
    • format_conversation_context() - 格式化上下文
  2. core/database.py - 数据库扩展

    • 添加 conversation_history 表
    • 实现对话历史的CRUD操作
    • 支持会话查询和统计
  3. core/qa_engine_v3.py - 问答引擎增强

    • 修改 process_query() 集成会话管理
    • 修改 _generate_answer_with_rag() 注入对话历史
    • 提示词优化:引导AI理解代词和上下文
  4. 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天的旧对话记录
  • 不同用户的对话历史完全隔离

🚀 未来扩展 ​

可能的增强方向 ​

  1. 多话题并行:支持同一用户同时进行多个主题的对话
  2. 会话标签:为重要会话添加标签,便于回顾
  3. 会话导出:允许用户导出对话历史
  4. 智能总结:对长对话进行自动总结
  5. 情感追踪:记录用户对话的情感变化

📝 注意事项 ​

  1. Token限制:保留过多历史会消耗大量token,当前限制为10轮对话
  2. 上下文污染:如果话题突变,建议使用 /clear 清除历史
  3. 并发安全:使用 MySQL 连接池和事务机制,支持多进程并发读写
  4. 性能考虑:历史消息加载和格式化会增加少量延迟

🎉 总结 ​

多轮对话功能让问答Bot从"单次查询工具"进化为真正的"智慧伴侣",配合纳西妲的角色设定,提供了更自然、更有温度的对话体验。


版本: v3.0.0
更新时间: 2026-02-16
相关文档: 问答 Bot 指南, RAG 技术文档

基于 AGPL-3.0 许可证发布