Home
Softono

Syntopica

Open source Go
12
Stars
2
Forks
1
Issues
1
Watchers
2 months
Last Commit

 About Syntopica

用AI把你的RSS订阅进行语义归类,每天只需要关注你感兴趣的板块——Where feeds become topics

Platforms

Web Self-hosted

Languages

Go

Links

Need Help Installing Syntopica?

We provide expert installation service for this software. Our team will install, configure, and secure Syntopica on your server. plans start at just $30.

icon

Syntopica

Where feeds become topics

Syntopica 是一个 AI-powered RSS 阅读器。
但它的目标不是让你更快刷完文章列表,而是把持续涌入的信息流整理成可以长期追踪的语义主题。

如果你订阅了大量 RSS 源,每天都会面对几百篇新闻、博客、公告和文章。
普通 RSS 阅读器会把它们按时间排成列表,而 Syntopica 会尝试回答另一个问题:

我关心的这些主题,今天到底发生了什么?

例如:

  • 「AI Agent」今天有哪些新进展?
  • 「金价」上涨背后有哪些连续信号?
  • 「中东局势」哪些事件是昨天的延续?
  • 「某个产品发布会」后续反应是否还在发酵?
  • 哪些文章只是噪音,哪些值得进一步阅读?

Syntopica 希望把 RSS 从“文章时间流”变成“长期主题流”。

主界面截图


为什么做 Syntopica?

很多 RSS 用户的问题不是信息太少,而是信息没有被组织。

你可能订阅了:

  • 新闻媒体
  • 技术博客
  • 产品更新
  • 行业资讯
  • GitHub / Release / Blog Feed
  • RSSHub 生成的各种信息源

结果是:每天打开阅读器,看到的是一长串按时间排列的文章。

这些文章里有些属于你长期关注的议题,但它们通常被打散在不同来源、不同时间、不同标题之中。

普通 RSS 阅读器擅长回答:

今天来了哪些新文章?

但长期关注一个议题时,你真正需要的是:

这个主题今天发生了什么?
它和前几天有什么关系?
有哪些新信号?
哪些内容值得继续看?

Syntopica 就是为这个问题设计的。


核心想法

Syntopica 不把 RSS 只当作“文章列表”,而是把每篇文章理解为某些长期主题的一部分。

它会通过 AI 和语义标签,把文章归入你关心的板块,然后每天为每个板块生成叙事简报。

RSS Feeds
   ↓
Articles
   ↓
AI semantic tags / embedding
   ↓
Topic sections
   ↓
Daily narrative brief

你不再需要从几百篇文章里手动拼线索。 Syntopica 会把信息沉淀成可以持续追踪的 topics。

一个典型使用场景

把 RSS 订阅文章自动归类到几个「长期话题板块」里,每个板块每天生成一份叙事简报——就像雇了个编辑,每天帮你盯几个赛道。

举例:你关注金价,新建一个「金价」板块。系统不是靠关键词硬匹配"金价"两个字,而是通过 AI 提取的小标签(黄金、美联储、贵金属、汇率…)在语义层面筛选相关文章,每天自动生成一份叙事报告——这个板块今天发生了什么。

板块总览

1. 手动建板块,即刻生效

知道自己想要什么?直接创建板块,填个名字(比如「中东局势」),系统会根据名称+描述自动推荐最相关的标签给你勾选。确认后触发回填,历史文章马上归位。

手动创建板块 选择构成标签

2. 板块升级建议 — AI 帮你"长出新板块"

不知道手动加什么?点一下「✨ 升级建议」,大模型会分析你订阅的新闻里哪些话题频繁出现,自动聚类后给出板块创建建议——就像系统在跟你说"你最近看了很多 AI 的内容,要不要建个 AI 板块?"

建议分三种:🟢 创建新板块 / 🔵 合并到已有板块 / ⚪ 跳过(太碎片化不值得)。你挑着确认,不满意的直接跳过。

板块升级建议

3. 智能标签推荐 — 板块不够丰满?

感觉板块内容少、不相关?打开构成标签面板,LLM 按相似度推荐更多相关小标签,你自己勾选哪些要加进来,板块覆盖范围随手调。

管理构成标签 板块详情

4. 每日叙事简报

每个板块每天自动生成一份叙事报告。不是冷冰冰的摘要堆砌,而是连贯的叙述——"这个板块今天发生了什么,有什么趋势"。

每日简报

🤔 它和普通 RSS、搜索引擎、RAG 有什么不同?

工具 你得到什么 局限
普通 RSS 阅读器 按时间排列的文章列表 信息仍然是散的,需要自己归纳
搜索引擎 某一刻的搜索结果 需要主动搜索,缺少长期积累
RAG 知识库 对历史内容提问 每次都需要你提出问题
热点监控工具 当前流行的热点 不一定匹配你的长期关注主题
Syntopica 长期语义板块 + 每日叙事简报 更适合持续追踪个人关注议题

Syntopica 更像是一个个人议题编辑器。 它每天帮你把订阅源里的内容按长期主题整理好。

✨ 更多功能

主题图谱

  • 图谱可视化:日/周双视图,事件/人物/关键词三类节点与关联边,支持权重计算与时间窗口切换 主题图谱
  • 特别关注标签:按标签类型(事件/人物/关键词)支持特别关注,后续可直接筛选仅包含该标签的文章 category

主题图谱文章

📰 订阅管理

虽然 Syntopica 的重点是主题组织,但它仍然保留了 RSS 阅读器的基础体验:

你可以像使用普通 RSS 阅读器一样添加订阅源,也可以通过 OPML 导入已有订阅。

Syntopica 不替你决定信息来源。 你仍然掌控自己的 feeds

  • Feed 管理:添加、编辑、删除、手动刷新、全量刷新
  • 分类管理:自定义名称、图标、颜色
  • OPML 导入导出
  • 可配置自动刷新间隔
  • FeedBro 风格三栏布局
  • 收藏、已读标记、全屏阅读
  • 预览模式与 iframe 模式切换
  • 上一篇/下一篇快速导航

你可以把它当作普通 RSS 阅读器使用,也可以逐步启用 AI 主题能力。

订阅管理界面 文章阅读界面

🤖 智能增强

  • Firecrawl 全文抓取,补全 RSS 摘要内容
  • AI 内容整理,生成结构化正文
  • 内容源切换:原始内容 / Firecrawl 全文 / AI 整理稿

内容增强状态面板

⚙️ 全局配置

  • AI Provider 路由:多模型管理,按能力(总结/正文补全/主题提取/嵌入)分配不同 Provider,支持主备与拖拽排序 router
  • Firecrawl 服务:配置 API 地址、Key、抓取模式、超时与内容长度限制 fircrawl
  • 调度器监控:查看 AI 总结、Feed 刷新等定时任务状态,支持手动触发与间隔调整 fircrawl
  • 队列管理:实时监控标签打标队列、Embedding 队列的任务状态与失败重试 queue
  • Feed 级设置:单独配置每个订阅源的刷新间隔、最大保留文章数、AI 摘要开关 queue

📊 阅读偏好

  • 自动追踪阅读行为(打开、关闭、滚动、收藏)
  • 偏好分数计算,优化排序
  • 阅读统计展示 queue

🛠 技术栈

Frontend

  • Nuxt
  • Vue
  • TypeScript
  • Pinia
  • Tailwind CSS

Backend

  • Go
  • Gin
  • GORM

Storage

  • PostgreSQL

AI

  • OpenAI-compatible API
  • LLM
  • Embedding Model

Optional Services

  • RSSHub
  • Firecrawl

🚀 快速开始

前置条件

一键部署(推荐)

使用 init.sh 脚本自动完成环境初始化、容器启动和 AI 服务配置:

- bash init.sh  (linux用这个)
- init.ps1   (windows用这个)

