Skip to content

ApolloYH/rag_Architecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

建筑领域 RAG 问答服务

项目说明

这是我整理出来的一份建筑领域 RAG 问答服务代码快照。

我这套实现的目标,是把建筑规范、图文资料和结构化文本整理成可检索知识库,再通过向量检索、BM25、重排模型和大语言模型,生成面向用户的问题回答。

这次公开的是我保留下来的核心代码,不是完整运行环境。我主要保留了服务入口、建库流程、检索流程、模型接入层和示例资源,方便展示项目思路、代码结构和关键实现。

我在这份代码里保留了什么

  • 文本知识库构建流程
  • 图片知识库构建与图片问答检索流程
  • FAISS + BM25 的混合召回逻辑
  • 基于正负样本的 reject 阈值更新逻辑
  • reranker 重排逻辑
  • Flask 问答接口
  • 本地模型与远程模型的统一接入层

当前代码对应的整体流程

1. 初始化建库

main.py 里,如果配置里的 is_init = 1,程序会先执行初始化流程。

  • 文本部分会扫描 repodir,对文档做预处理、切分,并构建 db_responsedb_reject
  • 图片部分会基于 new_id_text_mapping.pkl 里的文本映射,构建 picture_db_responsepicture_db_reject
  • resources/ 里的正负样本 JSON 会被用来更新文本问答和图片问答的 reject 阈值

2. 在线问答

服务启动后,核心入口是 /ask

  • 先用 LLM 判断问题是否属于建筑领域
  • 如果属于建筑领域,再做问题抽取或改写
  • 文本检索和图片检索会并发执行
  • 文本检索会合并 FAISS 结果和 BM25 结果,再交给 reranker 重排
  • 如果命中图片结果,会把文本结果映射成图片文件名
  • 最后把检索材料和用户问题一起交给 LLM 生成回答

目录结构

rag/
├─ README.md
├─ config.example.ini
├─ main.py
├─ requirements.txt
├─ ragsearch/
│  ├─ __init__.py
│  ├─ feature_store.py
│  ├─ file_operation.py
│  ├─ llm_servers.py
│  ├─ openai_servers.py
│  └─ retriever.py
└─ resources/
   ├─ bad_picture_question.json
   ├─ bad_question.json
   ├─ good_picture_question.json
   └─ good_question.json

核心模块

main.py

这是服务入口。

我在这里做了几件事:

  • 读取配置
  • 在需要时执行初始化建库
  • 初始化文本检索器、图片检索器、映射文件和 LLM 服务
  • 提供 /ask/index/images/<filename> 三个接口
  • 串联问题判断、并发检索、LLM 生成和结果返回

ragsearch/feature_store.py

这是建库核心模块。

这里负责:

  • 文档预处理
  • Markdown 和普通文本切分
  • 构建文本 response/reject 向量库
  • 构建图片 response/reject 向量库

代码里默认使用了中文切分逻辑,文本块大小和 overlap 也已经在这里固定下来。

ragsearch/retriever.py

这是检索核心模块。

这里包含:

  • FAISS 向量库加载
  • BM25 检索器构建和持久化
  • reject 判定
  • FAISS 与 BM25 结果合并
  • reranker 重排
  • 检索器缓存

文本检索走的是混合召回,图片检索也复用了相同的整体框架,只是数据来源不同。

ragsearch/file_operation.py

这是文件扫描和读取模块。

当前代码里明确处理了这些类型:

  • Markdown
  • TXT / TEXT
  • PDF
  • Excel / CSV
  • HTML

另外我保留了 Word / PPT 的类型识别入口,但这部分读取逻辑在当前发布版本里没有真正展开。

ragsearch/llm_servers.py

这是模型接入层。

我在这里统一封装了:

  • 本地模型调用
  • Kimi
  • DeepSeek
  • 智谱
  • OpenAI 兼容接口
  • 一些带重试或限频控制的远程调用方式

配置项在 config.example.ini 里可以看到,包括本地模型开关、远程模型开关、模型名、最大文本长度和 API Key 占位符。

ragsearch/openai_servers.py

这个文件是我保留的 OpenAI 兼容服务脚本,用来把本地模型包装成兼容 /v1/chat/completions 的接口,方便接到上层问答逻辑里。

当前仓库不能直接运行的原因

这份仓库不是完整交付环境,我有意去掉了运行期资源和敏感配置。

当前仓库里没有包含:

  • 真实 config.ini
  • API Key
  • 本地模型权重
  • workdir 下的 FAISS 索引
  • BM25 的 pickle 文件
  • 图片资源和映射产物
  • 原始数据目录

所以这份代码更适合看结构、看实现和做二次整理,不适合直接拉下来就启动。

配置说明

仓库里提供的是 config.example.ini,不是我实际使用的运行配置。

从示例配置可以直接看出,这套代码当前依赖这些关键配置:

  • repodir
  • work_dir
  • new_id_text_mapping
  • embedding_model_path
  • reranker_model_path
  • reject_throttle
  • picture_reject_throttle
  • 远程模型类型、模型名和 API Key

我建议如何使用这份仓库

如果你是看项目实现,这份代码适合用来:

  • 快速理解我这套 RAG 问答服务的结构
  • 梳理建库、召回、重排和生成之间的衔接方式
  • 作为后续重构、迁移或复刻时的参考

如果你要恢复成可运行版本,需要你自己补齐数据、索引、映射文件、配置和模型环境。

About

这是一个面向建筑领域资料问答的 RAG 项目发布版代码快照。 项目目标是把建筑规范、图文资料和结构化文本整理成可检索知识库,再通过向量检索、BM25 检索、重排模型和大语言模型,生成面向用户的问题回答

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages