Skip to content

happyTonakai/ZenFlow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZenFlow — AI 驱动的个性化论文推荐与深度阅读助手

ZenFlow 是一个本地优先、隐私安全的桌面应用。它从 arXiv 订阅你关注的论文,通过分析你的阅读偏好,每天推荐你最可能感兴趣的内容。它还是一个论文深度阅读工具——一键提取全文,AI 自动生成综述,支持流式追问和逐段剖析。

设计理念

传统推荐系统的问题

大多数论文推荐工具的做法很粗暴:让 LLM 直接判断一篇论文"重不重要"、"值不值得读"。这种思路有两个致命缺陷:

  1. 忽略了你是谁。一篇关于大规模分布式训练的论文可能很重要,但如果你做的是理论机器学习,它对你毫无意义。LLM 不知道你的研究方向、你偏好的方法论、你讨厌的领域——它只能给出一个"普适的"重要性判断。
  2. 无法从你的行为中学习。你点了什么、赞了什么、踩了什么——这些信号在传统系统里全部被丢弃了。系统不会因为你连续踩了 10 篇 GAN 相关的论文就学会"这个人不喜欢 GAN",下次照样推。

ZenFlow 的解法:反馈驱动的 LLM 评分

ZenFlow 的核心思路不是"这篇论文重要吗",而是**"这篇论文对你来说有趣吗"**。

系统维护一个偏好文件(~/.zenflow/preferences.md),里面是 LLM 根据你的反馈行为自动总结的"你的画像"——感兴趣的主题、偏好的方法论、明确排斥的领域。每次评分时,LLM 把这个偏好文件作为上下文,读入待评分论文的标题和摘要,给出 0~1 的个性化匹配分数

当你点击、点赞或点踩一篇论文时,LLM 会重新分析你的行为模式,更新偏好文件。整个过程是透明的——你可以随时打开偏好文件,看看 LLM 是怎么理解你的。

换句话说,ZenFlow 不是一个"论文排行榜",而是一个在逐渐理解你的阅读助手

探索机制:在兴趣之外发现更多

如果系统只推荐和你已知兴趣高度匹配的内容,你会被关在一个越来越窄的"信息茧房"里——你永远看不到那些可能改变你研究方向的、来自相邻领域的突破性工作。

ZenFlow 的每日推荐采用三维混合策略

  1. 70% 兴趣匹配:和你兴趣紧密匹配的高分论文,确保核心需求被满足
  2. 15% 社区精选:在剩余论文中,按社区评价排序取 top——这些论文可能来自相邻领域,但经过社区验证的高质量工作同样值得关注
  3. 15% 加权随机:从剩余论文中随机采样,但社区评价高的论文采样概率更大——既保持探索性,又不过分牺牲质量

社区评价数据来自 HuggingFace Papers(用户点赞数)和 AlphaXiv(开放讨论区净投票数),系统每 12 小时自动同步一次,24 小时内不会重复抓取。这个比例可以在设置中调整。

你可能会觉得那 30% 很"吵",但真正有价值的跨领域发现往往就藏在里面——而社区投票能帮你在"噪音"中筛出"信号"。

主要功能

智能推荐引擎

  • 完全 LLM 驱动:接入任何 OpenAI 兼容 API(SiliconFlow / Ollama / DeepSeek 等),LLM 读取你的偏好文件,为每篇论文生成个性化匹配分数
  • LLM 自维护偏好:你只需像平常一样点击/点赞/点踩,LLM 自动分析反馈、归纳模式、更新偏好描述,无需手动标注标签
  • 每日推荐批次:每天自动评分 + 生成推荐,按日期分组回溯,可配置每日推荐数量
  • 社区投票参考:自动获取 HuggingFace Papers 和 AlphaXiv 的社区评价数据,辅助判断论文质量
  • 定时后台任务:每小时自动检查 arXiv 更新,每天自动抓取新论文、同步社区投票并生成推荐

论文深度对话

  • 一键提取全文:优先从 arXiv HTML 版本解析,无 HTML 时回退到 LaTeX 源码编译,自动展开 \input/\include、剥离注释、展开宏
  • 自动生成综述:AI 从研究动机、数学建模、实验设计、核心结论、Reviewer 锐评五个维度,生成结构化的深度解析文档,支持 LaTeX 公式渲染
  • 滑动窗口多轮对话:综述完成后可以继续追问,保留最近 5 轮上下文,支持深入讨论论文细节
  • 流式输出 + KaTeX 渲染:AI 回复实时流式展示,数学公式不完整时自动降级为纯文本,避免白屏

交互体验

  • Cmd+, 打开设置,Cmd+/- 缩放字体,字号自动持久化
  • 文章卡片展示兴趣分、社区投票数和推荐类型标签(🏆 社区精选 / 🎲 随机探索)
  • 新用户 4 步向导:选择 arXiv 分类 → 添加偏好论文 → 配置 LLM API → 完成初始化
  • API Key 存储在系统密钥链(macOS 钥匙串 / Windows 凭据管理器 / Linux Secret Service),不落盘

技术架构

