在 Haystack 中使用 AmazonTextractConverter:基于 AWS Textract 的图像与单页 PDF 文档转换实战指南 📅 发布时间:2026/9/13 19:17:10 👁 浏览次数: 在 Haystack 中使用 AmazonTextractConverter基于 AWS Textract 的图像与单页 PDF 文档转换实战指南【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystackAmazonTextractConverter是 Haystack 生态中用于把图片和单页 PDF 转换为统一Document对象的转换器组件它基于 AWS Textract 云服务支持纯文本 OCR、表格/表单/签名/版式结构化分析以及自然语言问答抽取。本文以仓库内 AmazonTextractConverter 参考文档 为核心骨架结合 组件使用指南 与核心源码系统讲解其认证机制、两种 Textract API 操作模式、构造函数与run()的完整参数语义并给出独立使用与索引 Pipeline 两种实战接入方式。组件概览它解决什么问题在 Haystack 的组件体系中转换器Converter负责把各种格式的文件抽取成统一Document是整个 RAG 索引链路的第一环参见 Converters 组件索引。AmazonTextractConverter正是其中面向扫描件 / 图片 / 单页 PDF的云端 OCR 方案输入文件路径列表或ByteStream对象列表处理调用 AWS Textract 提取文字并可选择性提取表格、表单、签名、版式等结构化信息输出documents内容为提取文本的Document列表与raw_textract_responseTextract 原始 API 响应列表。它在 Pipeline 中的典型位置是索引 Pipeline 的最前端紧邻位于预处理器PreProcessor之前——即先用它完成 OCR 抽取再交给DocumentCleaner、DocumentSplitter等做清洗与切分。支持的输入格式为JPEG、PNG、TIFF、BMP以及单页 PDF文件大小上限 10 MB。使用前提是拥有一个可访问 Textract 服务的 AWS 账号且所选区域提供 Textract 服务。环境准备与安装AmazonTextractConverter由独立的集成包提供包名amazon-textract-haystack不属于核心haystack库需要单独安装pip install amazon-textract-haystack安装后即可从haystack_integrations命名空间导入from haystack_integrations.components.converters.amazon_textract import ( AmazonTextractConverter, )AWS 认证Secret 参数与 boto3 凭证链该组件默认读取 AWS 标准环境变量完成认证你也可以在初始化时显式传入Secret对象若两者都未提供则回退到 boto3 默认凭证链例如运行在 AWS 基础设施上时自动使用 IAM 角色。默认读取的环境变量与构造函数参数的对应关系如下构造函数参数默认读取的环境变量说明aws_access_key_idAWS_ACCESS_KEY_IDAWS 访问密钥 IDaws_secret_access_keyAWS_SECRET_ACCESS_KEYAWS 秘密访问密钥aws_session_tokenAWS_SESSION_TOKENAWS 会话令牌临时凭证时使用aws_region_nameAWS_DEFAULT_REGIONAWS 区域必须是支持 Textract 的区域aws_profile_nameAWS_PROFILE凭证文件中的 AWS 配置文件profile名这些参数的类型是 Haystack 的Secret其实现定义在 haystack/utils/auth.pySecret.from_env_var(env_vars, strictTrue)支持从单个或多个候选环境变量解析strict为True时若所有变量均未设置会抛出异常组件默认使用strictFalse从而允许回退到 boto3 凭证链Secret.from_token(token)则直接封装一个明文令牌不可序列化。显式传入凭证的写法from haystack.utils import Secret from haystack_integrations.components.converters.amazon_textract import ( AmazonTextractConverter, ) converter AmazonTextractConverter( aws_access_key_idSecret.from_env_var(AWS_ACCESS_KEY_ID), aws_secret_access_keySecret.from_env_var(AWS_SECRET_ACCESS_KEY), aws_region_nameSecret.from_token(us-east-1), ) result converter.run(sources[document.png])两种操作模式DetectDocumentText 与 AnalyzeDocument组件会根据feature_types是否设置在 Textract 的两个 API 之间自动切换模式触发条件能力特点DetectDocumentText纯文本 OCRfeature_typesNone默认提取文档中的原始文本速度最快、成本最低AnalyzeDocument结构化分析设置了feature_types在文本之外额外提取表格、表单、签名、版式等结构信息信息更丰富适合表单/票据/发票类文档feature_types的合法取值及其含义TABLES识别表格结构FORMS识别键值对表单字段SIGNATURES识别签名区域LAYOUT识别页面版式标题、段落等QUERIES无需手动设置当你向run()传入queries参数时组件会自动追加该特性类型。例如仅提取表格与表单converter AmazonTextractConverter(feature_types[TABLES, FORMS]) result converter.run(sources[invoice.pdf]) documents result[documents] raw_responses result[raw_textract_response]自然语言查询直接向文档提问run()支持queries参数传入一组自然语言问题后Textract 的QUERIES特性会被自动启用每个问题作为一次查询发送答案会包含在原始响应raw_textract_response中。这对于从表单、发票、收据中抽取特定字段非常有用可以省去手写解析逻辑converter AmazonTextractConverter() result converter.run( sources[receipt.png], queries[What is the patient name?, What is the total due?], ) documents result[documents] raw_responses result[raw_textract_response]构造函数参数详解init__init__( *, aws_access_key_id: Secret | None Secret.from_env_var( AWS_ACCESS_KEY_ID, strictFalse ), aws_secret_access_key: Secret | None Secret.from_env_var( AWS_SECRET_ACCESS_KEY, strictFalse ), aws_session_token: Secret | None Secret.from_env_var( AWS_SESSION_TOKEN, strictFalse ), aws_region_name: Secret | None Secret.from_env_var( AWS_DEFAULT_REGION, strictFalse ), aws_profile_name: Secret | None Secret.from_env_var( AWS_PROFILE, strictFalse ), feature_types: list[str] | None None, store_full_path: bool False, boto3_config: dict[str, Any] | None None ) - None各参数说明aws_access_key_id / aws_secret_access_key / aws_session_token / aws_region_name / aws_profile_nameSecret | NoneAWS 认证相关信息见上文认证一节feature_typeslist[str] | None使用AnalyzeDocument时要检测的特性类型列表合法值为TABLES、FORMS、SIGNATURES、LAYOUT为None时改用DetectDocumentText做基础文本抽取QUERIES由组件在传入queries参数时自动管理store_full_pathbool为True时将完整文件路径存入Document的元数据为False默认时只存文件名boto3_configdict[str, Any] | None底层 boto3 客户端的配置字典可用于调优重试行为、超时与连接管理。run() 详解输入、元数据与返回值run( sources: list[str | Path | ByteStream], meta: dict[str, Any] | list[dict[str, Any]] | None None, queries: list[str] | None None, ) - dict[str, Any]输入参数sourceslist[str | Path | ByteStream]待转换的文件路径或ByteStream对象列表。ByteStream是 Haystack 中表示二进制数据的核心数据类定义见 haystack/dataclasses/byte_stream.py可通过ByteStream.from_file_path(...)、ByteStream.from_string(...)构造适合从内存或网络直接获取字节数据而不落盘metadict[str, Any] | list[dict[str, Any]] | None附加到生成Document上的元数据。传单个字典时其内容会附加到所有产出的Document传字典列表时列表长度必须与 sources 数量一致逐个对应querieslist[str] | None对每个文档提出的自然语言问题列表传入后自动启用QUERIES特性类型答案包含在原始 Textract 响应中。示例[What is the patient name?, What is the total due?]。返回值dict[str, Any]documents创建的Document列表提取出的文本作为其contentraw_textract_responseTextract 原始 API 响应列表可进一步解析结构化信息表格、表单、查询答案等。独立使用示例最基础的纯文本 OCR 用法from haystack_integrations.components.converters.amazon_textract import ( AmazonTextractConverter, ) converter AmazonTextractConverter() result converter.run(sources[document.png]) documents result[documents]结构化分析表格 表单与自然语言查询的完整示例见上文两个小节。综合而言独立使用时有三个常用组合不设feature_types→ 快速 OCR 抽取纯文本设置feature_types[TABLES, FORMS]→ 从发票、申请表等抽取结构化字段传入queries→ 直接问患者姓名是什么应付总额是多少这类问题获取答案。在索引 Pipeline 中接入下面是一个完整的索引 Pipeline用 Textract 从图片和 PDF 中抽取文本依次经过清洗、按句子切分最后写入内存文档存储from haystack import Pipeline from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack.components.preprocessors import DocumentCleaner, DocumentSplitter from haystack.components.writers import DocumentWriter from haystack_integrations.components.converters.amazon_textract import ( AmazonTextractConverter, ) document_store InMemoryDocumentStore() pipeline Pipeline() pipeline.add_component(converter, AmazonTextractConverter()) pipeline.add_component(cleaner, DocumentCleaner()) pipeline.add_component( splitter, DocumentSplitter(split_bysentence, split_length5), ) pipeline.add_component(writer, DocumentWriter(document_storedocument_store)) pipeline.connect(converter, cleaner) pipeline.connect(cleaner, splitter) pipeline.connect(splitter, writer) file_names [document.png, invoice.pdf] pipeline.run({converter: {sources: file_names}})Pipeline 运行结束后writer组件会把 OCR 得到的文档写入document_store后续即可接检索器Retriever构建 RAG 问答链路。DocumentCleaner、DocumentSplitter等预处理组件的实现位于 haystack/components/preprocessors 目录可据此深入了解后续处理细节。组件生命周期warm_up 与 closewarm_up()初始化 AWS Textract 客户端。Haystack 的Pipeline.run()在首次运行时会对图中组件自动执行warm_up()因此无需手动调用close()关闭 AWS Textract 客户端释放底层连接资源。在 Pipeline 结束后需要显式清理资源时调用。序列化to_dict 与 from_dict该组件实现了 Haystack 组件的标准序列化协议to_dict() - dict[str, Any]将组件序列化为字典包含组件类型与全部初始化参数Secret会以安全的序列化形式保存便于存入 YAML/JSON 配置文件from_dict(data: dict[str, Any]) - AmazonTextractConverter从字典反序列化重建组件实例。这让AmazonTextractConverter可以被写入 Haystack 的 YAML Pipeline 定义文件通过 haystack/marshal/yaml.py 实现整条索引 Pipeline 的声明式配置与版本化管理。注意事项与最佳实践单页 PDF 与 10 MB 上限多页 PDF 无法直接处理需先拆分为单页超过 10 MB 的文件需要压缩或分块区域可用性aws_region_name必须指向支持 Textract 的区域否则调用会失败凭证安全优先使用环境变量或 IAM 角色避免在代码中硬编码密钥Secret.from_token传入的令牌不可序列化不适合写入 Pipeline 配置文件成本考量纯文本 OCRDetectDocumentText比结构化分析AnalyzeDocument更便宜更快批量索引时若不需要表格/表单信息建议保持默认模式查询答案定位自然语言查询的答案在raw_textract_response中而非直接出现在documents[].content读取时需要解析原始响应中的查询结果结构。【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考