Skip to content

Shadowzzh/intelli-pick

Repository files navigation

🧠 IntelliPick

✨ AI 驱动的智能内容筛选与价值提取系统

License: MIT Node Version Package Manager TypeScript

IntelliPick 从多个来源(RSS、V2EX 等)采集内容,通过 AI 进行质量过滤和实体提取,为你从信息过载中精选有价值的内容。

功能特性快速开始架构设计API 文档


🌟 项目亮点

  • 🤖 智能过滤 - 基于 AI 的内容质量评分(0-100),自动过滤噪声和低价值信息
  • 🔍 实体提取 - 自动识别人物、公司、产品、项目等关键实体并建立关联
  • 🔌 插件化架构 - 轻松扩展新的数据源和处理步骤
  • 🛡️ 安全检测 - 内置 NSFW、诈骗、骚扰等安全风险检测
  • 📊 双 API 接口 - RESTful + GraphQL + AI Chat,满足不同集成需求
  • 高性能 - BullMQ 队列处理,并发度可配置,轻松应对海量内容
  • 🎨 现代化前端 - React 18 + Vite 6 + Tailwind CSS 4,极致用户体验

📸 项目截图

Web 界面

IntelliPick Web UI


🚀 技术栈

核心技术

TypeScript Node.js pnpm Turbo

数据库与队列

PostgreSQL Redis Drizzle ORM BullMQ

AI 与机器学习

Vercel AI SDK DeepSeek

后端框架

Fastify GraphQL Yoga Socket.IO

前端技术

React Vite Tailwind CSS TanStack Query

开发工具

Biome


🏗️ 架构设计

Monorepo 结构

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]
Loading

Worker(后台处理):

  1. 采集 (Collector) - 插件化架构,支持 RSS、V2EX 等
  2. 队列 (Queue) - BullMQ + Redis,支持优先级和延迟任务
  3. 处理管道 (Pipeline) - 顺序执行的步骤链
  4. 调度 (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+

Docker 部署(推荐)

# 克隆仓库
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

服务启动后:

本地开发

# 安装依赖
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",
      },
    },
    // 添加更多数据源...
  ],
  // ...更多配置
});

📚 API 文档

IntelliPick 提供三种 API 接口:

RESTful 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 的文章有哪些?"
}

GraphQL API

访问 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
    }
  }
}

WebSocket 实时推送

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);
});

🎯 核心功能

1. 智能内容过滤

基于 AI 的质量评分系统,自动识别和过滤低价值内容:

// AI 质量评分示例
{
  score: 85,           // 质量分数 0-100
  reason: "内容原创,分析深入,有实用价值",
  isSafe: true,        // 安全检测通过
  risks: []            // 无安全风险
}

过滤维度:

  • 原创性和深度
  • 信息价值
  • 可读性和完整性
  • 安全风险检测(NSFW、诈骗、骚扰等)

2. 实体提取与关联

自动识别并提取关键实体:

// 实体提取示例
{
  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)

3. 多源数据采集

支持的数据源类型:

类型 插件 配置示例
RSS rss 标准 RSS/Atom feeds
V2EX v2ex V2EX 最新主题

添加新数据源:

// config.ts
{
  name: "我的博客",
  type: "rss",
  enabled: true,
  fetchInterval: 7200,
  config: {
    url: "https://myblog.com/rss"
  }
}

4. 实时推送

基于 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 Studio

Redis & 队列

pnpm redis:status       # 查看 Redis 和队列状态

📊 项目统计

GitHub Stars GitHub Forks GitHub Issues GitHub License

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。

About

是一个基于 AI 的内容过滤和分类系统。它从多个来源采集内容,通过 AI 进行质量过滤和实体提取,最终将有价值的内容存储到数据库中。(自用)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors