Skip to content

JunjieYu28/Paper-RAG

Repository files navigation

📑 Paper-RAG - 个性化论文推荐与研究助手

基于检索增强生成(RAG)技术的智能论文推荐与科研辅助系统

Python Streamlit ChromaDB License

功能特性快速开始系统架构使用指南开发说明


📖 项目简介

Paper-RAG 是一个集成了多模态检索增强生成(RAG)技术的论文推荐与研究助手系统。该系统能够:

  • 🎯 智能推荐:基于LLM的三阶段意图感知推荐管道,提供个性化论文推荐
  • 💬 论文问答:上传PDF论文或提问,获得专业的解读和分析
  • 📚 知识库管理:构建个人论文知识库,支持多种文档格式
  • 📅 科研规划:生成知识图谱,可视化研究脉络
  • 🔍 多源检索:整合 arXiv、Semantic Scholar 和本地知识库

本系统采用 阿里云DashScope 的 Qwen 系列大模型,支持文本+图像的多模态理解。

🌟 核心亮点:三阶段意图感知推荐

graph LR
    A["用户查询:最新的Transformer在CV中的应用"] --> B["阶段1: 意图理解"]
    
    B --> B1["RAG上下文化"]
    B --> B2["5路径搜索策略"]
    B --> B3["语义地标提取"]
    
    B1 --> C["阶段2: 动态检索"]
    B2 --> C
    B3 --> C
    
    C --> C1["多源并行检索"]
    C --> C2["地标狙击"]
    C --> C3["混合预过滤"]
    
    C1 --> D["阶段3: 混合重排序"]
    C2 --> D
    C3 --> D
    
    D --> D1["LLM多维评分"]
    D --> D2["个性化评分"]
    
    D1 --> E["Top-N推荐结果"]
    D2 --> E
    
    style B fill:#e1f5ff
    style C fill:#fff4e1
    style D fill:#ffe1f5
    style E fill:#e1ffe1
Loading

三阶段流程说明

  • 阶段1 意图理解:RAG上下文化 + 5路径搜索(Core/Divergent/Anchor/Foundation/Innovation)+ 专家必读清单
  • 阶段2 动态检索:ArXiv+Semantic Scholar并行检索 + 精确标题匹配 + 6维度评分Top-30
  • 阶段3 混合重排序:LLM三维评分(创新/重要/相关)+ 自适应权重调整

为什么是三阶段?

  • 传统方法痛点:关键词匹配无法理解"最新""创新性"等隐式需求
  • 意图理解:LLM 解析时间偏好、质量焦点、研究背景
  • 动态检索:多路径并行 + 自适应排序策略(时效性 vs 引用量)
  • 智能重排序:个性化权重调整,平衡创新性、影响力、相关性

✨ 功能特性

1️⃣ 意图感知的论文推荐系统(核心功能)

Paper-RAG 采用 三阶段意图感知推荐管道,解决传统推荐系统的三大痛点:

  • 🎯 深度意图理解:克服关键词检索的浅层理解问题(如"最新""创新性"等隐式需求)
  • 🔄 动态检索策略:根据用户偏好(时效性 vs 经典性)自适应调整排序策略
  • 🌐 多源数据整合:融合 arXiv、Semantic Scholar 和个人知识库,避免遗漏重要论文

详细技术方案见 推荐系统架构 章节

2️⃣ 论文助手(对话式RAG)

  • 文档上传:支持 PDF、PPTX、DOCX、TXT、Markdown 等多种格式
  • 临时文件处理:对话中上传的文件可临时使用,也可添加到知识库
  • 多模态理解:自动提取PDF中的图表并生成描述,增强检索效果
  • 来源标注:回答中标注信息来源(文件名和页码),保证可溯源性
  • 对话管理:支持多对话会话、文件夹分组、重命名、移动等

3️⃣ 知识库管理

  • 文件夹组织:创建主题文件夹,分类管理论文
  • 向量索引:自动构建和更新向量数据库索引
  • 文件操作:上传、删除、移动、查看文件内容
  • 自动分类:使用 organize_papers.py 工具自动整理现有论文

4️⃣ 科研规划

  • 任务管理:输入研究任务和DDL,系统自动安排
  • 周度计划:LLM生成个性化的周度研究计划
  • 知识图谱:可视化展示论文之间的关联关系

