mcpField
D
Docpick

Docpick

本地服务
github.com/QuartzUnit生产力128 周前更新

关于 Docpick

Docpick 是本地运行的文档结构化提取流水线,面向需要从文档生成 JSON 的开发者和数据处理团队。它结合 OCR、LLM 与自定义模式,并内置字段和跨文档校验。

主要功能

  1. 01本地 OCR 与 LLM 文档提取
  2. 02支持 Pydantic 和 JSON Schema
  3. 03内置八种文档模式
  4. 04字段规则及跨文档校验
  5. 05批量并行处理目录

适用场景

  1. 01从发票和收据提取结构化数据
  2. 02校验提取结果中的金额、日期和编号
  3. 03批量处理贸易或税务文件

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"arknill-docpick": {
"command": "uvx",
"args": [
"docpick"
]
}
}
}
启动命令uvx docpick

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypidocpick0.1.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Docpick

PyPI Python License Tests

한국어 문서 · llms.txt

输入文档,输出结构化 JSON。在本地运行,使用你自己的架构。

docpick 是一款轻量、由架构驱动的文档提取流水线,结合本地 OCR 引擎与本地大模型,从任意文档中提取结构化 JSON,包括发票、收据、提单、税务表格等。

  • 零云端依赖 — 完全在你的机器上运行(CPU 或 GPU)
  • 自定义架构 — 定义自己的 Pydantic 模型,或使用 8 种内置文档架构
  • 内置验证 — 校验码验证、跨字段规则、跨文档一致性
  • Apache 2.0 — 无 GPL/AGPL 依赖

安装

pip install docpick            # core (LLM extraction only)
pip install docpick[paddle]    # + PaddleOCR (recommended)
pip install docpick[easyocr]   # + EasyOCR (Korean-optimized)
pip install docpick[got]       # + GOT-OCR2.0 (GPU, vision-language)
pip install docpick[all]       # all OCR backends

要求: Python 3.11+ / 大模型端点(vLLM、Ollama 或兼容 OpenAI 的端点)

快速开始

Python API
from docpick import DocpickPipeline
from docpick.schemas import InvoiceSchema

pipeline = DocpickPipeline()
result = pipeline.extract("invoice.pdf", schema=InvoiceSchema)

print(result.data)           # Structured dict matching schema
print(result.validation)     # Validation errors/warnings
print(result.confidence)     # Per-field confidence scores
命令行界面
# Extract structured data
docpick extract invoice.pdf --schema invoice --output result.json

# OCR only (no LLM)
docpick ocr document.png --lang ko,en

# Validate extracted JSON
docpick validate result.json --schema invoice

# Batch process a directory
docpick batch ./documents/ --schema invoice --output ./results/ --concurrency 4

# List available schemas
docpick schemas list

# Show schema details
docpick schemas show invoice

内置架构

架构文档类型关键验证
invoice商业发票明细项合计、税号校验码、日期顺序
receipt零售/餐厅收据总计 = 小计 + 税额 + 小费
bill_of_lading海运/空运提单集装箱重量合计、ISO 6346、HS 编码格式
purchase_order采购订单采购订单总额 = 明细项合计、交货日期顺序
kr_tax_invoice韩国电子税务发票(세금계산서)企业编号校验码(x2)、供应额/税额/总额合计
bank_statement银行对账单IBAN mod97、期间日期顺序
id_document护照/身份证件(ICAO 9303)机读区(MRZ)、ISO 3166 国家代码、日期范围
certificate_of_origin原产地证书ISO 3166 alpha-2 国家代码

自定义架构

使用 Pydantic 定义自己的架构:

from pydantic import BaseModel
from docpick import DocpickPipeline
from docpick.validation.rules import SumEqualsRule, RequiredFieldRule

class MyDocument(BaseModel):
    """Custom document schema."""
    company_name: str | None = None
    total_amount: float | None = None
    tax_amount: float | None = None
    net_amount: float | None = None
    items: list[dict] | None = None

    class ValidationRules:
        rules = [
            RequiredFieldRule("company_name"),
            SumEqualsRule(["net_amount", "tax_amount"], "total_amount"),
        ]

pipeline = DocpickPipeline()
result = pipeline.extract("my_document.pdf", schema=MyDocument)

或使用 JSON Schema 文件:

docpick extract document.pdf --schema my_schema.json

验证

校验码算法
算法用途
kr_business_number韩国企业注册号(10 位数字)
luhn信用卡号
iso_6346海运集装箱号
iban_mod97国际银行账号
awb_mod7航空运单号
mrz机读区(护照/身份证件)
跨字段规则
规则描述
SumEqualsRule字段总和等于目标值(带容差)
DateBeforeRule日期 A 必须早于日期 B
RequiredFieldRule字段必须非空且不为 null
FieldEqualsRule两个字段必须相等
RangeRule数值字段处于最小值/最大值范围内
RegexRule字段匹配正则表达式模式
跨文档验证

验证相关文档之间的一致性(例如:发票 + 提单 + 装箱单):

from docpick.validation.cross_document import create_trade_document_validator

validator = create_trade_document_validator()
result = validator.validate({
    "invoice": invoice_data,
    "bl": bl_data,
    "packing_list": packing_list_data,
    "certificate": certificate_data,
})
print(result.is_valid)

OCR 引擎

引擎类型GPU语言最适用场景
PaddleOCR传统 OCR可选111通用文档(默认)
EasyOCR传统 OCR可选80+韩文文本
GOT-OCR2.0视觉语言必需多种复杂布局
VLM视觉语言必需多种直接从图像 → JSON
双层自动引擎

默认的 auto 引擎会根据置信度进行回退:

  1. 第 1 层(CPU): PaddleOCR → EasyOCR
  2. 第 2 层(GPU): GOT-OCR2.0 → VLM

如果第 1 层的平均置信度低于阈值(默认为 0.7),则会自动升级到第 2 层。

大模型提供商

提供商端点默认模型
vLLMhttp://localhost:8000/v1Qwen/Qwen3.5-32B-AWQ
Ollamahttp://localhost:11434qwen3.5:7b

通过命令行界面或 YAML 进行配置:

docpick config set llm.provider ollama
docpick config set llm.base_url http://localhost:11434
docpick config set llm.model qwen3.5:7b

错误处理

该流水线经过设计,具备良好的弹性:

  • OCR 失败 → 自动回退到下一个可用引擎
  • 大模型 JSON 解析失败 → 自动使用修正提示词重试(最多重试 1 次)
  • 部分结果 → 返回已提取的内容,并将错误记录在 result.errors 中
  • 文档加载失败 → 返回空结果和错误消息
result = pipeline.extract("damaged.pdf", schema=InvoiceSchema)
if result.errors:
    print("Pipeline warnings:", result.errors)
if result.data:
    print("Partial extraction:", result.data)

批处理

使用并行工作线程处理整个目录:

from docpick.batch import BatchProcessor
from docpick.schemas import InvoiceSchema

processor = BatchProcessor(concurrency=4)
result = processor.process_directory(
    "./invoices/",
    schema=InvoiceSchema,
    recursive=True,
)

print(f"Processed {result.succeeded}/{result.total} files")
for path, extraction in result.results.items():
    print(f"{path}: {extraction.data.get('total_amount')}")

架构

flowchart TD
    A["📄 Document\n(PDF / Image)"] --> B["DocumentLoader\n(pypdfium2)"]
    B --> C["Tier 1: OCR\n(PaddleOCR / EasyOCR)\nCPU"]
    C --> D{"Confidence\n≥ threshold?"}
    D -->|"yes"| F["LLM Extractor\n(vLLM / Ollama)\nSchema prompt"]
    D -->|"no"| E["Tier 2: VLM\n(GOT / VLM)\nGPU"]
    E --> F
    F --> G["Pydantic Validation"]
    G --> H["✅ ExtractionResult"]

许可证

Apache 2.0 — 所有依赖项均采用 Apache 2.0 或 MIT 许可证。


属于 QuartzUnit 生态系统 — 一系列可组合的 Python 库,用于数据收集、提取、搜索和 AI Agent 安全。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。