信息过载时代,戴上你的视觉降噪眼镜。
这是一个用 AI 过滤低质量信息、只在重要内容出现时主动通知你的内容分发系统、
AI 过滤信息噪音,重要内容才会主动出现。
iFeed 是一个以 AI 驱动 的智能信息流聚合与推荐分发系统,核心特性包括:
- 智能聚合: 支持 RSS 订阅与自动聚合。
- 语义检索: 基于 pgvector 的向量检索与语义匹配,超越传统关键词搜索。
- AI 赋能: 利用 OpenAI 进行内容摘要、自动分类与标签生成。
- 混合推荐: 结合 TF-IDF 关键词匹配 + 向量相似度 + 新鲜度权重的混合召回算法。
- 现代架构: 前后端分离,Spring Boot 3.x + Vue 3 技术栈。
┌──────────────┐
│ RSS / 抓取 │
│ (Feed / Web) │
└──────┬───────┘
│ 原始文章
▼
┌────────────────────┐
│ 内容预处理 Pipeline │
│ - 去噪 / 去重 │
│ - 正文抽取 │
│ - 语言检测 │
│ - 基础元信息 │
└──────┬─────────────┘
│ 清洗后文本
▼
┌───────────────────────────────┐
│ Chat Model(内容理解,一次性) │
│ - 分类(Category) │
│ - 标签(Tags) │
│ - 摘要(Summary) │
│ - 实体 / 主题(可选) │
└──────┬────────────────────────┘
│ 结构化内容
▼
┌─────────────────────────────────────┐
│ Ranker Model(分类内质量评估) │
│ - 输入:文章 + 分类 + 标签 │
│ - 输出:质量分 / 等级(A/B/C/D) │
└──────┬──────────────────────────────┘
│
├──────────────———─┐
│ 高质量内容 │ 低质量内容
│ (>= 阈值) │ (< 阈值)
▼ ▼
┌──────────────────┐ ┌────────────────────┐
│Embedding Pipeline│ │ 冷存 / 低频曝光 │
│ - 向量化 │ │ - 搜索兜底 │
│ - 向量索引 │ │ - 长尾内容池 │
└─────────┬────────┘ └────────────────────┘
│
▼
┌──────────────────────┐
│ 向量库 / 内容索引 │
│ (ANN / pgvector 等) │
└─────────┬────────────┘
│
┌────────┴─────────┐
│ │
▼ ▼
分支一:用户主动获取(Pull 推荐流)
┌──────────────────────┐
│ 用户行为采集 │
│ - 点击 / 阅读时长 │
│ - 收藏 / 分享 / 跳过 │
└─────────┬────────────┘
▼
┌──────────────────────────────┐
│ 用户画像构建(Chat + 特征) │
│ - 兴趣主题 │
│ - 偏好分类 │
│ - 阅读深度 / 新鲜度偏好 │
└─────────┬────────────────────┘
▼
┌──────────────────────────────┐
│ Recall(多路召回) │
│ ① U2I 向量召回(主路) │
│ ② TF-IDF / BM25(兜底) │
│ ③ 新内容 / 热点 │
└─────────┬────────────────────┘
▼
┌──────────────────────────────┐
│ 排序 / 混排 │
│ - 质量分(Ranker) │
│ - 相似度 │
│ - 新鲜度 / 多样性 │
│ - 用户偏好权重 │
└─────────┬────────────────────┘
▼
┌──────────────────────┐
│ 信息流展示 │
└──────────────────────┘
分支二:系统主动推送(Push / Webhook)
┌────────────────────┐
│ 高质量内容 │
│ (已分类 / 已评分) │
└─────────┬──────────┘
│
▼
┌──────────────────────────────────────┐
│ 是否命中 Push 条件? │
│ - 分类 / 标签 │
│ - 质量 ≥ 阈值 │
│ - 关键词 / 实体 │
└─────────────┬────────────────────────┘
│
┌─────────┼─────────┐
│ │
No Yes
│ │
▼ ▼
┌────────────────┐ ┌─────────────────────┐
│ 进入普通内容流 │ │ Webhook 事件生成 │
└────────────────┘ │ - article_ids │
│ - reason │
└──────────┬──────────┘
│
▼
┌──────────────────────┐
│ Webhook 分发器 │
│ - 选择渠道 │
└──────────┬───────────┘
(是否需要 LLM 概要?)
│
┌──────────┼──────────┐
│ No │ Yes
▼ ▼
┌────────────────────┐ ┌─────────────────────┐
│ 直接分发 │ │ LLM 概要增强流程 │
│ (模板内容) │ │ - 精炼概要总结 │
│ │ │ - 关键信息提取 │
│ │ │ - 引用原文 URL │
└─────────┬─────────┘ └──────────┬─────────—┘
│ │
└──────────────┬─────────┘
│
▼
┌────────────────────┐
│ 通知内容构建 │
└─────────┬──────────┘
│
┌──────────┼──────────┬──────────┐
│ │ │
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ 聊天通知 │ │ 邮件通知 │ │ 其它系统 │
│ IM / Bot │ │ Email │ │ 搜索 / BI │
└────────────────┘ └────────────────┘ └────────────────┘
| 组件 | 说明 |
|---|---|
| 后端框架 | Spring Boot 3.x |
| 前端框架 | Vue 3 + Vite |
| 数据库 | PostgreSQL + pgvector 插件 (结构化数据 & 向量) |
| NoSQL | MongoDB (非结构化数据 & 缓存) |
| AI 模块 | OpenAI Chat / Embedding API |
| 检索算法 | TF-IDF + 向量 + 新鲜度 混合召回 |
| 连接池 | HikariCP |
| 构建工具 | Maven (Backend) / npm (Frontend) |
本项目支持多种部署方式,包括 Docker Compose 一键部署和手动构建部署。
👉 详细的部署步骤、环境变量配置及数据库初始化脚本,请参阅 部署指南。
如果您已安装 Docker 可以快速启动体验:
- docker run:
docker run -d \
--name ifeed-app \
-p 8080:8080 \
-e PG=PG\
-e PG_DATABASE=i_feed \
-e PG_USERNAME=PG_USERNAME \
-e PG_PASSWORD=PG_PASSWORD \
-e MONGO_DB=MONGO_DB \
-e MONGO_DB_DATABASE=i_feed \
-e MONGO_DB_USERNAME=MONGO_DB_USERNAME \
-e MONGO_DB_PASSWORD=MONGO_DB_PASSWORD \
-e app.ai.provider.api-key=APIKEY \
-e app.ai.provider.base-url=BASE_URL \
-e app.ai.provider.reranker.api-key=APIKEY \
-e app.ai.provider.reranker.base-url=BASE_URL \
--restart always \
ifeed/ifeed:latest
- 参考 部署指南 配置环境变量和初始化。
iFeed 支持多层次推荐策略,确保推荐内容的准确性与时效性:
- 关键词检索:基于 TF-IDF 算法的语义匹配,处理精确查找需求。
- 向量召回:利用 OpenAI Embedding + pgvector 实现语义相似度检索,发现潜在相关内容。
- 混合策略:融合 TF-IDF 与向量召回结果,并引入时间衰减因子(新鲜度),综合计算最终得分。
数据库表结构示例(向量表):
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE article_embeddings (
id BIGSERIAL PRIMARY KEY,
content TEXT,
metadata JSONB,
embedding vector(1024)
);
CREATE INDEX ON article_embeddings USING ivfflat (embedding vector_cosine_ops);ifeed/
├── doc/ # 文档资料
├── frontend/ # Vue 前端项目
├── src/ # Spring Boot 后端源码
│ ├── main/
│ │ ├── java/com/ifeed/
│ │ ├── resources/
│ │ │ ├── application.yml
│ │ │ └── static/
│ └── test/
├── pom.xml # Maven 配置
├── deployment.md # 部署指南
└── README.md # 项目说明- RAG 知识库增强
- 更多数据源采集器支持
- 多用户系统完善
MIT License © weekend-project-space