AI能力增强 - 实施总结
📋 实施概述
本次更新实现了基于历史总结的智能问答系统,允许用户通过自然语言查询频道历史内容。
实施日期: 2026年2月14日 版本: v2.0.0 状态: ✅ 已完成
🎯 实现目标
核心功能
✅ 上下文记忆 - 记住频道特点,生成更精准的总结 ✅ 基于历史总结的问答系统 - 智能检索和回答 ✅ 自然语言查询 - 支持"询问频道上周发生了什么?"等自然问题 ✅ 频道画像 - 自动提取和存储频道特征 ✅ 配额管理 - 防止滥用的使用限制
🏗️ 技术架构
系统设计
采用独立Bot架构,问答Bot与主Bot分离,共享数据库:
┌─────────────────────────────────────────────────────┐
│ 主Bot(main.py) │
│ - 频道监控和总结 │
│ - 投票功能 │
│ - 管理员命令 │
└──────────┬──────────────────────────────────────────┘
│
│ 共享数据库(MySQL)
│ - summaries(总结记录)
│ - usage_quota(配额管理)
│ - channel_profiles(频道画像)
│
↓
┌─────────────────────────────────────────────────────┐
│ 问答Bot(qa_bot.py) │
│ - 自然语言对话接口 │
│ - 意图解析器 │
│ - 记忆管理器 │
│ - 问答引擎 │
│ - 配额管理器 │
└─────────────────────────────────────────────────────┘技术选型
| 组件 | 技术方案 | 说明 |
|---|---|---|
| 数据存储 | MySQL + aiomysql | 支持跨进程队列、连接池和并发读写 |
| 检索方式 | SQL + 关键词检索 | 简单高效,易于维护 |
| 意图识别 | 规则引擎 | 基于关键词和时间模式 |
| 元数据提取 | AI (LLM) | 自动提取关键词、主题、情感 |
| 配额管理 | 数据库计数 | 每日自动重置 |
📦 新增文件
核心模块
core/quota_manager.py - 配额管理器
- 用户配额检查和管理
- 每日总限额控制
- 管理员豁免机制
core/intent_parser.py - 意图解析器
- 自然语言意图识别
- 时间范围提取
- 关键词和主题提取
core/memory_manager.py - 记忆管理器
- 频道画像管理
- 元数据提取(关键词、主题、情感)
- 智能搜索功能
core/qa_engine.py - 问答引擎
- 查询处理主流程
- AI生成回答
- 降级方案
qa_bot.py - 问答Bot入口
- Telegram Bot接口
- 消息处理逻辑
- 配额集成
文档
- wiki/QA_BOT_GUIDE.md - 问答Bot使用指南
- wiki/QA_BOT_IMPLEMENTATION.md - 本文档
🔄 修改文件
1. core/database.py
变更内容:
a) 启用WAL模式
cursor.execute("PRAGMA journal_mode=WAL")
cursor.execute("PRAGMA synchronous=NORMAL")
cursor.execute("PRAGMA busy_timeout=5000")b) 扩展summaries表
ALTER TABLE summaries ADD COLUMN keywords TEXT;
ALTER TABLE summaries ADD COLUMN topics TEXT;
ALTER TABLE summaries ADD COLUMN sentiment TEXT;
ALTER TABLE summaries ADD COLUMN entities TEXT;c) 新增usage_quota表
CREATE TABLE IF NOT EXISTS usage_quota (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
query_date TEXT NOT NULL,
usage_count INTEGER DEFAULT 0,
last_reset TEXT DEFAULT CURRENT_TIMESTAMP,
UNIQUE(user_id, query_date)
);d) 新增channel_profiles表
CREATE TABLE IF NOT EXISTS channel_profiles (
channel_id TEXT PRIMARY KEY,
channel_name TEXT,
style TEXT DEFAULT 'neutral',
topics TEXT,
keywords_freq TEXT,
tone TEXT,
avg_message_length REAL DEFAULT 0,
total_summaries INTEGER DEFAULT 0,
last_updated TEXT DEFAULT CURRENT_TIMESTAMP
);e) 新增方法
get_quota_usage()- 获取配额使用情况check_and_increment_quota()- 检查并增加配额get_total_daily_usage()- 获取总使用次数get_channel_profile()- 获取频道画像update_channel_profile()- 更新频道画像update_summary_metadata()- 更新总结元数据
2. data/.env.example
新增配置:
# ===== 问答Bot配置 =====
QA_BOT_TOKEN=your_qa_bot_token_here
QA_BOT_ENABLED=True
QA_BOT_USER_LIMIT=3
QA_BOT_DAILY_LIMIT=200🎨 功能特性
1. 自然语言查询
支持的查询类型:
- 总结查询: "上周发生了什么?"
- 关键词搜索: "关于GPT-4的讨论"
- 主题查询: "有什么技术讨论?"
- 统计查询: "系统有多少条总结?"
- 状态查询: "我的配额还剩多少?"
2. 智能意图识别
识别能力:
- 时间范围(今天、昨天、本周、上周、最近N天等)
- 关键词(AI、GPT、Python等)
- 主题(技术、新闻、讨论等)
- 查询类型(总结、统计、状态等)
3. 频道画像
画像维度:
- 风格 (style): tech/casual/neutral
- 主题 (topics): 常讨论的主题列表
- 关键词频率 (keywords_freq): 关键词出现频率
- 情感倾向 (tone): positive/neutral/negative
- 平均消息长度: 统计数据
- 总结总数: 统计数据
4. 配额管理
配额规则:
- 普通用户: 每日3次
- 管理员: 无限制
- 系统总限额: 每日200次
- 自动重置: 每日00:00 (UTC)
🚀 部署指南
自动启动
重要更新:main.py 已集成自动启动问答Bot功能!
启动 main.py 时会自动:
- 检查
QA_BOT_ENABLED配置 - 检查
QA_BOT_TOKEN是否配置 - 在后台自动启动问答Bot进程
- 主Bot退出时自动停止问答Bot
环境变量:
# 问答Bot会随main.py自动启动
QA_BOT_ENABLED=True # True=自动启动,False=禁用
QA_BOT_TOKEN=your_qa_bot_token_here无需手动操作:
# 只需启动主Bot即可
python main.py
# 或使用Docker
docker-compose up main_bot1. 创建问答Bot
# 在Telegram中访问 @BotFather
/newbot
# 按提示创建新Bot,获取Token2. 配置环境变量
编辑 data/.env:
QA_BOT_TOKEN=your_qa_bot_token_here
QA_BOT_ENABLED=True
QA_BOT_USER_LIMIT=3
QA_BOT_DAILY_LIMIT=2003. 启动服务
方式1:独立运行
python qa_bot.py方式2:Docker部署
# 添加到docker-compose.yml
services:
qa_bot:
build: .
command: python qa_bot.py
environment:
- QA_BOT_TOKEN=${QA_BOT_TOKEN}
- QA_BOT_ENABLED=${QA_BOT_ENABLED:-True}
- QA_BOT_USER_LIMIT=${QA_BOT_USER_LIMIT:-3}
- QA_BOT_DAILY_LIMIT=${QA_BOT_DAILY_LIMIT:-200}
volumes:
- ./data:/app/data
restart: unless-stoppeddocker-compose up -d qa_bot4. 验证部署
在Telegram中向问答Bot发送 /start 命令,应该收到欢迎消息。
📊 性能指标
预期性能
- 查询响应时间: 2-5秒(包含AI生成)
- 并发支持: 10+ 并发查询(WAL模式)
- 数据库大小: 预计每月增长10-50MB
- AI成本: 每次查询约100-500 tokens
优化措施
数据库优化
- WAL模式支持并发
- 关键字段索引
- 查询结果缓存
AI优化
- 精简提示词
- 温度控制(0.7)
- 降级方案
配额控制
- 防止滥用
- 成本可控
- 自动重置
🧪 测试建议
功能测试
# 1. 基础查询测试
"上周发生了什么?"
"最近有什么关于AI的讨论?"
"今天的更新"
# 2. 配额测试
/status # 查看配额
# 连续查询直到配额用尽
# 3. 错误处理测试
# 测试无结果查询
# 测试AI失败降级性能测试
# 1. 并发测试
# 同时发送10个查询
# 2. 长时间运行
# 运行24小时,监控稳定性
# 3. 数据库压力
# 插入1000条总结,测试查询性能📝 使用说明
用户端
启动对话
/start开始提问
频道上周发生了什么?查看配额
/status
管理员端
查看系统状态
系统统计调整配额
- 修改
data/.env中的配置 - 重启Bot生效
- 修改
监控日志
bashdocker-compose logs -f qa_bot
🐛 已知问题
当前限制
语义搜索
- 当前使用关键词匹配
- 不支持语义相似度搜索
- 计划Phase 5引入向量数据库
多轮对话
- 当前无上下文记忆
- 每次查询独立处理
- 计划Phase 5实现会话管理
数据迁移
- 旧总结无元数据
- 需要手动或自动提取
- 新总结自动提取元数据
解决方案
- 短期: 使用关键词检索 + 降级方案
- 中期: 优化提示词提高准确性
- 长期: 引入向量数据库实现语义搜索
🚧 未来规划
Phase 5: 高级特性
[ ] 向量数据库集成
- ChromaDB / FAISS
- 语义搜索
- 相似度排序
[ ] 多轮对话支持
- 会话上下文记忆
- 跟进问题
- 上下文引用
[ ] 个性化推荐
- 用户偏好学习
- 智能推荐总结
- 自定义查询模板
[ ] Web Dashboard
- 可视化统计
- 配额管理界面
- 查询历史
[ ] API接口
- RESTful API
- Webhook支持
- 第三方集成
📞 技术支持
文档资源
问题反馈
- GitHub Issues: 提交问题
- Discussions: 参与讨论
- Email: sakura520222@outlook.com
✅ 总结
本次更新成功实现了基于历史总结的智能问答系统,具有以下特点:
优势
✅ 独立架构 - 不影响主Bot运行 ✅ 简单高效 - SQL + 关键词检索 ✅ 易于维护 - 代码结构清晰 ✅ 成本可控 - 配额管理防止滥用 ✅ 扩展性强 - 为Phase 5预留接口
建议
- 监控运行 - 定期检查日志和性能
- 收集反馈 - 了解用户真实需求
- 迭代优化 - 根据使用数据优化
- 文档更新 - 及时更新使用文档
实施完成日期: 2026-02-14 文档版本: v1.0 作者: Sakura520222