langchain入门系列之三 数据连接器的使用

news2024/9/23 15:25:58

数据连接处理流程

在这里插入图片描述

数据加载器结构

在这里插入图片描述

数据加载器示例 - CSV

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

这里需要自己准备一个csv文件

from langchain_community.document_loaders.csv_loader import CSVLoader
file_path = (
    "D:\LangChainM\lang_chain_study\data.csv"
)
loader = CSVLoader(file_path=file_path)
data = loader.load()
for record in data[:2]:
    print(record)
--------------------------------------
page_content='name: John
age: 20
city: New York' metadata={'source': 'D:\\LangChainM\\lang_chain_study\\data.csv', 'row': 0}
page_content='name: Jane
age: 25
city: Los Angeles' metadata={'source': 'D:\\LangChainM\\lang_chain_study\\data.csv', 'row': 1}

数据加载器示例-HTML

langchain加载器示例文档连接

# langchain自己的html解析包
pip install "unstructured[html]"

from langchain_community.document_loaders import UnstructuredHTMLLoader
file_path = "..//fake-content.html"
loader = UnstructuredHTMLLoader(file_path)
data = loader.load()
print(data)

# bs4加载html文件
pip install bs4
from langchain_community.document_loaders import BSHTMLLoader
loader = BSHTMLLoader(file_path)
data = loader.load()
print(data)

意味着langchain可以通过构建爬取、解析的workflow(这个后面会讲到),相信随着技术的发展,以后爬虫的编写会越来越简单。

文档转换器

一般加载了文档之后,会对其进行转换,从而更好的适应应用场景。最简单的做法是通过将长文档进行拆分,较小的块可以避免大语言模型对提示词文本长度的限制。而langchain里有许多内置的文档转换器,可以对文档进行拆分、合并、过滤。

文本分割器

这个文本分割器是用于通用文本的推荐工具。它接受一个字符列表作为参数。它会按顺序尝试在这些字符上进行分割,直到块足够小。默认的字符列表是 ["\n\n", "\n", " ", ""]。这样做的效果是尽可能保持所有段落(然后是句子,再然后是单词)在一起,因为这些通常看起来是语义上相关的文本块。值得注意是,为了保持连贯性,块与块之间是有重复的句子或单词!
在这里插入图片描述

pip install -qU langchain-text-splitters

from langchain_text_splitters import RecursiveCharacterTextSplitter
# 加载示例文档
with open("黑神话.txt") as f:
    state_of_the_union = f.read()
text_splitter = RecursiveCharacterTextSplitter(
    # 设置一个非常小的块大小,只是为了展示。
    chunk_size=100,
    chunk_overlap=20,
    length_function=len,
    is_separator_regex=False,
)
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print(texts[1])
文本词嵌入

Embeddings类是一个专为与文本嵌入模型进行交互而设计的类。有许多嵌入模型提供商(如OpenAI、Cohere、Hugging Face等)- 这个类旨在为它们提供一个标准接口。

Embeddings类会为文本创建一个向量表示。这很有用,因为这意味着我们可以在向量空间中思考文本,并做一些类似语义搜索的事情,比如在向量空间中寻找最相似的文本片段。

在这里插入图片描述

以上图片中距离就比近。

没有代码示例,可以自己探索!

向量存储站

存储和搜索非结构化数据的最常见方式之一是将其嵌入并存储生成的嵌入向量,然后在查询时对非结构化查询进行嵌入,并检索与嵌入查询“最相似”的嵌入向量。向量存储负责存储嵌入数据并为您执行向量搜索。

示例代码(以PDF文件为例)

pip install pypdf

from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("C:\\Users\\牧羊少年奇幻之旅.pdf")
documents = loader.load()
len(documents) # pdf有多少页
------------------------------------------------
documents[10] # 第10页内容
Document(metadata={'source': 'C:\\Users\\牧羊少年奇幻之旅.pdf', 'page': 10}, page_content='此,他時不時給⽺群讀⼀些給他留下深刻印象的書籍……\n「你是怎麼學會讀書識字的?」')
# 选择合适的文本分割器,这里我们选择通用型的文本分割器
from langchain.text_splitter import RecursiveCharacterTextSplitter

