为了llm应用获取外部数据,langchain提供了加载、转换、存储和查询数据的功能
文档加载器:加载不同来源的文档
文档转换器:拆分文档,将文档转换成问答格式、删除冗余文档
文本嵌入模型Embed:将非结构化文本转换为向量
向量存储:存储和搜索嵌入的数据
检索器:查询数据
文档加载器load
csv、html、json、pdf文档加载
加载同一目录下多文档
第三方数据源组件
加载csv文档 csv是一种使用逗号来分隔值的文本文件
csv文件加载器允许定制csv解析和加载,可以通过csv_args参数来设置,比如设定分隔符、引用字符和字段名等(跟awk差不多
1 2 3 4 5 6 7 8 9 10 11 12 电影名称,上映年份,导演,主演,评分 肖申克的救赎,1994 ,弗兰克·德拉邦特,蒂姆·罗宾斯,9.3 阿甘正传,1994 ,罗伯特·泽米吉斯,汤姆·汉克斯,9.5 盗梦空间,2010 ,克里斯托弗·诺兰,莱昂纳多·迪卡普里奥,9.3 泰坦尼克号,1997 ,詹姆斯·卡梅隆,莱昂纳多·迪卡普里奥,9.2 星际穿越,2014 ,克里斯托弗·诺兰,马修·麦康纳,9.2 from langchain.document_loaders.csv_loader import CSVLoaderloader = CSVLoader(file_path="./example.csv" ) print (loader.load())
加载目录下文件 directoryLoader类可以加载一个目录下的所有文件,langchain的document_loaders提供了数量众多的文件解析器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from langchain.document_loaders import DirectoryLoader,TextLoader,PythonLoader,UnstructuredMarkdownLoader,UnstructuredHTMLLoaderloader = DirectoryLoader( path='./langchain源代码' , glob="**/*.md" , loader_cls=UnstructuredMarkdownLoader, show_progress=True , use_multithreading=True ) docs = loader.load() for doc in docs: print (doc.metadata)
json文件加载 JSONLoader使用jq模式从JSON文件中解析数据,可以解析json文件或json行文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 from langchain.document_loaders import JSONLoaderloader = JSONLoader( file_path='data_example.json' , jq_schema='.messages[].content' ) loader = JSONLoader( file_path='data_example.json' , jq_schema='.content' , json_lines=True ) def metadata_fun (record: dict ,metadata: dict ) ->dict : metadata["title" ] = record.get("title" ) metadata["genres" ] = record.get("genres" ) return metadata loader = JSONLoader( file_path='data_example.json' , jq_schema=".notable_films[]" , content_key="genres" , text_content=False , metadata_func=metadata_fun ) data = loader.load() for doc in data: print (doc.metadata)
pdf文件加载 PyPDF可以用来加载PDF文件并转换为文档数组,文档数组包含并通过embed将其转换为文档数组
然后使用embedding进行向量化,并存储到向量数据库。
可选的加载器有: PyPDFLoader(适用表格类的pdf) UnstructuredPDFLoader(使用扫描类的pdf)
如果使用UnstructuredPDFLoader则推荐安装全套组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pip install "unstructured[pdf,ocr]" pip install pdfminer.six pi-heif pillow pillow-heif yum install -y tesseract poppler-utils from langchain.document_loaders import PyPDFLoader from langchain.document_loaders import UnstructuredPDFLoaderfrom dotenv import load_dotenvloader = UnstructuredPDFLoader("./data_example.pdf" , mode="elements" , strategy="hi_res" ) data = loader.load() print (data)