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
三阶段流程说明:
- 阶段1 意图理解:RAG上下文化 + 5路径搜索(Core/Divergent/Anchor/Foundation/Innovation)+ 专家必读清单
- 阶段2 动态检索:ArXiv+Semantic Scholar并行检索 + 精确标题匹配 + 6维度评分Top-30
- 阶段3 混合重排序:LLM三维评分(创新/重要/相关)+ 自适应权重调整
为什么是三阶段?
- ❌ 传统方法痛点:关键词匹配无法理解"最新""创新性"等隐式需求
- ✅ 意图理解:LLM 解析时间偏好、质量焦点、研究背景
- ✅ 动态检索:多路径并行 + 自适应排序策略(时效性 vs 引用量)
- ✅ 智能重排序:个性化权重调整,平衡创新性、影响力、相关性
Paper-RAG 采用 三阶段意图感知推荐管道,解决传统推荐系统的三大痛点:
- 🎯 深度意图理解:克服关键词检索的浅层理解问题(如"最新""创新性"等隐式需求)
- 🔄 动态检索策略:根据用户偏好(时效性 vs 经典性)自适应调整排序策略
- 🌐 多源数据整合:融合 arXiv、Semantic Scholar 和个人知识库,避免遗漏重要论文
详细技术方案见 推荐系统架构 章节
- 文档上传:支持 PDF、PPTX、DOCX、TXT、Markdown 等多种格式
- 临时文件处理:对话中上传的文件可临时使用,也可添加到知识库
- 多模态理解:自动提取PDF中的图表并生成描述,增强检索效果
- 来源标注:回答中标注信息来源(文件名和页码),保证可溯源性
- 对话管理:支持多对话会话、文件夹分组、重命名、移动等
- 文件夹组织:创建主题文件夹,分类管理论文
- 向量索引:自动构建和更新向量数据库索引
- 文件操作:上传、删除、移动、查看文件内容
- 自动分类:使用
organize_papers.py工具自动整理现有论文
- 任务管理:输入研究任务和DDL,系统自动安排
- 周度计划:LLM生成个性化的周度研究计划
- 知识图谱:可视化展示论文之间的关联关系
- Python 3.8+
- OpenAI兼容API(阿里云DashScope)
- 约2GB磁盘空间(用于向量数据库)
- 克隆仓库
git clone https://github.com/JunjieYu28/Paper-RAG.git
cd Paper-RAG- 安装依赖
pip install -r requirements.txt- 配置环境变量
# Windows
set OPENAI_API_KEY=your_dashscope_api_key
# Linux/Mac
export OPENAI_API_KEY=your_dashscope_api_key💡 获取API Key:访问 阿里云DashScope 注册并获取API密钥
- 启动应用
streamlit run app.py- 访问界面
浏览器自动打开
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[返回标注答案]
Paper-RAG 的推荐引擎是本项目的核心创新,采用 LLM 驱动的三阶段管道设计,实现个性化、高质量的论文推荐。
用户查询
↓
┌─────────────────────────────────────────────┐
│ 阶段 1: 意图理解 (Intent Understanding) │
│ - RAG 上下文化 │
│ - 多路径搜索策略生成 │
│ - 语义地标提取(专家必读清单) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 阶段 2: 动态检索 (Dynamic Retrieval) │
│ - 多路径并行检索(ArXiv + Semantic Scholar)│
│ - 地标狙击(精确标题匹配) │
│ - 去重 + 时间过滤 │
│ - 混合预过滤(6维度评分) │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 阶段 3: 混合重排序 (Hybrid Reranking) │
│ - LLM 多维度评分(创新性/重要性/相关性) │
│ - 个性化最终评分(自适应权重) │
│ - 返回 Top-N 推荐结果 │
└─────────────────────────────────────────────┘
↓
最终推荐列表
目标:深度理解用户查询背后的研究意图,而非简单的关键词匹配。
从用户的本地知识库和最近对话历史中检索 Top-K 文档片段,作为背景上下文传递给 LLM,实现:
- 个性化理解(基于用户已阅读的论文领域)
- 对话连贯性(考虑历史问答上下文)
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 | 平衡各项指标 |
LLM 作为学术专家,针对特定子领域推荐 3-6 篇必读论文的精确英文标题,例如:
- "Attention Is All You Need"
- "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale"
这些地标论文将在阶段 2 进行精确狙击检索,确保不会遗漏重要文献。
目标:从多个数据源智能检索候选论文,并进行初步质量过滤。
根据阶段 1 生成的多个查询,在以下数据源并行检索:
| 数据源 | 排序策略 | 适用场景 |
|---|---|---|
| ArXiv | 按提交时间排序 | 获取最新研究(Innovation/Latest) |
| Semantic Scholar | 按引用量排序 | 获取经典论文(Anchor/Foundational) |
| 混合相关性 | 按相关性排序 | 核心主题检索(Core/Divergent) |
自适应排序逻辑:
anchor/foundational查询 → Semantic Scholar 按引用量排序innovation/latest查询 → ArXiv 按提交时间排序divergent/core查询 → 按相关性排序
对于阶段 1 提取的每个地标论文标题,执行多级精确匹配:
- 精确标题匹配
- 关键词搜索
- 标题变体匹配
- 宽松搜索
验证条件:标题相似度 > 0.6(使用语义向量计算)
- 去重:合并所有检索结果,按标题相似度 > 0.85 去重
- 硬时间约束:根据意图理解中的时间偏好(如 "2023-"、"2020-2023")严格过滤
使用 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 候选论文进入最终重排序。
目标:使用 LLM 进行精细化的多维度质量评估,生成个性化最终排序。
将 Top-30 候选论文的标题、摘要、引用量等信息传递给 LLM,对每篇论文在以下维度打分(0-10 分):
| 评分维度 | 说明 |
|---|---|
| S_innovation(创新性) | 原创性 vs 渐进式改进 |
| S_importance(重要性) | 学术地位与影响力 |
| S_relevance(相关性) | 与查询意图的契合度 |
根据用户的质量焦点和时间偏好,动态调整权重:
基础评分公式:
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 |
按 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% 相关性得分
-
进入「📑 论文推荐」页面
-
在输入框输入研究需求,支持多种表达方式:
示例查询:
- 明确主题:"Transformer在计算机视觉中的应用"
- 时间需求:"2023年最新的多模态大模型"
- 质量偏好:"联邦学习领域最具影响力的论文"
- 创新导向:"图神经网络的创新性研究"
- 综合表述:"我想了解扩散模型的基础理论和最新进展"
-
(可选)侧边栏高级设置:
- 时间偏好:Latest(最新)/ Classic(经典)/ Any(不限)
- 质量焦点:Innovative(创新性)/ Influential(影响力)/ Practical(实用性)/ Balanced(平衡)
- 推荐数量:5-30 篇
- 检索范围:启用/禁用 Semantic Scholar
-
点击「🔍 获取推荐」
系统将返回以下信息:
-
📊 意图理解报告:
- 核心主题关键词
- 相关领域扩展
- 5 条搜索查询(Core/Divergent/Anchor/Foundation/Innovation)
- 专家推荐必读论文(地标清单)
- 时间偏好和质量焦点
-
📑 推荐列表(每篇论文包含):
- 标题(中英文)
- 作者列表
- 发表时间
- 摘要
- 综合评分(S_final)
- 三维评分(创新性/重要性/相关性)
- arXiv/S2 链接
-
对话式优化:如果首次推荐不理想,可继续提问:
- "推荐一些更经典的论文"
- "侧重于工程实践方面的研究"
- 系统会结合历史对话上下文优化推荐
-
知识库增强:上传已读论文到知识库,系统会:
- 理解你的研究背景
- 推荐更契合你研究方向的论文
- 避免重复推荐已读论文
- 进入「💬 论文助手」页面
- 上传文档(可选):
- 点击「📎 上传文档」上传PDF/PPTX/DOCX等
- 文件自动解析并提取文本+图像
- 选择「临时使用」或「添加到知识库」
- 提问:
- 输入问题,例如:"这篇论文的主要贡献是什么?"
- 系统从知识库检索相关内容
- 生成带来源标注的答案
- 对话管理:
- 侧边栏创建新对话、新建文件夹
- 重命名、移动、删除对话
- 对话设置:
- 调整检索Top-K、温度、系统提示词等
- 进入「📚 知识库管理」页面
- 文件夹操作:
- 创建主题文件夹(如"Transformer"、"联邦学习")
- 进入文件夹查看内容
- 文件操作:
- 批量上传PDF/DOCX等文件
- 查看、删除、移动文件
- 预览文本内容
- 索引管理:
- 查看索引统计(文档数、块数)
- 重建索引(文件变动后)
- 进入「📅 科研规划」页面
- 输入研究任务和截止日期(DDL)
- 系统生成:
- 个性化周度研究计划
- 任务优先级与时间分配建议
- 知识图谱(论文关系网络)
当知识库文件较多且未分类时,使用此工具自动整理:
# 试运行(仅预览,不实际移动)
python organize_papers.py
# 实际执行
python organize_papers.py --execute工作原理:
- 扫描
data/目录下所有论文 - 使用LLM分析每篇论文的主题
- 自动移动到对应主题文件夹(如
Transformer/,Federated_Learning/) - 输出整理报告
| 参数 | 说明 | 默认值 |
|---|---|---|
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调用) |
- 安装开发依赖
pip install -r requirements.txt
pip install pre-commit # 可选,代码格式化- 运行测试
# 检索器评估
cd evaluate/retriever_eval
python eval_retriever.py
# 生成器评估
cd evaluate/generator_eval
python eval_generator.py- 代码风格
遵循 PEP 8 规范,使用
black和isort格式化代码。
请参考 CONTRIBUTING.md:
- Fork 本仓库
- 创建特性分支 (
feat/your-feature) - 提交代码 (
git commit -m 'feat: add new feature') - 推送分支 (
git push origin feat/your-feature) - 提交 Pull Request
feat/<描述>- 新功能fix/<描述>- Bug修复chore/<描述>- 其他维护
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 准确率
| 指标 | 数值 |
|---|---|
| 答案准确率 | 91.2% |
| 来源标注准确率 | 95%+ |
| 答案相关性 | 4.2/5.0 |
| 响应时间 | 3-8 秒(含检索+生成) |
相比单一语义检索(纯 Dense Embedding):
- Recall@5: 85% → 97% (+12%)
- Recall@10: 72% → 89% (+17%)
- MRR(平均倒数排名): 0.68 → 0.81 (+0.13)
关键因素:
- BM25 稀疏检索补充长尾关键词
- 引用量和时效性加权
- 知识图谱个性化加分
- 向量索引构建速度:约 500 页/分钟(含图像提取)
- 检索延迟:< 200ms(Top-10)
- LLM 调用次数:每次推荐 2-3 次(意图理解 + 重排序)
- 并发支持:单机可支持 5-10 个用户同时使用
问题:推荐的论文与我的需求不太匹配 解决:
- 细化查询:明确时间需求("2023年最新")、质量偏好("最具影响力")
- 调整参数:侧边栏切换质量焦点(Innovative/Influential/Practical)
- 上传已读论文:将你的相关论文上传到知识库,系统会学习你的研究方向
- 对话优化:追问"推荐一些更经典的"或"侧重工程实践的研究"
问题:只想看近期论文,但推荐了很多旧论文 解决:
- 在查询中明确时间:"2023年以后的研究"
- 侧边栏设置时间偏好为 "Latest"
- 系统会自动调整时效性权重(α_recency)
问题:系统推荐了必读论文清单,但最终结果中没有 解决:
- 检查网络连接(ArXiv/Semantic Scholar API 可达性)
- 可能是标题匹配失败(论文已下架或标题变更)
- 手动搜索论文标题进行验证
问题:等待 30 秒以上仍无结果 解决:
- 正常情况推荐耗时 10-20 秒(含意图理解 + 多源检索 + 重排序)
- 检查 API 配额(DashScope 限流)
- 减少推荐数量(侧边栏设置为 5-10 篇)
- 禁用 Semantic Scholar(仅使用 ArXiv)
问题:Unauthorized 或 API key not found
解决:检查环境变量 OPENAI_API_KEY 是否正确设置
问题:Collection not found
解决:进入「📚 知识库管理」,点击「🔄 重建索引」
问题:PDF无法解析 解决:
- 确保PDF非扫描版(或启用OCR)
- 检查文件是否损坏
- 尝试转换为DOCX格式
问题:图像提取失败或多模态 Embedding 错误 解决:
- 检查
config.py中ENABLE_IMAGE_EXTRACTION设置 - 确认已安装
dashscope库:pip install dashscope - 验证 API Key 权限(需支持多模态模型)
本项目采用 MIT License 开源。
- Streamlit - 优雅的Python Web框架
- ChromaDB - 轻量级向量数据库
- Semantic Scholar - 学术论文搜索与引用数据
- 阿里云DashScope - 提供Qwen系列模型API
- arXiv - 开放获取的科研论文库
如有问题或建议,请:
- 提交 Issue
⭐ 如果这个项目对你有帮助,请给我们一个 Star!⭐
Made with ❤️ by Paper-RAG Team