text_spliter = RecursiveCharacterTextSplitter(
    chunk_size = 100,
    chunk_overlap = 20,
    length_function = len,
)
pages = loader.load_and_split(text_spliter)
print(pages[10])
--------------------------------------------
page_content='有關於煉⾦術的正經刊物問世,我便⽤⼿頭微薄的資⾦購買進⼝書
籍,就像本書中的⼀個⼈物那樣,每天花很多時間去研究煉⾦術複雜
的符號系統。我曾試圖請教⾥約熱內盧兩三位真正致⼒於煉⾦術的研' metadata={'source': 'C:\\Users\\牧羊少年奇幻之旅.pdf', 'page': 3}
# 可以看到经过文本分割器的切割,原本pdf的第三页内容,经过切割成为分割器的第10页内容。成功由大到小。

# 文本词嵌入,这里我们使用的是千帆的包
from langchain.embeddings import QianfanEmbeddingsEndpoint

embeddings_model = QianfanEmbeddingsEndpoint()
embeddings = embeddings_model.embed_documents([pages[10].page_content])
len(embeddings), len(embeddings[0])
embeddings[0]
------------------------------------------
[0.13320407271385193,
 0.012875556014478207,
 0.10420265048742294,
 0.06843224912881851,
 -0.006438420154154301,
 -0.09219038486480713,
 -0.021207181736826897,
 -0.005400769412517548,
 -0.07586964219808578,
 0.08065909147262573,
 0.034459590911865234,
 0.04865811765193939,
 0.06758882105350494,
 0.04314351826906204,
 -0.04163273051381111,
 0.030251313000917435,
 -0.0248243510723114,
 -0.03728075325489044,
 -0.09535235166549683,
 0.027110563591122627,
 -0.02325417473912239,
 -0.030913034453988075,
 -0.03559505194425583,
 -0.07895366102457047,
 0.013680539093911648,
...
 0,
 0,
 0,
 -0.03681802377104759,
 0]

# 向量存储,我们使用chromadb来进行本地的向量存储
# pip install chromadb

from langchain.embeddings.baidu_qianfan_endpoint import QianfanEmbeddingsEndpoint
from langchain.vectorstores import Chroma

persist_directory = 'C:\\Users\\chroma' 
embedding = QianfanEmbeddingsEndpoint()
db = Chroma.from_documents(
    documents=pages[:10],
    embedding=embedding,
    persist_directory=persist_directory
    )

# 相似度查询
query = "男孩"
docs = db.similarity_search(query=query)
len(docs)

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

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

相关文章

【Java】—— Java面向对象基础:在Java中创建和管理员工及其生日信息

目录 定义MyDate类 定义Employee类 创建测试类并测试员工对象 运行结果 总结 在Java中,面向对象编程(OOP)的核心在于定义类(Class)和对象(Object)。本篇文章将通过一个简单的示例来展示如何…

Scrapy 项目部署Scrapyd

什么是Scrapyd Scrapyd 是一个用来管理和运行 Scrapy 爬虫的服务。它允许用户将 Scrapy 项目部署到服务器上,然后通过一个简单的 API 来启动、停止和监控爬虫的运行。Scrapyd 可以帮助简化爬虫的部署过程,使得用户不必手动在服务器上运行爬虫&#xff0c…

单片机原理及技术(八)—— 串行口的工作原理及应用

目录 一、串行通信基础 1.1 并行通信与串行通信 1.1.1 并行通信 1.1.2 串行通信 1.2 同步通信与异步通信 1.3 串行通信的传输模式 二、串行口的结构 2.1 串行口控制寄存器SCON 2.1.1 SM0、SM1 2.1.2 SM2 2.1.3 REN 2.1.4 TB8 2.1.5 RB8 2.1.6 TI 2.1.7 RI 2.2 …

云服务器在媒体处理中的应用有哪些

云服务器在媒体处理中扮演着至关重要的角色,无论是视频流服务、音频转码处理,还是图片优化服务,云服务器都提供了高效、灵活且可扩展的解决方案。以下将详细探讨云服务器在媒体处理中的应用。 首先,云服务器在视频流服务方面发挥着…

python怎么判断大小写

Python提供了isupper(),islower(),istitle()方法用来判断字符串的大小写,具体实例如下: >>> str_1 "HELLO PYTHON" # 全大写 >>> str_2 "Hello PYTHON" # 大小写混合 >>> str_3…

Spring Boot 有哪些优点?

Spring Boot 有哪些优点? 💖The Begin💖点点关注,收藏不迷路💖 Spring Boot以其简洁和高效的特点,革新了Java应用的开发和部署方式。以下是其几大核心优势,让你一目了然: 减少时间成…

5000套精美PPT免费分享

目录 部分展示目录 几乎包含各种应用场景的PPT模板 这里只展示部分目录 部分展示目录 ##PPT下载 链接:https://pan.baidu.com/s/1ckvN9xeMR82hL30lHXfJ0g 提取码:ZYNB 点击下载,记得点个赞哦

