跳转到正文

🏗️ 系统架构设计 ​

本文档详细介绍 Sakura-Bot 的系统架构、模块设计和核心技术。

分类: 开发者文档
类型: 参考资料
难度: ⭐⭐
更新时间: 2026-05-01

← 返回开发者文档 | Wiki 首页


📐 整体架构 ​

系统概览 ​

Sakura-Bot 采用模块化微服务架构,将功能拆分为多个独立模块,提高可维护性和可扩展性。

┌─────────────────────────────────────────────────────────────┐
│                         用户层                               │
│  Telegram 频道用户 · 管理员 · 问答Bot用户 · WebUI 管理员     │
└────────────────────┬────────────────────────────────────────┘
                     │
┌────────────────────┴────────────────────────────────────────┐
│                      Bot 层                                  │
│  ┌──────────────┐              ┌──────────────┐            │
│  │  主Bot       │              │  问答Bot     │            │
│  │ (main.py)   │              │ (qa_bot.py) │            │
│  │             │              │              │            │
│  │ - 频道监控   │              │ - 自然对话   │            │
│  │ - 消息总结   │              │ - 语义检索   │            │
│  │ - 投票功能   │              │ - 配额管理   │            │
│  └──────────────┘              └──────────────┘            │
│  ┌──────────────┐                                          │
│  │  WebUI API   │  (FastAPI + Vue.js)                      │
│  │ - 仪表盘统计  │                                          │
│  │ - 频道管理    │                                          │
│  │ - 总结触发    │                                          │
│  │ - 转发管理    │                                          │
│  │ - 数据库管理  │                                          │
│  └──────────────┘                                          │
└────────────────────┬────────────────────────────────────────┘
                     │
┌────────────────────┴────────────────────────────────────────┐
│                     核心层 (core/)                           │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐      │
│  │ AI客户端 │ │ 数据库   │ │ 向量存储 │ │ 配置管理 │      │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘      │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐      │
│  │会话管理  │ │ 意图解析 │ │ 记忆管理 │ │ 问答引擎 │      │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘      │
└────────────────────┬────────────────────────────────────────┘
                     │
┌────────────────────┴────────────────────────────────────────┐
│                     数据层                                   │
│  MySQL · ChromaDB · 配置文件 · 会话文件                     │
└─────────────────────────────────────────────────────────────┘

🎯 设计原则 ​

1. 模块化设计 ​

  • 单一职责: 每个模块只负责一个功能域
  • 松耦合: 模块间通过清晰接口通信
  • 高内聚: 相关功能组织在一起

2. 异步优先 ​

  • 使用 async/await 处理 I/O 操作
  • 支持 Telegram 并发请求
  • 提高系统响应速度

3. 错误处理 ​

  • 自定义异常类
  • 智能重试机制
  • 优雅降级策略

4. 可扩展性 ​

  • 插件化命令处理
  • 可配置的 AI 提供商
  • 灵活的存储后端

📦 核心模块 ​

1. AI 模块 (core/ai/) ​

职责: 封装 AI API 调用,支持多种 AI 提供商。

核心功能:

  • LLM 推理(总结生成、问答)
  • Embedding 生成(向量化)
  • Reranker 调用(结果重排)
  • 错误处理和重试

关键类:

python
class AIClient:
    async def generate_summary(messages: list[Message]) -> str
    async def analyze_with_ai(text: str) -> str
    async def generate_embedding(text: str) -> list[float]
    async def rerank(query: str, documents: list[str]) -> list[int]

支持的 AI 提供商:

  • OpenAI (GPT-4, GPT-3.5)
  • DeepSeek (deepseek-chat)
  • SiliconFlow (Embedding, Reranker)
  • 任何 OpenAI 兼容的 API

2. 数据库模块 (core/infrastructure/database/) ​

职责: 管理所有数据持久化操作。

数据表:

表名用途
summaries存储频道总结记录
usage_quota问答Bot配额管理
channel_profiles频道画像数据
conversation_history多轮对话历史
poll_regenerations投票重新生成记录
poll_voters投票者记录
forwarding_stats转发统计信息
cross_bot_*主 Bot 与 QA Bot 跨进程通信队列
submissions投稿审核记录

支持的数据库:

  • MySQL(当前唯一支持的关系数据库)

关键特性:

  • aiomysql 连接池管理
  • 自动初始化和迁移
  • 表名/列名白名单校验
  • WebUI 数据库管理接口支持分页查询和受控写操作
  • 主 Bot 与 QA Bot 通过 MySQL 队列进行跨进程通信

3. 向量存储模块 (core/ai/vector_store.py) ​

职责: 管理 ChromaDB 向量数据库,实现语义检索。

核心功能:

  • 添加总结向量
  • 语义搜索
  • 向量更新和删除
  • 元数据过滤

使用的技术:

  • ChromaDB: 向量数据库
  • BGE 模型: 中文 Embedding (bge-m3, bge-large-zh-v1.5)
  • 余弦相似度: 相似度计算

工作流程:

总结生成 → 生成 Embedding → 存储到 ChromaDB
用户查询 → 生成查询向量 → 语义检索 → 返回 Top-K 结果

4. 会话管理模块 (conversation_manager.py) ​

职责: 管理问答Bot的多轮对话上下文。

核心功能:

  • 会话创建和超时管理
  • 对话历史存储
  • 上下文格式化
  • 会话清理

会话生命周期:

用户首次提问 → 创建新会话
30分钟内新消息 → 继续当前会话
超过30分钟 → 创建新会话
用户发送 /clear → 手动清除会话

5. 意图解析模块 (intent_parser.py) ​

职责: 解析用户自然语言查询,识别意图和参数。

识别能力:

  • 时间范围: 今天、昨天、本周、上周、最近N天
  • 关键词: AI、GPT、Python 等
  • 主题: 技术、新闻、讨论
  • 查询类型: 总结查询、统计查询、状态查询

返回结果:

python
{
    "intent": "summary_query",  # 意图类型
    "time_range": 7,  # 时间范围(天)
    "keywords": ["AI", "GPT"],  # 关键词
    "topics": ["技术"],  # 主题
}

6. 记忆管理模块 (memory_manager.py) ​

职责: 管理频道画像和记忆数据。

核心功能:

  • 频道画像生成和更新
  • 关键词提取
  • 主题分类
  • 智能搜索

频道画像维度:

  • 风格: tech/casual/neutral
  • 主题: 常讨论的主题列表
  • 关键词频率: 关键词出现频率
  • 情感倾向: positive/neutral/negative
  • 统计信息: 平均消息长度、总结总数

7. 问答引擎模块 (core/ai/qa_engine_v3.py) ​

职责: 实现 RAG(检索增强生成)问答流程。

工作流程:

用户查询
  ↓
意图解析
  ↓
语义检索 (Top-20)
  ↓
关键词检索 (备选)
  ↓
RRF 融合
  ↓
Reranker 重排序 (Top-20 → Top-5)
  ↓
RAG 生成回答
  ↓
返回结果

核心算法:

  • RRF (Reciprocal Rank Fusion): 融合多路检索结果
  • Reranker: BGE-reranker-v2-m3 精排
  • RAG 生成: 基于精选上下文生成回答

8. 重排序模块 (core/ai/reranker.py) ​

职责: 使用 Reranker 模型对检索结果精排。

工作原理:

输入: 查询 + 20个候选文档
  ↓
Reranker 模型计算相关性得分
  ↓
按得分排序
  ↓
输出: Top-5 最相关文档

使用模型:

  • BGE-reranker-v2-m3 (中文优化)
  • 通过交叉注意力计算相关性

9. Telegram 与 UserBot 模块 (core/telegram/, core/handlers/) ​

职责: 封装 Telegram MTProto API 操作。

核心功能:

  • 用户客户端(频道消息抓取)
  • Bot 客户端(命令处理)
  • 消息发送
  • 频道管理

10. 命令处理模块 (core/commands/) ​

职责: 处理所有 Telegram Bot 命令。

命令分类:

  • AI 配置命令: 提示词、AI 配置
  • 频道命令: 添加/删除/查看频道
  • 调度命令: 设置自动总结时间
  • 投票命令: 投票配置
  • 系统控制: 暂停/恢复/重启
  • 历史记录: 查看/导出/统计
  • 转发管理: 规则、过滤、底栏和统计
  • UserBot 管理: 状态、加入、离开和频道列表

实现方式:

  • 使用装饰器注册命令
  • 支持中英文别名
  • 状态管理(多步骤交互)
  • Main Bot 欢迎和帮助消息提供内联键盘入口,复用既有命令处理器

11. WebUI API 模块 (core/web_api/ + web/) ​

职责: 提供浏览器端管理面板和 REST API。

后端能力:

  • FastAPI 路由与中间件
  • JWT 认证与管理员权限校验
  • 仪表盘、频道、调度、转发、系统、统计、向量存储和数据库管理 API
  • 配置保存后显式触发热重载

前端能力:

  • Vue 3 + Vite + TypeScript + Naive UI
  • 深色/浅色主题持久化
  • 转发规则可视化编辑和底栏占位符插入
  • 数据库表分页浏览和受控维护操作

部署方式:

  • Docker 多阶段构建会先构建 web/ 前端,再由 FastAPI 挂载静态资源
  • 本地开发可在 web/ 中运行 Vite 开发服务,并代理到后端 API

🔄 数据流 ​

总结生成流程 ​

定时任务触发
  ↓
获取频道消息
  ↓
AI 生成总结
  ↓
生成 Embedding
  ↓
存储到数据库
  ↓
存储向量到 ChromaDB
  ↓
发送到管理员/频道
  ↓
生成投票(可选)
  ↓
完成

问答流程 ​

用户发送问题
  ↓
意图解析
  ↓
配额检查
  ↓
语义检索
  ↓
重排序
  ↓
AI 生成回答
  ↓
更新配额
  ↓
返回回答

🔐 安全设计 ​

1. 数据隔离 ​

  • 不同用户的对话历史完全隔离
  • 不同频道的配置独立存储
  • 管理员权限验证

2. 配额管理 ​

  • 用户级配额(每日限制)
  • 系统总配额(防滥用)
  • 管理员豁免
  • 自动重置机制

3. 错误处理 ​

  • 自定义异常类
  • 详细错误日志
  • 用户友好的错误消息
  • 降级策略

🚀 性能优化 ​

1. 数据库优化 ​

  • MySQL 连接池: 减少连接开销并提升并发能力
  • 索引优化: 关键字段建立索引
  • 分页查询: WebUI 和统计接口使用分页/偏移量避免一次加载大量数据
  • 行数统计优化: 数据库管理页面复用优化后的表行数查询
  • 查询缓存: 热点数据缓存

2. AI 调用优化 ​

  • 提示词优化: 精简高效
  • 温度控制: 平衡创造性和准确性
  • 重试机制: 自动重试临时错误
  • 降级方案: AI 失败时的备选方案

3. 并发处理 ​

  • 异步 I/O: 所有 I/O 操作异步化
  • 任务队列: 后台任务处理
  • 进程隔离: 问答Bot独立进程

📊 监控与日志 ​

日志级别 ​

  • DEBUG: 详细调试信息
  • INFO: 一般信息
  • WARNING: 警告信息
  • ERROR: 错误信息
  • CRITICAL: 严重错误

日志位置 ​

  • 应用日志: logs/sakura_bot.log
  • 错误日志: logs/error.log
  • QA Bot 日志: logs/qa_bot.log

监控指标 ​

  • 总结生成成功率
  • AI 调用延迟
  • 查询响应时间
  • 配额使用情况

🔧 配置管理 ​

环境变量 (data/.env) ​

主要配置项:

  • Telegram 凭证
  • AI API 配置
  • 数据库配置
  • 日志级别
  • 功能开关

配置文件 (data/config.json) ​

运行时配置:

  • 频道列表
  • 投票配置
  • 提示词配置
  • 问答Bot人格

🧪 测试策略 ​

单元测试 ​

  • 每个模块独立测试
  • 使用 pytest fixtures
  • Mock 外部依赖
  • 覆盖率目标 ≥ 90%

集成测试 ​

  • 模块间交互测试
  • 数据库集成测试
  • AI API 集成测试

端到端测试 ​

  • 完整工作流测试
  • 用户场景测试

📚 相关文档 ​


🔗 相关资源 ​


🌸 Sakura-Bot 架构设计

模块化 · 可扩展 · 高性能

基于 AGPL-3.0 许可证发布