document 是一个按需调用的文档处理 worker,主要作用是在本机把办公文档转换为 Markdown,供对话或流水线使用。它不注册任何 harness 钩子,也不会向提示词中注入内容,因此不涉及文档的对话不会产生调用成本。
用途与格式支持:当对话中出现或用户提供 .docx、.doc、.pptx、.ppt、.xlsx、.xls、.odt、.ods、.odp、.rtf、.epub 或 .csv 文件时,应使用 document::to-markdown,而不是用普通文件读取函数直接读取。Office 文档本质上是包含 XML 的 ZIP 包,直接读取会得到压缩后的乱码,并浪费上下文。转换在本地完成,不需要凭据,也不会把文件发送到任何地方。所有格式共用同一个序列化器,因此不同年代的文档在标题、表格和列表的约定上保持一致。
主要能力:
- document::detect:根据文件头部的签名字节识别格式、文件族(prose、spreadsheet、presentation、book、PDF)、识别方式以及是否可转换,耗时在微秒级,不执行转换。
- document::to-markdown:把文档转换为 Markdown,保留标题、列表、链接、表格、脚注和演讲者备注,并报告未能携带的内嵌图片数量。
- document::extract-assets:按媒体类型过滤,以 base64 返回内嵌图片和对象;对返回数量和单个资源大小都有上限,超出部分仍会列出媒体类型和大小。
- document::ocr:用于没有可读文本的文档,例如扫描版 PDF、拍照页面或由图片构成的幻灯片;它会渲染页面并用视觉模型识别。
使用方式:文件类型不明确或需要批量路由时,先用 document::detect;确认是办公文档后调用 document::to-markdown。如果 Markdown 内容很少且 asset_count 大于零,说明内容主要是图片,此时调用 document::extract-assets,并把图片交给具备视觉能力的模型。对于 PDF,如果已安装 pdf worker,优先使用 pdf::classify 和 pdf::to-markdown,它们能报告哪些页面是扫描件并需要 OCR;该 worker 也能转换文本型 PDF,作为回退方案。
适用场景:处理混合格式附件、在对话中快速读取办公文档、把文档内容转为统一 Markdown 结构、提取文档中的图片资源,以及对无文本文档进行 OCR 识别。
限制与注意事项:document::ocr 是唯一会产生费用的函数,也是唯一依赖其他 worker 的函数:渲染 PDF 页面需要 browser,识别需要经 llm-router 调用视觉模型;两者都是可选安装。渲染 PDF 需要传入 path,而不是 bytes_base64。该工具不写入文档,转换是单向的,仅输出 Markdown。响应有截断上限;如果出现 truncated: true 且 total_chars 远大于返回内容,说明只拿到了片段,不能据此作答;max_chars: 0 会取消上限,适合把文档转移到存储的流水线,不适合结果直接进入对话的调用。CSV 没有签名字节,只能靠文件名识别;内联字节需要提供 file_name。除 CSV 外,若 detected_from 为 extension,说明内容未匹配已知格式,仅文件名提示了格式,应比内容检测结果更谨慎。加密文档无法打开,也没有密码参数,需要用户提供未加密副本。该工具暂未提供写入文档或双向转换功能。