Initial commit: QMDSearch 分层信息检索服务

- FastAPI + Qdrant + Redis + Ollama 技术栈
- L1→L2→L3→chunk 四层分层检索(dense + sparse RRF 融合)
- 文档三级总结与 2.5 级回退
- query 解析路由与分类
- /admin 管理页面
This commit is contained in:
2026-07-29 21:24:40 +08:00
commit 51dc8dc4f6
83 changed files with 10794 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
# ===========================================
# QMDSearch 环境变量配置
# ===========================================
# --- 应用 ---
APP_PORT=8000
LOG_LEVEL=info
# --- 嵌入模型 ---
# openai | local
EMBEDDING_PROVIDER=openai
OPENAI_API_KEY=sk-xxx
OPENAI_BASE_URL=https://api.openai.com/v1
EMBEDDING_MODEL=text-embedding-3-small
EMBEDDING_DIMENSION=1536
# --- Qdrant ---
QDRANT_PORT=6333
QDRANT_DASHBOARD_PORT=6334
# --- Redis ---
REDIS_PORT=6379
# --- Ollama 本地模型(文档三级总结)---
OLLAMA_PORT=11434
OLLAMA_MODEL=qwen2.5:1.5b
# 备选模型: qwen2.5:3b(更好的总结质量,需更多内存)
# EMBEDDING_PROVIDER=local 时使用的 Ollama 嵌入模型
OLLAMA_EMBEDDING_MODEL=bge-m3
# --- NAS 持久化 ---
NAS_DATA_DIR=./data
# --- 检索参数 ---
# L2 语义检索召回数量
RETRIEVAL_TOP_K=20
# L3 重排后返回数量
RETRIEVAL_FINAL_K=5
# --- 文档入库参数 ---
# 低于此字符数触发 2.5 级回退
SUMMARY_MIN_TEXT_LENGTH=500
# --- 入库异步任务 ---
# 入库后台任务并发上限
INGEST_MAX_CONCURRENCY=2
# 任务状态 Redis 保留秒数(进行中与已完成,默认 24 小时)
INGEST_TASK_TTL_DONE=86400
# 失败任务状态 Redis 保留秒数(默认 7 天)
INGEST_TASK_TTL_FAILED=604800
# --- 知识分类(taxonomy---
# taxonomy JSON 文件路径,留空使用内置默认类目集
TAXONOMY_PATH=
# 分类置信度低于此值归入 uncategorized
CLASSIFY_CONFIDENCE_THRESHOLD=0.6
# query 路由命中类目数上限,超过走全库兜底
CLASSIFY_MAX_CATEGORIES=3
# --- 分层检索参数 ---
# L1 层候选文档数
L1_DOC_TOP_N=10
# L2 层候选 section 数
L2_SECTION_TOP_N=5
# L3 层定位数
L3_TOP_N=10
# 是否启用稀疏检索
SPARSE_ENABLED=true
# Redis 缓存秒数
CACHE_TTL=300
# --- 分块参数 ---
# chunk 超长二次切分阈值(字符数)
CHUNK_MAX_CHARS=800