MAML算法详解

引言:MAML是元学习的经典论文,也是基于optimization based meta-learning方法的开山之作,后序很多工作都是follow这篇工作。目前已经有13140的引用,其算法思想很巧妙,值得反复品读。论文链接:http://procee…

APP备案FAQ--荣耀应用上架(可获得相关资料)

1.常见的接入商有哪些? 目前常见的接入商有:华为云、阿里云、腾讯云。关于如何选择接入商,具体还需要根据您所选择的服务器提供商而定。 2.已完成网站ICP备案还需要进行APP备案吗? 需要。即使您已完成网站ICP备案,仍需…

基于game-based算法的动态频谱访问matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 展示了负载因子P和次级传输功率不同的HPE。 从图中可以看出,随着|hP E|扩大,用户P更好的为二级用户分配更多的…

AI在医学领域:谷歌的HeAR生物声学模型

声学非语义属性的语音可以使机器学习模型执行诸如情绪识别、说话者识别和痴呆检测等副语言任务。脑卒中、帕金森病、阿尔茨海默病、脑瘫和肌萎缩侧索硬化症(ALS)等脑血管和神经退行性疾病也可以使用非语义语音模式,如发音、共鸣和发声等来检测…

es 7.17.23安装ik插件启动失败,access denied,Permission

情况简述 windows平台,下载了7.17.23的es以及7.17.23的ik分词器的zip包之后( 下载地址(官方推荐的):Index of: analysis-ik/stable/ ),解压该ik的包到es的plugins下,目录结构&…

基于layui实现简单的计分板页面

使用Layui、HTML、CSS练手做了个简单的计分板页面(虽然HTML和CSS学的很烂,而且页面尺寸变化时对齐还有问题)。布局采用的Layui的栅格系统,同时使用Layui的按钮、弹出层模块设置样式及获取用户输入,同时调用jQuery相关功…

comfyUI使用flux模型报错got promptUsing pytorch attention in VAE,

使用的flux模型如下,应该下载的模型都已经下载好放在正确位置 但是执行之后报错如下 got prompt Using pytorch attention in VAE Using pytorch attention in VAE 然后comfyUI的命令行就强制退出了。 解决方法: 改虚拟内存为系统管理的大小即可

8月25日cs61c

小语 天主这样磨难你,试探你,终究是为了使你获得幸福。 1.啃黑书10页 14.23 1.本书着重展示硬件和软件的关系 2.学习时,除了掌握基本原理,还应了解该领域最新进展 3.为了使程序运行更快,必须将其并行化 4.量化&…

指针之旅(1)—— 指针基础概念知识(详细解析)

前言:该篇我将详细讲解指针当中的一些基本概念,有内存和地址的部分硬件知识,有专门服务于指针的操作符&和*,有指针大小固定不变的原因,还有专属于指针的运算规则。 目录 1. 内存和地址 1.1 内存地址的概念&…

力扣网页端无法进入(问题已解决)

力扣网页端无法进入(问题已解决) 这两天在刷leetcode的时候突然发现无法进入力扣主页,换了浏览器也不行,但其他网站都能正常进去,其它主机也可以。 可能是DNS解析错误 在实际应用过程中可能会遇到DNS解析错误的问题&am…

OpenCV Rect_< _Tp > 模版类详解及其成员函数用法示例

OpenCV Rect_< _Tp > 模版类是一个2维矩形模板类&#xff0c;其英文全称为Rect_< _Tp > Class Template Reference&#xff0c;其公有成员函数有以下几个&#xff1a; 其公有属性有&#xff1a; Rect_< _Tp > 模版类以左上角点tl&#xff0c;坐标_Tp x,Tp y及…

2023年高教社杯国赛b题详细代码 文章 教学 2024数模国赛教学: 多波束测深技术问题分析与建模

本系列专栏将包括两大块内容 第一块赛前真题和模型教学,包括至少8次真题实战教学,每期教学专栏的最底部会提供完整的资料百度网盘包括:真题、数据、可复现代码以及文章. 第二块包括赛中思路、代码、文章的参考助攻, 会提供2024年高教社国赛各个赛题的全套参考内容(一般36h内更新…

matlab与VS混合编程以及错误解决

目录 前言&#xff1a; 1. matlab打包生成dll文件 打包方法一&#xff1a; 打包方法二&#xff1a; 2. VS端配置 3. 代码测试 4. 错误解决 a. 1.0x0000000000000000 处有未经处理的异常(在 Project1.exe 中): 0xC0000005: 执行位置 0x0000000000000000 时发生访问冲突。…