unstructured-api
unstructured-api 是一款专为处理非结构化数据设计的开源 API 工具,旨在帮助开发者轻松将各种复杂文档转化为机器可读的结构化数据。在日常工作中,我们常常面对 PDF、Word、PowerPoint、图片甚至电子邮件等格式各异的文件,这些非结构化数据难以直接被人工智能模型或数据分析系统利用。unstructured-api 正是为了解决这一痛点而生,它能够高效解析并提取这些文档中的文本、表格及布局信息,将其转换为干净、标准的格式,从而打通从原始文档到智能应用之间的“最后一公里”。
这款工具特别适合软件开发者、数据工程师以及从事大语言模型(LLM)应用构建的研究人员使用。如果你正在开发需要读取和理解文档内容的 AI 应用,或者需要构建企业级的知识库检索系统,unstructured-api 能提供强大的底层支持。它不仅简化了繁琐的数据预处理流程,还显著提升了数据清洗的效率。
在技术亮点方面,unstructured-api 引入了名为“Chipper”的测试版模型,专门针对高分辨率和布局复杂的文档进行了优化。通过启用“hi_res”策略,用户可以显著提升对复杂版面文档的解析精度。此外,该服务目前提供免费访问(需申请 API Key),并拥有活跃的社区支持,方便用户交流反馈。无论是初创团队还是大型企业,都能借助 unstructured-api 快速实现文档数据的智能化转型,让非结构化数据真正产生价值。
使用场景
某金融科技公司的大数据团队需要构建一个智能投研系统,每天需自动解析并入库数千份格式各异的上市公司财报(PDF)、行业研报(PPT)及内部会议纪要(DOCX),以便后续进行大模型问答检索。
没有 unstructured-api 时
- 解析逻辑碎片化:开发人员必须为 PDF、PPT、Word 等不同文件格式分别集成 PyPDF2、python-pptx 等独立库,代码维护成本极高,且难以统一处理逻辑。
- 非结构化数据丢失:传统工具往往忽略文档中的页眉页脚、脚注或复杂表格结构,导致提取的文本顺序混乱,关键财务数据与上下文脱节,严重影响下游分析准确性。
- 高分辨率文档处理困难:面对包含大量图表和扫描件的“高保真”财报,普通 OCR 方案识别率低且部署复杂,缺乏针对复杂布局的高效预处理模型,导致大量人工复核工作。
- 扩展性差:每当新增一种文件格式或优化解析策略,都需要重新测试整个流水线,迭代周期长,无法快速响应业务对多模态数据接入的需求。
使用 unstructured-api 后
- 统一接口标准化:通过调用 unstructured-api 的单一 RESTful 接口,即可自动识别并处理所有主流文件格式,后端屏蔽了底层库的差异,大幅简化了工程架构。
- 智能元素提取:利用其先进的分区算法,能精准识别标题、段落、列表及表格边界,保留文档的逻辑结构,确保存入向量数据库的内容具备清晰的语义层次。
- Chipper 模型赋能:启用 beta 版的 Chipper 模型配合
hi_res策略,显著提升了对高分辨率扫描件和复杂排版文档的解析精度,无需自建复杂的 OCR 集群即可获得高质量文本。 - 敏捷迭代与扩展:新增文件类型支持仅需调整 API 参数,无需重构代码;团队可将精力集中在上层应用逻辑,而非底层解析细节,显著缩短了功能上线时间。
unstructured-api 的核心价值在于将繁琐、异构的文档解析工作转化为标准化的 API 服务,让企业能以极低的技术门槛实现高质量的非结构化数据清洗与结构化转换。
运行环境要求
- 未说明
未说明
未说明

