基于 LangChain + RAG(检索增强生成) 架构的企业内部文档智能问答系统。
- 📄 多格式支持: PDF、DOCX、TXT、Markdown 等常见文档格式
- 🔍 语义检索: 基于向量相似度的智能文档检索
- 🤖 双 LLM 后端: 支持 Ollama 本地模型 和 OpenAI 兼容 API,可自由切换
- 💻 Web 界面: 基于 Gradio 的友好聊天界面
- 💾 持久化存储: ChromaDB 向量数据库,索引一次,持久使用
- 🔒 完全离线: 使用本地嵌入模型(sentence-transformers),无需外部 API
# 安装 uv(如已安装可跳过)
pip install uv
# 同步依赖
uv sync# 复制配置文件
cp .env.example .env
# 编辑 .env 选择 LLM 后端
# 方式一:使用 Ollama(推荐,完全离线)
LLM_PROVIDER=ollama
OLLAMA_MODEL=qwen2.5:7b
# 方式二:使用 OpenAI 兼容 API
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-your-key
OPENAI_MODEL=gpt-4o-mini# 将文档放入 docs/ 目录
# 然后运行索引
uv run python scripts/ingest.py
# 如需清空重建
uv run python scripts/ingest.py --resetuv run python src/app.py
# 打开浏览器访问 http://localhost:7860.
├── pyproject.toml # uv 项目配置
├── .env.example # 配置模板
├── docs/ # 文档存放目录(放 PDF/DOCX/TXT/MD 文件)
├── data/chroma/ # ChromaDB 向量数据库
├── src/
│ ├── config.py # 统一配置管理
│ ├── document_loader.py # 文档加载器
│ ├── text_splitter.py # 文本分割器
│ ├── embeddings.py # 嵌入模型
│ ├── vector_store.py # 向量存储
│ ├── llm.py # LLM 工厂
│ ├── rag_chain.py # RAG 链
│ └── app.py # Web UI 入口
└── scripts/
└── ingest.py # 文档索引脚本
| 环境变量 | 默认值 | 说明 |
|---|---|---|
LLM_PROVIDER |
ollama |
LLM 提供者: ollama / openai |
OLLAMA_BASE_URL |
http://localhost:11434 |
Ollama 服务地址 |
OLLAMA_MODEL |
qwen2.5:7b |
Ollama 模型名称 |
OPENAI_API_KEY |
— | OpenAI API Key |
OPENAI_BASE_URL |
https://api.openai.com/v1 |
API 地址(支持代理) |
OPENAI_MODEL |
gpt-4o-mini |
OpenAI 模型名称 |
EMBEDDING_MODEL |
all-MiniLM-L6-v2 |
嵌入模型(HuggingFace) |
CHUNK_SIZE |
500 |
文本分割大小 |
CHUNK_OVERLAP |
50 |
文本分割重叠量 |
RETRIEVER_TOP_K |
4 |
检索返回文档数 |
- 环境管理: uv
- 框架: LangChain
- 向量数据库: ChromaDB
- 嵌入模型: sentence-transformers
- LLM: Ollama / OpenAI 兼容 API
- Web UI: Gradio
# 安装 Ollama
# 参见: https://ollama.com
# 下载模型(推荐 qwen2.5 系列,中文友好)
ollama pull qwen2.5:7b
# 或使用其他模型
ollama pull llama3.1:8b
ollama pull qwen3:8b