告别手动整理:用lift-oQ8将PDF批量转成结构化JSON的5种姿势
2026/9/6 14:16:21 网站建设 项目流程

告别手动整理:用lift-oQ8将PDF批量转成结构化JSON的5种姿势

【免费下载链接】lift-oQ8项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/lift-oQ8

发票、合同、报表……每天都要面对一堆 PDF,手动复制粘贴整理成表格,既枯燥又容易出错。其实,PDF批量转JSON这件事,现在一台 Mac 就能本地完成。今天介绍的lift-oQ8,是一个专为结构化数据提取而生的 9B 视觉语言模型,能把 PDF 或图片直接转换成符合你要求的结构化JSON,完全开源、本地运行、无需联网,对新手也非常友好。

lift-oQ8 是什么?为什么适合 PDF 转 JSON?

lift-oQ8 是datalab-to/lift的 MLX 量化版本,基于qwen3_5架构,核心能力就一句话:看懂文档,输出结构化数据。它最大的特色是支持JSON Schema 约束解码——你预先定义好字段结构(比如发票号、金额、明细列表),模型在生成时就严格按结构输出,不会出现字段缺失、类型混乱、格式漂移的问题。

换句话说:把 PDF 截图或图片丢给它,它直接吐出一份规整的 JSON,而不是一段需要二次解析的自然语言。想先体验的话,最简单的获取方式就是克隆模型仓库:

git clone https://gitcode.com/hf_mirrors/mlx-community/lift-oQ8

下面这 5 种姿势,从单张试用到批量自动化,总有一款适合你。

姿势一:一条命令快速体验 PDF 转 JSON

如果你只想快速验证效果,不需要写任何代码。前提是有一台 Apple Silicon 的 Mac,然后安装mlx-vlm,一条命令就能完成单张 PDF/图片转 JSON

uvx --from mlx-vlm mlx_vlm.generate \ --model mlx-community/lift-oQ8 \ --image invoice.png \ --prompt "Extract the invoice as JSON." \ --max-tokens 800

invoice.png换成你的 PDF 截图或扫描件路径即可。几秒钟后,终端就会输出结构化 JSON。这是上手最快的方式,适合先验证模型的识别效果。

姿势二:搭建本地 OpenAI 兼容服务,实现批量 PDF 提取

单张命令适合试水,真正要批量处理 PDF,建议启动一个本地 API 服务。mlx_vlm.server提供了 OpenAI 兼容接口,启动后任何语言都能像调用云端 API 一样调用它:

uvx --from mlx-vlm mlx_vlm.server --model mlx-community/lift-oQ8 --port 8080

服务启动后,用 Python 的openai库即可发送请求:

