Multi-format RAG System 是一个支持多格式文档接入的知识库问答系统,覆盖文档解析、向量化、parent-child chunking、LanceDB 持久化、混合检索、引用溯源、FastAPI 服务和 Streamlit 前端。
- 多格式解析:PDF、Word、TXT/Markdown、HTML、Excel/CSV、图片 OCR。
- Embedding:基于 BGE-M3 和 SentenceTransformers,支持 GPU、batch encoding 和向量归一化。
- Chunking:支持 parent-child chunking,召回小片段后回填父片段上下文。
- Vector Store:基于 LanceDB 本地持久化,支持新增、删除、来源管理和向量检索。
- Hybrid Search:融合向量检索与全文检索,提升技术文档和长文档召回质量。
- LLM Provider:支持 OpenAI、Azure OpenAI、DeepSeek、智谱、通义千问、Moonshot、SiliconFlow、Ollama 和自定义 OpenAI-compatible API。
- API/UI:提供 FastAPI 接口和 Streamlit 交互页面,支持文档上传、流式问答和引用来源返回。
.
├── api/ # FastAPI 服务
├── config/ # 环境变量和配置
├── core/
│ ├── loaders/ # 多格式文档加载
│ ├── embedder.py # BGE-M3 向量化
│ ├── splitter.py # parent-child chunking
│ ├── vector_store.py # LanceDB 封装
│ └── rag_chain.py # RAG 主链路
├── ui/ # Streamlit 前端
├── .env.example
├── main.py
└── requirements.txt
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env编辑 .env,填入模型服务和 embedding 配置:
LLM_PROVIDER=openai
LLM_API_KEY=sk-your-api-key
LLM_BASE_URL=https://api.openai.com/v1
LLM_MODEL=gpt-4.1
EMBEDDING_MODEL=BAAI/bge-m3
LANCE_DB_PATH=./data/lancedb查看配置:
python main.py启动 API:
uvicorn api.main:app --reload --host 0.0.0.0 --port 8000启动 UI:
streamlit run ui/app.pyGET /health: 服务状态POST /upload: 上传文档并写入知识库POST /chat: 知识库问答POST /chat/stream: 流式问答GET /docs: 文档来源列表DELETE /docs: 删除文档GET /providers: 支持的 LLM ProviderGET /config: 当前配置
仓库不包含本地知识库数据、OCR 中间文件、向量库和 API Key。运行后生成的数据默认位于 data/,已通过 .gitignore 排除。
- 构建完整 RAG 工程链路:多格式解析、BGE-M3 向量化、LanceDB 持久化、混合检索、引用溯源。
- 设计 parent-child chunking,提升长文档问答的上下文完整性。
- 封装 FastAPI 与 Streamlit,实现文档上传、知识库管理、流式问答和多模型 Provider 切换。