🚀 快速开始

环境要求

  • Python 3.8+
  • OpenAI兼容API(阿里云DashScope)
  • 约2GB磁盘空间(用于向量数据库)

安装步骤

  1. 克隆仓库
git clone https://github.com/JunjieYu28/Paper-RAG.git
cd Paper-RAG
  1. 安装依赖
pip install -r requirements.txt
  1. 配置环境变量
# Windows
set OPENAI_API_KEY=your_dashscope_api_key

# Linux/Mac
export OPENAI_API_KEY=your_dashscope_api_key

💡 获取API Key:访问 阿里云DashScope 注册并获取API密钥

  1. 启动应用
streamlit run app.py
  1. 访问界面 浏览器自动打开 http://localhost:8501

🏗️ 系统架构

目录结构

Paper-RAG/
├── app.py                      # Streamlit主入口,主题管理
├── rag_app.py                  # RAG应用主界面
├── splash_screen.py            # 启动页(粒子特效)
├── organize_papers.py          # 论文自动分类工具
│
├── backend/                    # 后端核心逻辑
│   ├── config.py              # 全局配置(API、模型、路径)
│   ├── rag_agent.py           # RAG代理(检索+生成)
│   ├── enhanced_recommender.py # 增强推荐器(意图理解+多阶段检索)
│   ├── recommender.py         # 基础推荐器
│   ├── paper_source.py        # 论文数据源(arXiv API)
│   ├── kb_manager.py          # 知识库管理器
│   ├── vector_store.py        # 向量数据库封装(ChromaDB)
│   ├── document_loader.py     # 文档加载器(多格式支持)
│   ├── text_splitter.py       # 文本分块器
│   ├── image_processor.py     # 图像提取与描述生成
│   ├── graph_manager.py       # 知识图谱管理
│   ├── history_manager.py     # 对话历史管理
│   ├── paper_organizer.py     # 论文自动整理模块
│   └── file_utils.py          # 文件工具函数
│
├── modules/                    # 前端UI模块
│   ├── chat_ui.py             # 对话界面
│   ├── recommendation_ui.py   # 推荐界面
│   ├── knowledge_base_ui.py   # 知识库管理界面
│   ├── planning_ui.py         # 科研规划界面
│   └── utils.py               # UI工具函数
│
├── data/                       # 知识库存储目录
├── vector_db/                  # 向量数据库文件
├── image_cache/                # 图像缓存
├── temp_uploads/               # 临时上传文件
├── evaluate/                   # 评估脚本和数据
│   ├── data_construct/        # 数据构建
│   ├── retriever_eval/        # 检索器评估
│   └── generator_eval/        # 生成器评估
│
├── requirements.txt            # Python依赖
├── CONTRIBUTING.md            # 贡献指南
└── LICENSE                     # 许可证

技术栈

类别 技术
前端框架 Streamlit, Streamlit-Agraph
LLM Qwen3-Max (文本生成), Qwen3-VL-Plus (多模态生成)
Embedding Qwen2.5-VL-Embedding (多模态), Text-Embedding-V4 (文本)
向量数据库 ChromaDB
检索框架 Rank-BM25 (稀疏检索), ChromaDB (密集检索)
文档处理 PyMuPDF, PyPDF2, python-pptx, docx2txt
图处理 Pillow, pytesseract (OCR)
图谱可视化 NetworkX, Streamlit-Agraph
论文API arXiv API, Semantic Scholar API

核心工作流程

graph TB
    A[用户查询] --> B{查询类型}
    B -->|论文推荐| C[意图理解]
    B -->|论文问答| D[文档上传]
    
    C --> E[多查询生成]
    E --> F[arXiv API检索]
    F --> G[重排序+过滤]
    G --> H[返回推荐列表]
    
    D --> I[文档解析]
    I --> J[图像提取]
    J --> K[文本分块]
    K --> L[向量化存储]
    L --> M[混合检索]
    M --> N[LLM生成答案]
    N --> O[返回标注答案]
Loading

🧠 推荐系统核心架构:三阶段意图感知管道

Paper-RAG 的推荐引擎是本项目的核心创新,采用 LLM 驱动的三阶段管道设计,实现个性化、高质量的论文推荐。

📋 推荐流程总览

用户查询
    ↓
┌─────────────────────────────────────────────┐
│ 阶段 1: 意图理解 (Intent Understanding)    │
│  - RAG 上下文化                             │
│  - 多路径搜索策略生成                        │
│  - 语义地标提取(专家必读清单)              │
└─────────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────────┐
│ 阶段 2: 动态检索 (Dynamic Retrieval)       │
│  - 多路径并行检索(ArXiv + Semantic Scholar)│
│  - 地标狙击(精确标题匹配)                  │
│  - 去重 + 时间过滤                           │
│  - 混合预过滤(6维度评分)                   │
└─────────────────────────────────────────────┘
    ↓
┌─────────────────────────────────────────────┐
│ 阶段 3: 混合重排序 (Hybrid Reranking)      │
│  - LLM 多维度评分(创新性/重要性/相关性)    │
│  - 个性化最终评分(自适应权重)              │
│  - 返回 Top-N 推荐结果                       │
└─────────────────────────────────────────────┘
    ↓
最终推荐列表

🎯 阶段 1:意图理解(Intent Understanding)

目标:深度理解用户查询背后的研究意图,而非简单的关键词匹配。

1.1 RAG 上下文化

从用户的本地知识库最近对话历史中检索 Top-K 文档片段,作为背景上下文传递给 LLM,实现:

  • 个性化理解(基于用户已阅读的论文领域)
  • 对话连贯性(考虑历史问答上下文)

1.2 多路径搜索策略(Multi-Route Search)

LLM 将用户查询分解为 5 种不同的搜索动机,生成多个并行检索查询:

搜索路径 目的 示例查询
Core 核心主题直接检索 "Vision Transformer architecture"
Divergent 相关领域扩展 "self-attention in CV"
Anchor 奠基性经典论文 "original transformer paper"
Foundation 基础理论背景 "attention mechanism overview"
Innovation 最新前沿进展 "latest ViT variants 2024"

同时,LLM 解析用户的搜索焦点

质量焦点 说明
Innovative 强调创新性和原创性
Influential 强调学术影响力和引用量
Practical 强调实用性和可应用性
Balanced 平衡各项指标

1.3 语义地标(Semantic Landmarks)

LLM 作为学术专家,针对特定子领域推荐 3-6 篇必读论文的精确英文标题,例如:

  • "Attention Is All You Need"
  • "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale"

这些地标论文将在阶段 2 进行精确狙击检索,确保不会遗漏重要文献。


🔍 阶段 2:动态检索(Dynamic Retrieval)

目标:从多个数据源智能检索候选论文,并进行初步质量过滤。

2.1 多路径并行检索

根据阶段 1 生成的多个查询,在以下数据源并行检索

数据源 排序策略 适用场景
ArXiv 按提交时间排序 获取最新研究(Innovation/Latest)
Semantic Scholar 按引用量排序 获取经典论文(Anchor/Foundational)
混合相关性 按相关性排序 核心主题检索(Core/Divergent)

自适应排序逻辑

  • anchor/foundational 查询 → Semantic Scholar 按引用量排序
  • innovation/latest 查询 → ArXiv 按提交时间排序
  • divergent/core 查询 → 按相关性排序

2.2 地标狙击(Landmark Sniping)

对于阶段 1 提取的每个地标论文标题,执行多级精确匹配

  1. 精确标题匹配
  2. 关键词搜索
  3. 标题变体匹配
  4. 宽松搜索

验证条件:标题相似度 > 0.6(使用语义向量计算)

2.3 去重 + 时间过滤

  • 去重:合并所有检索结果,按标题相似度 > 0.85 去重
  • 硬时间约束:根据意图理解中的时间偏好(如 "2023-"、"2020-2023")严格过滤

2.4 混合预过滤(Hybrid Pre-Filtering)

使用 6 个维度对候选论文进行初步评分,选择 Top-30 进入阶段 3:

维度 分数范围 计算公式
Dense(语义向量) 0-40 cos(q⃗, d⃗) × 40
BM25(稀疏检索) 0-30 norm(BM25_score) × 30
Citation(引用量) 10-40 log₁₀(cit+1) × 10
Recency(时效性) -10 ~ +10 latest: 10 - age×2;classic: 反向
Landmark(地标匹配) 0 / 100 标题相似度 > 0.8 → +100
KG(知识图谱) 0-50 作者匹配 +20;概念匹配 +5

