Langchain 使用文档加载器从各种来源获取信息并准备处理。这些加载器充当数据连接器,获取信息并将其转换为 Langchain 可以理解的格式。
LangChain 中有几十个文档加载器,可以在这查看https://python.langchain.com/v0.2/docs/integrations/document_loaders/
但是实际使用过程中,这些解析的效果层次补齐,需要结合自己的文件去写如何加载具体文档。这个也是在后续开发框架的过程中,我们可以选取langchian的document作为处理对象,但是文件解析需要自己去写和实现。
在本章中,我们将介绍其中的一些:
- TextLoader
- CSVLoader
- UnstructuredFileLoader
- DirectoryLoader
- UnstructuredHTMLLoader
- JSONLoader
- PyPDFLoader
- ArxivLoader
- Docx2txtLoader
TextLoader
代码语言:javascript
from langchain_community.document_loaders import TextLoader
loader = TextLoader("text.txt")
loader.load()
"""
[Document(page_content='I have some instructions here.\nThis is the second row.', metadata={'source': 'text.txt'})]
"""
loader = TextLoader("index.md")
loader.load()
"""
[Document(page_content='some instructions\n', metadata={'source': 'index.md'})]
"""
CSVLoader
代码语言:javascript
import pandas as pd
# Create a simple DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# Export the DataFrame to a CSV file
csv_file_path = 'sample_data.csv'
df.to_csv(csv_file_path, index=False)
from langchain_community.document_loaders.csv_loader import CSVLoader
loader = CSVLoader(file_path='sample_data.csv')
data = loader.load()
data
"""
[Document(page_content='Name: Alice\nAge: 25\nCity: New York', metadata={'source': 'sample_data.csv', 'row': 0}),
Document(page_content='Name: Bob\nAge: 30\nCity: Los Angeles', metadata={'source': 'sample_data.csv', 'row': 1}),
Document(page_content='Name: Charlie\nAge: 35\nCity: Chicago', metadata={'source': 'sample_data.csv', 'row': 2})]
"""
如有必要,我们可以在读取文件时自定义 CSV 参数:
代码语言:javascript
loader = CSVLoader(file_path='sample_data.csv', csv_args={
'delimiter': ',',
'quotechar': '"',
'fieldnames': ['Name', 'Age', 'City']
})
data = loader.load()
data
# now the headers are also a row.
"""
[Document(page_content='Name: Name\nAge: Age\nCity: City', metadata={'source': 'sample_data.csv', 'row': 0}),
Document(page_content='Name: Alice\nAge: 25\nCity: New York', metadata={'source': 'sample_data.csv', 'row': 1}),
Document(page_content='Name: Bob\nAge: 30\nCity: Los Angeles', metadata={'source': 'sample_data.csv', 'row': 2}),
Document(page_content='Name: Charlie\nAge: 35\nCity: Chicago', metadata={'source': 'sample_data.csv', 'row': 3})]
"""
当从 CSV 文件加载数据时,加载器通常会为 CSV 中的每一行数据创建一个单独的"文档"对象。
默认情况下,每个文档的来源都设置为 CSV 本身的整个文件路径。如果想跟踪 CSV 中每条信息的来源,这可能并不理想。
可以使用 source_column 指定 CSV 文件中的列名。然后,每行特定列中的值将用作从该行创建的相应文档的单独来源
代码语言:javascript
loader = CSVLoader(file_path='sample_data.csv', source_column="Name")
data = loader.load()
data
"""
[Document(page_content='Name: Alice\nAge: 25\nCity: New York',
metadata={'source': 'Alice', 'row': 0}),
Document(page_content='Name: Bob\nAge: 30\nCity: Los Angeles',
metadata={'source': 'Bob', 'row': 1}),
Document(page_content='Name: Charlie\nAge: 35\nCity: Chicago',
metadata={'source': 'Charlie', 'row': 2})]
"""
这在使用涉及根据信息来源回答问题的"链"(可能是数据处理管道)时特别有用。通过为每个文档提供单独的源信息,这些链可以在处理时考虑数据的来源,并可能提供更细致入微或更可靠的答案。
UnstructuredCSVLoader
与CSVLoader
不同,CSVLoader
将每一行视为一个单独的文档,并使用标题定义数据,而在 UnstructuredCSVLoader
中,整个 CSV 文件被视为单个"非结构化表"元素。当您想要将数据作为整个表而不是单个条目进行分析时,这很有用。
代码语言:javascript
from langchain_community.document_loaders.csv_loader import UnstructuredCSVLoader
loader = UnstructuredCSVLoader(
file_path="sample_data.csv", mode="elements"
)
docs = loader.load()
docs
"""
[Document(page_content='\n\n\nName\nAge\nCity\n\n\nAlice\n25\nNew York\n\n\nBob\n30\nLos Angeles\n\n\nCharlie\n35\nChicago\n\n\n', metadata={'source': 'sample_data.csv', 'filename': 'sample_data.csv', 'languages': ['eng'], 'last_modified': '2024-03-04T18:05:41', 'text_as_html': '<table border="1" class="dataframe">\n <tbody>\n <tr>\n <td>Name</td>\n <td>Age</td>\n <td>City</td>\n </tr>\n <tr>\n <td>Alice</td>\n <td>25</td>\n <td>New York</td>\n </tr>\n <tr>\n <td>Bob</td>\n <td>30</td>\n <td>Los Angeles</td>\n </tr>\n <tr>\n <td>Charlie</td>\n <td>35</td>\n <td>Chicago</td>\n </tr>\n </tbody>\n</table>', 'filetype': 'text/csv', 'category': 'Table'})]
"""
如果在"元素"模式下操作,则表的 HTML 表示将可在元数据中访问。
代码语言:javascript
print(docs[0].metadata["text_as_html"])
"""
<table border="1" class="dataframe">
<tbody>
<tr>
<td>Name</td>
<td>Age</td>
<td>City</td>
</tr>
<tr>
<td>Alice</td>
<td>25</td>
<td>New York</td>
</tr>
<tr>
<td>Bob</td>
<td>30</td>
<td>Los Angeles</td>
</tr>
<tr>
<td>Charlie</td>
<td>35</td>
<td>Chicago</td>
</tr>
</tbody>
</table>
"""
UnstructuredFileLoader
与 TextLoader
等专为特定格式设计的加载器不同,UnstructuredFileLoader
会自动检测您提供的文件类型。
加载器利用了底层的"unstructured"库。该库会分析文件内容并尝试根据文件类型提取有意义的信息。
代码语言:javascript
from langchain_community.document_loaders import UnstructuredFileLoader
loader = UnstructuredFileLoader("text.txt")
docs = loader.load()
docs
"""
[Document(page_content='I have some instructions here.\n\nThis is the second row.', metadata={'source': 'text.txt'})]
"""
loader = UnstructuredFileLoader(
"text.txt", mode="elements"
)
docs = loader.load()
docs
"""
[Document(page_content='I have some instructions here.', metadata={'source': 'text.txt', 'filename': 'text.txt', 'last_modified': '2024-03-04T18:15:12', 'languages': ['eng'], 'filetype': 'text/plain', 'category': 'NarrativeText'}),
Document(page_content='This is the second row.', metadata={'source': 'text.txt', 'filename': 'text.txt', 'last_modified': '2024-03-04T18:15:12', 'languages': ['eng'], 'filetype': 'text/plain', 'category': 'NarrativeText'})]
"""
loader = UnstructuredFileLoader("your_report.html")
docs = loader.load()
docs
"""
[Document(page_content='Toggle navigation\n\nPandas Profiling Report\n\nOverview\n\nVariables\n\nInteractions\n\nCorrelations\n\nMissing values\n\nSample\n\nOverview\n\nOverview\n\nAlerts 44\n\nReproduction\n\nDataset statistics\n\nNumber of variables 44 Number of observations 58592 Missing cells 0 Missing cells (%) 0.0% Duplicate rows 0 Duplicate rows (%) 0.0% Total size in memory 19.7 MiB Average record size in memory 352.0 B\n\nVariable types\n\nText 1 Numeric 10 Categorical 16 Boolean 17\n\nairbags is highly overall correlated with cylinder and 28 other fields High correlation cylinder is highly overall correlated with airbags and 22 other fields High correlation displacement is highly overall correlated with airbags and 33 other fields High correlation engine_type is highly overall correlated with airbags and 30 other fields High correlation fuel_type is highly overall correlated with airbags and 30 other fields High correlation gear_box is highly overall correlated with airbags and 23 other fields High correlation gross_weight is highly overall correlated with airbags and 32 other fields High correlation height is highly overall correla
"""
# pip install "unstructured[pdf]"
loader = UnstructuredFileLoader("ticket.pdf")
docs = loader.load()
docs
"""
[Document(page_content='Event\n\nCommence Date\n\nReference\n\nPaul Kalkbrenner\n\n10 September,Satu
info@biletino.com', metadata={'source': 'ticket.pdf'})]
"""
DirectoryLoader
DirectoryLoader
可帮助一次性从整个目录加载多个文档。它利用了 UnstructuredFileLoader
。
代码语言:javascript
from langchain_community.document_loaders import DirectoryLoader
loader = DirectoryLoader('folder/')
docs = loader.load()
print(len(docs)) # 3
# we can declare extension, display progress bar, use multithreading
loader = DirectoryLoader('folder/', glob="*.txt", show_progress=True, use_multithreading=True)
docs = loader.load()
print(len(docs)) # 1
UnstructuredHTMLLoader
它利用"非结构化"库的功能从存储为 HTML 文件的网页中提取有意义的内容。
代码语言:javascript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div>A div element</div>
<p>a p element</p>
<div>
<p>a p inside of a div</p>
</div>
</body>
</html
代码语言:javascript
from langchain_community.document_loaders import UnstructuredHTMLLoader
loader = UnstructuredHTMLLoader("index.html")
data = loader.load()
data
"""
[Document(page_content='A div element\n\na p element\n\na p inside of a div', metadata={'source': 'index.html'})]
"""
我们可以使用BeautifulSoup4
通过BSHTMLLoader
来解析 HTML 文档。
代码语言:javascript
from langchain_community.document_loaders import BSHTMLLoader
loader = BSHTMLLoader("index.html")
data = loader.load()
data
"""
[Document(page_content='\n\n\n\nDocument\n\n\nA div element\na p element\n\na p inside of a div\n\n\n\n', metadata={'source': 'index.html', 'title': 'Document'})]
"""
JSONLoader
JSONLoader 被设计用于处理以 JSON 形式存储的数据。
代码语言:javascript
[
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"age": 30,
"city": "New York"
},
{
"id": 2,
"name": "Jane Smith",
"email": "jane.smith@example.com",
"age": 25,
"city": "Los Angeles"
},
{
"id": 3,
"name": "Alice Johnson",
"email": "alice.johnson@example.com",
"age": 28,
"city": "Chicago"
}
]
JSONLoaders
利用 JQ 库来解析 JSON 数据。JQ 提供了一种专为处理 JSON 结构而设计的强大查询语言。
jq_schema
参数允许在 JSONLoader 函数中提供 JQ 表达式。
代码语言:javascript
from langchain_community.document_loaders import JSONLoader
loader = JSONLoader(
file_path='example.json',
jq_schema='map({ name, email })',
text_content=False)
data = loader.load()
data
"""
[Document(page_content="[{'name': 'John Doe', 'email': 'john.doe@example.com'},
{'name': 'Jane Smith', 'email': 'jane.smith@example.com'}, {'name': 'Alice Johnson', 'email': 'alice.johnson@example.com'}]", metadata={'source': '/Users/okanyenigun/Desktop/codes/python__general/example.json', 'seq_num': 1})]
"""
JSON 行文件是一个文本文件,其中每行都是一个有效的 JSON 对象,由换行符分隔。
代码语言:javascript
{"name": "John Doe", "age": 30}
{"name": "Jane Smith", "age": 25}
{"name": "Alice Johnson", "age": 28}
loader = JSONLoader(
file_path='example.jsonl',
jq_schema='.content',
text_content=False,
json_lines=True)
data = loader.load()
代码语言:javascript
from pprint import pprint
pprint(data)
"""
[Document(page_content='', metadata={'source': '/Users/okanyenigun/Desktop/codes/python__general/example.jsonl', 'seq_num': 1}),
Document(page_content='', metadata={'source': '/Users/okanyenigun/Desktop/codes/python__general/example.jsonl', 'seq_num': 2}),
Document(page_content='', metadata={'source': '/Users/okanyenigun/Desktop/codes/python__general/example.jsonl', 'seq_num': 3})]
"""
PyPDFLoader
它利用 pypdf 库来加载 PDF 文件。
代码语言:javascript
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("ticket.pdf")
pages = loader.load_and_split()
pages[0]
"""
Document(page_content='Paul Kalkbrenner\nThis electronically generated document will grant you entry to the event and time specified on this ticket. The security of the ticket belongs to the\nowner
...
Sarıyer, İstanbul', metadata={'source': 'ticket.pdf', 'page': 0})
"""
我们还可以使用 UnstructuredPDFLoader 来加载 PDF。
代码语言:javascript
from langchain_community.document_loaders import UnstructuredPDFLoader
loader = UnstructuredPDFLoader("ticket.pdf")
data = loader.load()
我们有 OnlinePDFLoader 来加载在线 PDF。
代码语言:javascript
from langchain_community.document_loaders import OnlinePDFLoader
loader = OnlinePDFLoader("https://arxiv.org/pdf/2302.03803.pdf")
data = loader.load()
data
"""
[Document(page_content='3 2 0 2\n\nb e F 7\n\n]\n\nG A . h t a m\n\n[\n\n1 v 3 0 8 3 0 . 2 0 3 2 : v i X r a\n\nA WEAK (k, k)-LEFSCHETZ THEOREM FOR PROJECTIVE TORIC ORBI...
"""
还有更多利用不同来源的......
代码语言:javascript
# PyPDFium2Loader
from langchain_community.document_loaders import PyPDFium2Loader
loader = PyPDFium2Loader("ticket.pdf")
data = loader.load()
# PDFMinerLoader
from langchain_community.document_loaders import PDFMinerLoader
loader = PDFMinerLoader("ticket.pdf")
data = loader.load()
# PDFMinerPDFasHTMLLoader
from langchain_community.document_loaders import PDFMinerPDFasHTMLLoader
loader = PDFMinerPDFasHTMLLoader("ticket.pdf")
data = loader.load()[0] # entire PDF is loaded as a single Document
# PyMuPDFLoader
from langchain_community.document_loaders import PyMuPDFLoader
loader = PyMuPDFLoader("ticket.pdf")
data = loader.load()
# Directory loader for PDF
from langchain_community.document_loaders import PyPDFDirectoryLoader
loader = PyPDFDirectoryLoader("folder/")
docs = loader.load()
ArxivLoader
它旨在从 arXiv 开放存取库中获取和处理文档。
代码语言:javascript
# pip install arxiv
from langchain_community.document_loaders import ArxivLoader
docs = ArxivLoader(query="1605.08386", load_max_docs=2).load()
print(len(docs))
print()
print(docs[0].metadata)
"""
1
{'Published': '2016-05-26', 'Title': 'Heat-bath random walks with Markov
bases', 'Authors': 'Caprice Stanley, Tobias Windisch', 'Summary':
'Graphs on lattice points are studied whose edges come from a finite set of\nallowed moves of arbitrary length. We show that the diameter of these graphs on\nfibers of a fixed integer matrix can be bounded from above by a constant. We\nthen study the mixing behaviour of heat-bath random walks on these graphs. We\nalso state explicit conditions on the set of moves so that the heat-bath random\nwalk, a generalization of the Glauber dynamics, is an expander in fixed\ndimension.'}
"""
Docx2txtLoader
它适用于 Microsoft Office Word 文档。
代码语言:javascript
from langchain_community.document_loaders import Docx2txtLoader
loader = Docx2txtLoader("example_data/fake.docx")
data = loader.load()
data
"""
[Document(page_content='Lorem ipsum dolor sit amet.',
metadata={'source': 'ex...
"""
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包 》,扫码获取~
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容 :
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容 :
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词
- L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用
- L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容 :
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节
- L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景
- L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例
- L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例
- L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容 :
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
全套 《LLM大模型入门+进阶学习资源包 》↓↓↓ 获取~