简介
什么是 FeedMe ?
FeedMe是一个基于AI的RSS阅读器,旨在通过聚合和自动生成摘要来重新定义用户的RSS阅读体验。该项目可以轻松部署到GitHub Pages或使用Docker本地运行。
主要特点
- 多源 RSS 聚合:从多个信息源获取并整合 - RSS内容,便于用户集中获取信息。
- AI 摘要生成:自动使用大语言模型( - LLM)为文章生成摘要,帮助用户快速了解内容要点。
- 定时更新机制:支持通过 - GitHub Actions或- Cron定期自动更新内容,确保信息新鲜。
- 分类浏览:支持按分类查看不同信息源,方便用户根据兴趣进行浏览。 
- 主题切换:提供明暗主题切换,提升用户体验。 
- 静态部署:可部署在 - GitHub Pages等静态托管服务上,简单易用。
- Docker 部署:可以在本地服务器上轻松部署,适合需要本地运行的用户。 
应用场景
- 个人信息聚合:用户可以通过 - FeedMe聚合自己感兴趣的新闻、博客和其他信息源,方便集中阅读。
- 内容监控:适合需要实时监控特定主题或领域的用户,自动获取最新动态。 
- 开发者和技术爱好者:开发者可以使用 - FeedMe集成不同技术博客和开源项目的更新,保持知识更新。
- 自定义信息源:用户可以根据需求配置 - RSS源,灵活定制信息获取方式。

FeedMe 提供了一个轻量级、自由定制的解决方案,适合各种需要信息聚合和快速浏览的用户。
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
官方提供了 Dockerfile ,但需要我们自己编。构建镜像的基本命令如下👇
# 下载代码
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,并在其中建两个子文件夹 data 和 config
- 在 - feedme根目录中准备一个- env.txt文件

env.txt
env.txt 是环境变量文件,用来配置 FeedMe 项目调用外部 AI 服务(如摘要等)的相关信息
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-0414、Qwen/Qwen3-8B 等
注册地址
https://cloud.siliconflow.cn/i/NkUiXVhQ

- 另外在 - config中准备两个文件,分别是- crontab-docker和- rss-config.js

crontab-docker
crontab-docker  用于定时执行更新脚本,实现自动化更新。
下面👇的示例设置,表示每 3 小时运行一次
# 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 编码格式

// RSS源接口
// name: 信息源名称
// url: RSS URL地址
// category: 分类名称
/**
 * @typedef {object} RssSource
 * @property {string} name - 信息源名称
 * @property {string} url - RSS URL地址
 * @property {string} category - 分类名称
 */
// 默认配置
exportconst 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",
}
exportconst defaultSource = config.sources[0]
/**
 * @param {string} url
 * @returns {RssSource | undefined}
 */
exportfunction findSourceByUrl(url) {
return config.sources.find((source) => source.url === url)
}
exportfunction 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 是文件映射,后两项是文件夹映射

端口
本地端口不冲突就行,不确定的话可以用命令查一下
# 查看端口占用
netstat -tunlp | grep 端口号
| 3220 | 3000 | 

命令行安装
如果你熟悉命令行,可能用 docker cli 更快捷
# 新建文件夹 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 文件
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
然后执行下面的命令
# 新建文件夹 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 的设定,数据是定时更新的,但如果需要强制更新,可以执行下面的命令
# 更新 RSS 数据
docker exec -it feedme /app/scripts/update_and_serve.sh
日志中会看到变化

参考文档
Seanium/FeedMe: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/feedmeFeedMe
地址:https://feedme.icu/
 
                         
                                     
                     
                     
                     
                     
                     
                     
                     
                     
                             
                             
                             
                             
            
             
            
             
            
             
            
            
诗意栖居
太酷了!AI摘要,让阅读效率提升不少!
诗意栖居
太牛逼了!以后我就可以躺着看书,省心!
沐光书生
这东西,我感觉它在窥探我的灵魂!
锦瑟华章
我支持!以后我就可以在火车上听AI讲书!
沐光书生
这绝对是人类对技术最好的利用,简直太天才!
沐光书生
这玩意儿,以后每天都听AI总结,感觉自己变笨了!
沐光书生
我开始怀疑,人类读书的意义是什么?
清风明月
这绝对是未来阅读的方式,太有意思!
沐光书生
我感觉自己要被AI取代了,有点害怕!
墨染山河
太妙了,以后我就可以把所有书都变成广播!