NOTES · 期刊
5.1K Star!Sparrow:把发票PDF变成干净JSON,本地运行零云依赖
发布于 2026/08/27 11:50 · 更新于 2026/08/27 11:50
5.1K Star!Sparrow:把发票PDF变成干净JSON,本地运行零云依赖
↑阅读之前记得关注+星标⭐️,😄,每天才能第一时间接收到更新
大家好,我是杰克王,AI 算法 6 年老兵。
公司财务每个月收到几十张 PDF 发票,格式不统一,供应商一家一个样。有人手动录系统,有人做 Excel,有人找外包。这个问题几乎每家中小企业都有。
或者你是开发者,接了个文档解析需求——客户的采购单、银行流水、财报表格,想用 AI 提取结构化数据。调云 API?贵,而且数据出境有风险。自己搭模型?依赖一堆,不同硬件配置又是不同的坑。
这个问题,Sparrow 想正面解决。
先看效果。把一张银行账单扔进去,出来是这样的结构化 JSON(完整字段,开箱可用):
{
"bank": "First Platypus Bank",
"account_holder": "Mary G. Orta",
"account_number": "1234567890123",
"statement_date": "3/1/2022",
"period_covered": "2/1/2022 - 3/1/2022",
"account_summary": {
"balance_on_march_1": "$25,032.23",
"total_money_in": "$10,234.23",
"total_money_out": "$10,532.51"
},
"transactions": [
{"date": "02/01", "description": "PGD EasyPay Debit", "withdrawal": "203.24"},
{"date": "02/05", "description": "Payroll Direct Dep Giants", "deposit": "2,534.65"},
{"date": "02/07", "description": "Check No. 234", "withdrawal": "1,400.00"}
],
"valid": "true"
}字段名你来定,Sparrow 按你的 JSON schema 提取,自动验证格式是否符合 schema。valid: true 意味着结果可以直接接入后端或数据管道,不需要二次清洗。
Sparrow 是由 Andrey Volk(SignalWire 平台工程师)在 2022 年创建的 API-first 企业文档智能平台。四年持续维护,截至 2026-06-11 累计 5160 Stars,518 Forks,当天还有更新提交。项目以 GPL v3 许可证开源,商业授权也在提供。
Sparrow 的核心设计理念:全程本地,无外部依赖。不调 OpenAI、不上传到云端,LLM 跑在你自己的机器上,数据留在内网。
架构:三条流水线
Sparrow 的可插拔架构把不同任务拆成三条独立流水线,互不干扰。
三条 Pipeline 的定位:
Pipeline | 输入 | 输出 | 底层技术 |
|---|---|---|---|
Sparrow Parse | 文档图片/PDF + JSON schema | 验证过的结构化 JSON | Vision LLM |
Sparrow Instructor | 文本指令 | 自由格式文本 | Text LLM(Gemma、Mistral、Qwen) |
Sparrow Agents | 多步骤工作流定义 | 复杂流程结果 | 多 Agent 编排 + Prefect |
什么时候用哪条?
Sparrow Parse 是主力——拿来提取发票金额、表格数据、表单字段,告诉它你要什么字段、什么格式,它给你结构化结果。Sparrow Instructor 做文字处理:对已提取的文本做摘要、分析、问答、决策判断。Sparrow Agents 处理更复杂的企业场景:先分类文档类型,再提取字段,最后写入数据库,全套流程可视化监控。
三条 Pipeline 可以混搭,Prefect 负责编排和监控,失败重试、错误处理都有内置支持。
拿来就能用的 UI
Sparrow 带了一个网页 UI,不写代码也能试。上传文档、填 JSON schema、点运行,实时看结果。适合先验证精度再决定是否接 API。
UI 功能:拖拽上传(PNG/JPG/多页 PDF)、JSON 查询 schema、结构化输出展示、内置 Dashboard 看 API 调用统计和模型性能对比。
在线版:https://sparrow.katanaml.io(跑在作者自己的\[1\] Mac Mini M4 Pro 64GB 上,非 demo 环境)
四套后端,按硬件选
Sparrow 同一套 API,多个推理后端,不同机器对应不同方案:
后端 | 硬件要求 | 特点 | 推荐场景 |
|---|---|---|---|
MLX | Apple Silicon Mac | 统一内存,性能最优 | M1~M4 Mac 本地开发/生产 |
vLLM | NVIDIA GPU(推荐 96GB VRAM) | 生产级推理,全精度模型 | Linux 服务器部署 |
Ollama | 通用(CPU/GPU 均可) | 安装最简单 | Linux/Windows 快速起步 |
Mistral OCR | 云服务 | 企业级 OCR 精度 | 高精度文档 + 无本地 GPU |
Hugging Face | 云 GPU | 无本地硬件要求 | 测试环境/无 GPU 备选 |
不同文档类型对应不同的推荐模型:
场景 | 推荐模型 | 后端 |
|---|---|---|
发票/表单(欧洲格式) | Mistral Small 3.2 24B | vLLM / MLX |
发票/表单(美国格式) | Gemma 4 31B Dense | MLX |
大型复杂表格 | dots.ocr | vLLM |
快速测试 | Qwen3.6 27B Dense | MLX |
低内存设备 | Qwen3.6 35B MoE / Gemma 4 26B MoE | MLX |
对大型复杂表格,Sparrow 有专门的处理路径:dots.ocr 先把表格内容转成 HTML 中间格式,再用 Sparrow Templates 映射到 JSON schema,精度比直接 Vision LLM 更稳。适合财务报表、多列发票这类场景。
快速上手
环境要求:Python 3.12.10+,macOS(MLX)或 Linux/Windows(其他后端)
# 1. 安装 pyenv + Python 3.12.10
pyenv install 3.12.10
pyenv global 3.12.10
# 2. 创建虚拟环境
python -m venv .env_sparrow_parse
source .env_sparrow_parse/bin/activate
# 3. 克隆 + 安装依赖
git clone https://github.com/katanaml/sparrow.git
cd sparrow/sparrow-ml/llm
pip install -r requirements_sparrow_parse.txt
# 4. macOS 需要安装 poppler(PDF 处理)
brew install poppler
# 5. 启动 API 服务
python api.py第一次提取债券表格数据:
./sparrow.sh '[{"instrument_name":"str", "valuation":0}]' \
--pipeline "sparrow-parse" \
--options mlx \
--options mlx-community/Qwen2.5-VL-72B-Instruct-4bit \
--file-path "data/bonds_table.png"Sparrow 还支持多页 PDF(--file-path xxx.pdf),以及图片裁剪(针对表单的某一区域做提取,减少干扰)。需要提高精度?用 hints 文件给模型加提示,比如告诉它"注意区分供应商税号和收货方税号",或者"日期统一格式化为 YYYY-MM-DD":
./sparrow.sh '[{"instrument_name":"str", "valuation":"int"}]' \
--pipeline "sparrow-parse" --debug --options mlx \
--options mlx-community/gemma-4-31b-it-8bit \
--file-path "data/bonds_table.png" \
--hints-file-path "data/llm_hints_eu.json"安装坑实录(来自 GitHub Issues,截至 2026-06-11)
社区里反馈最多的坑,你可以提前避开:
坑 1:pip 安装直接报错(8 条评论,高频)
Error running pip install -r requirements.txt多数是 Python 版本问题。Sparrow 明确要求 3.12.10,偏一个小版本可能就报 AttributeError。用 pyenv 锁版本,比系统 Python 或 conda 省事。
坑 2:运行时 ModelConfig 报错(8 条评论)
TypeError: 'ModelConfig' object is not subscriptable依赖包版本不兼容的经典错误。先 pip install --upgrade pip,再 pip install --no-cache-dir 重装。
坑 3:非 Mac 用户根本跑不起来(7 条评论,最坑)
Unable to use sparrow parse without MLX这是用户最集中的反馈。README 里 MLX 部分讲得比较显眼,很多 Linux/Windows 用户以为 MLX 是必须的。实际上不是——在 requirements_sparrow_parse.txt 里把 sparrow-parse[mlx] 改成 sparrow-parse(去掉 [mlx] 部分),就会跳过 MLX 相关库,然后用 Ollama 后端即可。
建议:本地部署前先用 https://sparrow.katanaml.io\[2\] 在线版测试。把你的实际文档丢上去,看提取精度是否满足需求,再决定要不要折腾本地部署。
四年迭代轨迹
CHANGELOG 很能说明问题:
v0.6.0(2026-06-05):UI 改进
v0.5.0(2026-05-26):大版本功能更新
v0.4.4(2025-09-27):升级 MLX 后端,集成 Mistral 3.2 模型
v0.4.3(2025-05-24):新增边界框标注,可追踪字段在文档中的位置
v0.4.1(2025-04-11):Sparrow UI Dashboard,可视化 API 调用和模型性能
v0.3.0(2025-03-09):Sparrow Agent 正式发布,多文档工作流编排
v0.2.0(2024-09-04):Vision LLM 支持,这是 Sparrow 发展的核心转折点
从最早的纯文本处理工具,到现在的 Vision LLM + Agent + 多后端完整平台,迭代逻辑清晰,没有乱飘。
当前在线平台跑在作者自己的 Mac Mini M4 Pro 64GB 上——不是应付展示的云 demo,是真实生产环境。
谁适合用 Sparrow
开发者:做文档解析服务,需要一个稳定的 REST API,背后跑什么 LLM 不想操心。Sparrow 的 API 接口统一,换后端不改代码。
数据工程师:要把文档批量转成结构化数据放进数据管道。Sparrow Parse 的 Schema 验证机制可以保证输出格式一致,不用写额外的清洗脚本。
企业 IT / 运营:发票、合同、表单的自动化处理,数据不出内网,合规要求直接满足。
暂时不适合:如果你只是偶尔需要解析几份文档,用在线版或者直接调 Mistral OCR 的 API 更省事,没必要搭一套完整的本地 Sparrow 服务。门槛换回来的是批量处理能力和长期零 API 成本,小规模场景性价比不高。
总结一下 Sparrow 的核心价值:API-first,本地 LLM,无外部依赖。如果你有文档结构化提取需求,数据不能出境,或者不想持续支付云 API 费用,值得认真评估。前期在线试用,确认精度,再考虑本地部署的投入。
GitHub:https://github.com/katanaml/sparrow\[3\] 在线体验:https://sparrow.katanaml.io\[4\]
觉得有收获,点个在看支持一下 👇 感谢阅读。我是杰克王,欢迎加微交流 🚀
引用链接
[1]https://sparrow.katanaml.io(跑在作者自己的: https://sparrow.katanaml.io%EF%BC%88%E8%B7%91%E5%9C%A8%E4%BD%9C%E8%80%85%E8%87%AA%E5%B7%B1%E7%9A%84
[2]https://sparrow.katanaml.io
[3]https://github.com/katanaml/sparrow
[4]https://sparrow.katanaml.io
原文:5.1K Star!Sparrow:把发票PDF变成干净JSON,本地运行零云依赖