☰
自己动手,搭一个 AI 资讯聚合平台
2026/9/27 4:33:14 网站建设 项目流程

做 AI 相关工作的人,大概都有过这种体验:每天早上先刷一遍 X,再看几个大厂博客,然后去 Hacker News 和 Reddit 翻翻评论区,晚上再补几期 YouTube 访谈。

一圈下来一两个小时没了,真正有用的信息可能就那么几条。

问题不在信息少,而在于信息太散、太杂、太重复。这篇文章从这个需求出发,拆一拆一个能自动跑起来的 AI 资讯平台该怎么设计,最后手把手部署一套。

1、先把需求说清楚:四个要解决的问题

把“每天刷资讯”这件事拆开看,其实是四个具体的问题。

第一,源太多、格式不一。官方博客有 RSS,Hacker News 有评论区,Reddit 按子版块组织,X 是一条条帖子,YouTube 是视频。想统一收进来,每类源都得有自己的采集方式。

第二,噪声太多。科技媒体的 RSS 里一半不是 AI 内容,社媒上大量帖子没人互动。需要有人帮你先筛一遍。

第三,重复太多。一个模型发布,官方博客发一遍,TechCrunch 报道一遍,X 上几十个人转发评论。你不想看同一件事十遍。

第四,读原文太费时间。一篇长博客、一期两小时的播客,你需要的往往只是几百字的要点,最好中英文都有。

这四个问题,正好对应一条流水线的四个环节:采集、过滤、去重、摘要。

2、技术方案:一条流水线,四个环节

采集层按源的类型分开处理。RSS/Atom 最简单,解析 feed 就行。Hacker News 除了帖子本身,还要把评论区一起抓下来,因为很多有价值的观点在评论里。YouTube 视频取字幕文本,把“看视频”变成“读文字”。GitHub Trending 取仓库的 README 和元数据。

讨论类内容还要设一道互动门槛:点赞和评论数不够的帖子先不处理,记下来过段时间再复查。刚发出来的帖子互动少,直接判死刑容易漏掉后来火起来的。

过滤和摘要层交给大模型。每篇文章送进去,一次调用拿回四样东西:相关性判断、中英双语摘要、标签、重要性评分。这里有个简单但好用的约定:和 AI 无关的内容直接打 0 分,0 分不入库,过滤和打分合成一步。

不同类型的内容,摘要口径也不一样。新闻要讲清事实和影响,讨论帖要提炼各方观点,开源项目要说明它解决什么问题。所以提示词按类别分开写,每类一套。

去重层是整条流水线里最值得说的部分,分两级:

  • 第一级是 SimHash。对全文算一个指纹,两个指纹的汉明距离不超过 3 就算重复。它便宜,而且放在调用大模型之前,转载、镜像这类几乎一字不差的内容,在这一步就被拦掉,省下的是真金白银的 token。
  • 第二级是语义去重。不同媒体报道同一件事,措辞完全不同,SimHash 认不出来。这时把摘要和标签用本地的 all-MiniLM-L6-v2 模型转成向量,在数据库里用 pgvector 查余弦相似度,超过 0.85 就算重复。24 小时内的新文章阈值放宽到 0.80,因为同一个热点集中爆发时,重复报道最多。

存储层用带 pgvector 扩展的 PostgreSQL。文章、源列表、向量都在一个库里,语义去重直接用一条 SQL 查询完成,不用另外维护一个向量数据库。

最后用一个调度器把这些串起来,定时跑一轮。

![

这套方案我们自己已经跑了一段时间,代码整理成了开源项目ai-news-brief(MIT 协议)。下面就用它从零部署一套,数据库用 Supabase 的免费项目。

3、准备工作

你需要三样东西:

  • Python 3.10 以上。
  • 一个大模型 API key。任何 OpenAI 兼容的接口都行,项目默认用 DeepSeek,换别家只要改接口地址和 key。
  • 一个 Supabase 免费项目。它自带 PostgreSQL,pgvector 开个开关就能用,省去自己装数据库的麻烦。

另外可选一个 GitHub Token。不填也能抓 GitHub Trending,填了以后 GitHub API 的限额从每小时 60 次提到 5000 次。

4、配置 Supabase:开扩展、拿连接串

在 Supabase 新建项目。建项目时要设一个数据库密码,记下来,后面要用。

然后启用 pgvector,两种方式任选一种。

一种是点界面:进 Dashboard 的 Database 页面,左侧栏点 Extensions,搜 vector,打开开关。

另一种是在 SQL Editor 里执行:

CREATEEXTENSIONIFNOTEXISTSvector;

表不用手动建,程序第一次运行时会自动创建。

接下来拿连接串。点 Dashboard 顶部的 Connect 按钮,这里要看你的网络环境。

网络支持 IPv6 的话,选 Direct connection:

postgresql://postgres:[YOUR-PASSWORD]@db.[PROJECT-REF].supabase.co:5432/postgres

网络只有 IPv4 的话(国内家庭宽带和公司网络大多是这样),直连会失败,要选 Session pooler:

postgresql://postgres.[PROJECT-REF]:[YOUR-PASSWORD]@[POOLER-HOST]:5432/postgres

注意两点。

一是主机名和用户名直接从 Connect 弹窗里复制,别自己拼。pooler 的主机名带一个集群编号,没法从地区推出来;pooler 连接的用户名也和直连不一样,是postgres.项目ID的形式。

二是把[YOUR-PASSWORD]换成你的密码时,如果密码里有&、#、?或空格,要做百分号编码,否则连不上。

5、拉代码、填配置

gitclone https://github.com/frankzch/ai-news-brief.gitcdai-news-brief pipinstall-rrequirements.txt playwrightinstallchromium

最后一行装的是 Chromium 内核,有些网页的正文要靠浏览器渲染后才能取到。

复制一份环境变量模板:

cp.env.example .env

.env里必填两项:

  • DEEPSEEK_API_KEY:大模型 key。用别家就改填INBRIEF_LLM_API_KEY和INBRIEF_LLM_BASE_URL。
  • INBRIEF_SUPABASE_DB_URL:刚才复制的连接串。

GITHUB_TOKEN选填。

其余参数都在config.yaml里,常改的有这几个:

配置项默认值作用
llm.model_namedeepseek-v4-flash摘要用的模型
schedule.interval_hours2调度模式下每几小时跑一轮
fetching.max_entries50单轮最多处理多少篇
fetching.concurrency5并发处理数
fetching.article_max_age_days1超过几天的旧文章跳过
fetching.discussion.min_likes/min_replies100 / 50讨论帖的互动门槛
fetching.github_trending.max_repos25GitHub Trending 取前多少个
cleanup.article_retention_days7文章保留几天后自动清理

6、加信息源,跑起来

源列表存在数据库的rss_sources表里,用自带的admin_rss.py管理:

# 添加python admin_rss.pyaddhttps://openai.com/news/rss.xml"OpenAI Blog"--categorynews# 查看python admin_rss.py list# 删除(会先要求确认)python admin_rss.py delete<id>

GitHub Trending 不用加源,在config.yaml里默认开着。

第一次跑建议只加几个官方博客这类普通 RSS 源,先把整条链路走通:

python main.py--now

--now表示立即跑一轮。看日志能看到每篇文章的去向:被 SimHash 拦掉、被判定与 AI 无关、被语义去重,还是成功入库。

没问题以后去掉参数,进入调度模式长期运行:

python main.py

结果存在articles表里,在 Supabase 的 Table Editor 里能直接看,每条都有中英文标题、短摘要、长摘要、标签和重要性分数。

7、扩展:从 94 个源的目录开始,加你自己的源

程序本身不预置任何源,加什么全由你决定。项目 README 里附了一份我们在用的源目录,一共 94 个,可以直接照着挑:

类别数量内容
新闻与博客16 个 RSSOpenAI、Google DeepMind、Google Research、Apple ML、Microsoft AI、Nvidia、Hugging Face 等官方博客与 HF Daily Papers,加上 TechCrunch、The Verge、MIT 科技评论、VentureBeat 等媒体
讨论HN + 16 个 Reddit + 47 个 XHN 首页含评论区;Reddit 11 个子版块加 5 个关键词;X 35 位 AI 从业者(Karpathy、Simon Willison 等)加 12 个关键词
视频13 个 YouTube 频道Lex Fridman、Dwarkesh Patel、Latent Space、Two Minute Papers 等,按字幕生成摘要
开源GitHub Trending每周热门仓库

要加目录之外的源,只需要知道每类源的写法。程序按 URL 自动识别类型:

![

  • 普通 RSS / Atom:直接填 feed 地址。大部分博客、媒体都有。
  • YouTube 频道:填频道 feed,https://www.youtube.com/feeds/videos.xml?channel_id=UC...。
  • Reddit 子版块:https://www.reddit.com/r/<子版块名>/,抓热帖。
  • Reddit 关键词:URL 填 reddit.com,描述写keyword <关键词>。
  • X:URL 填 x.com,描述写keyword <关键词>按关键词搜,写kol <账号名>跟踪某个人。

社媒类的源在运行前还有一些额外设置,项目 README 里有说明。

加源时还有两个参数值得用好。

--category决定这个源的文章用哪套提示词。src/prompts/下有news、discussion、kol、opensource四个 txt 文件,类别名就对应文件名。觉得摘要风格不合口味,直接改这几个文本文件,不用碰代码。

--importance-score是源的基础分,默认 0。一篇文章的最终分数,是大模型打的分和这个源分取平均,讨论类再加上互动热度分一起平均。所以源分留 0 会把平均分拉低一半。你最信任的源,比如各家官方博客,给个高分,它们的文章自然排在前面。

8、嫌部署麻烦?装一个 skill 就行

如果你只是想每天看看 AI 圈发生了什么,不想自己维护数据库和定时任务,我们还做了另一个开源项目ai-news-skill。

它是一个 Agent Skill,背后接的就是用上面这套流水线跑出来的数据。支持 Claude Code、Codex、OpenClaw 和 Antigravity,一条命令装好:

# Claude Codegitclone https://github.com/frankzch/ai-news-skill.git ~/.claude/skills/ai-news-skill

其他 agent 换一下目录:Codex 是~/.codex/skills/,OpenClaw 是~/skills/,Antigravity 是~/.agents/skills/。

装好以后直接用自然语言问:

  • “过去 5 天头部 KOL 发布的 AI 视频,排除 Fireship。”
  • “今天的 AI 新闻,但去掉 TechReview。”
  • “过去 3 天 Reddit 的 AI 讨论,要长摘要。”

agent 会把问题翻译成类别、来源、时间范围、条数、摘要长短、语言这些过滤条件去查。不配 key 就能用,每次最多返回 3 条,想要更多条数的配置方法见仓库 README。

两个项目放在这里,都是 MIT 协议:

  • 自己部署完整流水线:github.com/frankzch/ai-news-brief
  • 装进 agent 直接查询:github.com/frankzch/ai-news-skill

有想加的好源,也欢迎来提 issue 或 PR。](https://i-blog.csdnimg.cn/direct/08b71048eb094cbdbf68f40112866444.png)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询