IntelliPick 从多个来源(RSS、V2EX 等)采集内容,通过 AI 进行质量过滤和实体提取,为你从信息过载中精选有价值的内容。
- 🤖 智能过滤 - 基于 AI 的内容质量评分(0-100),自动过滤噪声和低价值信息
- 🔍 实体提取 - 自动识别人物、公司、产品、项目等关键实体并建立关联
- 🔌 插件化架构 - 轻松扩展新的数据源和处理步骤
- 🛡️ 安全检测 - 内置 NSFW、诈骗、骚扰等安全风险检测
- 📊 双 API 接口 - RESTful + GraphQL + AI Chat,满足不同集成需求
- ⚡ 高性能 - BullMQ 队列处理,并发度可配置,轻松应对海量内容
- 🎨 现代化前端 - React 18 + Vite 6 + Tailwind CSS 4,极致用户体验
intellipick/
├── apps/
│ ├── api/ # HTTP API 服务器 (Fastify + GraphQL + Socket.IO)
│ ├── worker/ # 后台处理系统 (Collector + Pipeline + Scheduler)
│ └── web/ # React 前端应用 (Vite + React Router)
├── packages/
│ ├── config/ # 配置加载和验证 (jiti + zod)
│ ├── db/ # 数据库 schema 和客户端 (Drizzle ORM)
│ ├── env/ # 环境变量验证
│ ├── events/ # Worker-API 事件通信
│ └── shared/ # 共享类型定义和工具函数
└── docs/ # 项目文档
graph LR
A[数据源] --> B[Collector]
B --> C[BullMQ Queue]
C --> D[Pipeline Worker]
D --> E1[去重检查]
E1 --> E2[硬规则过滤]
E2 --> E3[AI 质量评分]
E3 --> E4[AI 实体提取]
E4 --> E5[存储到 DB]
E5 --> F[PostgreSQL]
E5 --> G[隔离区 Quarantine]
Worker(后台处理):
- 采集 (Collector) - 插件化架构,支持 RSS、V2EX 等
- 队列 (Queue) - BullMQ + Redis,支持优先级和延迟任务
- 处理管道 (Pipeline) - 顺序执行的步骤链
- 调度 (Scheduler) - Cron 定时任务,支持每个数据源独立间隔
API(HTTP 服务):
- RESTful API - 标准的 HTTP 端点
- GraphQL API - 灵活的查询接口
- WebSocket - Socket.IO 实时推送新内容
- AI Chat - 自然语言查询接口
Web(前端应用):
- 响应式设计,支持移动端
- 实时更新,WebSocket 连接
- 内容浏览和搜索
- Node.js 18+
- PostgreSQL 16
- Redis 7
- pnpm 9+
# 克隆仓库
git clone https://github.com/zhangziheng/intellipick.git
cd intellipick
# 启动所有服务(API、Worker、PostgreSQL、Redis、RSSHub)
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down服务启动后:
- API 服务器:http://localhost:8085
- Web 应用:http://localhost:5173
- Drizzle Studio:http://localhost:4983
- GraphQL Playground:http://localhost:8085/graphql
# 安装依赖
pnpm install
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入你的配置
# 初始化数据库
pnpm db:push
# 启动所有服务(开发模式)
pnpm dev编辑根目录的 config.ts:
export default defineConfig({
ai: {
providers: {
deepseek: {
apiKey: process.env.DEEPSEEK_API_KEY!,
baseUrl: "https://api.deepseek.com/v1",
},
},
tasks: {
filter: {
provider: "deepseek",
model: "deepseek-chat",
},
extractAndClassify: {
provider: "deepseek",
model: "deepseek-chat",
},
},
},
sources: [
{
name: "Hacker News",
type: "rss",
enabled: true,
fetchInterval: 3600, // 每小时采集一次
config: {
url: "https://hnrss.org/frontpage",
},
},
// 添加更多数据源...
],
// ...更多配置
});IntelliPick 提供三种 API 接口:
# 健康检查
GET /health
# 获取内容列表(支持分页和过滤)
GET /api/v1/contents?page=1&limit=20
# 获取单个内容详情
GET /api/v1/contents/:id
# 获取热门实体
GET /api/v1/entities?limit=10
# 全文搜索
POST /api/v1/search
{
"query": "AI and machine learning",
"limit": 20
}
# AI 自然语言对话
POST /api/v1/ai/chat
{
"message": "最近关于 GPT-4 的文章有哪些?"
}访问 http://localhost:8085/graphql 打开 GraphQL Playground。
query GetContentsWithEntities($limit: Int!) {
contents(limit: $limit, orderBy: { publishedAt: desc }) {
id
title
url
summary
publishedAt
source {
name
type
}
entities {
id
name
type
}
}
}import { io } from 'socket.io-client';
const socket = io('http://localhost:8085');
// 监听新内容事件
socket.on('content:new', (content) => {
console.log('新内容:', content);
});
// 监听内容更新事件
socket.on('content:updated', (content) => {
console.log('内容更新:', content);
});基于 AI 的质量评分系统,自动识别和过滤低价值内容:
// AI 质量评分示例
{
score: 85, // 质量分数 0-100
reason: "内容原创,分析深入,有实用价值",
isSafe: true, // 安全检测通过
risks: [] // 无安全风险
}过滤维度:
- 原创性和深度
- 信息价值
- 可读性和完整性
- 安全风险检测(NSFW、诈骗、骚扰等)
自动识别并提取关键实体:
// 实体提取示例
{
entities: [
{ name: "GPT-4", type: "product", confidence: 0.95 },
{ name: "OpenAI", type: "company", confidence: 0.98 },
{ name: "Sam Altman", type: "person", confidence: 0.92 }
]
}实体类型:
- 人物(person)
- 公司(company)
- 产品(product)
- 项目(project)
- 技术(technology)
支持的数据源类型:
| 类型 | 插件 | 配置示例 |
|---|---|---|
| RSS | rss |
标准 RSS/Atom feeds |
| V2EX | v2ex |
V2EX 最新主题 |
添加新数据源:
// config.ts
{
name: "我的博客",
type: "rss",
enabled: true,
fetchInterval: 7200,
config: {
url: "https://myblog.com/rss"
}
}基于 Socket.IO 的实时内容推送:
- 新内容到达时立即推送到前端
- 支持 WebSocket 长连接,自动重连
- 事件驱动架构,高效可靠
pnpm dev # 开发模式运行所有包
pnpm build # 构建所有包
pnpm typecheck # 类型检查pnpm lint # 检查代码风格
pnpm lint:fix # 自动修复代码风格问题
pnpm format # 格式化代码pnpm db:generate # 生成迁移文件
pnpm db:migrate # 运行迁移
pnpm db:push # 直接推送 schema(开发用)
pnpm db:studio # 打开 Drizzle Studiopnpm redis:status # 查看 Redis 和队列状态本项目采用 MIT 许可证 - 详见 LICENSE 文件。
