【可能是全网最丝滑的LangChain教程】十三、LangChain进阶之Document loaders

不要让别人告诉你你能做什么,不能做什么。如果你有一个梦想,就去捍卫它。

01 介绍

Document loader(文档加载器),使用文档加载器将数据从数据源加载为 Document 对象的数据。

Document 是 LangChain 提供的一个类,包含一段文本和与文本关联的元数据。我们读取数据后就会转换成 Document 对象。

例如,有一些文档加载器用于加载简单的 .txt 文件、加载任何网页的文本内容,甚至用于加载 YouTube 视频。文档加载器提供了“ load ”方法,用于从配置的源加载数据,转换为 Document。它们还可以选择实现“延迟加载”,以便将数据延迟加载到内存中。

基于 LLM 的应用程序经常需要从数据库或文件(如 PDF)中提取数据,并将其转换为 LLM 可以使用的格式。在LangChain中,这通常涉及创建 Document 对象,这些对象封装了提取的文本(page_content)以及元数据(metadata 包含文档详细信息的字典),例如作者姓名或出版日期。

Document 对象通常被格式化为提示,这些提示被输入到 LLM 中,允许 LLM 使用 Document 中的信息来生成所需的响应(例如,总结文档)。Documents 既可以立即使用,也可以索引到向量存储中,以备将来检索和使用。

02 基础使用

这里以TextLoader为例

from langchain_community.document_loaders import TextLoader

"""
file_path:要加载的文件的路径。
encoding:要使用的文件编码。如果“无”,将加载文件使用默认的系统编码。
autodetect_encoding:是否尝试自动检测文件编码如果指定的编码失败。
"""
loader = TextLoader("./index.txt",encoding='utf-8',autodetect_encoding=True)
loader.load()

"""
[
    Document(
        page_content='电影中的经典台词往往能够深入人心,成为人们记忆中的一部分。以下是一些电影中的经典台词:\n\n"生活就像一盒巧克力,你永远不知道你会得到什么。" ——《阿甘正传》(Forrest Gump, 1994)\n\n"永远不要小看自己,因为你永远不知道自己有多强大。" ——《狮子王》(The Lion King, 1994)\n\n"我会回来的。" ——《终结者》(The Terminator, 1984)\n\n"你不能改变过去,但你可以改变未来。" ——《回到未来》(Back to the Future, 1985)\n\n"即使世界末日来临,我也要和你一起度过。" ——《泰坦尼克号》(Titanic, 1997)\n\n"不要让别人告诉你你能做什么,不能做什么。如果你有一个梦想,就去捍卫它。" ——《当幸福来敲门》(The Pursuit of Happyness, 2006)\n\n"我将永远爱你。" ——《保镖》(The Bodyguard, 1992)\n\n"这就是生活,小家伙。" ——《美丽人生》(Life is Beautiful, 1997)\n\n"我有一个梦想。" ——《我有一个梦想》(I Have a Dream, 1963)\n\n"你只需要跟随你的黄砖路。" ——《绿野仙踪》(The Wizard of Oz, 1939)\n\n这些台词不仅在电影中令人难忘,也在现实生活中激励着许多人。',
         metadata={'source': './index.txt'}
    )
]
"""

通过以上代码我们可以看到:

  1. load方法返回的是 Document 列表。
  2. Document 里面主要包含两个元素,page_content 和 metadata。
  3. metadata 是字典类型,这里包含 source 键,表示数据源位置。metadata内容和 Loader 对象有关,不同的对象,生成的 metadata 内容不同。

03 自定义Document Loader

在自定义之前,先了解几个组件

组件
描述
Document
包含文本内容和元数据
BaseLoader
用于将源数据转换成Document
Blob
用于二进制数据的处理
BaseBlobParser
将二进制数据转换成Document

Standard Document Loader

标准文档加载器。文档加载器可以通过从 BaseLoader 进行子类化来实现,它提供了用于加载文档的标准接口。

自定义标准文档加载器必须实现的方法是:lazy_load

你说你还想实现其他方法,能不能行?当然能行!建议这样做吗?肯定不建议!为什么不建议这样做?源码里面有解释,大家可以自己跟一下源码,我这里就不贴了!😂

这里我会创建一个自定义的标准文档加载器,该加载器每次从文档中读取一行数据并创建 Document 对象返回。代码来源于官方文档,如下:

from typing import AsyncIterator, Iterator

from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document


class CustomDocumentLoader(BaseLoader):
    """An example document loader that reads a file line by line."""

    def __init__(self, file_path: str) -> None:
        """Initialize the loader with a file path.

        Args:
            file_path: The path to the file to load.
        """
        self.file_path = file_path
    
    def lazy_load(self) -> Iterator[Document]:  # <-- Does not take any arguments
        """A lazy loader that reads a file line by line.

        When you're implementing lazy load methods, you should use a generator
        to yield documents one by one.
        """
        with open(self
<think>好的,我现在需要解决用户在PyCharm中遇到的langchain.document_loaders标红的问题。首先,我需要理解这个问题的可能原因,并逐步分析可能的解决方案。 首先,用户提到在PyCharm中langchain.document_loaders部分代码被标红。标红通常表示语法错误、未解析的引用或缺失的依赖库。我需要考虑几个常见的原因: 1. **未安装langchain库**:如果用户没有安装langchain库,或者安装的版本不包含document_loaders模块,PyCharm会无法识别该模块,导致标红。 2. **Python解释器配置问题**:用户可能在PyCharm中使用了错误的Python解释器,例如没有安装langchain的环境,或者解释器路径配置不正确。 3. **版本兼容性问题**:用户安装的langchain版本可能过旧或过新,导致某些模块被移除或重命名,从而引发导入错误。 4. **IDE缓存或索引问题**:有时候PyCharm的缓存或索引可能损坏,导致无法正确识别已安装的库。 接下来,我需要根据每个可能的原因,思考对应的解决方案: **对于原因1:未安装langchain库** - 用户需要检查是否安装了langchain库。可以通过在终端运行`pip list`查看已安装的包,或者直接在PyCharm的终端中安装:`pip install langchain`。如果已安装但版本过低,可能需要升级:`pip install --upgrade langchain`。 **对于原因2:Python解释器配置问题** - 用户需要确认PyCharm项目使用的解释器是否正确。步骤是:File > Settings > Project: [项目名] > Python Interpreter,检查是否选择了安装了langchain的环境。如果使用conda环境,可能需要在此处添加conda环境路径。 **对于原因3:版本兼容性问题** - 用户应检查当前安装的langchain版本是否支持document_loaders模块。可以查看官方文档或版本更新日志,确认该模块是否存在。如果版本过旧,升级到新版;如果新版有变动,可能需要调整导入语句,例如模块路径是否有变化。 **对于原因4:IDE缓存问题** - 用户可以尝试清除PyCharm缓存并重启:File > Invalidate Caches / Restart,选择Invalidate and Restart。这通常能解决因索引错误导致的标红问题。 此外,用户之前提到的关于torch.cuda.is_available()的问题可能与环境配置有关,可能需要类似的环境检查步骤。比如,确保当前解释器环境下确实安装了所需的库,并且路径正确。 可能的验证步骤包括: - 在PyCharm的终端中尝试导入langchain.document_loaders,看是否报错。 - 检查项目的依赖是否全部安装在当前环境中,特别是当使用虚拟环境或conda环境时。 如果用户按照上述步骤操作后问题仍未解决,可能需要进一步检查是否有拼写错误,或者是否有其他依赖项缺失,例如langchain可能需要其他附加库来支持document_loaders模块的功能。</think>在PyCharm中`langchain.document_loaders`标红通常由以下原因引起,可逐步排查解决: --- ### **1. 未安装LangChain库** - **现象**:模块无法解析,代码标红。 - **解决方法**: - 在PyCharm终端中执行以下命令安装LangChain: ```bash pip install langchain ``` - 若已安装但版本过低,升级至新版: ```bash pip install --upgrade langchain ``` --- ### **2. Python解释器配置错误** - **现象**:PyCharm未使用安装了LangChain的解释器[^1]。 - **解决方法**: 1. 点击PyCharm右下角解释器名称(如`Python 3.x`)。 2. 选择`Interpreter Settings`。 3. 确认当前解释器是否包含`langchain`库。若未包含,切换至正确环境或点击`+`号手动安装。 --- ### **3. 模块路径变更(版本兼容性问题)** - **现象**:特定版本中模块路径调整导致导入失败。 - **解决方法**: - 检查LangChain版本与代码兼容性。例如: ```python # 新版本可能需要显式子模块导入 from langchain_community.document_loaders import TextLoader ``` - 参考官方文档调整导入语句或回退版本: ```bash pip install langchain==0.0.xx # 指定兼容版本 ``` --- ### **4. IDE缓存问题** - **现象**:安装库后仍标红,但终端可正常导入。 - **解决方法**: - 清除PyCharm缓存:`File > Invalidate Caches / Restart > Invalidate and Restart`[^3]。 --- ### **5. 依赖项缺失** - **现象**:`document_loaders`依赖其他库(如`unstructured`、`pdfminer`)。 - **解决方法**: - 根据文档安装依赖: ```bash pip install unstructured pdfminer.six ``` --- ### **验证步骤** 1. 在PyCharm终端中运行以下代码: ```python from langchain.document_loaders import TextLoader print(TextLoader) ``` 2. 若无报错,说明环境配置正确,重启IDE即可;若报错,根据提示调整依赖或解释器。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值