大模型工程师日记(十三):检索增强生成(RAG)

news2025/3/9 13:02:19

Document loaders和Text splitters

Document loaders(文档加载器)

Document loaders(文档加载器) 这些类加载文档对象。LangChain与各种数据源有数百个集成,可以从中加载数据:Slack、Notion、Google Drive等。 每个文档加载器都有自己特定的参数,但它们可以通过相同的方式使用.load方法调用。 以下是一个示例用法:

from langchain_community.document_loaders.csv_loader import CSVLoader
loader = CSVLoader(
    ...  # <-- 在这里添加特定于集成的参数
)
data = loader.load()

如何加载 CSV 文件

逗号分隔值(CSV)文件是一种使用逗号分隔值的定界文本文件。文件的每一行是一个数据记录。每个记录由一个或多个字段组成,字段之间用逗号分隔。

LangChain 实现了一个 CSV 加载器,可以将 CSV 文件加载为一系列 Document 对象。CSV 文件的每一行都会被翻译为一个文档。

#示例:csv_loader.py
from langchain_community.document_loaders.csv_loader import CSVLoader

file_path = (
    "../../resource/doc_search.csv"
)
loader = CSVLoader(file_path=file_path,encoding="UTF-8")
data = loader.load()
for record in data[:2]:
    print(record)

输出的结果

自定义 CSV 解析和加载

CSVLoader 接受一个 csv_args 关键字参数,用于自定义传递给 Python 的 csv.DictReader 的参数。有关支持的 csv 参数的更多信息,请参阅 csv 模块 文档。

#示例:csv_custom.py
from langchain_community.document_loaders.csv_loader import CSVLoader

file_path = (
    "../../resource/doc_search.csv"
)
loader = CSVLoader(
    file_path=file_path,
    encoding="UTF-8",
    csv_args={
        "delimiter": ",",
        "quotechar": '"',
        "fieldnames": ["Name", "Species", "Age", "Habitat"],
    },
)
data = loader.load()
for record in data[:2]:
    print(record)

如何加载 HTML

超文本标记语言(HTML)是用于在Web浏览器中显示的文档的标准标记语言。

这里介绍了如何将HTML文档加载到LangChain的Document对象中,以便我们可以在下游使用。

解析HTML文件通常需要专门的工具。在这里,我们演示了如何通过Unstructured和BeautifulSoup4进行解析,可以通过pip安装。

使用Unstructured加载HTML
%pip install "unstructured[html]"
#示例:html_loader.py
from langchain_community.document_loaders import UnstructuredHTMLLoader

file_path = "../../resource/content.html"
loader = UnstructuredHTMLLoader(file_path, encodings="UTF-8")
data = loader.load()
print(data)
使用BeautifulSoup4加载HTML

我们还可以使用BeautifulSoup4使用BSHTMLLoader加载HTML文档。这将将HTML中的文本提取到page_content中,并将页面标题提取到metadatatitle中。

#示例:html_bs4.py
from langchain_community.document_loaders import BSHTMLLoader

file_path = "../../resource/content.html"
loader = BSHTMLLoader(file_path, open_encoding="UTF-8")
data = loader.load()
print(data)

如何加载 PDF文件

便携式文档格式(PDF)是由Adobe于1992年开发的一种文件格式,标准化为ISO 32000。它以一种与应用软件、硬件和操作系统无关的方式呈现文档,包括文本格式和图像。

本指南介绍了如何将PDF文档加载到我们在下游使用的LangChain Document格式中。

LangChain集成了许多PDF解析器。有些解析器简单且相对低级,而其他解析器支持OCR和图像处理,或进行高级文档布局分析。选择合适的解析器将取决于您的应用程序。下面我们列举了一些可能的选择。

使用PyPDF

这里我们使用pypdf将PDF加载为文档数组,其中每个文档包含页面内容和带有page编号的元数据。

#示例:pdf_loader.py
from langchain_community.document_loaders import PyPDFLoader
file_path = ("../../resource/pytorch.pdf")
loader = PyPDFLoader(file_path)
pages = loader.load_and_split()
print(pages[0])

这种方法的优点是可以通过页码检索文档。

对PDF进行向量搜索

一旦我们将PDF加载到LangChain的Document对象中,我们可以像通常一样对它们进行索引(例如,RAG应用程序)

