一. 项目开发注意事项

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)

更多推荐