Skip to main content
本笔记本介绍了如何从 Docugami 加载文档。它提供了使用此系统相对于其他数据加载器的优势。

前置条件

  1. 安装必要的 python 包。
  2. 为您的工作区获取访问令牌,并确保将其设置为 DOCUGAMI_API_KEY 环境变量。
  3. 为您的处理文档获取一些 docset 和文档 ID,如这里所述:help.docugami.com/home/docugami-api

快速入门

  1. 创建一个 Docugami 工作区(提供免费试用)
  2. 添加您的文档(PDF、DOCX 或 DOC),并允许 Docugami 摄入并聚类它们为相似文档的集合,例如 NDAs、租赁协议和服务协议。系统没有固定支持的文档类型集,创建的聚类取决于您的特定文档,并且您可以稍后 更改 docset 分配。
  3. 通过 Developer Playground 为您的工作区创建访问令牌。详细说明
  4. 探索 Docugami API 以获取您的处理 docset ID 列表,或特定 docset 的文档 ID 列表。
  5. 使用下面详细说明的 DocugamiLoader,以获取文档的丰富语义片段。
  6. 可选地,构建并发布一个或多个 报告或摘要。这有助于 Docugami 基于您的偏好改进语义 XML,这些偏好随后作为元数据添加到 DocugamiLoader 输出中。使用自查询检索器等技术进行高精度文档问答。

与其他片段化技术的优势对比

文档的适当片段化对于从文档中检索至关重要。存在许多片段化技术,包括依赖于空白字符的简单技术和基于字符长度的递归片段分割。Docugami 提供了不同的方法:
  1. 智能片段化:Docugami 将每个文档分解为不同大小的片段的层次化语义 XML 树,从单个单词或数值到整个章节。这些片段遵循文档的语义轮廓,提供比任意长度或简单空白字符基于片段化更有意义的表示。
  2. 语义注释:片段带有跨文档集一致的语义标签,便于在多个文档之间进行一致的层次化查询,即使它们是不同地编写和格式化的。例如,在租赁协议集中,您可以轻松识别关键条款,如房东、租户或续签日期,以及更复杂的信息,如任何转租条款的措辞或特定司法管辖区是否在终止条款中有例外部分。
  3. 结构化表示:此外,XML 树指示每个文档的结构轮廓,使用表示标题、段落、列表、表格和其他常见元素的属性,并在所有支持的文档格式(如扫描的 PDF 或 DOCX 文件)之间一致地执行此操作。它适当处理长文档特征,如页面页眉/页脚或多列流,以进行干净的文本提取。
  4. 附加元数据:片段还带有附加元数据,如果用户已使用 Docugami。此附加元数据可用于无上下文窗口限制的高精度文档问答。见下文详细代码示例。

加载文档

如果设置了 DOCUGAMI_API_KEY 环境变量,则无需将其显式传递给加载器,否则可以将其作为 access_token 参数传递。
每个 @[Document](实际上是实际 PDF、DOC 或 DOCX 的片段)的 metadata 包含一些有用的附加信息:
  1. id 和 source:片段来源的文件 ID 和名称(PDF、DOC 或 DOCX)在 Docugami 中。
  2. xpath:文档 XML 表示中的 XPath,用于片段。对于直接引用文档 XML 中的实际片段的源引用很有用。
  3. structure:片段的结构属性,例如 h1、h2、div、table、td 等。如果调用者需要,有用,可以过滤掉某些类型的片段。
  4. tag:片段的语义标签,使用各种生成和提取技术。更多详情请参阅:github.com/docugami/DFM-benchmarks
您可以通过在 DocugamiLoader 实例上设置以下属性来控制片段化行为:
  1. 您可以设置最小和最大片段大小,系统尽量遵守并最小化截断。您可以设置 loader.min_text_length 和 loader.max_text_length 来控制这些。
  2. 默认情况下,仅返回片段的文本。但是,Docugami 的 XML 知识图谱包含片段内实体的语义标签等附加丰富信息。如果您希望在返回的片段上获取附加的 xml 元数据,请设置 loader.include_xml_tags = True。
  3. 此外,如果您希望 Docugami 在返回的片段中返回父片段,可以设置 loader.parent_hierarchy_levels。子片段通过 loader.parent_id_key 值指向父片段。这对于 小到大 检索的 MultiVector Retriever 很有用。见本笔记本后面的详细示例。

基本用法:Docugami 加载器用于文档问答

您可以使用 Docugami 加载器像标准加载器一样进行多文档的文档问答,但片段遵循文档的自然轮廓,效果更好。有许多关于如何做到这一点的优秀教程,例如 这个教程。我们可以使用相同的代码,但使用 DocugamiLoader 进行更好的片段化,而不是直接使用基本分割技术加载文本或 PDF 文件。
加载器返回的文档已经分割,因此我们不需要使用文本分割器。可选地,我们可以使用每个文档的元数据,例如结构或标签属性,以执行任何我们想要的后续处理。 我们将直接使用 DocugamiLoader 的输出来按常规方式设置检索问答链。

使用 docugami 知识图谱进行高精度文档问答

大型文档存在一个问题,即您问题的正确答案可能依赖于文档中相距较远的片段。即使带有重叠的典型分块技术,也难以向大型语言模型(LLM)提供足够的上下文来回答此类问题。随着即将推出的超大型上下文LLM,可能可以将大量Token,甚至整个文档,塞入上下文中,但这在处理非常长的文档或大量文档时仍会达到限制。 例如,如果我们问一个更复杂的问题,需要LLM参考文档不同部分的片段来回答,即使是OpenAI强大的LLM也无法正确回答。
乍一看,答案似乎合理,但它是不正确的。如果您仔细审查这个答案的源片段,您会发现文档的分块并没有将房东名称和可出租面积放在同一个上下文中,并生成了不相关的片段,因此答案是错误的(应该是13,500平方英尺) Docugami可以在这里提供帮助。如果用户已经使用Docugami,片段会使用不同的技术标注额外的元数据。后续将添加更技术性的方法。 具体来说,让我们要求Docugami在其输出中返回XML标签以及额外的元数据:
我们可以使用自查询检索器来提高我们的查询准确性,使用这些额外的元数据:
让我们再次运行相同的问题。它返回了正确的结果,因为所有片段都有元数据键值对,其中包含有关文档的关键信息,即使这些信息在物理上与用于生成答案的源片段非常远。
这次答案是正确的,因为自查询检索器在元数据的房东属性上创建了过滤器,正确地过滤到特定于DHA集团房东的文档。生成的源片段都与这位房东相关,这提高了答案的准确性,即使房东没有直接在包含正确答案的特定片段中提及。

高级主题:基于文档知识图谱层次的小到大的检索

文档本质上具有半结构化特性,DocugamiLoader能够导航文档的语义和结构轮廓,以在返回的片段上提供父片段引用。这在例如使用MultiVector检索器进行小到大的检索时很有用。 要获取父片段引用,您可以将loader.parent_hierarchy_levels设置为非零值。

官方原文:src/oss/python/integrations/document_loaders/docugami.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026