从0到1快速搭建RAG应⽤!

技术框架与选型

技术框架:LangChain

LangChain是专为开发基于大型语言模型(LLM)应用而设计的全面框架。

其核心目标是简化开发者的构建流程,使其能够高效创建LLM驱动的应用。

索引流程:文档解析模块:pypdf

pypdf是一个开源的Python库,专⻔用于处理PDF文档。

pypdf支持PDF文档的创建、读取、编辑和转换操作,能够有效提取和处理文本、图像及⻚面内容。

索引流程:文档分块模块:RecursiveCharacterTextSplitter

采用LangChain默认的文本分割器:RecursiveCharacterTextSplitter。

该分割器通过层次化的分隔符(从双换行符到单字符)拆分文本,旨在保持文本的结构和连贯性,优先考虑自然边界如段落和句子。

索引/检索流程:向量化模型:bge-small-zh-v1.5

bge-small-zh-v1.5是由北京人工智能研究院(BAAI,智源)开发的开源向量模型。

虽然模型体积较小,但仍然能够提供高精度和高效的中文向量检索。

  • 该模型的向量维度为512,最大输入⻓度同样为512。

索引/检索流程:向量库:Faiss

Faiss全称Facebook AI Similarity Search,由Facebook AI Research团队开源的向量库。

因其稳定性和高效性在向量检索领域广受欢迎。

生成流程:大语言模型:通义千问 Qwen

通义千问Qwen是阿里云推出的一款超大规模语言模型,支持多轮对话、文案创作、逻辑推理、多模态理解以及多语言处理。

在模型性能和工程应用中表现出色。

  • 采用云端API服务,注册有1,000,000token的免费额度。

上述选型在RAG流程图中的应用如下所示:

image-20240815115228093

LangChain提供用于构建LLM RAG的应用程序框架。

使用pypdf对文档进行解析并提取信息。

随后,采用RecursiveCharacterTextSplitter对文档内容进行分块。

最后,利用bge-small-zh-v1.5将分块内容进行向量化处理,并将生成的向量存储在Faiss向量库中。

使用bge-small-zh-v1.5对用户的查询进行向量化处理。

然后,通过Faiss向量库对查询向量和文本块向量进行相似度匹配,从而检索出与用户查询最相似的前top-k个文本块。

通过设定提示模板,将用户的查询与检索到的参考文本块组合输入到Qwen大模型中,生成最终的 RAG 回答。