1.项目名称的含义
《独孤智鉴》:融合了“独孤九剑”的武侠精髓和智慧审查的核心功能,代表系统类似于独孤九剑般的灵活、精准地进行标准与方案的对比和审核。
“智剑行云”:暗喻系统类似于智者手中的利剑,行云流水般地在庞杂的信息中穿梭、比对,找到每一个粗略的差异并准确定位。
“智能标准审核系统”:仔细描述了项目的实际功能,体现出其在自动化处理、审核标准方面的专业性和技术优势。
2.项目背景与意义:
在当今快速发展的各行各业中,不同领域都遵循着各自独特的行业标准与规范。企业在制定方案书时,必须确保其内容严格遵循相应的标准,以符合法规要求并提升项目质量。然而,手动核对标准与方案书内容是一项既繁琐又耗时的工作,容易出现疏漏,影响项目的顺利进行。
为了解决这一问题,本项目利用NVIDIA AI-AGENT暑期线上训练营所学知识,开发了一款RAG(Retrieval-Augmented Generation,检索增强生成)智能对话机器人。该机器人能够自动化完成标准与方案书内容的比对任务,快速识别并反馈两者之间的差异,从而提醒用户及时修改,极大地节约了时间,提升了工作效率。
3.项目亮点:
自动化比对:通过智能算法实现标准与方案书内容的自动化比对,减少人工干预,提高工作效率。
精准识别差异:能够精准识别标准与方案书之间的不一致之处,确保方案书的合规性。
即时反馈:比对结果即时反馈给用户,便于用户快速修改和完善方案书内容。
多领域适用:机器人可根据不同行业的标准进行定制,广泛应用于各个行业。
4.技术方案与实施步骤
模型选择(必写): 详细描述项目采用的技术方案,包括大模型的选择理由、RAG模型的优势分析。
1)大模型选择:选的是ChatNVIDIA(model="01-ai/yi-large")
选择理由:Yi-Large 是一个用于生成代码以及逻辑和数学推理的模型。它是 01.AI 的 Yi 系列最先进的大型语言模型的最新专有密集模型。该模型的训练比本技术报告中详述的 2023 年 11 月的 Yi-34B 开源模型有了显着改进。更大且增强的 Yi-Large 模型在所有基准测试上都表现出卓越的性能,尤其是代码、数学和综合推理。总体而言,Yi-Large 的表现与 GPT-4 和 Claude3 不相上下。
此外,根据其“使 AGI 易于访问并造福于每个人和任何地方”的愿景,01.AI 重视不同语言和文化之间的需求和差异。根据新的LMSYS聊天机器人竞技场多语言排行榜,Yi-Large在中文、西班牙语、日语、德语和法语等多语言基准测试中表现出色。
2)RAG向量化模型选择:nvidia/nv-embed-v1
选择理由:NV-Embed 模型是一种通才嵌入模型,在 56 个任务中表现出色,包括检索、重新排名、分类、聚类和语义文本相似性任务。NV-Embed 在此基准测试中的 15 个检索任务中获得了 59.36 的最高分。
NV-Embed具有多项创新设计,例如用于改进池化嵌入输出的潜在向量和两阶段指令调优方法,可提高检索和非检索任务的准确性。
5.数据构建过程
5.1 数据构建过程
数据构建的关键在于标准文档的加载、处理与向量化存储。项目中设计了支持多种文档格式(如.pdf和.docx)的加载器,通过使用文档加载工具(如PyPDFLoader和Docx2txtLoader)读取文档内容。文档内容随后经过分段处理,使用递归字符分割器进行分块。这些文本分块通过嵌入模型转换为向量,存储在FAISS向量数据库中,以便于快速检索与比对。
5.2 向量化处理方法及其优势
文档的向量化处理是通过NVIDIA的嵌入模型实现的。该模型通过对文档片段生成高维嵌入向量,代表了文本的语义信息。这种向量化方法的优势在于可以通过计算向量间的距离来实现语义相似度的快速检索。这种检索方法比传统的关键词匹配更加灵活,可以在复杂的文本片段中找到与设计方案语义相近的标准内容,从而提高审核的全面性与准确性。
6.功能整合
本项目整合了以下几个主要功能:
1)标准文档的加载与向量化存储:
支持多种格式的标准文档(.pdf 和 .docx),通过NVIDIA嵌入模型进行向量化处理,存储在FAISS数据库中。
2)设计方案的自动审核:
加载设计方案文档,将其分解为若干内容块,并与向量化存储的标准文档进行检索比对。生成审核报告,指出设计方案中不符合标准的部分,并提供详细的标准对照分析。
3)智能对话助手:
基于Gradio界面,用户可以通过上传标准文件和设计方案来获得自动审核结果。系统通过调用RAG模型进行智能对话,帮助用户理解审核结果,并为进一步优化设计方案提供建议。
7.关键代码片段示例
1)文档加载与处理:
class Docx2txtLoader:
def __init__(self, file_path: str):
self.file_path = file_path
def load(self):
try:
text = docx2txt.process(self.file_path)
return [Document(text)]
except zipfile.BadZipFile:
raise ValueError("The file is not a valid .docx file.")
2)向量化处理与存储:
def embed_standard_doc(file_path: str):
if file_path.endswith(".pdf"):
loader = PyPDFLoader(file_path)
elif file_path.endswith(".doc") or file_path.endswith(".docx"):
loader = Docx2txtLoader(file_path)
else:
raise ValueError("File format not supported for embedding")
doc = loader.load()
doc_content = "\n".join([page.page_content for page in doc])
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=300, chunk_overlap=100,
separators=["\n\n", "\n", ".", ";", ",", " ", "。", ";", ",", "!"]
)
8.项目成果与展示:
9.问题与解决方案:
1)文件解析错误:在处理不同格式的文件时,可能会出现文件损坏或不兼容的问题。
2)检索结果不准确:模型可能检索到不相关的标准,导致审核结果出现误差。
解决措施
3)文件解析:增加错误捕获机制,对于损坏文件给出明确提示,并优化加载逻辑,支持更多文档格式。
4)检索调优:通过调整向量化参数和检索逻辑,提高模型检索到相关标准的准确性。