基于 FAISS 向量库和 GLM-4.5-air 的科研论文问答系统,支持混合检索(BM25 + 向量)和通用问答。
- Python 3.10+
- Java 11+ (必须配置在系统 PATH 中,OpenDataLoader 核心依赖)
# Ubuntu/Debian
sudo apt install openjdk-11-jdk
# CentOS/RHEL
sudo yum install java-11-openjdk
# macOS
brew install openjdk@11
# 验证安装
java -versionpython3.12 -m venv .venv
source .venv/bin/activate # Linux/macOS
# 或
.venv\Scripts\activate # Windowspip install -r requirements.txt# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件,填入配置信息配置示例:
# Embedding 配置
EMBEDDING_MODEL=embedding-3
EMBEDDING_DIM=1024
EMBEDDING_API_KEY=your_embedding_api_key_here
EMBEDDING_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
# LLM 配置
LLM_MODEL=glm-4.5-air
LLM_TEMPERATURE=0.3
LLM_MAX_TOKENS=2000
LLM_API_KEY=your_llm_api_key_here
LLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
# 检索配置
RETRIEVAL_BM25_K=10
RETRIEVAL_VECTOR_K=10
RETRIEVAL_RRF_K=60
# 分块配置
CHUNKING_MIN_SIZE=500
CHUNKING_MAX_SIZE=1000
CHUNKING_OVERLAP=100
CHUNKING_SKIP_FORMULAS=truemkdir -p data/dict
echo -e "深度学习\n神经网络\n注意力机制\nTransformer" > data/dict/science_dict.txt# 将 PDF 论文放入 data/papers/ 目录
python src/cli.py build --paper data/papers/your_paper.pdfpython src/qa_system.py# 从 PDF 构建(单个文件)
python src/cli.py build --paper <pdf_path>
# 从 PDF 构建(批量处理整个目录)
python src/cli.py build --paper-dir <pdf_directory>
# 从 JSON 构建(单个文件)
python src/cli.py build-from-json --json-path <json_path>
# 从 JSON 构建(批量处理整个目录)
python src/cli.py build-from-json --json-dir <json_directory>
# 追加到现有向量库(而非覆盖)
python src/cli.py build --paper <pdf_path> --append
python src/cli.py build-from-json --json-path <json_path> --append# 列出目录中的 PDF 文件
python src/cli.py list-files --dir data/papers --extension pdf
# 列出目录中的 JSON 文件
python src/cli.py list-files --dir data/json_output --extension json
# 查看向量库信息
python src/cli.py info
# 清空向量库
python src/cli.py clear# 1. 查看 data/papers 目录中的 PDF 文件
python src/cli.py list-files --dir data/papers --extension pdf
# 2. 批量构建向量库
python src/cli.py build --paper-dir data/papers/
# 3. 查看构建结果
python src/cli.py info
# 4. 添加新的 PDF 文件(追加模式)
python src/cli.py build --paper data/papers/new_paper.pdf --append# RAG 模式(基于向量库)
python src/qa_system.py --mode rag
# 通用模式(不使用向量库)
python src/qa_system.py --mode general
# 自动模式(默认)
python src/qa_system.py# 运行所有测试
pytest
# 运行特定测试
pytest tests/test_chunking.py
# 查看覆盖率
pytest --cov=src tests/.
├── src/
│ ├── core/ # 核心模块(向量库、检索器、Embedding)
│ ├── loaders/ # 文档加载
│ ├── chunking/ # 分块处理
│ ├── llm/ # LLM 客户端
│ ├── cli.py # 命令行工具
│ └── qa_system.py # 问答系统
├── data/
│ ├── papers/ # PDF 论文
│ ├── dict/ # 科研词典
│ └── metadata.json # 元数据存储
├── tests/ # 测试文件
├── .env # 环境变量配置
├── .env.example # 环境变量模板
└── requirements.txt # 依赖列表
所有配置通过 .env 文件进行管理:
EMBEDDING_MODEL: 模型名称(embedding-3)EMBEDDING_DIM: 向量维度(512/1024/2048)EMBEDDING_API_KEY: API KeyEMBEDDING_BASE_URL: API 基础 URL(用于代理或私有部署)
LLM_MODEL: 模型名称(glm-4.5-air / glm-4-plus / glm-4-flash 等)LLM_TEMPERATURE: 温度参数LLM_MAX_TOKENS: 最大生成 token 数LLM_API_KEY: API KeyLLM_BASE_URL: API 基础 URL(用于代理或私有部署)
RETRIEVAL_BM25_K: BM25 检索 top-kRETRIEVAL_VECTOR_K: 向量检索 top-kRETRIEVAL_RRF_K: RRF 合并参数RETRIEVAL_CUSTOM_DICT_PATH: BM25 自定义词典路径
CHUNKING_MIN_SIZE: 最小块大小(token 数)CHUNKING_MAX_SIZE: 最大块大小CHUNKING_OVERLAP: 截断时的重叠大小CHUNKING_SKIP_FORMULAS: 是否过滤公式块
- 向量数据库: FAISS
- 检索方式: BM25 + 向量混合检索
- Embedding: embedding-3
- LLM: GLM-4.5-air
- 文档解析: OpenDataLoader
MIT