文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
API 参考

Routers (路由器)

路由器是一组组件,用于将查询或文档路由到最能处理它们的其他组件。

模块 haystack_experimental.components.routers.document_length_router

DocumentLengthRouter

根据文档的长度进行分类content字段,并将其路由到适当的输出。

DocumentLengthRouter 的一个常见用例是处理从 PDF 中获取的包含非文本内容(例如扫描页面或图像)的文档。此组件可以检测空文档或内容较少的文档,并将其路由到执行 OCR、生成字幕或计算图像嵌入的组件。

使用示例

from haystack_experimental.components.routers import DocumentLengthRouter
from haystack.dataclasses import Document

docs = [
    Document(content="Short"),
    Document(content="Long document "*20),
]

router = DocumentLengthRouter(threshold=10)

result = router.run(documents=docs)
print(result)

# {
#     "short_documents": [Document(content="Short", ...)],
#     "long_documents": [Document(content="Long document ...", ...)],
# }

<a id="haystack_experimental.components.routers.document_length_router.DocumentLengthRouter.__init__"></a>

#### DocumentLengthRouter.\_\_init\_\_

```python
def __init__(*, threshold: int = 10) -> None

初始化 DocumentLengthRouter 组件。

参数:

  • threshold:文档中字符数的阈值content字段。其中content为 None 或其字符数小于或等于阈值的文档将被路由到short_documents输出。否则,它们将被路由到long_documents输出。要仅将内容为 None 的文档路由到short_documents,请将阈值设置为负数。

DocumentLengthRouter.run

@component.output_types(
    short_documents=List[Document],
    long_documents=List[Document],
)
def run(documents: List[Document]) -> Dict[str, List[Document]]

根据文档的长度将输入文档分类。content 字段。

参数:

  • documents:要分类的文档列表。

返回值:

包含以下键的字典

  • short_documents:其中content 为 None,或长度小于或等于阈值。content 的长度小于或等于阈值。
  • long_documents:其中content 的长度大于阈值。

模块 haystack_experimental.components.routers.document_type_router

DocumentTypeRouter

根据文档的元数据按 MIME 类型对其进行分类。

DocumentTypeRouter 用于根据 MIME 类型在管道中动态路由文档。它支持精确的 MIME 类型匹配和正则表达式模式。

MIME 类型可以直接从文档元数据中提取,也可以使用标准或用户提供的 MIME 类型映射从文件路径推断。

使用示例

from haystack_experimental.components.routers import DocumentTypeRouter
from haystack.dataclasses import Document

docs = [
    Document(content="Example text", meta={"file_path": "example.txt"}),
    Document(content="Another document", meta={"mime_type": "application/pdf"}),
    Document(content="Unknown type")
]

router = DocumentTypeRouter(
    mime_type_meta_field="mime_type",
    file_path_meta_field="file_path",
    mime_types=["text/plain", "application/pdf"]
)

result = router.run(documents=docs)
print(result)

预期输出

{
    "text/plain": [Document(...)],
    "application/pdf": [Document(...)],
    "unclassified": [Document(...)]
}

DocumentTypeRouter.__init__

def __init__(*,
             mime_type_meta_field: Optional[str] = None,
             file_path_meta_field: Optional[str] = None,
             mime_types: List[str],
             additional_mimetypes: Optional[Dict[str, str]] = None) -> None

初始化 DocumentTypeRouter 组件。

参数:

  • mime_type_meta_field:可选的元数据字段名称,用于存储 MIME 类型。
  • file_path_meta_field:可选的元数据字段名称,用于存储文件路径。如果mime_type_meta_field未提供或文档中缺失,则用于推断 MIME 类型。
  • mime_types:用于对输入文档进行分类的 MIME 类型或正则表达式模式列表。(例如["text/plain", "audio/x-wav", "image/jpeg"]).
  • additional_mimetypes:可选字典,将 MIME 类型映射到文件扩展名,以增强或覆盖标准mimetypes模块。在处理不常见或自定义文件类型时很有用。例如{"application/vnd.custom-type": ".custom"}.

引发:

  • ValueError: 如果mime_types为空或如果同时mime_type_meta_fieldfile_path_meta_field均未提供。

DocumentTypeRouter.run

def run(documents: List[Document]) -> Dict[str, List[Document]]

根据其 MIME 类型将输入文档分类。

MIME 类型可以直接在文档元数据中获取,也可以使用标准 Python 从文件路径中获取mimetypes 模块和自定义映射。

参数:

  • documents:要分类的文档列表。

返回值:

一个字典,其中键是 MIME 类型(或"unclassified"),值是文档列表。