脚本会引导完成以下步骤:

  1. 基础服务 — 检查 Docker,收集端口/密码配置,启动 PostgreSQL + Syntopica 容器
  2. AI 服务(可选)— 配置 AI 连接信息(安装和模型下载参见下方「AI 模型配置指南」):
    • Ollama — 连接本地 Ollama 实例
    • llama.cpp — 连接本地 llama.cpp 服务
    • 远程 API — 使用 OpenAI 兼容的云端 API(如 OpenAI、DeepSeek)
    • 跳过 — 之后通过 Web UI 手动配置
  3. Firecrawl(可选)— 全文抓取服务:
    • 自部署 — 通过 docker-compose.firecrawl.yml 启动本地 Firecrawl 实例
    • 云 API — 使用 Firecrawl 云服务
    • 跳过 — RSS 摘要模式,不抓取全文

手动构建与部署

1. 交叉编译后端二进制(Linux amd64)

cd backend-go
$env:CGO_ENABLED="0"; $env:GOOS="linux"; $env:GOARCH="amd64"; go build -o syntopica ./cmd/server

2. 构建 Docker 镜像并推送

docker build -t zanebonoalter/syntopica:latest .
docker push zanebonoalter/syntopica:latest

镜像构建时会自动编译前端(pnpm generate),最终镜像为单容器:Go 后端同时 serve API 和前端静态文件,端口 5000。

3. 启动服务

# 启动核心服务(PostgreSQL + Syntopica)
docker compose up -d

# 可选:启动 Firecrawl 全文抓取服务
docker compose -f docker-compose.firecrawl.yml up -d
# 可选:启动 RssHub 服务 获取rss源
docker compose -f docker-compose.rsshub.yml up -d
  • 访问地址:http://localhost:5000
  • PostgreSQL 数据持久化在 ./data/ 目录
  • 自定义端口/密码:在 .env 中配置 BACKEND_PORTPOSTGRES_PASSWORD

本地开发

# 1. 启动 PostgreSQL(需要 Docker,仅启动数据库)
docker compose -f docker-compose.pg.yml up -d

# 2. 前端
cd front && pnpm install && pnpm dev    # http://localhost:3000

# 3. 后端(需先启动 PostgreSQL)
cd backend-go && go mod tidy && go run cmd/server/main.go  # http://localhost:5000

配套服务

以下服务均为可选,无需在本地开发阶段提前启动,所有配置均可通过 Web UI 完成。

服务 本地开发选项
Firecrawl(全文抓取) 不启动 → RSS 摘要模式(够用);或 docker compose -f docker-compose.firecrawl.yml up -d 自部署;或配置云 API
LLM(AI 增强) 推荐 llama.cpp 本地推理(OpenAI 兼容 API);或 Ollama;或远程 API(OpenAI / DeepSeek 等);或不配先用,Web UI 里配
RSSHub(RSS 源代理) 可选,docker compose -f docker-compose.rsshub.yml up -d,默认 http://localhost:1200。在 Feed 添加页面填入 RSSHub 实例地址即可使用

启动后端后访问 http://localhost:5000 → 设置 → AI Provider 中配置 LLM 端点。例如 llama.cpp 默认地址为 http://localhost:8080/v1,选好模型即可使用。

🧠 AI 模型配置指南

init.sh / init.ps1 仅配置 AI 连接信息(IP、端口、模型名),不下载二进制或模型文件。安装和模型下载请参考以下指南。

Ollama

  1. 安装:ollama.com
  2. 拉取模型:
    ollama pull qwen3:8b           # 文本模型
    ollama pull nomic-embed-text   # 嵌入模型
    
  3. 启动服务:ollama serve
  4. 因为ollama对json的支持不是强制的,可能导致效果一般,所以不太建议用ollama

llama.cpp

  1. 下载预编译二进制:GitHub Releases
    • Windows + NVIDIA GPU:llama-*-bin-win-cuda-*.zip
    • Windows CPU:llama-*-bin-win-*.zip
    • macOS:llama-*-bin-macos-*.zip
    • Linux:llama-*-bin-linux-*.zip
  2. 下载模型文件(见下方推荐表),来源:ModelScope / HuggingFace
  3. 启动文本服务:
    ./llama-server -m model/Qwen3.5-9B-UD-Q6_K_XL.gguf -c 49152 -ngl 999 --cache-type-k q8_0 --cache-type-v q8_0 --flash-attn on --port 8080 --host 0.0.0.0 --jinja --reasoning-format deepseek --chat-template-kwargs '{\"enable_thinking\":false}' -np 2 > $null 2>&1
    
  4. 启动嵌入服务(新终端):
    ./llama-server -m model/Qwen3-Embedding-4B-Q6_K.gguf -c 8192 --embeddings --host 0.0.0.0 --pooling mean --port 8081 -ngl 0 > $null 2>&1
    

    -ngl 99 表示全部层卸载到 GPU,无 GPU 时去掉此参数。

