Skip to content

python012/Minimal-RAG-for-PDF

Repository files navigation

# 本地 PDF RAG 问答系统

一个基于 Python + LangChain + ChromaDB + 阿里通义 Qwen 的本地 RAG(Retrieval-Augmented Generation)项目,支持上传中文 PDF 文档(尤其是由 Word 转 PDF 的报告类文件),构建知识库后可在浏览器中进行智能问答。

当前切片策略:**每页 PDF 一个 chunk**(26 页 PDF → 26 个 chunk),适合中文企业报告、政策文件等结构化文档,检索准确率高、可追溯页码。

## 功能特性

- 支持中文 PDF(由 Word 转 PDF 的报告最优)
- 使用阿里云 DashScope text-embedding-v4 向量化 + Qwen Plus 生成答案
- ChromaDB 本地持久化向量库
- Streamlit 提供简洁聊天网页界面
- 配置全部通过 `.env` 文件管理
- 提供调试脚本 `query_chroma.py` 查看任意 chunk 完整内容和向量

## 前置要求

- macOS / Linux / Windows(已测试 macOS)
- Python 3.10+(推荐 3.12)
- Homebrew(macOS 用户强烈推荐)

## 安装步骤

### 1. 安装系统依赖

#### macOS(推荐使用 Homebrew)
```bash
# 安装 Poppler(PDF 解析必需)
brew install poppler

# 安装 Tesseract OCR + 中文语言包(消除 Unstructured 警告,提升扫描件识别能力)
brew install tesseract
brew install tesseract-lang   # 包含 chi_sim(简体中文)

Linux(Ubuntu/Debian 示例)

sudo apt update
sudo apt install poppler-utils tesseract-ocr libtesseract-dev tesseract-ocr-chi-sim

Windows

2. 创建项目目录并克隆/复制代码

mkdir rag-for-pdf && cd rag-for-pdf
# 将本项目的 Python 文件放入当前目录

3. 创建虚拟环境并安装 Python 依赖

python -m venv venv
source venv/bin/activate    # Windows: venv\Scripts\activate

pip install langchain langchain-community langchain-chroma \
             dashscope unstructured[pdf] streamlit chromadb \
             python-dotenv

4. 获取阿里云 DashScope API Key

  1. 登录阿里云百炼平台:https://dashscope.aliyun.com
  2. 创建或查看 API Key(免费试用有额度)
  3. 复制 Key(格式类似 sk-xxxxxx

5. 配置 .env 文件

在项目根目录创建 .env 文件,内容如下(根据实际情况修改):

# 阿里云 DashScope API Key(必须)
DASHSCOPE_API_KEY=sk-你的真实APIKey

# PDF 文件夹(存放要处理的 PDF)
PDF_FOLDER=docs

# Chroma 向量库保存路径
CHROMA_DB_PATH=chroma_db

# 切片参数(中文报告推荐值,可根据需要调大)
CHUNK_SIZE=2200
CHUNK_OVERLAP=500

# Unstructured OCR 语言设置(优先中文)
UNSTRUCTURED_LANGUAGES=["chi_sim", "eng"]

6. 准备 PDF 文件

将你的 PDF 文件放入 docs/ 目录(项目会自动创建该文件夹)。

使用流程

1. 构建向量库(只需执行一次,或 PDF 更新后重新执行)

# 删除旧向量库(推荐首次或 PDF 变更时)
rm -rf chroma_db

python build_vectorstore.py

脚本会自动:

  • 加载 PDF
  • 按页合并内容(一页一个大文档)
  • 切片(默认约等于页数个 chunk)
  • 向量化并保存到本地

2. (可选)调试向量库内容

python query_chroma.py

可交互式搜索 chunk 或查看指定 chunk_id 的完整内容。

3. 启动网页问答界面

streamlit run app.py

浏览器会自动打开(通常 http://localhost:8501),即可像 ChatGPT 一样提问 PDF 内容。

项目文件说明

  • build_vectorstore.py:构建向量库主脚本
  • app.py:Streamlit 网页问答界面
  • query_chroma.py:调试用,查看 chunk 内容和向量
  • .env:配置文件
  • docs/:存放 PDF 文件
  • chroma_db/:自动生成的向量库(git 可忽略)

常见问题

  • 警告 “No languages specified, defaulting to English” → 已通过 .env 中的 UNSTRUCTURED_LANGUAGES 解决
  • chunk 太碎 → 当前“一页一个 chunk”策略已优化
  • 想处理更多 PDF → 直接放进 docs/,删除 chroma_db 后重新构建即可
  • 向量库过大 → 可调大 CHUNK_SIZE,减少 chunk 数量

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages