大模型项目:初识RAG
一. 项目开发注意事项
1.软件安装不要在中文路径下
2.项目的创建与保存:
严格按照大驼峰命令或下划线:MyApp,my_app
创好的项目不允许修改项目名字
项目得有一个独立的保存目录
3.我的硬件情况:有两张显卡,3060显卡,nvidia版本为13.1
4.anaconda创建出来的环境称为虚拟环境
开发阶段python版本固定为3.12
需要对不同的项目创建对其的开发环境
5.打开cmd,
# 查看conda版本
conda --version 或 conda -V
# 更新conda
conda update conda
# 创建虚拟环境
conda create -n env_name python_version
# 激活虚拟环境
conda activate env_name
# 退出虚拟环境
conda deactivate
# 删除虚拟环境
conda remove -n env_name --all
# 列出所有虚拟环境
conda env list
# 列出当前环境的所有包
conda list
# 安装第三方包
conda install package_name 或 pip install package_name -i 镜像地址
# 卸载第三方包
conda uninstall package_name 或 pip uninstall package_name
6.学的:用什么技术解决什么问题,
你得用的:遇到什么问题用什么技术解决
二. RAG基础
大模型面临的问题:幻觉问题,数据时效性问题,私有化数据等
解决:1.微调,通常使用liamafactory框架实现,需要自己准备数据集,算力以及基座模型,让基座模型学习其能力以外的信息,最后合并。改变模型的参数信息
2.RAG(检索,增强,生成):大模型回复用户之前,先是基于用户的问题在外部知识库内查询相关信息,把相关信息的前几条和问题一起送入给大模型(回答问题时有参考数据信息,根据答案回复)

有了RAG后优先根据问题去检索外部知识库
3.检索:
如果单纯用MySQL搭建知识库可能行不通,内部like或=会匹配不上用户的具体内容,可以使用向量数据库:向量化模型处理为向量然后计算
先对文本进行切分,分词,得到token
查询词表【不同分词模型的词表不一样】,得到用户回答对应的token id
然后把token id拿去做计算,基于他们找到外部数据库内对应的词
4.在LLM中处理词语之间的相关性,我们通过使用的是余弦相似度,向量化模型把文本处理为向量后,若两个文本之间相似度搞,那么他们就离得近
比如国王和男人离得近,国王和狗离得远
5.在我们通过问题检索数据的时候,我们会提前把数据导入到数据库中【向量数据库】,导入的数据都是向量化后的数据 ---- 基于问题检索步骤:
第一步:问题向量化 第二步:问题和向量数据库中的所有问题依次做余弦相似度比对 第三步:返回 top-k
6.知识库--加载器:
加载器作用:读取文档中的内容加载器分类:不同结构的文本,选择不同的加载器来读取加载器的结果:它是一个列表,里面就是 document 对象,通常 document 对象有 2 个属性:page_content:数据内容metadata:元数据信息,对于数据内容的描述,比如这个数据来自于哪里
三. 创建加载器
1.学会如何去导入所需的数据
获取项目根路径:base_path = str(Path(os.path.dirname(_ _file__)).parent)
| 部分 | 含义 |
|---|---|
__file__ | 当前 .py 文件本身的完整路径(比如 D:/project/src/loader.py) |
os.path.dirname(__file__) | 获取当前文件所在的目录路径(D:/project/src/) |
Path(...) | 把字符串路径转成 pathlib.Path 对象,方便调用 .parent 等方法 |
.parent | 取上层目录,即项目根目录(D:/project/) |
str(...) | 转回字符串 |
拼接数据集路径:file_path = os.path.join(base_path,'datasets','数据')
os.oath.join会把各部分系统对应的分隔符拼起来(Windows用\ ,Linux/Mac用/ )
2.引入加载器
txt加载器类(md加载器类也可直接使用txt加载器):
from langchain_community.document_loaders import TextLoader
if __name__ == "__main__":
# 创建加载器对象
loader = TextLoader(
file_path = file_path,
encoding = 'utf-8',
)
# 加载数据
data = loader.load()
# 打印数据
print(data)
pdf加载器类:
from langchain_community.document_loaders import PyPDFLoader
csv加载器类:
from langchain_community.document_loaders import CSVLoader
json加载器类:
from langchain_community.document_loaders import JSONLoader
图片加载器的使用:
由于依赖冲突,目前选择其他方法解决:
# 使用 pytesseract 直接识别图片中的文字
import pytesseract
from PIL import Image
import os
from pathlib import Path
# 配置 tesseract.exe 位置
pytesseract.tesseract_cmd = r'D:\Tesseract-OCR\tesseract.exe'
# 把 Tesseract 目录加入 PATH,确保能找到依赖的 DLL
os.environ['PATH'] = r'D:\Tesseract-OCR;' + os.environ.get('PATH', '')
# 获取项目根路径
base_path = str(Path(os.path.dirname(__file__)).parent)
# 拼接图片路径
file_path = os.path.join(base_path, 'datasets', '黑神话.png')
if __name__ == '__main__':
# 打开图片并进行 OCR 识别(中文简体)
img = Image.open(file_path)
text = pytesseract.image_to_string(img, lang='chi_sim')
print(text)
word加载器的使用:
from docx import Document
import os
from pathlib import Path
base_path = str(Path(os.path.dirname(__file__)).parent)
file_path = os.path.join(base_path,'datasets','test.docx')
if __name__ == '__main__':
doc = Document(
file_path
)
data = []
# 遍历表格
for table in doc.tables:
for row in table.rows:
row_data = []
for cell in row.cells:
row_data.append(cell.text)
data.append(row_data)
print(data)
更多推荐
所有评论(0)