快速开始
API公告!
我们非常高兴地宣布全新推出的Unstructured API。虽然托管的Unstructured API将继续免费使用,但进行请求时需要API密钥。为避免中断,请立即在这里获取您的密钥,并从今天开始使用吧!请查看此处的README,了解如何开始调用API。
:rocket: 测试版功能:Chipper模型
我们发布了Chipper模型的测试版,用于处理高分辨率、复杂文档时提供更卓越的性能。要在您的API请求中使用Chipper模型,只需采用hi_res策略即可。详细说明请参阅此处。
由于Chipper模型仍处于测试阶段,我们诚挚欢迎各位的反馈与建议。如果您有兴趣试用Chipper模型,欢迎加入我们的Slack社区与我们交流。
<img src="https://img.shields.io/badge/Phorm-Ask_AI-%23F2777A.svg?&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNSIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGQ9Ik00LjQzIDEuODgyYTEuNDQgMS40NCAwIDAgMS0uMDk4LjQyNmMtLjA1LjEyMy0uMTE1LjIzLS4xOTIuMzIyLS4wNzUuMDktLjE2LjE2NS0uMjU1LjIyNmExLjM1MyAxLjM1MyAwIDAgMS0uNTk1LjIxMmMtLjA5OS4wMTItLjE5Mi4wMTQtLjI3OS4wMDZsLTEuNTkzLS4xNHYtLjQwNmgxLjY1OGMuMDknMCAxLjE3LS4xNjkuMjQ2LS4xOTFhLjYwMy42MDMgMCAwIDAgLjItLjEwNi41MjkuNTI5IDAgMCAwIC4xMzgtLjE3LjY1NC42NTQgMCAwIDAgLjA2NS0uMjRsLjAyOC0uMzJhLjkzLjkzIDAgMCAwLS4wMzYtLjI0OS41NjcuNTY3IDAgMCAwLS4xMDMtLjIuNTAyLjUwMiAwIDAgMC0uMTY4LS4xMzguNjA4LjYwOCAwIDAgMC0uMjQtLjA2N0wyLjQzNy43MjkgMS42MjUuNjcxYS4zMjIuMzIyIDAgMCAwLS4yMzIuMDU4LjM3NS4zNzUgMCAwIDAtLjExNi4yMzJsLS4xMTYgMS40NS0uMDU4LjY9Ny0uMDU4Ljc1NEwuNzA1IDRsLS4zNTctLjA7OUwuNjAyLjkwNkMuNjE3LjcyNi42NjMuNTc0LjczOS40NTRhLjk1OC45NTggMCAwIDEgLjI7NC0uMjg1Ljk7MS45NzEgMCAwIDEgLjMzNy0uMTRjLjExOS0uMDI6LjIyNy0uMDM0LjMyVS0uMTV5LjE6Yy4xNTkuMDE4LjMzNi4wMy40NTkuMDgyYTEuMTczIDEuMTczIDAgMCAxIC41NDUuNDQ7Yy4wNi4wOTQuMTA9LjE9Mi4xNDQuMjk3YTEuMzkyIDEuMzkyIDAgMCAxIC4wNzguNThsLS4wMjkuMzJaIiBmaWxsPSIjRjI3NzdBIi8+CiAgPHBhdGggZD0iTTQuMDgyIDIuMDA3YTEuNDU1IDEuNDU1IDAgMCAxLS4wOTguNDI7Yy0uMDUuMTI0LS4xMTQuMjMyLS4xOTIuMzI0YTEuMTMgMS4xMyAwIDAgMS0uMjU0LjIyNyAxLjM1MyAxLjM1MyAwIDAgMS0uNTk1LjIxNGMtLjEuMDEyLS4xOTMuMDE0LS4yOC4wMDZsLTEuNTYtLjEwOC4wMzQtLjQwNi4wMy0uMzQ4IDEuNTU5LjE1NGMuMDknMCAuMTuzLjwMLjI4LTuMz3EuNjAzLjYwMyAwIDAgMCAuMi0uMTA6LjUzMi41MzIgMCAwIDAgLjEzOS0uMTuyLjY6LjY6IDAgMCAwIC4wNjQtLjI0MWwuMDI9LS4zMjFhLjk0Ljk0IDAgMCAwLS4wMzYtLjI5LjU7LjU7IDAgMCAwLS4xMDMtLjIwMi41PDItLjUwMiAwIDAgMC0uMTY8LS4xMzguNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNjOLuNj......
API公告!
我们非常高兴地宣布全新推出的Unstructured API。虽然托管的Unstructured API将继续免费使用,但进行请求时需要API密钥。为避免中断,请立即在这里获取您的密钥,并从今天开始使用吧!请查看此处的README,了解如何开始调用API。
:rocket: 测试版功能:Chipper模型
我们发布了Chipper模型的测试版,用于在处理高分辨率、复杂文档时提供更卓越的性能。要在您的API请求中使用Chipper模型,可以采用hi_res策略。请参阅此处的文档链接。
由于Chipper模型仍处于测试阶段,我们欢迎各位的反馈与建议。如果您有兴趣试用Chipper模型,欢迎通过Slack社区与我们联系。
<img src="https://img.shields.io/badge/Phorm-Ask_AI-%23F2777A.svg?&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNSIgaGVpZ2h0PSI0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGQ9Ik00LjQzIDEuODgyYTEuNDQgMS40NCAwIDAgMS0uMDk4LjQyNmMtLjA1LjEyMy0uMTE1LjIzLS4xOTIuMzIyLS4wNzUuMDktLjE2LjE2NS0uMjU1LjIyNmExLjM1MyAxLjM1MyAwIDAgMS0uNTk1LjIxMmMtLjA5OS4wMTItLjE5Mi4wMTQtLjI3OS4wMDZsLTEuNTkzLS4xNHYtLjQwNmgxLjY1OGMuMDkuMDAxLjE3LS4xNjkuMjQ2LS4xOTFhLjYwMy42MDMgMCAwIDAgLjItLjEwNi41MjkuNTI5IDAgMCAwIC4xMzgtLjE3LjY1NC42NTQgMCAwIDAgLjA2NS0uMjRsLjAyOC0uMzJhLjkzLjkzIDAgMCAwLS4wMzYtLjI0OS41NjcuNTY3IDAgMCAwLS4xMDMtLjIuNTAyLjUwMiAwIDAgMC0uMTY4LS4xMzguNjA4LjYwOCAwIDAgMC0uMjQtLjA2N0wyLjQzNy43MjkgMS42MjUuNjcxYS4zMjIuMzIyIDAgMCAwLS4yMzIuMDU4LjM3NS4zNzUgMCAwIDAtLjExNi4yMzJsLS4xMTYgMS40NS0uMDU8LjY5Ny0uMDU8Ljc1NEwuNzA1IDRsLS4zNTctLjA7OUwuNjAyLjkwNkMuNjE3LjcyNi42NjMuNTc0LjczOS40NTRhLjk1OC45NTggMCAwIDEgLjI7NC0uMjg1Ljk7MS45NzEgMCAwIDEgLjMzNy0uMTRjLjExOS0uMDI2LjIyNy0uMDM0LjMyNS0uMDI2TDMuMjMyLjE6Yy4xNTkuMDE4LjMzNi4wMy40NTkuMDgyYTEuMTczIDEuMTczIDAgMCAxIC41NDUuNDQ7Yy4wNi4wOTQuMTA9LjE9Mi4xNDQuMjk3YTEuMzkyIDEuMzkyIDAgMCAxIC4wNzguNThsLS4wMjkuMzJaIiBmaWxsPSIjRjI3NzdBIi8+CiAgPHBhdGggZD0iTTQuMDgyIDIuMDA7YTEuNDU1IDEuNDU1IDAgMCAxLS4wOTguNDI3Yy0uMDUuMTI0LS4xMTQuMjMyLS4xOTIuMzI0YTEuMTMgMS4xMyAwIDAgMS0uMjU0LjIyNyAxLjM1MyAxLjM1MyAwIDAgMS0uNTk1LjIxNGMtLjEuMDEyLS4xOTMuMDE0LS4yOC4wMDZsLTEuNTYtLjEwOC4wMzQtLjQwNi4wMy0uMzQ4IDEuNTU5LjE1NGMuMDkgMCAuMTuzLjwMS4yNDgtLjAzM2EuNjAzLjYwMyAwIDAgMCAuMi0uMTA6LjUzMi41MzIgMCAwIDAgLjEzOS0uMTuyLjY6LjY2IDAgMCAwIC4wNjQtLjI0MWwuMDI5LS4zMjFhLjk0Ljk0IDAgMCAwLS4wMzYtLjI5LjU7LjU7IDAgMCAwLS4xMDMtLjIwMi41MDIuNTAyIDAgMCAwLS4xNjgtLjEzOC42ODUuNjODUgMCAwIDAgLC4yNDgtLjA6TDEuMjuzLjgyN2MtLjA9Ni0uMDA4LS4xNjguMDEtLjIyMS4wNTUtLjA5My4wNDUtLjA8NC4xMTQtLjA9Mi4yMDZMLjcwNSA0IDAgMy45MzhsLjI1NS0yLjkxMUExLjAxIDEuMDEgMCAwIDEgLjM9My41NzIuOTYyLjk6MiAwIDAgMSAuNjY6LjI4NmEuOTcuOTcgMCAwIDEgLjMzOC0uMTRDMS4xMjIuMTIgMS4yMy4xMSAxLjMyOC4xMTlsMS41OTMuMTRjLjE6LjAxNC4zLjA0Ny40MjMuMWExLjE7IDEuMTcgMCAwIDEgLjU0NSuNDHjLjA6MS4wOTUuMTA9LjE9Mi4xNDQuMjk5YTEuNDA6IDEuNDO6IDAgMCAxIC4wNzcuNTgzbC0uMDI4LjMyMloiIGZpbGw9IndoaXRlIi8+CiAgPHBhdGggZD0iTTQuMDgyIDIuMDA7YTEuNDU1IDEuNDU1IDAgMCAxLS4wOTguNDI7Yy0uMDUuMTI0LS4xMTQuMjMyLS4xOTIuMzI0YTEuMTMgMS4xMyAwIDAgMS0uMjU0LjIyNyAxLjM1MyAxLjM5MyAwIDAgMS0uNTk1LjIxNGMtLjEuMDEyLS4xOTMuMDE0LS4yOC4wMDZsLTEuNTYtLjEwOC.0MzQtLjQwNi.0My-.MzQ8.154CMu.MDkgMCAu.MTuzLjwMS4yNDgtLj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.OzMy.Lj.AzM2.Eu.Nj.Oz......
ocr_only 策略会通过 Tesseract 进行 OCR 处理。目前,hi_res 在处理多列文档时,难以正确排列元素顺序。如果您遇到无法提取文本的多列文档,建议使用 ocr_only 策略。请注意,如果 Tesseract 不可用,ocr_only 策略将回退到其他策略。
为了兼顾各方面需求,auto 策略会判断页面是否可以使用 fast 或 ocr_only 模式进行提取,否则将回退到 hi_res。
高分辨率模型名称
hi_res 策略支持不同的模型,默认使用 detectron2onnx。您也可以通过指定 hi_res_model_name 参数,在使用主机 API 的同时运行 hi_res 策略并采用 chipper 模型:
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/layout-parser-paper.pdf' \
-F 'strategy=hi_res' \
-F 'hi_res_model_name=chipper' \
| jq -C . | less -R
我们还支持在本地使用的模型,例如 yolox。有关如何使用本地 API 的更多信息,请参阅 using-the-api-locally 部分。
OCR 语言
注意:此关键字参数最终将被弃用。请改用 languages。
您还可以通过 ocr_languages 关键字参数指定用于 OCR 的语言。完整的语言列表及安装说明,请参阅 Tesseract 文档。仅当 PDF 文档中尚未包含文本时,才会应用 OCR。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/english-and-korean.png' \
-F 'strategy=ocr_only' \
-F 'ocr_languages=eng' \
-F 'ocr_languages=kor' \
| jq -C . | less -R
语言
您还可以通过 languages 关键字参数指定用于 OCR 的语言。完整的语言列表及安装说明,请参阅 Tesseract 文档。仅当 PDF 文档中尚未包含文本时,才会应用 OCR。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/english-and-korean.png' \
-F 'strategy=ocr_only' \
-F 'languages=eng' \
-F 'languages=kor' \
| jq -C . | less -R
坐标
从 PDF 或图像中提取元素时,获取它们的边界框可能会很有用。将 coordinates 参数设置为 true,即可在响应中的元素中添加此字段。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/layout-parser-paper.pdf' \
-F 'coordinates=true' \
| jq -C . | less -R
跳过表格提取
目前,我们支持为所有文件类型启用或禁用表格提取功能。通过设置 skip_infer_table_types 参数,您可以指定希望跳过表格提取的文档类型。默认情况下,我们会为所有文件类型启用表格提取(skip_infer_table_types=[])。需要注意的是,表格提取功能仅适用于 hi_res 策略。例如,如果您想跳过对图片的表格提取,可以传递一个包含相应图片文件类型的列表:
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/layout-parser-paper-with-table.jpg' \
-F 'strategy=hi_res' \
-F 'skip_infer_table_types=["jpg"]' \
| jq -C . | less -R
编码
您可以指定用于解码文本输入的编码方式。如果未提供值,则将使用 UTF-8 编码。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/fake-power-point.pptx' \
-F 'encoding=utf_8' \
| jq -C . | less -R
压缩文件
您可以发送压缩文件,API 会自动解压。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'gz_uncompressed_content_type=application/pdf' \
-F 'files=@sample-docs/layout-parser-paper.pdf.gz'
如果设置了 gz_uncompressed_content_type 字段,API 将以该值作为所有文件解压后的内容类型,前提是这些文件是以单个批次发送的。如果没有设置该字段,API 将根据各种启发式方法来检测解压后文件的类型。
XML 标签
处理 XML 文档时,将 xml_keep_tags 参数设置为 true,即可在输出中保留 XML 标签。如果不指定此参数,则只会提取标签内的文本。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/fake-xml.xml' \
-F 'xml_keep_tags=true' \
| jq -C . | less -R
分页符
对于支持的文件类型,将 include_page_breaks 参数设置为 true,即可在输出中包含 PageBreak 元素。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/layout-parser-paper-fast.pdf' \
-F 'include_page_breaks=true' \
| jq -C . | less -R
唯一元素 ID
默认情况下,元素 ID 是元素文本的 SHA-256 哈希值,以确保 ID 具有确定性。不过,这也意味着 ID 并不一定是唯一的。具有相同文本的不同元素将拥有相同的 ID,并且还可能出现哈希碰撞的情况。若希望在输出中使用 UUID 代替,可将 unique_element_ids=true。请注意,这意味着元素 ID 将是随机的,因此每次对同一文件进行分割时,都会得到不同的 ID。这在您希望将 ID 用作数据库主键等场景下可能非常有用。
curl -X 'POST' \
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/layout-parser-paper-fast.pdf' \
-F 'unique_element_ids=true' \
| jq -C . | less -R
元素分块
使用 chunking_strategy 表单字段可以将文本划分为更大或更小的元素。默认值为 None,即不进行分块。可用的分块策略包括 basic 和 by_title。
basic 策略会将连续的整个文档元素组合起来,尽可能填满最大字符数为 max_characters 的块。如果某个单独的元素本身超过 max_characters,则会按照单词边界将其拆分为两个或多个块。
by_title 策略的行为与上述相同,但会尊重文档的章节边界,这意味着来自两个不同章节的元素永远不会出现在同一个块中。Title(章节标题)元素会引入一个新的章节,因此得名。
额外参数(全部可选):
`max_characters`
块大小的硬性上限。任何块都不会超过此长度。默认值为500。
`new_after_n_chars`
当块达到或超过此长度时,会被视为“满”的,即使它还能容纳更多内容以符合 `max_characters` 的限制,也不会再添加新的元素。这个“软性上限”默认与 `max_characters` 相同。
`overlap`
指定从每个块中提取一段字符串(称为“尾部”),并将其作为上下文保留机制前置到下一个块中。默认情况下,这仅适用于那些因文本拆分而被分割成多个块的超大元素。
`overlap_all`
默认值:`False`。当设置为 `True` 时,会对由完整元素形成且未经过文本拆分的“普通”块之间也应用重叠。请谨慎使用此选项,因为它可能会在一定程度上破坏原本清晰的语义块边界。
`combine_under_n_chars`
将元素(例如一系列标题)合并,直到一个章节达到指定的字符数长度为止。默认值为500。仅对 `by_title` 策略有效。
`multipage_sections`
如果为 `True`,章节可以跨越多页。默认值为 `True`。仅对 `by_title` 策略有效。
curl -X 'POST'
'https://api.unstructured.io/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/layout-parser-paper-fast.pdf' \
-F 'chunking_strategy=by_title' \
| jq -C . | less -R
开发者快速入门
- 建议使用
pyenv来管理虚拟环境
如需处理所有文件类型,请参阅 Unstructured 快速入门,了解所需的众多操作系统依赖项。
- 运行
make install - 使用
make run-jupyter启动本地 Jupyter Notebook 服务器
或者
直接使用make run-web-app在本地启动 FastAPI 应用程序
在本地使用 API
运行 make run-web-app(或 make docker-start-api 在容器中运行)后,现在可以在本地端口 8000 上访问该 API。sample-docs 目录中包含许多当前支持的示例文件类型。
例如:
curl -X 'POST' \
'http://localhost:8000/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/family-day.eml' \
| jq -C . | less -R
响应将是一个提取出的元素列表:
[
{
"element_id": "db1ca22813f01feda8759ff04a844e56",
"coordinates": null,
"text": "Hi All,",
"type": "UncategorizedText",
"metadata": {
"date": "2022-12-21T10:28:53-06:00",
"sent_from": [
"Mallori Harrell <mallori@unstructured.io>"
],
"sent_to": [
"Mallori Harrell <mallori@unstructured.io>"
],
"subject": "Family Day",
"filename": "family-day.eml"
}
},
...
...
输出格式也可以设置为 text/csv,以 CSV 格式获取数据,而不是 JSON:
curl -X 'POST' \
'http://localhost:8000/general/v0/general' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@sample-docs/family-day.eml' \
-F 'output_format="text/csv"'
响应将以 CSV 格式列出提取的元素:
type,element_id,text,filename,sent_from,sent_to,subject,languages,filetype
UncategorizedText,db1ca22813f01feda8759ff04a844e56,"Hi All,",family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
NarrativeText,a663c393a5e143c01ef2bb5c98efa2c1,Get excited for our first annual family day! ,family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
NarrativeText,ce65ca3bef59957d3f1c2bab5725c82f,"There will be face painting, a petting zoo, funnel cake and more.",family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
NarrativeText,d7bcf988af9f06042d83e25c531e5744,Make sure to RSVP!,family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
Title,5550577db69c2c8aabcd90979698120a,Best.,family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
Title,ca1c571d993b6c1ed8ef56a06c16ba22,Mallori Harrell,family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
Title,d5b612de8cd918addd9569b0255b65b2,Unstructured Technologies,family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
Title,2e0b9e8ee04b9594a9c26d8535b818ff,Data Scientist,family-day.eml,['Mallori Harrell <mallori@unstructured.io>'],['Mallori Harrell <mallori@unstructured.io>'],Family Day,['eng'],message/rfc822
PDF 的并行模式
如上所述,使用 hi_res 处理 PDF 目前是一项较慢的操作。一种解决方法是将 PDF 分割成较小的文件,异步处理这些文件,并将结果合并。可以通过以下环境变量启用并行处理模式:
UNSTRUCTURED_PARALLEL_MODE_ENABLED- 设置为true可以远程处理单个 PDF 页面,默认值为false。UNSTRUCTURED_PARALLEL_MODE_URL- 用于异步发送 PDF 页面的位置,目前没有默认设置。UNSTRUCTURED_PARALLEL_MODE_THREADS- 同时发起请求的线程数量,默认值为3。UNSTRUCTURED_PARALLEL_MODE_SPLIT_SIZE- 每次请求处理的页面数量,默认值为1。UNSTRUCTURED_PARALLEL_RETRY_ATTEMPTS- 在可重试错误发生时的重试次数,默认值为2。(即总共进行 3 次尝试)
由于文件拆分会带来额外的开销,因此并行处理模式仅推荐用于 hi_res 策略。此外,使用官方 Python 客户端 的用户可以通过设置 split_pdf_page=True 来启用客户端侧的拆分功能。
安全性
您还可以设置可选的 UNSTRUCTURED_API_KEY 环境变量,以启用对您自托管的 Unstructured 实例的请求验证。如果设置了该变量,只有包含具有相同值的 unstructured-api-key 头部的请求才会被处理。否则,服务器将返回 401 错误,表示请求未经授权。
控制服务器负载
某些文档在处理过程中会占用大量内存。为避免出现内存不足(OOM)错误,当主机可用内存降至 2GB 以下时,服务器将返回 503 错误。此行为可通过环境变量 UNSTRUCTURED_MEMORY_FREE_MINIMUM_MB 进行配置,默认值为 2048。您可以降低此值以减少此类提示信息,即允许服务器使用更多内存。或者,您可以将其设置为 0,以完全禁用此检查。
控制服务器运行时长
默认情况下,服务器将无限期运行。若需更改此设置,可以设置 MAX_LIFETIME_SECONDS 环境变量。如果设置了该变量,服务器将在启动后经过指定的秒数(MAX_LIFETIME_SECONDS)进入优雅关闭阶段。优雅关闭阶段最长持续 3600 秒,在此期间:
- 服务器拒绝所有新请求,这些请求将收到空响应;
- 服务器继续处理当前正在进行的请求,并在所有请求处理完毕后结束优雅关闭阶段。
优雅关闭阶段结束后,如果服务器仍在运行,则会被强制关闭,所有正在进行的请求将被取消,且每个请求都会收到空响应。
最大运行时长功能需要安装 GNU 的 timeout 工具,该工具在大多数 Linux 系统上默认可用。在 macOS 上,可通过 GNU coreutils 包中的 gtimeout 获得。
:dizzy: 使用 Docker 镜像的说明
以下说明旨在帮助您通过 Docker 与 unstructured-api 进行交互。如果您尚未在本地安装 Docker,请参阅 此处。
注意:我们构建了多平台镜像,以支持 x86_64 和 Apple Silicon 架构的硬件。Docker pull 命令应会自动下载适合您架构的镜像,但如有需要,您也可以使用 --platform 参数指定架构(例如 --platform linux/amd64)。
我们为每次推送到 main 分支的提交都会构建 Docker 镜像。每个镜像都会打上对应的短 commit hash 标签(如 fbc7a69)和应用版本标签(如 0.5.5-dev1)。最新的镜像还会被打上 latest 标签。要使用这些镜像,只需从我们的镜像仓库中执行 docker pull 命令即可。
docker pull downloads.unstructured.io/unstructured-io/unstructured-api:latest
拉取完成后,您可以在本地主机的 8000 端口上以 Web 应用的形式启动容器。
docker run -p 8000:8000 -d --rm --name unstructured-api downloads.unstructured.io/unstructured-io/unstructured-api:latest
您还可以传递 PORT 变量,以便在容器内的不同端口上运行服务器。
docker run -p 9500:9500 -d --rm --name unstructured-api -e PORT=9500 downloads.unstructured.io/unstructured-io/unstructured-api:latest
安全策略
有关如何报告安全漏洞的信息,请参阅我们的 安全策略。
了解更多
| 版块 | 描述 |
|---|---|
| Unstructured 社区 GitHub | 关于 Unstructured.io 社区项目的相关信息 |
| Unstructured GitHub | Unstructured.io 的开源代码库 |
| 公司官网 | Unstructured.io 的产品及公司信息 |
:chart_with_upwards_trend: 数据分析
我们与 Scarf 公司(https://scarf.sh)合作,收集匿名化的用户统计数据,以了解社区正在使用哪些功能,并据此优先安排未来的产品决策。如需了解我们如何收集和使用这些数据,请阅读我们的 隐私政策。
版本历史
0.1.12026/02/110.0.922026/01/080.0.902025/11/080.0.892025/07/050.0.872025/06/160.0.862025/06/110.0.852025/05/270.0.822024/12/140.0.812024/09/230.0.802024/09/100.0.792024/08/210.0.762024/08/060.0.752024/07/240.0.742024/07/220.0.732024/07/090.0.722024/06/280.0.712024/06/280.0.702024/06/180.0.682024/05/120.0.652024/03/13常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。