毕业设计课题:基于检索增强生成(Retrieval-Augmented Generation)的个性化智能阅读系统的设计与实现
本项目是一个结合了大语言模型(LLM)与检索增强生成(RAG)技术的智能文档阅读助手。系统旨在解决传统文档阅读中"信息检索难、长文理解慢"的痛点。通过上传 PDF 文档,用户可以与 AI 进行对话,系统会基于文档内容进行精准回答,并提供智能导读、摘要生成等功能。
root_cause 精准定位原因(检索不足/合成不佳),驱动增量重新检索而非全量重刷agent_feedbacks 数据库表,支持离线模式分析Qwen/Qwen3-Embedding-0.6BQwen/Qwen3-Reranker-0.6Bcreatedb -U postgres rag_ai_read
psql -U postgres -d rag_ai_read -c "CREATE EXTENSION IF NOT EXISTS vector;"
cd backend
conda create -n rag-env python=3.10 -y && conda activate rag-env
pip install -r requirements.txt
pip install torch --index-url https://download.pytorch.org/whl/cu121 # GPU 可选
python download_model.py
# 配置 .env 文件(见下方配置说明,必须设置 JWT_SECRET_KEY 和 ADMIN_PASSWORD)
alembic upgrade head # 数据库迁移
python main.py # http://127.0.0.1:8000
cd frontend
pnpm install && pnpm run dev # http://localhost:5173
在 backend/ 目录下创建 .env 文件,核心配置项:
# LLM
MODEL_NAME=deepseek-chat
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.deepseek.com
# 轻量大模型(用于复杂度/意图分类等轻量任务,可选,未配置时回退使用主模型)
# LIGHTWEIGHT_MODEL_NAME=deepseek-chat
# LIGHTWEIGHT_OPENAI_BASE_URL=https://api.deepseek.com
# LIGHTWEIGHT_OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
# 数据库
DATABASE_URL=postgresql+asyncpg://postgres:password@localhost:5432/rag_ai_read
# 认证(必须配置)
JWT_SECRET_KEY=your-secret-key-here
ADMIN_USERNAME=admin
ADMIN_PASSWORD=your-admin-password
# Agent 模式(可选,默认关闭,开启后启用 Agentic RAG 智能推理)
AGENT_ENABLED=true
# 跨语料库 Agentic RAG(可选,默认关闭,可按阶段、用户和 scope 灰度)
AGENT_ENABLE_CROSS_CORPUS=false
AGENT_CROSS_CORPUS_ROLLOUT_STAGE=off
AGENT_CROSS_CORPUS_ALLOWED_USER_IDS=
AGENT_CROSS_CORPUS_ALLOWED_SCOPES=current_document
完整配置参数说明请参阅 部署指南
RAG_AI_READ/
├── backend/ # 后端代码
│ ├── auth/ # 认证授权模块(JWT + bcrypt)
│ │ ├── utils.py # 令牌生成/验证、密码哈希
│ │ ├── dependencies.py # FastAPI 依赖工厂
│ │ └── routers/auth_router.py # 注册/登录/me/改密码 API
│ ├── rag_core/ # RAG 核心模块
│ │ ├── agent/ # Agentic RAG 编排层(LangGraph)
│ │ │ ├── graph.py # 状态图组装(~185 行)
│ │ │ ├── state.py # Agent 状态定义 + create_initial_state()
│ │ │ ├── agent_config.py # AgentConfig 集中配置
│ │ │ ├── agent_service.py # Agent 服务层(流式 SSE + 降级容错)
│ │ │ ├── json_parser.py # 共享 JSON 解析(3 层回退)
│ │ │ ├── checkpoint_utils.py # 持久化 Checkpointer 工厂
│ │ │ ├── semantic_cache.py # Agent 语义缓存
│ │ │ ├── observability.py # 可观测性指标收集
│ │ │ ├── planner.py # 问题分解规划器(递归 + DAG 依赖)
│ │ │ ├── corpus_router.py # 跨语料库路由器
│ │ │ ├── query_rewriter.py # 跨库查询改写器
│ │ │ ├── judge.py # 检索充分性自动评估
│ │ │ ├── sufficient_context_gate.py # 充分性闸门
│ │ │ ├── citation_alignment.py # 引用-陈述对齐检查
│ │ │ ├── reflector.py # 自反思与自我纠错
│ │ │ ├── hallucination_checker.py # NLI 语义级幻觉检测
│ │ │ └── nodes/ # 独立节点模块
│ │ │ ├── base.py # NodeContext 依赖注入容器
│ │ │ ├── routes.py # 条件边路由函数
│ │ │ └── ... # 11 个节点文件
│ │ ├── tools/ # Agent 工具注册模块
│ │ │ ├── retrieval_tool.py # 文档检索工具
│ │ │ ├── generation_tools.py # 摘要/测验生成工具
│ │ │ └── external_tools.py # 外部工具(计算器、时间查询、Web 搜索)
│ │ ├── rag_manager.py # RAG 管理器(核心逻辑,含缓存)
│ │ ├── rag_facade.py # RAG 门面(统一接口层)
│ │ ├── rag_factory.py # RAG 工厂(组件初始化)
│ │ ├── retrieval_service.py # 检索服务(混合检索 + 查询扩展 + 画像融合 + 上下文扩展)
│ │ ├── cross_corpus_retrieval.py # 跨语料库检索服务
│ │ ├── cross_corpus_ranking.py # 跨库排序、归一化、source-aware MMR
│ │ ├── cross_corpus_citations.py # 跨库引用标准化
│ │ ├── generation_service.py # 生成服务(LLM + 画像注入)
│ │ ├── pdf_processor.py # PDF 处理器(文本归一化 + 页眉页脚检测 + 表格提取)
│ │ ├── chunking_strategies.py # 分块策略(可插拔 + Token 感知 + 内容类型检测 + 质量评估)
│ │ ├── hybrid_retriever.py # 混合检索策略(支持 BM25 独立查询)
│ │ ├── bm25_retriever.py # BM25 稀疏检索(jieba 中文分词 + 词元长度加权)
│ │ └── ...
│ ├── services/ # 业务服务层
│ │ ├── user_profile_service.py # 用户画像服务
│ │ ├── corpus_registry_service.py # Corpus Registry 服务
│ │ └── task_service.py # 任务服务
│ ├── routers/ # API 路由层
│ ├── database/ # 数据库模块
│ │ ├── config.py # 数据库连接配置
│ │ ├── session.py # 异步 Session 工厂
│ │ ├── models.py # SQLAlchemy ORM 模型
│ │ ├── repositories/ # Repository 抽象层
│ │ └── migrations/ # Alembic 迁移脚本
│ ├── evaluation/ # 评估模块
│ │ ├── run_baseline.py # Phase 0 单文档基线评估
│ │ └── run_cross_corpus_benchmark.py # 跨语料库 benchmark
│ ├── tests/ # 测试模块
│ │ ├── test_chunking_regression.py # 分块回归测试(26 项)
│ │ ├── test_data/ # 测试数据文档
│ │ └── snapshots/ # 分块快照
│ ├── main.py # FastAPI 主入口
│ └── rag.py # RAG 实例初始化
│
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── components/ # Vue 组件
│ │ ├── composables/ # 组合式函数
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── utils/ # 工具函数
│ │ │ ├── helpers.js # 通用工具函数(debounce、时间格式化等)
│ │ │ ├── logger.js # 日志工具
│ │ │ ├── storage.js # 存储工具
│ │ │ └── admin.js # 管理后台工具
│ │ ├── types/ # 类型定义
│ │ │ └── quiz.d.ts # 核心数据模型 JSDoc 类型
│ │ └── views/ # 页面视图
│ └── ...
│
└── docs/ # 项目文档
├── deployment.md # 部署指南
├── api-reference.md # API 接口文档
├── architecture.md # 系统架构
└── database-migration.md # 数据库迁移指南
| 功能 | 说明 |
|---|---|
| 文档上传与解析 | PDF 上传、文本归一化、分块策略选择、表格提取、进度显示、切片缓存 |
| 智能问答 | 基于文档内容的精准问答,流式输出,多轮对话 |
| Agentic 智能推理 | LLM 自主编排检索策略:ReAct 多步推理、复杂问题分解与去重、Token 感知截断、迭代重检索、自反思纠错、NLI 幻觉检测、意图自适应检索、流式综合生成、语义缓存、持久化对话状态 |
| 跨语料库检索 | 支持当前文档、选定文档集、我的全部文档、自动跨库;展示路由、查询改写、fanout、充分性检查和跨库引用 |
| 流式综合生成 | 子问题并行检索完成后实时流式输出,TTFB 缩短至 3-5 秒,支持预编号引用去重 |
| 意图自适应检索 | 根据意图类型(事实查询/概念解释/对比分析等)动态调节 BM25/Dense 权重与 MMR 参数 |
| 全链路溯源 | 引用标记可点击跳转到 PDF 原文对应位置 |
| 动态难度调整 | CLI 驱动自动切换启蒙/标准/学术三级难度 |
| 用户画像 | 隐式行为采集 → 兴趣画像 → 检索/生成增强 |
| 用户反馈 | Agent 回答赞/踩显式反馈,连续负反馈自动微调检索策略 |
| 智能导读 | 自动生成文档概述、核心要点,支持三档难度 |
| 思维导图 | 基于文档内容自动生成,支持编辑和保存 |
| 智能笔记 | 从 PDF 划选文本添加笔记,自动记录来源位置 |
| 交互测验 | 自动生成测验题目,支持答题和错题分析 |
| 后台管理 | 仪表盘、配置、文档管理、日志、性能监控、画像管理 |
| 用户系统 | 注册登录、JWT 认证、角色管理、数据隔离 |
| 语音输入 | 基于 Web Speech API 的语音转文字,支持中文实时转写 |
| 消息引用回复 | 引用任意消息作为上下文前缀发送追问 |
| 对话分支 | 重新生成时保留历史版本,左右箭头切换对比不同回答 |
| 段落级追问 | 选中 AI 回答中的段落,弹出"针对此段追问"快捷入口 |
| 对话摘要生成 | 一键将整段对话压缩为要点列表,快速回顾核心内容 |
| 快捷短语模板 | 自定义常用提问模板(通俗解释、列出要点等),点击即发送 |
| 消息标记置顶 | 对重要回答添加星标,支持快速筛选和导航 |
| 导出为 Markdown | 对话记录可导出为格式化的 Markdown 文件,便于分享和整理 |
| 输入历史翻页 | 上下箭头翻阅历史发送过的问题,类似终端命令历史 |
| @提及文档章节 | 输入 @ 触发文档目录补全,指定章节范围提问 |
| 文档 | 说明 |
|---|---|
| 部署指南 | 环境要求、数据库/后端/前端部署步骤、完整 .env 配置参考 |
| API 接口文档 | 所有 REST API 端点的详细说明 |
| 系统架构 | 混合检索策略、中文分词与查询扩展、缓存机制、用户画像系统架构 |
| 数据库设计 | 表结构、索引、Repository 抽象层、事务边界 |
MIT License
317 commits
Python
54.9%
Vue
30.9%
JavaScript
13.6%
毕业设计课题:基于检索增强生成(Retrieval-Augmented Generation)的个性化智能阅读系统的设计与实现
本项目是一个结合了大语言模型(LLM)与检索增强生成(RAG)技术的智能文档阅读助手。系统旨在解决传统文档阅读中"信息检索难、长文理解慢"的痛点。通过上传 PDF 文档,用户可以与 AI 进行对话,系统会基于文档内容进行精准回答,并提供智能导读、摘要生成等功能。
root_cause 精准定位原因(检索不足/合成不佳),驱动增量重新检索而非全量重刷agent_feedbacks 数据库表,支持离线模式分析Qwen/Qwen3-Embedding-0.6BQwen/Qwen3-Reranker-0.6Bcreatedb -U postgres rag_ai_read
psql -U postgres -d rag_ai_read -c "CREATE EXTENSION IF NOT EXISTS vector;"
cd backend
conda create -n rag-env python=3.10 -y && conda activate rag-env
pip install -r requirements.txt
pip install torch --index-url https://download.pytorch.org/whl/cu121 # GPU 可选
python download_model.py
# 配置 .env 文件(见下方配置说明,必须设置 JWT_SECRET_KEY 和 ADMIN_PASSWORD)
alembic upgrade head # 数据库迁移
python main.py # http://127.0.0.1:8000
cd frontend
pnpm install && pnpm run dev # http://localhost:5173
在 backend/ 目录下创建 .env 文件,核心配置项:
# LLM
MODEL_NAME=deepseek-chat
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.deepseek.com
# 轻量大模型(用于复杂度/意图分类等轻量任务,可选,未配置时回退使用主模型)
# LIGHTWEIGHT_MODEL_NAME=deepseek-chat
# LIGHTWEIGHT_OPENAI_BASE_URL=https://api.deepseek.com
# LIGHTWEIGHT_OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
# 数据库
DATABASE_URL=postgresql+asyncpg://postgres:password@localhost:5432/rag_ai_read
# 认证(必须配置)
JWT_SECRET_KEY=your-secret-key-here
ADMIN_USERNAME=admin
ADMIN_PASSWORD=your-admin-password
# Agent 模式(可选,默认关闭,开启后启用 Agentic RAG 智能推理)
AGENT_ENABLED=true
# 跨语料库 Agentic RAG(可选,默认关闭,可按阶段、用户和 scope 灰度)
AGENT_ENABLE_CROSS_CORPUS=false
AGENT_CROSS_CORPUS_ROLLOUT_STAGE=off
AGENT_CROSS_CORPUS_ALLOWED_USER_IDS=
AGENT_CROSS_CORPUS_ALLOWED_SCOPES=current_document
完整配置参数说明请参阅 部署指南
RAG_AI_READ/
├── backend/ # 后端代码
│ ├── auth/ # 认证授权模块(JWT + bcrypt)
│ │ ├── utils.py # 令牌生成/验证、密码哈希
│ │ ├── dependencies.py # FastAPI 依赖工厂
│ │ └── routers/auth_router.py # 注册/登录/me/改密码 API
│ ├── rag_core/ # RAG 核心模块
│ │ ├── agent/ # Agentic RAG 编排层(LangGraph)
│ │ │ ├── graph.py # 状态图组装(~185 行)
│ │ │ ├── state.py # Agent 状态定义 + create_initial_state()
│ │ │ ├── agent_config.py # AgentConfig 集中配置
│ │ │ ├── agent_service.py # Agent 服务层(流式 SSE + 降级容错)
│ │ │ ├── json_parser.py # 共享 JSON 解析(3 层回退)
│ │ │ ├── checkpoint_utils.py # 持久化 Checkpointer 工厂
│ │ │ ├── semantic_cache.py # Agent 语义缓存
│ │ │ ├── observability.py # 可观测性指标收集
│ │ │ ├── planner.py # 问题分解规划器(递归 + DAG 依赖)
│ │ │ ├── corpus_router.py # 跨语料库路由器
│ │ │ ├── query_rewriter.py # 跨库查询改写器
│ │ │ ├── judge.py # 检索充分性自动评估
│ │ │ ├── sufficient_context_gate.py # 充分性闸门
│ │ │ ├── citation_alignment.py # 引用-陈述对齐检查
│ │ │ ├── reflector.py # 自反思与自我纠错
│ │ │ ├── hallucination_checker.py # NLI 语义级幻觉检测
│ │ │ └── nodes/ # 独立节点模块
│ │ │ ├── base.py # NodeContext 依赖注入容器
│ │ │ ├── routes.py # 条件边路由函数
│ │ │ └── ... # 11 个节点文件
│ │ ├── tools/ # Agent 工具注册模块
│ │ │ ├── retrieval_tool.py # 文档检索工具
│ │ │ ├── generation_tools.py # 摘要/测验生成工具
│ │ │ └── external_tools.py # 外部工具(计算器、时间查询、Web 搜索)
│ │ ├── rag_manager.py # RAG 管理器(核心逻辑,含缓存)
│ │ ├── rag_facade.py # RAG 门面(统一接口层)
│ │ ├── rag_factory.py # RAG 工厂(组件初始化)
│ │ ├── retrieval_service.py # 检索服务(混合检索 + 查询扩展 + 画像融合 + 上下文扩展)
│ │ ├── cross_corpus_retrieval.py # 跨语料库检索服务
│ │ ├── cross_corpus_ranking.py # 跨库排序、归一化、source-aware MMR
│ │ ├── cross_corpus_citations.py # 跨库引用标准化
│ │ ├── generation_service.py # 生成服务(LLM + 画像注入)
│ │ ├── pdf_processor.py # PDF 处理器(文本归一化 + 页眉页脚检测 + 表格提取)
│ │ ├── chunking_strategies.py # 分块策略(可插拔 + Token 感知 + 内容类型检测 + 质量评估)
│ │ ├── hybrid_retriever.py # 混合检索策略(支持 BM25 独立查询)
│ │ ├── bm25_retriever.py # BM25 稀疏检索(jieba 中文分词 + 词元长度加权)
│ │ └── ...
│ ├── services/ # 业务服务层
│ │ ├── user_profile_service.py # 用户画像服务
│ │ ├── corpus_registry_service.py # Corpus Registry 服务
│ │ └── task_service.py # 任务服务
│ ├── routers/ # API 路由层
│ ├── database/ # 数据库模块
│ │ ├── config.py # 数据库连接配置
│ │ ├── session.py # 异步 Session 工厂
│ │ ├── models.py # SQLAlchemy ORM 模型
│ │ ├── repositories/ # Repository 抽象层
│ │ └── migrations/ # Alembic 迁移脚本
│ ├── evaluation/ # 评估模块
│ │ ├── run_baseline.py # Phase 0 单文档基线评估
│ │ └── run_cross_corpus_benchmark.py # 跨语料库 benchmark
│ ├── tests/ # 测试模块
│ │ ├── test_chunking_regression.py # 分块回归测试(26 项)
│ │ ├── test_data/ # 测试数据文档
│ │ └── snapshots/ # 分块快照
│ ├── main.py # FastAPI 主入口
│ └── rag.py # RAG 实例初始化
│
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── components/ # Vue 组件
│ │ ├── composables/ # 组合式函数
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── utils/ # 工具函数
│ │ │ ├── helpers.js # 通用工具函数(debounce、时间格式化等)
│ │ │ ├── logger.js # 日志工具
│ │ │ ├── storage.js # 存储工具
│ │ │ └── admin.js # 管理后台工具
│ │ ├── types/ # 类型定义
│ │ │ └── quiz.d.ts # 核心数据模型 JSDoc 类型
│ │ └── views/ # 页面视图
│ └── ...
│
└── docs/ # 项目文档
├── deployment.md # 部署指南
├── api-reference.md # API 接口文档
├── architecture.md # 系统架构
└── database-migration.md # 数据库迁移指南
| 功能 | 说明 |
|---|---|
| 文档上传与解析 | PDF 上传、文本归一化、分块策略选择、表格提取、进度显示、切片缓存 |
| 智能问答 | 基于文档内容的精准问答,流式输出,多轮对话 |
| Agentic 智能推理 | LLM 自主编排检索策略:ReAct 多步推理、复杂问题分解与去重、Token 感知截断、迭代重检索、自反思纠错、NLI 幻觉检测、意图自适应检索、流式综合生成、语义缓存、持久化对话状态 |
| 跨语料库检索 | 支持当前文档、选定文档集、我的全部文档、自动跨库;展示路由、查询改写、fanout、充分性检查和跨库引用 |
| 流式综合生成 | 子问题并行检索完成后实时流式输出,TTFB 缩短至 3-5 秒,支持预编号引用去重 |
| 意图自适应检索 | 根据意图类型(事实查询/概念解释/对比分析等)动态调节 BM25/Dense 权重与 MMR 参数 |
| 全链路溯源 | 引用标记可点击跳转到 PDF 原文对应位置 |
| 动态难度调整 | CLI 驱动自动切换启蒙/标准/学术三级难度 |
| 用户画像 | 隐式行为采集 → 兴趣画像 → 检索/生成增强 |
| 用户反馈 | Agent 回答赞/踩显式反馈,连续负反馈自动微调检索策略 |
| 智能导读 | 自动生成文档概述、核心要点,支持三档难度 |
| 思维导图 | 基于文档内容自动生成,支持编辑和保存 |
| 智能笔记 | 从 PDF 划选文本添加笔记,自动记录来源位置 |
| 交互测验 | 自动生成测验题目,支持答题和错题分析 |
| 后台管理 | 仪表盘、配置、文档管理、日志、性能监控、画像管理 |
| 用户系统 | 注册登录、JWT 认证、角色管理、数据隔离 |
| 语音输入 | 基于 Web Speech API 的语音转文字,支持中文实时转写 |
| 消息引用回复 | 引用任意消息作为上下文前缀发送追问 |
| 对话分支 | 重新生成时保留历史版本,左右箭头切换对比不同回答 |
| 段落级追问 | 选中 AI 回答中的段落,弹出"针对此段追问"快捷入口 |
| 对话摘要生成 | 一键将整段对话压缩为要点列表,快速回顾核心内容 |
| 快捷短语模板 | 自定义常用提问模板(通俗解释、列出要点等),点击即发送 |
| 消息标记置顶 | 对重要回答添加星标,支持快速筛选和导航 |
| 导出为 Markdown | 对话记录可导出为格式化的 Markdown 文件,便于分享和整理 |
| 输入历史翻页 | 上下箭头翻阅历史发送过的问题,类似终端命令历史 |
| @提及文档章节 | 输入 @ 触发文档目录补全,指定章节范围提问 |
| 文档 | 说明 |
|---|---|
| 部署指南 | 环境要求、数据库/后端/前端部署步骤、完整 .env 配置参考 |
| API 接口文档 | 所有 REST API 端点的详细说明 |
| 系统架构 | 混合检索策略、中文分词与查询扩展、缓存机制、用户画像系统架构 |
| 数据库设计 | 表结构、索引、Repository 抽象层、事务边界 |
MIT License
317 commits
Python
54.9%
Vue
30.9%
JavaScript
13.6%