┌─────────────────────────────────────────────────┐
│                  Tauri v2 Desktop                │
│  ┌──────────────┐          ┌──────────────────┐ │
│  │ React 19     │  IPC     │  Rust Backend    │ │
│  │ + TypeScript │ ◄──────► │                  │ │
│  │ + Vite       │          │  feed/fetcher    │ │
│  │              │          │  llm/client      │ │
│  │ Components:  │          │  llm/scoring     │ │
│  │ ArticleList  │          │  llm/chat        │ │
│  │ ChatPanel    │          │  llm/preferences │ │
│  │ SettingsModal│          │  algorithm/score │ │
│  │ WelcomeWizard│          │  scheduler       │ │
│  └──────────────┘          └────────┬─────────┘ │
│                                     │            │
│                            ┌────────▼─────────┐  │
│                            │  SQLite (本地)    │  │
│                            │  + 系统密钥链     │  │
│                            └──────────────────┘  │
└─────────────────────────────────────────────────┘
  • 前端:React 19 + TypeScript + Vite
  • 后端:Rust (Tauri v2),异步运行时 tokio
  • 数据库:SQLite 单文件(~/.zenflow/zenflow.db
  • AI 接入:OpenAI 兼容 API(支持 SiliconFlow、Ollama、DeepSeek 等任意服务)
  • 论文提取:独立 crate arxiv2text,HTML 解析 + LaTeX 源码编译双路径

快速开始

前置要求

  • Rust toolchain(推荐通过 rustup 安装)
  • Node.js 18+
  • macOS / Windows / Linux

安装与运行

git clone https://github.com/your-org/ZenFlow.git
cd ZenFlow

# 安装前端依赖
cd src-tauri && npm install && cd ..

# 开发模式(前端 + 后端热重载)
just dev

# 构建生产版本
just bundle

测试

just test        # 运行所有单元测试(需单线程,因为共享全局内存 SQLite 连接池)
just test-llm    # 运行 LLM 集成测试(需要本地 Ollama)
just check       # 类型检查(Rust + TypeScript)
just clippy      # Rust Clippy 检查
just bundle      # 打包桌面应用

项目结构

ZenFlow/
├── src-tauri/
│   ├── src/                        # React 前端
│   │   ├── App.tsx                 # 应用入口
│   │   ├── components/
│   │   │   ├── ArticleList.tsx     # 文章列表
│   │   │   ├── ArticleCard.tsx     # 文章卡片(含交互按钮)
│   │   │   ├── DateGroupedArticleList.tsx  # 日期分组的每日推荐列表
│   │   │   ├── ChatPanel.tsx       # 论文对话面板(流式输出 + KaTeX)
│   │   │   ├── SettingsModal.tsx   # 设置弹窗
│   │   │   └── WelcomeWizard.tsx   # 新用户初始化向导(4 步)
│   │   ├── hooks/
│   │   │   ├── useArticles.ts      # 文章数据 hook
│   │   │   └── useChat.ts          # 对话数据 hook
│   │   └── types/                  # TypeScript 类型定义
│   └── src-tauri/                  # Rust 后端
│       └── src/
│           ├── main.rs             # Tauri 入口
│           ├── lib.rs              # 模块注册 + 所有 Tauri Command 注册
│           ├── config.rs           # 配置常量
│           ├── settings.rs         # 用户设置管理(含系统密钥链存储)
│           ├── scheduler.rs        # 后台定时任务(RSS 抓取 + 推荐生成)
│           ├── db/                 # 数据库层
│           │   ├── schema.rs       # SQL Schema
│           │   ├── pool.rs         # 连接池
│           │   └── operations.rs   # CRUD 操作
│           ├── feed/               # arXiv RSS 抓取
│           ├── algorithm/          # 推荐算法
│           │   ├── mod.rs          # 模块入口
│           │   └── score.rs        # LLM 驱动的评分 + 偏好更新
│           ├── llm/                # LLM 客户端
│           │   ├── client.rs       # OpenAI 兼容 HTTP 客户端(含 SSE 流式)
│           │   ├── scoring.rs      # 论文评分(偏好 + 批量论文 → 分数)
│           │   ├── chat.rs         # 论文对话提示词 + 上下文构建
│           │   └── preferences.rs  # 偏好文件读写 + LLM 偏好更新/初始化
│           ├── votes.rs             # 社区投票 API(HuggingFace + AlphaXiv)+ 速率限制
│           ├── commands/           # Tauri Commands(前端 IPC 接口)
│           │   ├── article.rs      # 文章抓取/列表/状态/推荐/翻译
│           │   ├── chat.rs         # 论文对话会话管理
│           │   ├── extract.rs      # 论文文本提取
│           │   ├── init.rs         # 初始化向导
│           │   ├── votes.rs        # 社区投票数据获取 + 状态查询
│           │   └── mod.rs
│           └── extractor.bak/      # 论文提取旧实现(已迁移至 arxiv2text crate)
├── arxiv2text/                     # 论文提取独立 crate
├── PRD.md                          # 产品需求文档
├── PLAN.md                         # 开发计划
├── AGENTS.md                       # AI Agent 开发指南
├── justfile                        # 任务运行器
└── test_rss.xml                    # 本地测试用的 RSS 数据

数据隐私

  • 所有数据存储在本地的 ~/.zenflow/ 目录
  • API Key 使用操作系统级密钥链加密存储,不落盘
  • 不收集任何使用数据,不上传任何分析日志
  • 偏好数据完全离线,可随时导出和迁移
  • 论文评分和对话直接调用你配置的 LLM API,不经过任何中间服务器

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors