Datawhale开源项目happy-llm新增建筑文档智能RAG审查系统,针对传统人工审查效率低、错误率高的问题,提出动态语义知识分块与生成式知识引导检索两大创新。系统通过LLM模块、Embedding模块和文档预处理实现基础架构,结合动态语义分块、智能问题生成、知识引导检索和偏差分析等核心模块,实现建筑文档自动化合规性审查。项目提供完整源码,适合开发者从零构建专业领域RAG系统,可扩展至其他领域应用。

前排提示,文末有大模型AGI-CSDN独家资料包哦!

Datawhale干货 作者:肖鸿儒,Datawhale成员

Datawhale 开源项目 happy-llm 的 extra-chapter 更新了!重磅更新「建筑文档智能 RAG 审查系统」,从零开始一步步带大家实现建筑领域 RAG 系统!

Happy-LLM

开源地址:https://github.com/datawhalechina/happy-llm

本项目地址:

https://github.com/datawhalechina/happy-llm/tree/main/Extra-Chapter/CDDRS

本项目是一个从零开始实现的建筑文档智能审查系统,旨在帮助开发者理解知识引导检索在专业领域文档审查中的核心原理和实现细节。由于篇幅限制,我们无法展示完整的整个实现过程,但是,我们将在本文中讲解整个企业级 RAG 系统的每个必要的实现步骤以及背后的思考,大家可以通过这些内容快速理解如何实现一个建筑文档智能审查系统。

🔍 说明:本文聚焦于企业级 RAG 系统中的核心环节(如文档处理、索引构建、评估流程等)的搭建,并引用了 llama-index 等第三方库的部分能力,适合希望从零实现文档智能审查系统的开发者参考。文中未覆盖如并发服务部署等完整工程化内容,读者可据此自由扩展实现,灵活落地于实际项目中。完整源码在文末开源。

一、项目动机

建筑施工交底文档的合规性审查是保障施工项目安全性、经济性的关键环节。在施工项目全周期中,各项操作必须符合相关规范条文要求,才能确保建设项目的安全性与可持续性。然而,相关查询参考往往分散在各个项目文件中,传统基于人工的审查方法难以处理庞大复杂的建筑条文,其审查过程需要基于审查人员的经验与专业知识,具有主观性强,耗时长且易出错等弊端。

随着大语言模型技术的发展,LLM 为自动化建筑文档审查带来了新的希望。然而,大语言模型通常使用通用语料进行训练,缺乏建筑相关背景知识,在处理建造背景下的复杂推理问题中会产生严重的幻觉现象。通过使用基于向量相似匹配的 RAG 方法,可以为 LLMs 提供初步的相似参考知识,从而减轻基于人工或规则的审查方法难以处理庞大建筑文本所带来的错误率高的问题。

然而,传统 RAG 方法在建筑专业文档审查中存在关键局限:由于固定的分块设计,使得文本块之间面临知识信息缺失问题;在检索过程中,使用整句问询嵌入的方法进行相似性匹配,缺少对问询细粒度特征的识别与考量,检索效率低下。在建筑施工交底文档中,这类文档详细阐述了施工工艺特点和方法、质量规格、操作程序以及安全协议,包含大量知识细节且专业性极强。因此需要一个能够精准理解和检索建筑领域专业知识的智能系统。

因此,本项目提出了一个生成式知识引导的建筑文档审查系统,旨在提升审查的可靠性和准确性。系统具有两大核心创新:首先提出动态语义知识分块策略,构建具有更优语义连贯性和完整性的知识库;其次基于增强的知识表示,提出生成式知识引导检索框架,在语义嵌入检索过程中增强对细粒度信息的关注,从而提高知识参考检索的准确性和建筑文档审查任务中修正的可靠性。

二、前置实现

接下来,我们将带领大家,从 0 开始,实现一个建筑文档智能审查系统。首先,我们将完成一些基本的准备过程。

1. 实现 LLM 模块

首先我们需要实现 LLM 模块,这是系统中最基本的模块,我们将利用大模型完成文档的清洗,信息提取等工作,可以说本系统的一部分精髓即为使用大模型预先处理文档信息,方便后续进行检索,这里我们使用 DeepSeek 的 api 来实现。

from abc import ABC, abstractmethod

如上是一个调用大模型的抽象接口,这可以帮助我们统一调用大模型的格式,我们继承这个基类,实现调用大模型的接口。

from openai import OpenAI

完成搭建后,我们可以通过尝试调用 predict 方法来测试是否成功。