总分计算

S_total = S_dense + S_BM25 + S_citation + S_recency + S_landmark + S_KG

选择 Top-30 候选论文进入最终重排序。


🏆 阶段 3:混合重排序(Hybrid Reranking)

目标:使用 LLM 进行精细化的多维度质量评估,生成个性化最终排序。

3.1 LLM 多维度评分

将 Top-30 候选论文的标题、摘要、引用量等信息传递给 LLM,对每篇论文在以下维度打分(0-10 分):

评分维度 说明
S_innovation(创新性) 原创性 vs 渐进式改进
S_importance(重要性) 学术地位与影响力
S_relevance(相关性) 与查询意图的契合度

3.2 个性化最终评分

根据用户的质量焦点时间偏好,动态调整权重:

基础评分公式

S_final = (W_r × S_relevance + W_i × S_innovation + W_p × S_importance) × α_recency

质量焦点自适应权重

焦点类型 W_r(相关性) W_i(创新性) W_p(重要性)
Innovative 0.2 0.6 0.2
Influential 0.2 0.2 0.6
Practical 0.6 0.2 0.2
Balanced 0.33 0.33 0.33

时间偏好自适应系数(α_recency):

论文年龄 ≥10年 ≥5年 ≥3年 2年 1年 当年
Classic 偏好 1.3 1.2 1.0 1.0 1.0 1.0
Latest 偏好 0.8 0.8 1.0 1.1 1.3 1.5

3.3 返回最终推荐

S_final 降序排列,返回 Top-N(默认10篇)推荐结果。


💡 推荐系统核心创新点

创新点 技术方案 效果
意图感知 LLM 解析隐式需求(时效性、质量偏好) 避免"最新""经典"等模糊查询失败
多路径检索 5 种搜索动机并行,扩充候选池 3-5 倍 召回率提升 40%+
地标狙击 专家推荐必读论文 + 精确匹配 保证不遗漏重要文献
混合评分 6 维度预过滤 + 3 维度 LLM 重排序 Top-10 准确率提升 18%
个性化排序 基于知识库 + 对话历史的动态权重 推荐更符合用户偏好
多源整合 ArXiv + Semantic Scholar + 知识图谱 覆盖更全面的论文库

🔬 推荐质量评估

基于人工标注测试集的评估结果:

指标 数值
召回率@30(预过滤后) 92.3%
准确率@10(最终推荐) 87.5%
平均相关性得分 4.3/5.0
地标论文命中率 95%+
用户满意度 4.2/5.0

对比基线系统提升

  • vs 纯语义检索:+28% 准确率
  • vs 单源检索(仅 ArXiv):+35% 召回率
  • vs 无意图理解:+22% 相关性得分

📘 使用指南

1. 论文推荐(核心功能)

基础使用

  1. 进入「📑 论文推荐」页面

  2. 在输入框输入研究需求,支持多种表达方式:

    示例查询

    • 明确主题:"Transformer在计算机视觉中的应用"
    • 时间需求:"2023年最新的多模态大模型"
    • 质量偏好:"联邦学习领域最具影响力的论文"
    • 创新导向:"图神经网络的创新性研究"
    • 综合表述:"我想了解扩散模型的基础理论和最新进展"
  3. (可选)侧边栏高级设置:

    • 时间偏好:Latest(最新)/ Classic(经典)/ Any(不限)
    • 质量焦点:Innovative(创新性)/ Influential(影响力)/ Practical(实用性)/ Balanced(平衡)
    • 推荐数量:5-30 篇
    • 检索范围:启用/禁用 Semantic Scholar
  4. 点击「🔍 获取推荐」

推荐结果解读

系统将返回以下信息:

  • 📊 意图理解报告

    • 核心主题关键词
    • 相关领域扩展
    • 5 条搜索查询(Core/Divergent/Anchor/Foundation/Innovation)
    • 专家推荐必读论文(地标清单)
    • 时间偏好和质量焦点
  • 📑 推荐列表(每篇论文包含):

    • 标题(中英文)
    • 作者列表
    • 发表时间
    • 摘要
    • 综合评分(S_final)
    • 三维评分(创新性/重要性/相关性)
    • arXiv/S2 链接

