大家好,我是程序锅。
github上的代码封装程度高,不利于小白学习入门。
常规的大模型RAG框架有langchain等,但是langchain等框架源码理解困难,debug源码上手难度大。
因此,我写了一个人人都能看懂、人人都能修改的大模型RAG框架代码。
整体项目结构如下图所示:手把手教你大模型RAG框架架构
整个小项目分为10个章节,和github高度封装的RAG代码不同,我们将从0到1搭建大模型RAG问答系统,所有代码评论区回复rag免费获取!
前序文章:
3.项目环境依赖按照
本篇文章将介绍4.知识库构建,知识库构建算是大模型RAG领域最核心的部分了(见图1),主要由知识存储、知识处理、知识向量化、知识检索和知识比较四大部分构成。不过,我们也可以从数据流转角度出发,涉及文件预处理、文件切分、向量化、构建索引等部分。
一、文件预处理
输入:专业知识文件(pdf、word、txt等)
输出:结构化的json文件
在构建一个高效的RAG系统时,首要步骤是准备知识文档。现实场景中,我们面对的知识源可能包括多种格式,如Word文档、TXT文件、CSV数据表、Excel表格,甚至是PDF文件、图片和视频等。因此,第一步需要使用专门的文档加载器(例如PDF提取器)或多模态模型(如OCR技术),将这些丰富的知识源转换为大语言模型可理解的纯文本数据。
例如,处理PDF文件时,可以利用PDF提取器抽取文本内容;对于图片和视频,OCR技术能够识别并转换其中的文字信息。
文件预处理如果考虑全面,会涉及很多很多工作。比如你的pdf怎么解析、excel表格如何解析、如何去清洗*%@等垃圾字符等等。文件预处理模块很大程度会决定知识库的丰富程度。
在这个小项目中,为了每个人都能看懂并且能够修改。只涉及pdf、md、txt文件的纯文本解析。
import PyPDF2
import markdown
import html2text
import json
from tqdm import tqdm
import tiktoken
from bs4 import BeautifulSoup
import re
import os
def read_pdf(cls, file_path: str):
# 读取PDF文件
with open(file_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ""
for page_num in range(len(reader.pages)):
text += reader.pages[page_num].extract_text()
return