llm = DeepSeekLLM(

当观察到 LLM 正确回复后,我们这一模块的构建就完成了。

2. 实现 Embedding 模块

除了调用大模型,我们还需要实现 Embedding 模块,Embedding 模块用于将文本转换为向量,我们将使用向量来表示文档中的信息,这样的好处是,我们可以通过向量的相似度来衡量文档与查询之间的相似度,从而召回对回复用户问题最有帮助的文档。

构建 Embedding 模块的方法与构建 LLM 模块类似。

from abc import ABC, abstractmethod

完成搭建后,我们可以通过尝试调用 get_emb 方法来测试是否成功。

emb = BGEEmbedding(model_name="BAAI/bge-m3")

当观察到 Embedding 正确给出了编码后的向量,我们这一模块的构建就完成了。

3. 实现文档预处理模块

为了处理建筑文档,我们需要预先准备好文档读取模块。本系统假设所有建筑规范和标准已经转换为 Markdown 格式,便于后续的文本处理和分析。

import os

完成文档预处理模块的设置后,我们就可以采用下面的方法来加载建筑规范文档了。

processor = DocumentProcessor()

三、核心实现

建筑文档审查系统的主要流程如下。首先,让我们来梳理一下建筑文档审查的工作流程,系统的一个核心思想在于,我们需要把用户提供的文档内容通过智能化的问询生成和知识引导检索来识别潜在的合规性问题。与传统 RAG 方法不同,我们的系统专门针对建筑领域的专业特点进行了优化,能够更准确地理解建筑规范要求,提供更可靠的审查建议。

动态语义知识分块

在传统RAG流程中,文本通过设置固定的token数量划分文本区块。然而,固定token数量会在句子中间截断,导致信息缺失。为此,本系统使用基于建筑文本语义动态划分的方式,通过双重语义聚类的方式,完成考虑建筑语义连贯性的知识chunk划分。

首先,将整个文档内容处理成单独句子序列 。通过计算相邻句子间的语义差异度来识别潜在的语义边界:

基于语义差异度分布自动确定动态阈值:

确保最终的分块既保持语义连贯性又满足长度约束:

import re

建筑文档审查系统

整体的审查过程如下图所示。系统获取需要审查的区域后,依据提示生成审查问题推荐,此部分也可供工程师进行相关问题输入或推荐问题选择,生成待审查问题。随后,系统通过生成式知识引导检索框架,依据审查问题在所建文本知识库中检索出相应的知识参考。最终,依据检索的部分与审查原文,进行问题分析与审查修正,完成最终的审查流程。

审查问题生成

在文档审查流程中,系统引入了双阶段 Prompt 工程驱动的智能化问询生成机制,旨在对建筑施工交底文档进行预见性分析与风险挖掘,实现对文档潜在问题的高效、精准定位。

阶段 1 为待查文档主旨目标解构,模型被指示从文本中提炼核心事件、关键技术、工艺流程等要素,结构化地总结文档的核心内容,由此界定本次审查的靶向目标,为后续的精细化问询奠定基础。阶段 2 为多维度风险探测与定制化问询生成,基于第一阶段提炼的核心要素,通过 few-shot 等方式引导 LLM 从合规性、安全性、可操作性等多维度对文档进行风险探测。Prompt 指示模型围绕潜在的限制条件、操作流程、以及可能存在的合规性隐患等方面,进行细粒度、多角度的审查提问。

import re
知识引导生成式检索

系统的核心创新在于知识引导的检索框架,整个过程分为三个关键步骤。步骤1为句子级编码,主要负责输入查询句子的初始表示学习,计算查询与知识库 chunks 间的句子级相似度分数。步骤 2 为知识引导检索,进一步从查询中提取关键信息,利用这些信息结合文档长度自适应加权等机制,对每个知识库 chunk 进行更详细的评分。步骤 3 为重排序与增强,使用大语言模型对步骤 2 检索的结果进行进一步重排序,并利用精炼的知识来增强原始查询。

首先建立专门针对建筑领域文本分析的深度提取模块,集成领域预训练BERT进行上下文编码,结合双向 LSTM 进行建筑法规依赖建模。建立三级重要性分类层次:max(最高)、mid(中等)、lit(字面)优先级。本项目直接通过大语言模型进行关键信息提取,如果需要更精准的效果,可以自行训练 BERT 模型进行专门的关键信息提取。

import re
文档长度自适应因子

在知识引导检索过程中,文档长度自适应因子用于调整不同长度文档的权重分配,确保长短文档都能得到公平的评分机会。该因子的计算考虑了当前文档chunk的长度与平均文档长度的关系。

其中 表示当前文档chunk的长度, 表示平均文档长度。通过这种归一化处理,可以避免因文档长度差异导致的评分偏差。

def compute_document_length_factor(chunk_length: int, avg_length: int = 100) -> float:
术语重要性计算

术语重要性指标衡量术语在文档中的显著程度,结合术语频率和文档长度自适应因子,能够更准确地评估术语在当前文档中的重要性。计算公式考虑了术语频率的非线性增长特性。

其中 表示术语在文档chunk中的出现频率, 为文档长度自适应因子。这种计算方式能够防止高频术语过度影响评分。

def compute_term_significance(term_freq: int, doc_length_factor: float) -> float:
术语稀有度计算

术语稀有度用于衡量术语在整个知识库中的稀缺程度,稀有度越高的术语在检索中的权重越大。计算采用了改进的IDF公式,增加了平滑处理以避免零除问题。

其中 表示文档总数, 表示包含该术语的文档数量。加一操作确保了对数值始终为正数。

import numpy as np
连贯性指数评估

连贯性指数反映术语在文档中的分布连贯性,通过滑动窗口技术分析术语在文档中的局部分布情况。连贯性高的术语往往在文档的特定区域集中出现,表明其与文档主题的强相关性。

其中 表示文档中的滑动窗口集合, 为指示函数,当窗口中包含该术语时为1,否则为0。

defcompute_coherence_index(term: str, chunk: str, window_size: int = 50) -> float:
评分融合与检索

将句子级相似度评分与知识级评分进行融合,形成最终的文档相关性评分。融合过程采用加权平均的方式,平衡参数λ控制两种评分方式的重要性。

其中 为平衡参数, 为知识级评分, 为句子级评分。通过调整λ值,可以控制系统更偏向语义相似还是知识匹配。当λ=0时,系统完全依赖句子级语义相似度;当λ=1时,系统完全依赖知识匹配评分;λ=0.5时,两种评分方式权重相等。在建筑文档审查场景中,通常设置λ=0.5以平衡专业知识匹配和语义理解。

import numpy as np
重排序优化

系统使用大语言模型对检索结果进行进一步重排序,通过 LLM 的语义理解能力优化文档的相关性排序。重排序过程中,系统会构造包含查询和候选文档的提示,要求 LLM 根据相关性对文档进行重新排序。

def_llm_rerank(self, query: str, documents: List[str]) -> List[str]:
查询增强

同时系统还会利用检索到的知识来增强原始查询,生成更具体、更详细的查询用于进一步检索。查询增强通过分析检索结果的上下文信息,识别查询中可能遗漏的关键概念和术语。

def_augment_query(self, original_query: str, top_results: List[str]) -> str:
偏差检测分析

在先期知识增强检索阶段获取领域知识后,系统随即进入误差辨析模块。该模块基于检索得到的知识参考,并结合预设的审阅问题,对原文进行细致的偏差检测与评估。

classErrorAnalyzer:
修订建议生成

误差辨析模块完成后,系统将输出标记偏差区域以及相关知识佐证。随后,系统进入修订策略生成模块。该模块依据误差分析结果和知识参考,对标记区域进行针对性的修订建议生成,最终实现对原文的知识驱动型自动修正。

classRevisionGenerator:
完整审查流程

将上述所有模块整合,形成完整的文档审查流程。系统首先生成审查问题,然后进行知识引导检索,接着执行错误分析,最后生成修订建议。

def complete_review_process(document_chunk: str,

至此,我们就完成了建筑文档智能审查系统的核心实现。

四、实际应用示例

让我们通过一个完整的示例来展示系统的使用:

# 初始化系统组件

五、扩展性说明

系统可以通过更换知识库轻松适应其他领域。对于特定企业或项目,可以通过微调关键信息提取模型来提升准确性。在性能优化方面,使用动态语义分块可以提升检索质量,预计算并缓存知识库嵌入以提升检索速度,对于大量文档可使用批量处理模式,根据具体应用场景调整 λ 参数和 top-k 值。

六、写在最后

恭喜你阅读完此文,你已经充分了解了如何实现一个建筑文档智能审查系统以及其背后的思考。这个系统展示了如何将动态语义分块、知识引导检索和大语言模型有机结合,为建筑行业的文档审查提供了一个实用的解决方案。

虽然当前系统已经取得了不错的效果,但仍有改进空间。全局关联增强方面,当前基于文本块的检索可以进一步结合知识图谱等技术。多模态支持方面,未来可以扩展支持 CAD 图纸、施工图等视觉信息。实时更新方面,支持知识库的增量更新和动态维护。个性化定制方面,根据不同企业和项目特点进行系统定制。

读者们可以运行项目中的示例代码,体验完整的建筑文档智能审查流程。我们相信这个系统不仅能够提升审查效率,更能为建筑行业的数字化转型贡献力量。

七、致谢

本项目的开发过程中,我们深入研究了建筑工程领域的专业知识和最新的自然语言处理技术。特别感谢建筑行业专家提供的宝贵建议,以及开源社区在技术实现方面的支持。项目代码实现参考了 LlamaIndex、Transformers 等优秀开源项目的设计理念。

需要说明的是,本项目专门针对建筑施工领域的文档审查场景进行了深度优化。如果您需要处理其他领域的文档,建议根据具体需求对系统进行相应调整。

八、源码获取

本项目的源码以及实例数据存放在 GitHub 仓库。

地址:https://github.com/Hongru0306/CDDRS

文章来自网上,侵权请联系博主
读者福利:倘若大家对大模型感兴趣,那么这套大模型学习资料一定对你有用。

针对0基础小白:

如果你是零基础小白,快速入门大模型是可行的。
大模型学习流程较短,学习内容全面,需要理论与实践结合
学习计划和方向能根据资料进行归纳总结

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

请添加图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

这里我们能提供零基础学习书籍和视频。作为最快捷也是最有效的方式之一,跟着老师的思路,由浅入深,从理论到实操,其实大模型并不难

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Logo

更多推荐