高级技巧

  • 对话式优化:如果首次推荐不理想,可继续提问:

    • "推荐一些更经典的论文"
    • "侧重于工程实践方面的研究"
    • 系统会结合历史对话上下文优化推荐
  • 知识库增强:上传已读论文到知识库,系统会:

    • 理解你的研究背景
    • 推荐更契合你研究方向的论文
    • 避免重复推荐已读论文

2. 论文助手

  1. 进入「💬 论文助手」页面
  2. 上传文档(可选):
    • 点击「📎 上传文档」上传PDF/PPTX/DOCX等
    • 文件自动解析并提取文本+图像
    • 选择「临时使用」或「添加到知识库」
  3. 提问
    • 输入问题,例如:"这篇论文的主要贡献是什么?"
    • 系统从知识库检索相关内容
    • 生成带来源标注的答案
  4. 对话管理
    • 侧边栏创建新对话、新建文件夹
    • 重命名、移动、删除对话
  5. 对话设置
    • 调整检索Top-K、温度、系统提示词等

3. 知识库管理

  1. 进入「📚 知识库管理」页面
  2. 文件夹操作
    • 创建主题文件夹(如"Transformer"、"联邦学习")
    • 进入文件夹查看内容
  3. 文件操作
    • 批量上传PDF/DOCX等文件
    • 查看、删除、移动文件
    • 预览文本内容
  4. 索引管理
    • 查看索引统计(文档数、块数)
    • 重建索引(文件变动后)

4. 科研规划

  1. 进入「📅 科研规划」页面
  2. 输入研究任务和截止日期(DDL)
  3. 系统生成:
    • 个性化周度研究计划
    • 任务优先级与时间分配建议
    • 知识图谱(论文关系网络)

5. 论文自动整理(命令行工具)

当知识库文件较多且未分类时,使用此工具自动整理:

# 试运行(仅预览,不实际移动)
python organize_papers.py

# 实际执行
python organize_papers.py --execute

工作原理:

  1. 扫描 data/ 目录下所有论文
  2. 使用LLM分析每篇论文的主题
  3. 自动移动到对应主题文件夹(如 Transformer/, Federated_Learning/
  4. 输出整理报告

🔧 配置说明

backend/config.py 核心参数

参数 说明 默认值
OPENAI_API_KEY DashScope API密钥 从环境变量读取
MODEL_NAME 主要文本模型 qwen3-max
MULTIMODAL_GENERATION_MODEL 多模态生成模型 qwen3-vl-plus
OPENAI_EMBEDDING_MODEL 文本Embedding模型 text-embedding-v4
USE_MULTIMODAL_RAG 启用多模态RAG True
USE_HYBRID_RETRIEVAL 启用混合检索(密集+稀疏) True
DENSE_WEIGHT 密集检索权重 0.7
SPARSE_WEIGHT 稀疏检索(BM25)权重 0.3
TOP_K 检索返回的块数 3
CHUNK_SIZE 文本分块大小 800 字符
CHUNK_OVERLAP 块重叠大小 100 字符
ENABLE_IMAGE_EXTRACTION 启用图像提取 False (避免API调用)

🛠️ 开发说明

本地开发

  1. 安装开发依赖
pip install -r requirements.txt
pip install pre-commit  # 可选,代码格式化
  1. 运行测试
# 检索器评估
cd evaluate/retriever_eval
python eval_retriever.py

# 生成器评估
cd evaluate/generator_eval
python eval_generator.py
  1. 代码风格 遵循 PEP 8 规范,使用 blackisort 格式化代码。

贡献流程

请参考 CONTRIBUTING.md

  1. Fork 本仓库
  2. 创建特性分支 (feat/your-feature)
  3. 提交代码 (git commit -m 'feat: add new feature')
  4. 推送分支 (git push origin feat/your-feature)
  5. 提交 Pull Request

分支命名规范

  • feat/<描述> - 新功能
  • fix/<描述> - Bug修复
  • chore/<描述> - 其他维护

Commit 规范

使用 Conventional Commits

  • feat: 新功能
  • fix: Bug修复
  • docs: 文档变更
  • chore: 其他维护

📊 性能与评估

推荐系统性能(核心模块)

基于人工标注测试集(包含 50 个查询,每个查询 20 篇标注论文):

指标 数值 说明
召回率@30 92.3% 预过滤后候选集中相关论文占比
准确率@10 87.5% 最终推荐 Top-10 中相关论文占比
平均相关性得分 4.3/5.0 人工评估(1-5 分制)
地标论文命中率 95%+ LLM 推荐的必读论文被成功检索
用户满意度 4.2/5.0 基于用户反馈(n=30)

对比基线系统提升

  • vs 纯语义检索(单一 Embedding):+28% 准确率
  • vs 单源检索(仅 ArXiv):+35% 召回率
  • vs 无意图理解(关键词匹配):+22% 相关性得分
  • vs 无重排序(仅预过滤):+18% Top-10 准确率

RAG 问答性能

指标 数值
答案准确率 91.2%
来源标注准确率 95%+
答案相关性 4.2/5.0
响应时间 3-8 秒(含检索+生成)

混合检索提升

相比单一语义检索(纯 Dense Embedding):

  • Recall@5: 85%97% (+12%)
  • Recall@10: 72%89% (+17%)
  • MRR(平均倒数排名): 0.680.81 (+0.13)

关键因素

  • BM25 稀疏检索补充长尾关键词
  • 引用量和时效性加权
  • 知识图谱个性化加分

系统性能指标

  • 向量索引构建速度:约 500 页/分钟(含图像提取)
  • 检索延迟:< 200ms(Top-10)
  • LLM 调用次数:每次推荐 2-3 次(意图理解 + 重排序)
  • 并发支持:单机可支持 5-10 个用户同时使用

🐛 常见问题

推荐系统相关

1. 推荐结果不够相关

问题:推荐的论文与我的需求不太匹配 解决

  • 细化查询:明确时间需求("2023年最新")、质量偏好("最具影响力")
  • 调整参数:侧边栏切换质量焦点(Innovative/Influential/Practical)
  • 上传已读论文:将你的相关论文上传到知识库,系统会学习你的研究方向
  • 对话优化:追问"推荐一些更经典的"或"侧重工程实践的研究"

2. 推荐的论文太旧/太新

问题:只想看近期论文,但推荐了很多旧论文 解决

  • 在查询中明确时间:"2023年以后的研究"
  • 侧边栏设置时间偏好为 "Latest"
  • 系统会自动调整时效性权重(α_recency)

3. 地标论文未检索到

问题:系统推荐了必读论文清单,但最终结果中没有 解决

  • 检查网络连接(ArXiv/Semantic Scholar API 可达性)
  • 可能是标题匹配失败(论文已下架或标题变更)
  • 手动搜索论文标题进行验证

4. 推荐速度慢

问题:等待 30 秒以上仍无结果 解决

  • 正常情况推荐耗时 10-20 秒(含意图理解 + 多源检索 + 重排序)
  • 检查 API 配额(DashScope 限流)
  • 减少推荐数量(侧边栏设置为 5-10 篇)
  • 禁用 Semantic Scholar(仅使用 ArXiv)

系统配置相关

5. API调用失败

问题UnauthorizedAPI key not found 解决:检查环境变量 OPENAI_API_KEY 是否正确设置

6. 向量数据库错误

问题Collection not found 解决:进入「📚 知识库管理」,点击「🔄 重建索引」

7. 文件上传失败

问题:PDF无法解析 解决

  • 确保PDF非扫描版(或启用OCR)
  • 检查文件是否损坏
  • 尝试转换为DOCX格式

8. 多模态功能报错

问题:图像提取失败或多模态 Embedding 错误 解决

  • 检查 config.pyENABLE_IMAGE_EXTRACTION 设置
  • 确认已安装 dashscope 库:pip install dashscope
  • 验证 API Key 权限(需支持多模态模型)

📄 许可证

本项目采用 MIT License 开源。


🙏 致谢


📧 联系方式

如有问题或建议,请:


⭐ 如果这个项目对你有帮助,请给我们一个 Star!⭐

Made with ❤️ by Paper-RAG Team

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages