🏗️ 整体架构

AI-Digest 采用三层分离架构,由核心引擎、后端服务和前端界面三个子系统组成,各司其职,松耦合设计。

系统架构总览图

👤 用户 / 客户端 🎨 表现层 (Presentation Layer) AI-Digest-UI · Vue 3 + Vite Dashboard 数据源管理 日志查看 系统配置 用户认证 ⚙️ 服务层 (Service Layer) AI-Digest-OS · FastAPI RESTful API JWT 认证 任务调度 GitHub监控 日志管理 🚀 核心层 (Core Layer) AI-Digest-Pro · Python 核心引擎 📥 内容抓取 🤖 LLM处理 🔍 内容去重 📝 站点生成 ⚡ 缓存 / 速率限制 💾 SQLite 数据库 ☁️ Cloudflare Pages (静态站点)
表现层
服务层
核心层
数据存储

分层架构详解

表现层 (Presentation Layer)

AI-Digest-UI - Vue 3 前端应用

  • 用户认证与会话管理
  • 数据源配置界面
  • 构建任务触发与监控
  • 实时日志查看
  • 系统配置管理

服务层 (Service Layer)

AI-Digest-OS - FastAPI 后端服务

  • RESTful API 接口
  • JWT 认证与授权
  • 任务调度与执行
  • GitHub 仓库监控
  • 日志管理与查询

核心层 (Core Layer)

AI-Digest-Pro - Python 核心引擎

  • 多源内容抓取
  • LLM 智能处理
  • 内容去重与排序
  • 静态站点生成
  • 数据持久化

🔄 数据流转

下图展示了 AI-Digest 系统从数据抓取到最终发布的完整数据流转过程:

用户触发 UI 触发构建 API接收 OS 调度任务 并发抓取 20+ 数据源 AI处理 LLM生成摘要 去重排序 智能去重 数据存储 SQLite 持久化 生成网站 Jinja2 渲染 部署发布 Cloudflare Pages 📋 流程详细说明 ① 用户触发 用户在UI界面点击"立即构建"按钮,或定时任务自动触发 ② API接收 OS后端接收请求,验证JWT Token,调度构建任务 ③ 并发抓取 使用ThreadPoolExecutor并发抓取20+个数据源(性能提升3-5倍) ④ AI处理 调用LLM API生成中英文摘要、翻译标题、计算优先级(智能缓存节省30-50%成本) ⑤ 去重排序 基于标题相似度算法去重(阈值0.85),按热度+关注度排序 ⑥ 数据存储 批量插入SQLite数据库(性能提升2-3倍),自动索引优化 ⑦ 生成网站 使用Jinja2模板生成主页、日报、归档、搜索等HTML页面 ⑧ 部署发布 通过Wrangler CLI部署到Cloudflare Pages,享受全球CDN加速

🧩 模块设计

核心引擎模块 (ai-digest-pro/core/)

模块 文件 功能
内容抓取 fetcher.py
fetcher_enhanced.py
RSS/HTML抓取、并发处理、Playwright支持
内容处理 processor.py LLM集成、摘要生成、标题翻译、优先级计算
内容生成 generator.py 静态站点生成、Markdown转HTML、模板渲染
数据存储 database.py SQLite操作、批量插入、数据查询
去重系统 deduplicator.py 标题相似度计算、重复检测
缓存管理 cache.py 文件缓存、TTL管理
速率限制 rate_limiter.py API调用限制、成本追踪
安全验证 security.py 输入验证、XSS防护

后端服务模块 (ai-digest-os/backend/)

模块 文件 功能
主应用 main.py FastAPI应用、路由定义、任务调度
认证系统 auth_db.py 用户管理、密码加密、JWT生成
配置管理 config.yaml 调度器配置、时区设置

前端界面模块 (ai-digest-ui/src/)

模块 目录/文件 功能
路由 router/ 页面路由、权限守卫
视图 views/ Dashboard、Login、Logs、Settings页面
组件 components/ Sidebar、URLSourceManager等可复用组件
组合式函数 composables/ useAuth、useBuild、useDigest等业务逻辑

💾 数据模型

文章表 (articles)

CREATE TABLE articles (
    id INTEGER PRIMARY KEY,
    url TEXT UNIQUE NOT NULL,
    title TEXT NOT NULL,
    title_zh TEXT,
    title_en TEXT,
    content TEXT,
    summary_zh TEXT,
    summary_en TEXT,
    source TEXT,
    date TEXT NOT NULL,
    popularity INTEGER DEFAULT 0,
    attention INTEGER DEFAULT 0,
    category TEXT DEFAULT 'ai_industry',
    created_at TIMESTAMP,
    is_deleted INTEGER DEFAULT 0,
    deleted_at TIMESTAMP
)

用户表 (users)

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    username TEXT UNIQUE NOT NULL,
    password_hash TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    role TEXT DEFAULT 'user',
    created_at TIMESTAMP,
    updated_at TIMESTAMP
)

🔐 安全设计

认证与授权

  • JWT Token 认证机制
  • bcrypt 密码哈希
  • Token 过期自动刷新
  • 路由权限守卫

输入验证

  • URL 安全验证(防止 SSRF)
  • HTML 内容清理(防止 XSS)
  • SQL 注入防护(参数化查询)
  • 文件路径验证

速率限制

  • API 调用频率限制
  • 每日成本预算控制
  • IP 级别的速率限制

⚡ 性能优化

并发处理

使用 ThreadPoolExecutor 实现多线程并发抓取,性能提升 3-5 倍

with ThreadPoolExecutor(max_workers=5) as executor:
    futures = {executor.submit(fetch, source): source 
               for source in sources}
    for future in as_completed(futures):
        result = future.result()

智能缓存

缓存 AI 处理结果,节省 30-50% 成本

cache_key = f"summarize:{lang}:{url}:{text_hash}"
cached_result = self.cache.get(cache_key)
if cached_result:
    return cached_result

批量操作

数据库批量插入,性能提升 2-3 倍

cursor.executemany(
    "INSERT INTO articles (...) VALUES (...)",
    articles_data
)