需求要点

构建一个可本地部署的自我学习式信息过滤器

数据流:

信息源(RSS/YouTube/Email/BBS) ⇒ 本服务 ⇒ 用户

核心功能:

  • 从大量信息中筛选与用户相关、感兴趣的内容
  • 去除无用资讯,降低信息噪音
  • 支持用户反馈(1-5分评分)进行在线学习
  • 评分设计:3分为基准,5分特别感兴趣,1分特别不感兴趣

现状分析(开源方案)

1. auto-news (finaldie)

  • 多源聚合:RSS、Twitter、YouTube、Reddit、个人笔记
  • 过滤机制:基于Prompt的LLM过滤 + 关键词配置 + Milvus向量去重
  • 学习能力:❌ 无自动学习机制,主要靠手动配置

2. Khoj

  • 定位:AI第二大脑,自托管
  • 过滤机制:语义搜索 + 会话上下文感知 + 自定义Agents
  • 学习能力:⚠️ 仅会话级学习,不持久化长期画像

3. RSSbrew

  • 定位:自托管RSS工具,支持AI摘要
  • 过滤机制:规则引擎(关键词匹配)
  • 学习能力:❌ 零学习机制,纯规则驱动

4. rssfilter

  • 过滤机制:AI评分 + 阈值过滤
  • 学习能力:❌ 基于静态用户描述,无反馈学习

⚠️

**共同缺陷:**现有工具都停留在’配置一次,终身不变’的阶段,没有真正的用户反馈闭环。


自建方案选型

技术栈推荐(轻量级方案)

  • **抓取层:**Python + feedparser / yt-dlp / imaplib
  • **存储:**SQLite + sqlite-vec(向量搜索插件)
  • **AI层:**Ollama本地运行(nomic-embed-text + qwen/llama)
  • **调度:**APScheduler 或系统 Cron
  • **推送:**Telegram Bot API

在线学习核心算法

基于1-5分评分的向量方向调整算法:

def update_user_vector_online(
    user_vector: np.ndarray,
    article_embedding: np.ndarray,
    rating: int,  # 1-5
    learning_rate: float = 0.1
) -> np.ndarray:
    # 1-5分映射到 [-1, 1]
    target_similarity = (rating - 3) / 2
    
    # 当前相似度
    current_similarity = np.dot(user_vector, article_embedding) / (
        np.linalg.norm(user_vector) * np.linalg.norm(article_embedding)
    )
    
    # 误差驱动更新
    error = target_similarity - current_similarity
    gradient = error * article_embedding * learning_rate
    new_vector = user_vector + gradient
    
    # L2归一化
    return new_vector / np.linalg.norm(new_vector)

核心思想:高分文章拉近距离,低分文章推远距离。


各方案对比

算法方案对比

对比维度:复杂度 / 响应速度 / 冷启动 / 长期稳定性 / 可解释性

  • 方案1 - 向量方向调整:
    • 复杂度:低 | 响应:极快(<0.1ms) | 冷启动:快但易过拟合 | 长期:易遗忘旧兴趣 | 可解释性:差
    • “热情但健忘”
    • ✅ 对近期偏好响应极快(这周迷上钓鱼,立刻全是钓鱼内容)
    • ❌ 早期喜欢的内容会被”遗忘”(去年爱看的科技评测越来越少)
    • ❌ 容易陷入信息茧房,难以突破
  • 方案2 - 贝叶斯更新:
    • 复杂度:中 | 响应:快(<0.5ms) | 冷启动:稳健探索 | 长期:平衡新旧 | 可解释性:好(有置信度)
    • “稳重但慢热”
    • ✅ 长期画像稳定,不会今天推这个明天推那个
    • ✅ 自动平衡新旧兴趣(不会完全抛弃老爱好)
    • ⚠️ 响应变化较慢,用户需要多点几次反馈才能改变推荐方向
  • 方案3 - 双塔模型:
    • 复杂度:高 | 响应:一般(1-10ms) | 冷启动:慢热型 | 长期:最稳定 | 可解释性:中
    • “聪明但需要数据”
    • ✅ 最精准,能发现”隐性关联”(喜欢A的人通常也喜欢B)
    • ✅ 不会过度反应,对噪声反馈鲁棒
    • ❌ 需要持续积累正负样本,偶尔推荐会显得”莫名其妙”(探索负样本)

性能资源对比

对比指标:单用户内存 / 单次更新运算 / 推荐QPS / 部署难度

  • 方案1:~0.5KB内存 | ~400次运算 | 1000+QPS | 极简部署
  • 方案2:~1KB内存 | ~600次运算 | 1000+QPS | 简单部署
  • 方案3:~50KB内存 | ~500-2000次运算 | 500+QPS | 中等部署

推荐选择

💡

建议:混合策略 • 前期(<50次反馈):使用方案2(贝叶斯),稳健探索 • 后期(>50次反馈):切换到方案1(向量调整),快速响应 • 定期批量校准:使用方案3的对比学习进行全局优化

文档生成时间:2026-03-17