VRAM 推荐模型表

GPU VRAM 推荐文本模型 推荐嵌入模型
无 GPU Qwen3-4B-Q4 (2.5GB) CPU Qwen3-Emb-0.6B (0.4GB)
4 GB Qwen3-4B-Q4 (2.5GB) Qwen3-Emb-0.6B (0.4GB)
6 GB Qwen3-8B-Q4 (4.9GB) Qwen3-Emb-0.6B (0.4GB)
8 GB Qwen3-8B-Q4_K_M (4.9GB) ★ Qwen3-Emb-4B (3.2GB)
12 GB Qwen3.5-9B-Q6 (8.0GB) ★ Qwen3-Emb-4B (3.2GB)
16 GB Qwen3-14B-Q4 (9.0GB) Qwen3-Emb-4B (3.2GB)
24 GB+ Qwen3-32B-Q4 (18GB) Qwen3-Emb-4B (3.2GB)

实际占用受 KV cache 和 context length 影响,以上为模型文件大小。

Docker 网络说明

当 Syntopica 后端运行在 Docker 容器内时,AI 服务运行在宿主机上。后端需要通过宿主机 IP(而非 localhost)访问 AI 服务。init.sh 会自动检测本机 IP 并作为默认值。

手动配置时请使用宿主机局域网 IP(如 192.168.x.x):

  • Ollama:http://192.168.1.100:11434/v1
  • llama.cpp 文本:http://192.168.1.100:8080/v1
  • llama.cpp 嵌入:http://192.168.1.100:8081/v1

📂 项目结构

Syntopica/
├── front/                              # Nuxt 4 前端(Vue 3 + TypeScript + Pinia)
├── backend-go/                         # Go + Gin 后端(GORM + PostgreSQL)
├── docs/                               # 项目文档
├── tests/                              # Python 集成测试
├── docker/                             # Docker 构建配置
├── img/                                # 截图和图片资源
├── data/                               # PostgreSQL 数据持久化(运行时生成)
├── init.sh                             # 一键部署初始化脚本
├── docker-compose.yml                  # Docker Compose(PostgreSQL + 前后端)
├── docker-compose.pg.yml               # Docker Compose(仅 PostgreSQL,本地开发用)
├── docker-compose.firecrawl.yml        # Docker Compose(Firecrawl 全文抓取,可选)
└── docker-compose.rsshub.yml           # Docker Compose(RSSHub + Redis + Browserless,可选)

Roadmap

当前重点

优化语义板块匹配效果 改进每日简报质量 完善板块生命周期 降低 AI 配置门槛 优化本地部署体验

后续可能方向

更强的主题演化分析 更清晰的板块合并 / 拆分流程 更好的跨天叙事追踪 更多 RSSHub / 全文抓取适配 更完善的图谱视图 移动端体验优化

适合谁使用?

Syntopica 适合这些用户:

  • 每天阅读大量 RSS 的人
  • 长期关注某些行业、公司、技术或市场的人
  • 不想被信息流淹没,但又不想放弃信息密度的人
  • 希望用 AI 辅助整理信息,而不是只做单篇摘要的人
  • 想搭建个人信息雷达的人

它不太适合:

  • 只想偶尔看几篇新闻的人
  • 不需要长期主题追踪的人
  • 完全不想配置 AI 服务的人
  • 只需要极简 RSS 客户端的人

🤝 项目状态

Syntopica 仍在持续开发中。

当前更偏个人使用和实验性产品阶段。 部分能力仍在调整,包括语义匹配、板块推荐、简报生成和本地模型适配。

如果你对 RSS、个人信息管理、AI 内容组织、主题追踪感兴趣,欢迎试用、反馈或参与改进。

License

GNU General Public License v3.0