# engineering-rag **Repository Path**: L_na_N/engineering-rag ## Basic Information - **Project Name**: engineering-rag - **Description**: 工程设计公司面向园林景观与建筑设计的企业级 RAG 检索增强生成智能问答平台。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-28 - **Last Updated**: 2026-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EngineeringRAG 园林景观与建筑设计智能设计助手 面向园林景观与建筑设计企业的企业级 RAG 检索增强生成智能问答平台。 「本地 FAQ 问答库 + RAG 知识库」双层架构:Redis 精确缓存 → BM25 FAQ 阈值匹配 → RAG 答案缓存 → RAG 链路(意图识别 → 策略路由 → 混合检索重排 → 权限过滤 → DeepSeek 流式生成)。 ## 快速开始 ```bash # 1. 基础服务 cd docker && docker compose up -d && cd .. # 2. 虚拟环境(Conda Python 3.12) conda create -n garden_rag python=3.12 -y conda activate garden_rag pip install -r requirements.txt # 3. 配置 .env # MySQL/Redis 密码与 OPENAI_API_KEY # 4. 模型(放入 rag_system/model/) # BAAI/bge-m3、BAAI/bge-reranker-v2-m3 # 5. 知识库构建(文档放入 rag_system/docs//) python data_pipeline.py # 6. 启动 uvicorn main:app --reload --port 8000 ``` 访问:`http://127.0.0.1:8000`(前端)· `/docs`(Swagger)· `/api/health`(健康检查) ## 目录 | 模块 | 说明 | | --- | --- | | `data_pipeline.py` | 离线流水线:解析 → 清洗 → 语义父子分块 → 向量化入库(断点续跑) | | `rag_pipeline.py` | 问答编排 IntegratedQASystem:FAQ 优先 / RAG 兜底(CLI 与 API 共用) | | `qa_system/` | Redis 三级缓存、MySQL FAQ、BM25 检索 | | `rag_system/` | 文档加载器(OCR 兜底)、分块、Milvus 混合检索、意图识别、策略路由 | | `api/` | FastAPI 应用、统一错误码、降级启动、会话历史、文档上传 | | `main.py` | 服务入口 + `/ws/chat` WebSocket 流式接口 | | `static/` | Web 前端:流式渲染、引用来源、多会话、深色模式 | | `llm_finetune/` | DeepSeek-V3 LoRA-SFT 微调脚本与样例数据集 | | `docker/` | MySQL / Redis / Milvus(etcd+MinIO)/ Attu 编排 | ## 专业入口(一级)→ 二级板块 打开首页先选择专业入口,再进入对应板块问答,检索范围与 Prompt 视角随之收窄: | 板块 key | 名称 | 覆盖知识库 | | --- | --- | --- | | `all` | 全部专业 | 8 个全部知识库 | | `landscape` | 🌳 园林景观 | 植物、景观规范、景观案例、工艺、造价 | | `architecture` | 🏛️ 建筑设计 | 建筑规范、建筑案例、构造做法 | 实现方式:`domain` 参数贯穿 API / WebSocket / 前端。后端先按意图路由到 Collection,再与板块允许的 Collection 取交集,并叠加 `metadata["domain"]` 行级过滤;系统提示词追加板块限定语;RAG 答案缓存按板块分区(避免出现跨专业串答案)。 接口: ```bash GET /api/v1/domains # 专业入口结构(板块、知识库、示例问题、能力清单) GET /api/v1/domains/{key} # 单个板块详情 POST /api/v1/chat body: {"question":"...", "domain":"landscape"} POST /api/v1/chat/stream # SSE 流式(主用):text/event-stream,帧为 meta / delta / done / error GET /api/v1/chat/stream # SSE 流式(兼容 EventSource):?question=... WS /ws/chat msg: {"question":"...", "domain":"architecture"} # 回退通道 ``` ### SSE 流式示例 ```bash curl -N -X POST http://127.0.0.1:8000/api/v1/chat/stream \ -H "Content-Type: application/json" -H "Accept: text/event-stream" \ -d '{"question":"住宅建筑的日照标准是什么","domain":"architecture"}' ``` ```text event: meta data: {"type":"meta","session_id":"...","source":"qa","citations":[]} event: delta data: {"type":"delta","content":"按《民用建筑设计统一标准》要求……"} event: done data: {"type":"done","latency_ms":3597.3} ``` 浏览器原生接入(仅 GET): ```js const es = new EventSource(`/api/v1/chat/stream?question=${encodeURIComponent(q)}&domain=all`); es.addEventListener("delta", (e) => append(JSON.parse(e.data).content)); es.addEventListener("done", () => es.close()); ``` ## 知识库 Collection 园林域:`landscape_plant` 植物、`landscape_standard` 景观规范、`landscape_case` 景观案例、`landscape_craft` 工艺、`landscape_cost` 造价 建筑域:`arch_standard` 建筑规范、`arch_case` 建筑案例、`arch_material` 构造做法 ## 常用命令 ```bash python data_pipeline.py --rebuild # 全量重建 python data_pipeline.py --file x.pdf --collection landscape_plant # 单文件入库 python -m rag_system.core.vector_store --query "华北适生的耐阴乔木" # 检索测试 python rag_pipeline.py # CLI 问答 python -m unittest discover tests # 回归测试(无需中间件) RUN_INTEGRATION=1 python -m unittest discover tests # 含 MySQL/Redis/Milvus 联通性测试 ``` 首次启动 Milvus 后无需手动建库:`rag_system.core.vector_store.get_milvus()` 会自动创建 `MILVUS_DATABASE_NAME`(默认 `garden_rag`)以及 8 个 Collection(`data_pipeline.py` 建库时)。