langchain

您所在的位置:网站首页 word文件上传失败 langchain

langchain

2024-07-16 23:27| 来源: 网络整理| 查看: 265

文章目录 1.langchain-chatglm本地部署2.langchain的UnstructuredFileLoader\UnstructuredWordDocumentLoader 最近LLM模型非常火,Langchain这个工具更有意思,让应用开发更加简单。于是就想着部署一下langchain-chatglm,体验一下大模型挂载知识库的畅快。部署过程耗时长,主要是环境安装,但总体还是很顺利的。但是一个word文档上传无法加载的问题耗费了好长时间处理。

INFO 2023-06-17 11:36:30,140-1d: ERROR 2023-06-17 11:36:30,141-1d: Error: source file could not be loaded ERROR 2023-06-17 11:36:30,142-1d: Package not found at '/tmp/tmp33_8507e/08服务器软硬件环境配置说明书.docx' INFO 2023-06-17 11:36:30,143-1d: /home/aiadmin/langchain-ChatGLM-master/content/DK12/08服务器软硬件环境配置说明书.docx 未能成功加载 INFO 2023-06-17 11:36:30,143-1d: 文件均未成功加载,请检查依赖包或替换为其他文件再次上传。

最终处理办法很简单,执行以下卸载和安装命令:

yum remove openoffice* libreoffice* yum install libreoffice*

如果yum安装下载过慢,还可以手动下载安装,参考这篇博客: 下载地址,下载下面三个文件:

LibreOffice_6.0.3_Linux_x86-64_rpm.tar.gzLibreOffice_6.0.3_Linux_x86-64_rpm_sdk.tar.gzLibreOffice_6.0.3_Linux_x86-64_rpm_langpack_zh-CN.tar.gz

解压文件,执行如下命令

mkdir /usr/libreoffice tar -zxvf LibreOffice_6.0.3_Linux_x86-64_rpm.tar.gz -C /usr/libreoffice/ tar -zxvf LibreOffice_6.0.3_Linux_x86-64_rpm_sdk.tar.gz -C /usr/libreoffice/ tar -zxvf LibreOffice_6.0.3_Linux_x86-64_rpm_langpack_zh-CN.tar.gz -C /usr/libreoffice/ cd /usr/libreoffice/LibreOffice_6.0.3_Linux_x86-64_rpm/RPMS yum localinstall *.rpm

安装完成之后,建立软连接:

ln -s /usr/bin/libreoffice7.5 /usr/bin/soffice

============================================================================= 下面记录一下心路历程,启发一下问题解决思路。

1.langchain-chatglm本地部署

本地部署langchain-chatglm过程确实不复杂,参考安装指南进行环境安装。到huggingface下载chatglm-6b和text2vec-large-chinese,并修改配置文件configs/model_config.py中对应的配置,就可以直接运行了。

真的是顺利呀,赶紧上传了一个pdf文档总结一下,真的挺好用。再上传一个word文档吧,就出错了。在安装指南发现了下面这段话:

Note: When using langchain.document_loaders.UnstructuredFileLoader for unstructured file integration, you may need to install other dependency packages according to the documentation. Please refer to langchain documentation

大致意思就是说想要使用langchain.document_loaders.UnstructuredFileLoader来处理非结构化文档,需要安装额外的依赖。但是文档中提到的地址已经失效了,我找到了下面这个有效地址。按照文档中的说明,依次执行了以下包的安装:

# 1.libmagic # 安装 file-devel 软件包,其中包含 libmagic 库和相关的开发文件 # libmagic是一个独立的C库,用于文件类型识别 # python-magic和python-magic-bin都是基于libmagic的Python封装库,在python中通过`import magic`导入使用 yum install file-devel # 2.Poppler是一个用于处理 PDF 文件的开源工具集,poppler-utils 包含了一些常用的 Poppler 工具,如 pdftotext、pdfinfo、pdfimages 等 yum install poppler-utils # 3.tesseract是一个开源的OCR(光学字符识别)引擎,它能够将图像中的文本识别为可编辑的文本 yum install tesseract # 4.libxml2是一个用于解析和操作 XML 文件的开源库 yum install libxml2 # 5.libxslt 是一个用于处理 XSLT(可扩展样式表语言转换)的开源库 yum install libxslt

由于网络隔离,nltk无法直接执行下载,因此手动下载。

import nltk nltk.download('punkt')

数据说明,手动下载地址,搜索关键字进行下载,并根据报错提示进行数据文件放置。这一块的报错是在我手工调试word文档异常问题的过程中出现并处理的,路径位置也是根据报错信息的查找路径选择了其中一个。 我放在了我的虚拟环境的目录下:

# nltk ~/langchain-ChatGLM/nltk_data/taggers/ # punkt ~/langchain-ChatGLM/nltk_data/tokenizers/

当然了,经历这一波安装,并没有解决问题,依然还是无法处理word文档。

2.langchain的UnstructuredFileLoader\UnstructuredWordDocumentLoader

那就看看加载word文档的代码吧local_doc_qa.py,大致调用逻辑是下面这样,报错出现在load_and_split方法

from langchain.document_loaders import UnstructuredFileLoader, UnstructuredWordDocumentLoader from textsplitter import ChineseTextSplitter loader = UnstructuredWordDocumentLoader("/home/testReport2.doc", mode="elements") textsplitter = ChineseTextSplitter(pdf=False, sentence_size=100) docs = loader.load_and_split(text_splitter=textsplitter)

那就往下继续调试,看看langchain.UnstructuredWordDocumentLoader代码的实现吧。

class UnstructuredWordDocumentLoader(UnstructuredFileLoader): """Loader that uses unstructured to load word documents.""" def _get_elements(self) -> List: from unstructured.__version__ import __version__ as __unstructured_version__ from unstructured.file_utils.filetype import FileType, detect_filetype unstructured_version = tuple( [int(x) for x in __unstructured_version__.split(".")] ) # NOTE(MthwRobinson) - magic will raise an import error if the libmagic # system dependency isn't installed. If it's not installed, we'll just # check the file extension try: import magic # noqa: F401 is_doc = detect_filetype(self.file_path) == FileType.DOC except ImportError: _, extension = os.path.splitext(str(self.file_path)) is_doc = extension == ".doc" if is_doc and unstructured_version


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3