# 建筑领域通用 RAG 智能问答系统 **Repository Path**: LeaJone/construction-rag-system ## Basic Information - **Project Name**: 建筑领域通用 RAG 智能问答系统 - **Description**: 在建筑工程领域,文档通常具备 文本密集、专业术语多、跨专业交叉(如建筑、结构、机电等)的特点,同时面对设计、施工、质量等不同角色下的企业内部知识库检索提出了更高的要求,例如建筑领域设计规范类企业文档表达形式通常为PDF+表格为主、施工工艺类通常以PDF+图片为主、质量管理类通常以DOC文档为主,本项目旨在解决这些痛点。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-09-04 - **Last Updated**: 2026-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 建筑领域 RAG-Agent 智能问答系统 ## 项目介绍 ​ 在建筑工程领域,文档通常具备 **文本密集、专业术语多、跨专业交叉(如建筑、结构、机电等)** 的特点,**同时面对设计、施工、质量等不同角色下的企业内部知识库检索**提出了更高的要求,例如建筑领域设计规范类企业文档表达形式通常为PDF+表格为主、施工工艺类通常以PDF+图片为主、质量管理类通常以DOC文档为主,本项目重点解决的痛点! ​ 本项目从真实业务痛点出发,打造了一套开箱即用的**建筑垂类 RAG 引擎(从0到1的准生产级项目)**。系统不仅支持常规文档的解析与切分,更独创性地设计了 **“建筑领域规范型文档专用检索器”** 以及“**建筑领域三维工具图集文档专用检索器**”,平均检索精度达到0.92以上。 ### 核心功能 ##### 1. 深度文档解析与容错处理 - **表格提取增强**:针对建筑规范中大量的参数表格,放弃传统的 `PyPDFLoader`,底层采用 `PyMuPDF (fitz)` 定制解析器,精准识别并提取 PDF 中的表格数据转化为文本结构,防止关键参数丢失。 - **支持文件夹加载**:既支持单个文件上传也支持文件夹批量上传。 - **智能去重机制**:基于文件全量内容的 MD5 摘要建立去重库,防止前端重复上传导致的向量库混乱。 ##### 2. 三路召回与 RRF 融合算法 - **BM25 关键词**:精准匹配“抗震等级”、“C30混凝土”等专业性名词。 - **摘要索引优化**:通过大模型对 Chunk 进行摘要,利用摘要进行向量检索,提升宏观语义的匹配度。 - **预设问题向量**:利用大模型反向生成假设性问题并向量化,对齐用户的提问视角。 - **RRF 融合**:通过RRF算法,将三路结果进行平滑归一化,避免绝对分数偏差导致的偏科。 ##### 3. 规范型文档专用检索器 - **专业意图识别**:内置涵盖建筑、结构、给排水、暖通、电气等 10 大建筑专业的关键词词典,精准识别用户 Query 隶属的专业。 - **元数据预过滤**:在检索前,通过正则表达式自动为每个 Chunk 打上专业标签。检索时先锁定专业文档,再执行混合检索,从根本上杜绝跨专业检索混乱。 - **重排加持**:对多路召回调用阿里云 Rerank 模型进行精排,确保 Top-K 结果的绝对相关性。 ##### 4. 多模态知识库的特殊处理 - 传统 RAG 处理图片往往直接丢弃或只用 OCR 提取零星文字。本系统采用 **VLM 看图打标签** 策略: - 使用 `fitz` 提取 PDF 中的图片转为 `base64` 并保留在 `metadata` 中。 - 将图片送入视觉大模型(VLM),强制模型提取构件名、尺寸、材料、工艺步骤,生成高密度专业术语作为 `page_content`。 - 检索时用文本匹配这些“高密度标签”,生成时再取出 `base64` 原图让 VLM 看图回答,**完美兼顾了检索的准确性与生成的视觉理解力**。 ##### 5. 工程化异常与日志体系 - **分层异常树**:自定义 `RAGBaseException` 基类,向下派生 `FileProcessException`、`VectorDBException` 等,携带上下文参数与完整堆栈,结合 FastAPI 全局拦截器实现统一优雅报错。 - **结构化日志**:基于 YAML 配置的日志门面,支持控制台彩色输出与文件按日滚动分割,方便生产环境线上排障。 **6. 评估体系** - 系统内置了基于 `RAGAS` 框架的离线评估模块 (`RAGAs.py`),可量化核心指标,采用本地部署的 Ollama `qwen3-embedding` 模型替代云端调用来降低成本。 ## 技术栈 #### 后端技术 | 技术 | 版本/说明 | 用途 | |------|-----------|------| | Python | 3.10+ | 核心编程语言 | | FastAPI | 最新版 | 构建RESTful API接口 | | LangChain | 最新版 | 大语言模型应用框架 | | Chroma | 最新版 | 向量数据库,存储嵌入向量 | | Redis | 最新版 | 缓存系统,提高性能 | | logger | 最新版 | 日志配置系统 | | Exception | 最新版 | 统一异常处理 | #### 前端技术 | 技术 | 版本/说明 | 用途 | |------|-----------|------| | Gradio | 最新版 | 构建交互式Web界面 | | Python | 3.10+ | 前端逻辑实现 | #### 大模型 | 模型 | 说明 | 用途 | |------|------|------| | 阿里云大模型 | qwen3-max、qwen3.6-plus | 文本生成、摘要生成、问题生成、原生态模型 | | 阿里云嵌入模型 | text-embedding-v4 | 文本向量化,用于向量检索 | | 阿里云重排序模型 | rerank | 检索结果重排序,提高精度 | | 本地Ollama模型 | Ollama-qwen3-embedding | RAG系统评估嵌入模型 | ## 项目结构 ``` root ├── app.py # Gradio 前端界面,与 FastAPI 后端交互 ├── graph_router.py # 核心调度:LangGraph 状态机与路由定义 ├── rag/ │ ├── db/ │ │ ├── rag_chromadb_1.py # 通用型向量库入库逻辑 (纯文本切分) │ │ └── rag_chromadb_2.py # 多模态向量库入库逻辑 (VLM看图打标签) │ └── retriever/ │ ├── retriever_1.py # 通用检索器:向量 + BM25 混合检索 │ └── retriever_2.py # 多模态检索器:带原图 base64 的向量检索 ├── utils/ │ ├── config_handler.py # YAML 配置文件加载器 │ ├── file_handler.py # 文件校验、MD5去重、PDF/Doc解析、文档切分 │ ├── path_tool.py # 项目绝对路径统一管理 │ ├── prompt_loader.py # 提示语 YAML 加载器 │ └── model.py # (未提供但引用) 模型加载器 (LLM, VLM, Embedding) └── configs/ # 配置文件目录 (需自行创建) ├── rag.yaml # RAG 相关参数 (chunk_size, weights等) ​ ├── agent.yaml # Agent 参数 ​ ├── chroma.yaml # 向量库参数 ​ └── prompts.yaml # 提示词模板 ``` ## 安装指南 #### 1. 环境准备 - Python 3.10+ - 本地已启动 Redis 服务 - 配置阿里云 DashScope API Key - 安装requirements.txt 依赖包 #### 2. 配置设置 编辑 `config_db/settings.py` 文件,配置以下参数: - **阿里云模型配置**:设置API密钥和模型参数 - **Redis配置**:设置Redis连接参数 - **向量数据库配置**:设置Chroma向量数据库参数 - **文件处理配置**:设置文档处理参数 #### 3. 启动服务 ```bash # 启动FastAPI后端 python fastapi_main.py # 启动Gradio前端 python app.py ``` ## 应用场景 #### 1. 内部企业知识库查询 快速查询建筑领域企业的各种规范、标准和技术文档,获取准确的信息。 #### 2. 设计质量控制 基于规范文档,辅助建筑设计质量控制,确保设计符合相关标准。 #### 3. 技术培训 作为建筑领域技术培训的辅助工具,快速获取相关知识点。 #### 4. 项目管理 在项目管理过程中,快速查询相关规范和标准,确保项目合规。 ## 联系方式 本项目全部代码已上传GITHUB,如有问题或建议,请联系项目维护者: - 邮箱:[whyuback@163.com] - Gitee:[https://gitee.com/zhaoyujia1212/construction-rag-system] --- **建筑领域通用RAG系统** - 为建筑行业专业人员提供智能知识检索和问答服务