import base64 from openai import OpenAI client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="local") img = base64.b64encode(open("invoice.png", "rb").read()).decode() resp = client.chat.completions.create( model="mlx-community/lift-oQ8", messages=[{"role": "user", "content": [ {"type": "text", "text": "Extract this invoice."}, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img}"}}, ]}], temperature=0.0, max_tokens=800, ) print(resp.choices[0].message.content)

这样一来,PDF 转 JSON 就变成了一个普通的 HTTP 调用,可以轻松接入任何自动化脚本。

姿势三:用 JSON Schema 约束输出,告别格式混乱

普通大模型转 JSON 最大的痛点是格式不稳定:字段名随意、类型对不上、数组结构变来变去。lift-oQ8 专门解决了这个问题——通过response_format传入 JSON Schema,模型在解码阶段就被约束,输出保证合法且类型正确:

schema = { "type": "object", "properties": { "invoice_number": {"type": "string"}, "total": {"type": "number"}, "line_items": {"type": "array", "items": {"type": "object", "properties": { "description": {"type": "string"}, "amount": {"type": "number"}}}}, }, "required": ["invoice_number", "total"], } resp = client.chat.completions.create( model="mlx-community/lift-oQ8", messages=[{"role": "user", "content": [ {"type": "text", "text": "Extract this invoice."}, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img}"}}, ]}], response_format={"type": "json_schema", "json_schema": {"name": "invoice", "schema": schema}}, temperature=0.0, max_tokens=800, ) import json print(json.loads(resp.choices[0].message.content))

强烈建议用这种方式结构化提取:字段结构由你定义,结果可以直接入库,无需清洗。

姿势四:编写批量脚本,自动处理整个文件夹

当你有几十上百份 PDF 时,就该上批量脚本了。思路很简单:先把 PDF 页面转成图片(可用 PyMuPDF 或 pdf2image),再循环调用本地服务。下面是一份可直接改用的示例:

import base64, glob, io from openai import OpenAI from pdf2image import convert_from_path client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="local") for pdf in glob.glob("pdfs/*.pdf"): page = convert_from_path(pdf, first_page=1, last_page=1)[0] buf = io.BytesIO(); page.save(buf, format="PNG") img = base64.b64encode(buf.getvalue()).decode() resp = client.chat.completions.create( model="mlx-community/lift-oQ8", messages=[{"role": "user", "content": [ {"type": "text", "text": "Extract this document as JSON."}, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img}"}}, ]}], temperature=0.0, max_tokens=800, ) print(pdf, "=>", resp.choices[0].message.content)

把结果追加写入一个 JSONL 文件,就完成了一整个目录的批量 PDF 转 JSON,全程不用人工介入。

姿势五:嵌入业务系统,让结构化数据直接入库

最后一招,是把提取能力变成你业务流水线的一环。比如:财务系统定时扫描邮箱里的发票 PDF → 转图片 → 提取 → 写入数据库;或者把合同关键字段抽出来喂给 RAG 知识库做检索。

几个让结果更稳定的实用技巧:

  • temperature 设为 0.0,减少随机性,保证同类文档输出一致;
  • 固定 JSON Schema,让不同批次的数据结构完全对齐,方便合并入库;
  • 加一层字段校验与重试,遇到空值或异常再请求一次,命中率更高;
  • 处理多页 PDF 时逐页提取,再按文档编号汇总,避免长文档信息丢失。

性能与量化版本怎么选?

lift-oQ8 属于 oQ 量化家族,不同位宽版本在体积、内存和速度上差异明显,可按机器配置挑选:

版本量化方式约每权重位数体积峰值内存生成速度
lift-bf16全精度 bf161618 GB19.9 GB31 t/s
lift-oQ8(本仓库)oQ 混合精度约 8.69.7 GB12.3 GB58 t/s
lift-oQ6oQ约 67.7 GB9.4 GB73 t/s
lift-oQ4oQ约 4.65.6 GB7.2 GB100 t/s
lift-oQ3oQ约 3.54.6 GB6.2 GB119 t/s

(以上数据来自官方在 M5 Max 上对单张发票提取的测试,仅供参考。)

如果你的内存小于 16 GB,优先考虑 oQ6 或 oQ4;如果追求最高精度,则选 bf16 或 oQ8。oQ8 是「精度与速度」比较均衡的选择,这也是它成为默认推荐的原因。

使用小贴士与注意事项

  • 已修复停止符问题:本仓库的generation_config.json已设置eos_token_id: [248044, 248046],避免服务端生成不停止、刷屏<|im_end|>的问题;
  • 质量表现:上游 FP 版 lift(9B)在官方 225 份文档基准上达到 90.2% 字段级准确率,量化版本在简单文档上表现稳定,但极端复杂的版面建议用更高位宽版本;
  • 许可证:权重采用修改版 OpenRAIL-M,允许研究、个人使用及初创公司(营收低于 500 万美元)免费使用,商用前请确认你的使用场景符合条款。

结语

从一条命令快速验证,到本地服务批量调用,再到 JSON Schema 约束和业务系统集成,lift-oQ8把「PDF 转 JSON」这件事的成本降到了最低:开源、免费、本地运行、数据不出设备。无论你是想整理个人票据,还是搭建企业级文档处理管线,这 5 种姿势总有一种能帮你告别手动整理,把时间留给更有价值的事。

【免费下载链接】lift-oQ8项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/lift-oQ8

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询