一、前言
在 LangChain框架中,提供了Loader机制,以统一的方式来从各种数据源获取数据,使得开发人员可以方便地集成不同类型的数据源,而无需为每种数据源编写特定的加载代码。它可以将不同格式的数据转换为 LangChain 可以处理的统一格式,为后续的文本处理、知识提取和问答等任务提供基础。
二、术语
2.1.LangChain
是一个全方位的、基于大语言模型这种预测能力的应用开发工具。LangChain的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。
LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些 API,搭建起来的一些框架、模块和接口。
LangChain的主要特性:
1.可以连接多种数据源,比如网页链接、本地PDF文件、向量数据库等
2.允许语言模型与其环境交互
3.封装了Model I/O(输入/输出)、Retrieval(检索器)、Memory(记忆)、Agents(决策和调度)等核心组件
4.可以使用链的方式组装这些组件,以便最好地完成特定用例。
5.围绕以上设计原则,LangChain解决了现在开发人工智能应用的一些切实痛点。
三、前提条件
3.1. 基础环境
- 操作系统:不限
3.2. 安装虚拟环境
conda create --name langchain python=3.10conda activate langchainpip install langchain langchain-communitypip install unstructured[all-docs]==0.13.2
四、技术实现
4.1.加载markdown文本
markdown文件内容:
# 一级标题这是一个段落。这里可以包含一些**加粗**的文字,一些_*斜体*的文字。## 二级标题1. 第一项2. 第二项3. 第三项### 三级标题* 第一项* 第二项* 第三项
测试代码:
# -*- coding: utf-8 -*-from langchain_community.document_loaders import TextLoaderdef markdown_loader(): loader = TextLoader("test.md",encoding="utf-8") docs = loader.load() # print(len(docs)) for i in range(0,len(docs)): print(docs[i].page_content)if __name__ == '__main__': markdown_loader()
调用结果:
4.2.加载文件目录
测试代码:
# -*- coding: utf-8 -*-from langchain_community.document_loaders import DirectoryLoaderdef directory_loader(): loader = DirectoryLoader(path="E://BaiduNetdiskDownload//", glob="*.md",show_progress=True) docs = loader.load() print(docs)if __name__ == '__main__': directory_loader()
调用结果:
ps:
1. 需要下载nltk模型
2. nltk.download('punkt_tab')
3. nltk.download('averaged_perceptron_tagger_eng')
4.3.加载html
html文件内容:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><h1>一级标题</h1>这是一个段落。<br>这里可以包含一些<b></b>加粗</b>的文字,一些<i>斜体</i>的文字。<h2>二级标题</h2><ol><li>第一项</li><li>第二项</li><li>第三项</li></ol><h3>三级标题</h3><ul><li>第一项</li><li>第二项</li><li>第三项</li></ul></body></html>
测试代码:
# -*- coding: utf-8 -*-from langchain_community.document_loaders import UnstructuredHTMLLoaderdef html_loader(): loader = UnstructuredHTMLLoader('test.html') docs = loader.load() print(docs)if __name__ == '__main__': html_loader()
调用结果:
4.4.加载JSON
安装依赖:
pip install jq
json文件内容:
[ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "请推荐一些广州的特色景点?" }]
测试代码:
# -*- coding: utf-8 -*-from langchain_community.document_loaders import JSONLoaderdef json_loader(): loader = JSONLoader( file_path="test.json", jq_schema=".",text_content=False ) docs = loader.load() print(docs)if __name__ == '__main__': json_loader()
调用结果:
4.5.加载PDF
安装依赖:
pip install pypdf
PDF文件内容:
测试代码:
# -*- coding: utf-8 -*-from langchain_community.document_loaders import PyPDFLoaderdef pdf_loader(): loader = PyPDFLoader( file_path="E://BaiduNetdiskDownload//ChatGLM分享.pdf" ) docs = loader.load() print(docs)if __name__ == '__main__': pdf_loader()
调用结果:
4.6.加载CSV
CSV文件内容:
name age张三丰 100李长生 180
测试代码:
# -*- coding: utf-8 -*-from langchain_community.document_loaders import CSVLoaderdef csv_loader(): loader = CSVLoader(file_path="test.csv",encoding="utf-8") docs = loader.load() print(docs)if __name__ == '__main__': csv_loader()
调用结果:
4.7.完整示例
# -*- coding: utf-8 -*-from langchain_community.document_loaders import TextLoader, UnstructuredHTMLLoader, JSONLoader, PyPDFLoader, CSVLoader,DirectoryLoaderdef markdown_loader(): loader = TextLoader("test.md", encoding="utf-8") docs = loader.load() for i in range(0, len(docs)): print(docs[i].page_content)def directory_loader(): loader = DirectoryLoader(path="E://BaiduNetdiskDownload//", glob="*.md", show_progress=True) docs = loader.load() print(docs)def html_loader(): loader = UnstructuredHTMLLoader('test.html') docs = loader.load() print(docs)def json_loader(): loader = JSONLoader( file_path="test.json", jq_schema=".",text_content=False ) docs = loader.load() print(docs)def pdf_loader(): loader = PyPDFLoader( file_path="E://BaiduNetdiskDownload//ChatGLM分享.pdf" ) docs = loader.load() print(docs)def csv_loader(): loader = CSVLoader(file_path="test.csv",encoding="utf-8") docs = loader.load() print(docs)if __name__ == '__main__': csv_loader()
五、附带说明
5.1.问题一:ImportError: failed to find libmagic. Check your installation
解决:
pip uninstall python-magicpip install python-magic-bin==0.4.14
PS:
python-magic-bin库要与unstructured库兼容,示例中,unstructured使用0.13.2