extractor
feishu.attachments.extractor
¶
附件内容提取:把图片 / PDF / Office / 文本附件的字节安全地抽取为「可交给多模态模型」的中性内容。
feishu.attachments.extractor.AttachmentExtractor 抽象「字节 -> feishu.attachments.extractor.ExtractedContent」, 默认实现 feishu.attachments.extractor.SandboxedAttachmentExtractor 在一个可被 SIGKILL 终止的子进程中运行 提取,并施加体积、像素、ZIP(防 zip bomb)、页数、字符等上限,从而即便面对恶意构造的文件也不会拖垮或撑爆进程。 抽取结果是中性的(文本 + 图片 + 元信息,措辞为英文),不含任何产品提示词;产品侧再用 feishu.attachments.extractor.to_openai_content_parts 配上自己的分析提示词构造模型输入。
PDF / Office 解析依赖可选库(PyMuPDF、python-docx、openpyxl、python-pptx、Pillow),按需惰性导入;缺失时对应 格式优雅降级为「无法提取」而非报错。
ExtractLimits
dataclass
¶
附件提取的各项上限;传给 feishu.attachments.extractor.SandboxedAttachmentExtractor 以覆盖默认值。
源代码位于: feishu/attachments/extractor.py
ExtractedImage
dataclass
¶
ExtractedContent
dataclass
¶
附件提取结果:分类、媒体类型、抽取文本、图片与元信息。
note 为中性英文说明(如体积/像素超限、提取超时),不含任何产品提示词。
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/attachments/extractor.py
AttachmentExtractor
¶
Bases: Protocol
附件提取协议:把附件字节抽取为 feishu.attachments.extractor.ExtractedContent。
内置实现为 feishu.attachments.extractor.SandboxedAttachmentExtractor。该协议标注了 runtime_checkable。
源代码位于: feishu/attachments/extractor.py
SandboxedAttachmentExtractor
¶
在可被 SIGKILL 终止的子进程中运行附件提取的默认 feishu.attachments.extractor.AttachmentExtractor。
超过 max_bytes 直接拒绝;其余在子进程中按 feishu.attachments.extractor.ExtractLimits 提取,并以
timeout_seconds 硬超时(子进程会被 terminate/kill),以信号量限制并发,从而抵御 zip bomb / 像素炸弹 /
解析挂死等拒绝服务向量。任何异常都降级为带 note 的 unknown 结果,绝不抛出。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
float
|
单个附件的提取硬超时秒数。默认为 |
20.0
|
|
int
|
允许提取的最大字节数。默认为 |
16 * 1024 * 1024
|
|
int
|
同时进行的提取数上限。默认为 |
2
|
|
ExtractLimits | None
|
None
|
示例:
源代码位于: feishu/attachments/extractor.py
extract_content
¶
extract_content(data: bytes, *, media_type: str, name: str | None, limits: ExtractLimits) -> ExtractedContent
同步抽取附件内容(在沙箱子进程内运行);按媒体类型分派到图片 / PDF / 文本 / Office 提取。
源代码位于: feishu/attachments/extractor.py
detect_media_type
¶
按魔数(magic bytes)识别常见图片 / PDF 类型;无法识别返回 None。
源代码位于: feishu/attachments/extractor.py
media_type_from_metadata
¶
从飞书附件元信息(mime_type / 文件名)推断媒体类型;未知时返回 application/octet-stream。
源代码位于: feishu/attachments/extractor.py
image_dimensions
¶
仅从文件头解析图片像素尺寸(不整图解码),用于像素炸弹防护。
源代码位于: feishu/attachments/extractor.py
to_openai_content_parts
¶
to_openai_content_parts(content: ExtractedContent, *, prompt: str | None = None, text_label: str = 'Attachment text') -> list[dict[str, Any]]
把 feishu.attachments.extractor.ExtractedContent 转为 OpenAI Chat Completions 的多模态 content 列表。
prompt(产品提供的分析提示词)作为首个文本块;随后是中性的元信息、抽取文本与图片(data URL)。SDK 不
内置任何分析提示词,措辞由调用方决定。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
ExtractedContent
|
提取结果。 |
必需 |
|
str | None
|
置于最前的分析提示词(产品文案)。 |
None
|
|
str
|
抽取文本块的标签。默认为 |
'Attachment text'
|
返回:
| 类型 | 描述 |
|---|---|
list[dict[str, Any]]
|
可作为 |