#示例:pdf_search.py
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
faiss_index = FAISS.from_documents(pages, OpenAIEmbeddings())
docs = faiss_index.similarity_search("What is PyTorch?", k=2)
for doc in docs:
    print(str(doc.metadata["page"]) + ":", doc.page_content[:300])

从图像中提取文本一些 PDF 包含文本图像,例如扫描文档或图表。使用 `rapidocr-onnxruntime` 软件包,我们也可以将图像提取为文本:

#示例:pdf_image_text.py
#pip install rapidocr-onnxruntime
file_path = ("../../resource/pytorch.pdf")
loader = PyPDFLoader(file_path, extract_images=True)
pages = loader.load()
#识别第9页图片文字
print(pages[8].page_content)

下一篇日记。为大家分享文本分类器如何分类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2311149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端开发10大框架深度解析

摘要 在现代前端开发中&#xff0c;框架的选择对项目的成功至关重要。本文旨在为开发者提供一份全面的前端框架指南&#xff0c;涵盖 React、Vue.js、Angular、Svelte、Ember.js、Preact、Backbone.js、Next.js、Nuxt.js 和 Gatsby。我们将从 简介、优缺点、适用场景 以及 实际…

图像形成与计算机视觉基础

1. 图像形成的基本原理 图像形成是物理世界与传感器&#xff08;如胶片、CCD/CMOS&#xff09;交互的过程&#xff0c;核心是光线的传播与记录。 1.1 直接放置胶片模型 物理原理&#xff1a;物体表面反射的光线直接照射到胶片上&#xff0c;但无任何遮挡或聚焦机制。 问题&a…

Spring Boot 缓存最佳实践:从基础到生产的完整指南

Spring Boot 缓存最佳实践&#xff1a;从基础到生产的完整指南 引言 在现代分布式系统中&#xff0c;缓存是提升系统性能的银弹。Spring Boot 通过 spring-boot-starter-cache​ 模块提供了开箱即用的缓存抽象&#xff0c;但如何根据业务需求实现灵活、可靠的缓存方案&#xf…

Ubuntu20.04双系统安装及软件安装(一):系统安装

Ubuntu20.04双系统安装及软件安装&#xff08;一&#xff09;&#xff1a;系统安装 Ubuntu系统卸载Ubuntu20.04安装BIOS进入系统安装 许久没写博客了&#xff0c;今天开始重新回归了。首先记录我在双系统上重装Ubuntu20.04的安装过程记录以及个人见解。 Ubuntu系统卸载 参考双…

Linux14-io多路复用

UDP:单循环服务器,服务器同一时刻只能响应一个客户端的请求 TCP:并发服务器,服务器同一时刻只能响应多个客户端的请求 一、构建TCP并发服务器 让TCP服务端具备同时响应多个客户端的能力。 1.多进程 资源消耗大,同资源平台下,并发量小。 2.多线程 创建线程、进程,比…

Next.js项目实战-ai助手帮我写文章发布视频第1节(共89节)

&#x1f602;Ai在国内外已经杀疯了&#xff0c;老板要求我们把速度再提升快一些&#xff0c;哪怕是几秒&#xff0c;几百毫秒也行&#xff5e;现在&#xff0c;马上就要&#xff0c;就地就要&#xff0c;只好搬出前端服务端(大保健)&#x1f613;。没错&#xff0c;今天我要分…

探秘Transformer系列之(9)--- 位置编码分类

探秘Transformer系列之&#xff08;9&#xff09;— 位置编码分类 文章目录 探秘Transformer系列之&#xff08;9&#xff09;--- 位置编码分类0x00 概述0x01 区别1.1 从直观角度来看1.2 从模型处理角度来看1.3 优劣 0x02 绝对位置编码2.1 基础方案2.2 训练式2.3 三角函数式2.4…

笔记四:C语言中的文件和文件操作

Faye&#xff1a;只要有正确的伴奏&#xff0c;什么都能变成好旋律。 ---------《寻找天堂》 目录 一、文件介绍 1.1程序文件 1.2 数据文件 1.3 文件名 二、文件的打开和关闭 2.1 文件指针 2.2.文件的打开和关闭 2.3 文件读取结束的判定 三、 文件的顺序读写 3.1 顺序读写…

Zabbix+Deepseek实现AI告警分析(非本地部署大模型版)

目录 前言技术架构DeepSeek API获取1. 注册账号2. 申请API-Key Zabbix告警AI分析 实现1. 创建Scripts2. Scripts关键参数说明3. 需要注意 测试参考链接 前言 最近手伤了&#xff0c;更新频率下降…… 近期在Zabbix社区看到了一篇文章&#xff1a;张世宏老师分享的《Zabbix告警分…

国产NAS系统飞牛云fnOS深度体验:从运维面板到博客生态全打通

文章目录 前言1. 飞牛云本地部署1Panel2. 1Panel功能介绍3. 公网访问1Panel控制面板4. 固定1Panel公网地址5. 1Panel搭建Halo博客6. 公网访问Halo个人博客 前言 嘿&#xff0c;小伙伴们&#xff01;是不是厌倦了服务器管理的繁琐和搭建个人网站的复杂&#xff1f;今天就来一场…

使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输

第一题、使用qss&#xff0c;通过线程&#xff0c;使进度条自己动起来 mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H#include <QObject> #include <QThread> #include <QDebug>class mythread : public QThread {Q_OBJECT public:mythread(QObject* …

博查搜索API日调用量突破3000万次,达到Bing API的1/3。

根据第三方机构统计&#xff0c;2024年Bing Search API 全球日均调用量为1.1亿次。截至2025年3月&#xff0c;博查 Search API日均调用量已达到3000万次&#xff08;约为Bing的1/3&#xff09;&#xff0c;承接着国内AI应用60%的联网搜索请求。

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;SAM 文件 & Windows 本地认证流程 0x0101&#xff1a;SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的&#xff0c;在登录 Windows 的时候&am…

输电线路杆塔倾斜智能监测:守护电网安全的智慧之眼

​ ​2023年夏&#xff0c;某超高压输电线路突发倒塔事故&#xff0c;导致三省市大面积停电&#xff0c;直接经济损失超2.3亿元。事后调查显示&#xff0c;杆塔倾斜角度早已超出安全阈值&#xff0c;但传统巡检未能及时发现。这个刺痛行业的案例&#xff0c;揭开了电力设施监…

探索.NET 10 的新特性,开发效率再升级!

前言 最近&#xff0c;.NET 10 发布啦&#xff0c;作为长期支持&#xff08;LTS&#xff09;版本&#xff0c;接下来的 3 年里它会给开发者们稳稳的幸福。今天咱就来唠唠它都带来了哪些超实用的新特性。可在指定链接下载。 新特性 下面将介绍了.NET 10的新特性&#xff0c;其…

算法·搜索

搜索问题 搜索问题本质也是暴力枚举&#xff0c;一般想到暴力也要想到利用回溯枚举。 排序和组合问题 回溯法 去重问题&#xff1a;定义全局变量visited还是局部变量visited实现去重&#xff1f; 回溯问题 图论中的搜索问题 与一般的搜索问题一致&#xff0c;只不过要多…

《水利水电安全员考试各题型对比分析及应对攻略》

《水利水电安全员考试各题型对比分析及应对攻略》 单选题&#xff1a; 特点&#xff1a;四个选项中只有一个正确答案&#xff0c;相对难度较小。主要考查对基础知识的掌握程度。 应对攻略&#xff1a;认真审题&#xff0c;看清题目要求。对于熟悉的知识点&#xff0c;直接选择…

鸿蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏&#xff0c;内容栏和公工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&am…

【AI深度学习网络】卷积神经网络(CNN)入门指南:从生物启发的原理到现代架构演进

深度神经网络系列文章 【AI深度学习网络】卷积神经网络&#xff08;CNN&#xff09;入门指南&#xff1a;从生物启发的原理到现代架构演进【AI实践】基于TensorFlow/Keras的CNN&#xff08;卷积神经网络&#xff09;简单实现&#xff1a;手写数字识别的工程实践 引言 在当今…

江科大51单片机笔记【10】蜂鸣器播放提示器音乐(下)

一、蜂鸣器播放提示器 这里我们要用Key&#xff0c;Delay&#xff0c;Nixie模块 并且把Nixie.c函数里的这两句注释&#xff0c;因为之前是动态显示&#xff0c;延时后马上清零&#xff0c;现在是静态显示&#xff0c;所以需要把他注释掉 // Delay(1); // P00x00; 先验…