










VipRAG 是一个面向小规模正式服务的中文医学指南检索增强生成(RAG)项目。系统使用在线 MinerU 解析 PDF、DashScope 生成文本向量、Qdrant 检索、MySQL 保存文档与任务 状态,并通过千问生成带来源的回答。以《中国心血管病风险评估和管理指南.pdf》做为知识库,构建RAG系统,模拟生产环境,部署成多人使用、长期运行的 FastAPI 服务,直接采用 Qdrant 向量库
项目不需要 GPU。
项目分两个部分知识库构建、用户问答
知识库构建 → 上传 PDF → FastAPI → MySQL ingestion_job
↓
独立 Worker
↓
MinerU API → Markdown 缓存
↓
LangChain 切分 → DashScope Embeddings
↓
Qdrant
用户问题 → DashScope Embeddings → Qdrant 检索 → 千问 → 答案与来源
FastAPI 和入库工作进程是两个独立进程。PDF 解析不会占用 API 请求,也不会因 API 重启而丢失。MinerU 返回的 ZIP 和 Markdown 会保存在 data,重新向量化时无需 再次消耗 MinerU 额度。
FastAPI
独立 Worker
状态变化为:
pending → processing → indexing → ready
↘ failed
只有状态为 ready 的文档才应视为可查询。重复上传内容完全相同的 PDF 会根据SHA-256 返回已有文档,不会再次调用 MinerU。
MySQL 保存 knowledge_bases、documents 和 ingestion_jobs。文档由知识库与SHA-256 共同标识,因此重复上传具有幂等性。文档状态在 pending、processing、indexing、ready 或 failed 之间转换。任务保留供应商任务 ID、尝试次数和经过清理的错误信息。
每个 Qdrant 点包含分块文本以及 knowledge_base_id、document_id、document_version、filename、title_path、MinerU 提供时的页码信息、chunk_index、content_hash 和 status。检索按知识库和 status=active 过滤。
忽略安装过程,Windows可参考: Windows 安装 UV
D:\OpenSource\Python\VipRAG>uv --version
uv 0.9.18 (0cee76417 2025-12-16)
D:\OpenSource\Python\VipRAG>uv python install 3.12
Python 3.12 is already installed
D:\OpenSource\Python\VipRAG>uv init -p 3.12
Initialized project `deploydemo`
D:\OpenSource\Python\VipRAG>uv run main.py
Using CPython 3.12.12
Creating virtual environment at: .venv
Hello from viprag!
D:\OpenSource\Python\VipRAG>
uv sync
uv run pytest -q
uv run uvicorn app.main:app --reload
另开终端启动入库工作进程:
uv run python -m app.worker
本地直接运行时需要自行启动 MySQL 和 Qdrant,并将 .env 中的主机名从 Compose
服务名改为本机地址。
| 方法 | 路径 | 用途 |
|---|---|---|
GET |
/health/live |
进程存活检查 |
GET |
/health/ready |
运行时依赖已装配 |
POST |
/api/v1/knowledge-bases/{id}/documents |
上传 PDF |
GET |
/api/v1/documents/{id} |
查询入库状态 |
POST |
/api/v1/answer |
检索并生成回答 |
上传文件
{knowledge_base_id} 用户自己定义 如:cardiovascular
curl.exe -X POST "http://localhost:8000/api/v1/knowledge-bases/{knowledge_base_id}/documents" `
-F "file=@app/resources/中国心血管病风险评估和管理指南.pdf;type=application/pdf"
查询文档状态
curl.exe "http://localhost:8000/api/v1/documents/{document_id}"
用户提问
curl.exe -X POST "http://localhost:8000/api/v1/answer" `
-H "Content-Type: application/json" `
-d '{"knowledge_base_id":"{knowledge_base_id}","question":"心血管疾病膳食营养有哪些?"}'
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。