Skip to content

Repository files navigation

📚 PDF 知识库问答系统

基于 LangChain + ChromaDB + 智谱 AI 构建的轻量级 PDF 知识库问答系统。用户上传 PDF 文件后,系统自动解析、向量化并存入向量数据库,支持自然语言问答并返回参考来源。

🏗️ 项目架构

┌─────────────────────────────────────────────────────┐
│                    Streamlit UI                      │
│                   (app.py)                           │
├─────────────────────────────────────────────────────┤
│                    RAG 核心层                        │
│  ┌─────────────┬──────────────┬─────────────────┐   │
│  │document_    │ vector_store │     chain.py    │   │
│  │loader.py    │  .py         │  (检索 + 生成)   │   │
│  └─────────────┴──────────────┴─────────────────┘   │
├─────────────────────────────────────────────────────┤
│                   外部服务                           │
│  ┌───────────────┬─────────────────────────────┐   │
│  │  智谱 AI API   │   ChromaDB 向量数据库       │   │
│  └───────────────┴─────────────────────────────┘   │
└─────────────────────────────────────────────────────┘

📁 项目结构

├── app.py                          # Streamlit Web 界面
├── rag/
│   ├── __init__.py                 # 模块导出
│   ├── document_loader.py          # PDF 加载 + 文本切分
│   ├── vector_store.py             # ChromaDB 向量库管理
│   └── chain.py                    # RAG 链:检索 + 生成
├── tests/
│   ├── __init__.py
│   ├── conftest.py                 # 共享 fixtures
│   ├── test_document_loader.py     # 文档加载测试
│   ├── test_vector_store.py        # 向量库测试
│   ├── test_chain.py               # RAG 链测试
│   └── test_integration.py         # 集成测试
├── .github/workflows/ci.yml        # CI 配置
├── .env                            # 智谱 API Key(需自行配置)
├── .gitignore
├── requirements.txt
└── README.md

🚀 快速开始

1. 环境准备

# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
# Windows PowerShell:
.\venv\Scripts\Activate.ps1
# Windows CMD:
.\venv\Scripts\activate.bat
# Linux/macOS:
source venv/bin/activate

2. 安装依赖

pip install -r requirements.txt

3. 配置 API Key

.env 文件中配置智谱 AI API Key:

ZHIPU_API_KEY=your_api_key_here

4. 启动应用

streamlit run app.py

浏览器访问 http://localhost:8501 即可使用。

🧪 运行测试

# 运行所有测试
pytest tests/ -v

# 运行测试并生成覆盖率报告
pytest tests/ -v --cov=rag --cov-report=term-missing

# 生成 HTML 覆盖率报告
pytest tests/ --cov=rag --cov-report=html

测试覆盖范围

模块 测试文件 测试内容
document_loader test_document_loader.py PDF 加载、切分、参数校验
vector_store test_vector_store.py Embedding、向量库 CRUD、Mock 智谱 API
chain test_chain.py 检索、Prompt 构建、生成、去重、Mock 智谱 API
集成 test_integration.py 全流程测试、异常处理、边界情况

⚙️ 技术栈

组件 技术 说明
前端 UI Streamlit Python 原生 Web 框架
LLM 框架 LangChain RAG 应用开发框架
向量数据库 ChromaDB 轻量级嵌入式向量数据库
Embedding 智谱 embedding-3 2048 维向量,中文优化
LLM 智谱 glm-4 支持长上下文的大模型
PDF 解析 PyPDF 纯 Python PDF 解析
测试 pytest + mock 单元测试 + 集成测试
CI/CD GitHub Actions 多版本 Python 自动化测试

🔑 核心设计

RAG 流程

  1. 文档加载PyPDFLoader 解析 PDF → RecursiveCharacterTextSplitter 按中文标点切分
  2. 向量化:调用智谱 embedding-3 生成 2048 维向量 → 存入 ChromaDB
  3. 检索:用户问题 → similarity_search 检索 Top-K 相关文档块
  4. 生成:拼接 Prompt(含参考资料来源)→ 调用智谱 glm-4 生成回答
  5. 展示:返回回答 + 参考来源(文档名 + 页码)

测试策略

  • 单元测试:所有外部依赖(智谱 API、ChromaDB)使用 Mock,不调用真实 API
  • 集成测试:模拟完整 RAG 流程,验证模块协作
  • 覆盖率:核心模块目标 80%+ 覆盖率
  • CI 自动化:Push/PR 触发 GitHub Actions,多 Python 版本测试

📝 License

MIT

About

PDF知识库问答系统 - 基于LangChain+ChromaDB+智谱AI的RAG应用

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages