FeedMe:通过AI摘要提升阅读效率

本文软件由网友 P家单推人 推荐;

简介

什么是 FeedMe ?

FeedMe 是一个基于 AIRSS 阅读器,旨在通过聚合和自动生成摘要来重新定义用户的 RSS 阅读体验。该项目可以轻松部署到 GitHub Pages 或使用 Docker 本地运行。

主要特点

  1. 多源 RSS 聚合:从多个信息源获取并整合 RSS 内容,便于用户集中获取信息。
  2. AI 摘要生成:自动使用大语言模型(LLM)为文章生成摘要,帮助用户快速了解内容要点。
  3. 定时更新机制:支持通过 GitHub ActionsCron 定期自动更新内容,确保信息新鲜。
  4. 分类浏览:支持按分类查看不同信息源,方便用户根据兴趣进行浏览。
  5. 主题切换:提供明暗主题切换,提升用户体验。
  6. 静态部署:可部署在 GitHub Pages 等静态托管服务上,简单易用。
  7. Docker 部署:可以在本地服务器上轻松部署,适合需要本地运行的用户。

应用场景

  • 个人信息聚合:用户可以通过 FeedMe 聚合自己感兴趣的新闻、博客和其他信息源,方便集中阅读。
  • 内容监控:适合需要实时监控特定主题或领域的用户,自动获取最新动态。
  • 开发者和技术爱好者:开发者可以使用 FeedMe 集成不同技术博客和开源项目的更新,保持知识更新。
  • 自定义信息源:用户可以根据需求配置 RSS 源,灵活定制信息获取方式。

FeedMe 提供了一个轻量级、自由定制的解决方案,适合各种需要信息聚合和快速浏览的用户。

构建镜像

如果你不想自己构建,可以跳过,直接阅读下一章节

官方提供了 Dockerfile ,但需要我们自己编。构建镜像的基本命令如下👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 下载代码
git clone https://github.com/Seanium/FeedMe.git

# 通过代理
git clone https://gh-proxy.com/github.com/Seanium/FeedMe.git

# 进入目录
cd FeedMe

# 构建镜像
docker build -t wbsu2003/feedme:v1 .

# 运行容器
docker run -d \
--restart unless-stopped \
--name feedme \
-p 3220:3000 \
-v $(pwd)/env.txt:/app/.env \
-v $(pwd)/config:/app/config \
-v $(pwd)/data:/app/data \
wbsu2003/feedme:v1

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 wbsu2003 ,下拉找到 wbsu2003/feedme,版本选择 latest

docker 文件夹中,创建一个新文件夹 feedme,并在其中建两个子文件夹 dataconfig

  • feedme 根目录中准备一个 env.txt 文件

env.txt

env.txt 是环境变量文件,用来配置 FeedMe 项目调用外部 AI 服务(如摘要等)的相关信息

1
2
3
LLM_API_KEY=your_api_key
LLM_API_BASE=https://api.siliconflow.cn/v1
LLM_NAME=THUDM/GLM-4-9B-0414

其中:

  • LLM_API_KEY :你的大语言模型 API 密钥;
  • LLM_API_BASE:指定大语言模型 API 的基础地址;
  • LLM_NAME:指定所要使用的具体大语言模型名称;

目前硅基流动(SiliconFlow),注册就送 2000 万 Tokens,虽然不是免费,但也够用一阵子的,更何况还有很多免费的模型,例如: THUDM/GLM-4-9B-0414Qwen/Qwen3-8B

注册地址

https://cloud.siliconflow.cn/i/NkUiXVhQ

  • 另外在 config 中准备两个文件,分别是 crontab-dockerrss-config.js

crontab-docker

crontab-docker  用于定时执行更新脚本,实现自动化更新。

下面👇的示例设置,表示每 3 小时运行一次

1
2
# Schedule the update and serve script to run every 3 hours
0 */3 * * * /app/scripts/update_and_serve.sh >> /proc/1/fd/1 2>&1

rss-config.js

rss-config.js 用于定义和管理所有的 RSS 源及相关配置,是数据抓取和展示的基础配置文件

你可以根据下面👇的示例修改,但是一定要记得,保存时采用 UTF-8 编码格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// RSS源接口
// name: 信息源名称
// url: RSS URL地址
// category: 分类名称

/**
* @typedef {object} RssSource
* @property {string} name - 信息源名称
* @property {string} url - RSS URL地址
* @property {string} category - 分类名称
*/

// 默认配置
export const config = {
sources: [
{
name: "Simon Willison's Weblog",
url: "https://simonwillison.net/atom/everything/",
category: "技术博客",
},
{
name: "老苏的博客",
url: "https://laosu.tech/atom.xml",
category: "技术博客",
},
{
name: "阮一峰的网络日志",
url: "https://feeds.feedburner.com/ruanyifeng",
category: "技术博客",
},
{
name: "少数派",
url: "https://sspai.com/feed",
category: "科技资讯",
},
{
name: "小众软件",
url: "https://feeds.appinn.com/appinns/",
category: "科技资讯",
},
],
maxItemsPerFeed: 30,
dataPath: "./data",
}

export const defaultSource = config.sources[0]

/**
* @param {string} url
* @returns {RssSource | undefined}
*/
export function findSourceByUrl(url) {
return config.sources.find((source) => source.url === url)
}

export function getSourcesByCategory() {
return config.sources.reduce((acc, source) => {
if (!acc[source.category]) {
acc[source.category] = []
}
acc[source.category].push(source)
return acc
}, {})
}
文件夹 装载路径 说明
docker/feedme/env.txt /app/.env 存放设置文件,包括定时任务和 RSS
docker/feedme/data /app/data 存放 RSS 源的数据文件,保存了最新的 RSS 源爬取和解析后的数据(比如文章列表、源信息等)
docker/feedme/config /app/config 存放设置文件,包括定时任务和 RSS

第一项 env.txt 是文件映射,后两项是文件夹映射

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
3220 3000

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 新建文件夹 feedme 和 子目录
mkdir -p /volume1/docker/feedme/{data,config}

# 进入 feedme 目录
cd /volume1/docker/feedme

# 将 env.txt 放入根目录
# 将 crontab-docker 和 rss-config.js 放入 config 目录

# 运行容器
docker run -d \
--restart unless-stopped \
--name feedme \
-p 3220:3000 \
-v $(pwd)/env.txt:/app/.env \
-v $(pwd)/config:/app/config \
-v $(pwd)/data:/app/data \
wbsu2003/feedme

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'

services:
feedme:
image: wbsu2003/feedme
container_name: feedme
restart: unless-stopped
ports:
- 3220:3000
volumes:
- ./env.txt:/app/.env
- ./config:/app/config
- ./data:/app/data

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
# 新建文件夹 feedme 和 子目录
mkdir -p /volume1/docker/feedme/{data,config}

# 进入 feedme 目录
cd /volume1/docker/feedme

# 将 env.txt 放入根目录
# 将 crontab-docker 和 rss-config.js 放入 config 目录

# 一键启动
docker-compose up -d

运行

容器启动后,FeedMe 会根据我们在 rss-config.js 中设定的源进行数据抓取,源越多,花费的时间也越长,当然也和网络有很大的关系

当你在 data 目录中,看到和源数量相同的 json 文件时,就可以开始访问了

在浏览器中输入 http://群晖IP:3220 就能看到主界面

可以切换源

对于中文来说,摘要的用途不大,顶多也就是概括总结

切换到原文,你会发现,对英文还是很有用的

当然这只是因为老苏的英文太菜了😋

强制更新

按照 crontab-docker 的设定,数据是定时更新的,但如果需要强制更新,可以执行下面的命令

1
2
# 更新 RSS 数据
docker exec -it feedme /app/scripts/update_and_serve.sh

日志中会看到变化

参考文档

Seanium/FeedMe:AI 驱动的 RSS 阅读器,可部署到 GitHub Pages 或使用 Docker |用 AI 重新定义你的 RSS 阅读体验,轻松部署到 GitHub Pages / Docker — Seanium/FeedMe: AI-powered RSS reader, deployable to GitHub Pages or with Docker | 用 AI 重新定义你的 RSS 阅读体验,轻松部署到 GitHub Pages / Docker
地址:https://github.com/Seanium/feedme

FeedMe
地址:https://feedme.icu/