Kullanım alanlarına dön
Veri İşleme

Yapay zekâ veri çıkarma — PDF'lerden, faturalardan ve yapılandırılmamış metinden yapılandırılmış çıktı

Sıkıcı ama değerli kullanım senaryosu. Faturalar, makbuzlar, sözleşmeler, potansiyel müşteriler ve özgeçmişler — daha önce ayrıştırıcı oluşturacağınız her yerde JSON şemasına bağlı bir LLM bunu 30 satırda ve daha doğru biçimde yapar; bir çeyrek yerine bir günde yayına alabilirsiniz.

Son inceleme tarihi: .

Sıkıcı ama değerli kullanım alanı

Yirmi yıl boyunca yapılandırılmamış belgelerden yapılandırılmış veri çıkarmak çeyrek süren projeler gerektiriyordu: OCR işlem hattı, regex kuralları, uç durumların ele alınması ve sağlayıcı başına düzen şablonları. Bir LLM'yi JSON şemasına bağlı tuttuğunuzda bu, 30 satır kodla yapılır; ilk çalıştırmada doğrudur ve bir günde kullanıma sunulur. Aşağıdaki örnekler, bağımsız bir OpenAI uyumlu ağ geçidi olan Kunavo üzerinde çalışır; ancak yaklaşım modellere aittir ve herhangi biriyle aynı şekilde çalışır.

Özellikle fatura mı çıkarıyorsunuz? Bu sayfa belgeler arası genel bakıştır. Özel fatura verisi çıkarma kılavuzu, bu belge türünü daha ayrıntılı ele alır: eski şablon ve model yaklaşımlarının görsel LLM çağrısıyla karşılaştırması, şemayla kısıtlanmış eksiksiz Python öğreticisi, aritmetik güvenlik önlemi, iki katmanlı model yönlendirme ve fatura başına maliyet.

Bunun özellikle iyi çalıştığı kategoriler:

  • Faturalar, makbuzlar, satın alma siparişleri
  • Sözleşmeler, hukuki anlaşmalar (tarafları, tarihleri, yükümlülükleri çıkarma)
  • Özgeçmişler / CV'ler (ATS uyumlu yapıya ayrıştırma)
  • E-posta imzalarından veya web sayfalarından potansiyel müşteri zenginleştirme
  • Tıbbi kayıtlar, laboratuvar raporları (kişisel verilerin işlenmesiyle)
  • Gayrimenkul ilanları, ürün katalogları
  • E-posta sınıflandırma ve yapılandırılmış alım

30 satırdaki temel yaklaşım

extract.py
import json
from openai import OpenAI
client = OpenAI(api_key="sk-kn-...", base_url="https://api.kunavo.com/v1")

# The schema is the output contract. Claude enforces a json_schema
# response_format (json_object it does not), so the reply has this shape
# unless max_tokens cuts it off (finish_reason == "length").
STR = {"type": ["string", "null"]}
NUM = {"type": ["number", "null"]}
INVOICE = {
    "type": "object",
    "properties": {
        "vendor": {"type": "string"},
        "invoice_number": STR, "date_iso": STR, "due_date_iso": STR,
        "currency": STR, "subtotal": NUM, "tax": NUM, "total": NUM,
        "line_items": {"type": "array", "items": {
            "type": "object",
            "properties": {"description": {"type": "string"},
                           "qty": NUM, "unit_price": NUM, "amount": NUM},
            "required": ["description", "qty", "unit_price", "amount"],
            "additionalProperties": False,
        }},
    },
    "required": ["vendor", "invoice_number", "date_iso", "due_date_iso",
                 "currency", "subtotal", "tax", "total", "line_items"],
    "additionalProperties": False,
}
RESPONSE_FORMAT = {"type": "json_schema",
                   "json_schema": {"name": "invoice", "schema": INVOICE}}
RULES = "Extract the invoice. Use null for missing fields. Dates in ISO 8601."

# Extract structured fields from an invoice PDF (after OCR)
def extract_invoice(ocr_text: str) -> dict:
    resp = client.chat.completions.create(
        model="claude-haiku-4-5",
        messages=[
            {"role": "system", "content": RULES},
            {"role": "user", "content": ocr_text},
        ],
        response_format=RESPONSE_FORMAT,
        max_tokens=1200,
    )
    return json.loads(resp.choices[0].message.content)

# Extract from an image directly (no OCR step needed)
def extract_invoice_from_image(image_url: str) -> dict:
    resp = client.chat.completions.create(
        model="claude-haiku-4-5",   # vision + an enforced schema
        messages=[
            {"role": "system", "content": RULES},
            {"role": "user", "content": [
                {"type": "text", "text": "Extract this invoice:"},
                {"type": "image_url", "image_url": {"url": image_url}},
            ]},
        ],
        response_format=RESPONSE_FORMAT,
        max_tokens=1200,
    )
    return json.loads(resp.choices[0].message.content)

İki akış vardır: yalnızca metin (ayrı bir OCR adımından sonra) ve doğrudan görsel (görsel modelinin görseli okuyup tek çağrıda JSON çıktısı vermesi). Görsel yolu oluşturulması daha hızlıdır ancak çağrı başına biraz daha pahalıdır; OCR ardından LLM yolu, OCR sayfa başına tek seferlik maliyet olduğundan büyük ölçekte daha ucuzdur.

Doğruluk karşılaştırmaları

Herkese açık bir fatura veri kümesinde (50 sağlayıcıdan 1.000 fatura), 200 kelimelik sistem istemiyle JSON modu:

  • Claude Haiku 4.5: alan düzeyinde %96 doğruluk
  • Claude Sonnet 4.6: alan düzeyinde %98 doğruluk
  • Geleneksel şablonlama: bilinen sağlayıcılarda %80-90, yenilerde %0

LLM, yeni sağlayıcı düzenlerini sıfır örnekle ele alır. Sistem istemine 2-3 örnek çifti ekleyin (few-shot); Haiku, maliyetin çok küçük bir bölümüyle Sonnet'in doğruluğuna yaklaşır.

Belge başına maliyet

  • Fatura (yaklaşık 2K giriş tokenı, yaklaşık 500 çıkış): Haiku yaklaşık $0,003, Sonnet yaklaşık $0,02
  • Tek sayfalık sözleşme (yaklaşık 5K giriş): Haiku yaklaşık $0,005, Sonnet yaklaşık $0,04
  • 10 sayfalık sözleşme (yaklaşık 50K giriş, yapılandırılmış özet çıkışı): Sonnet yaklaşık $0,30
  • Özgeçmiş (yaklaşık 3K giriş): Haiku yaklaşık $0,003
  • Görsel içeren makbuz: Haiku, yaklaşık bir fatura maliyetinde — görsel yaklaşık 1.5K giriş tokenı sayılır

Ayda 10.000 fatura işleme: Haiku ile yaklaşık $30. En yakın ticari alternatif (Rossum, AWS Textract + son işleme) aynı hacim için ayda yaklaşık $2.000-5.000 tutar.

Doğruluğu yüksek tutan 5 yaklaşım

  • Açık null işleme: Eksik alanlar için modelden "N/A" veya boş dize yerine null kullanmasını isteyin. Sonraki kod "yok" ile "bilerek boş" durumlarını ayırt edebilir.
  • ISO 8601 tarihleri: Bunu açıkça belirtin. Aksi halde model bölgesel biçimleri seçer ve sonraki ayrıştırma bozulur.
  • Para birimini ISO koduyla belirtin: "$" değil "USD"; "€" değil "EUR". Belirsizlikten kaçının ($ USD, CAD veya AUD olabilir).
  • JSON'u doğrulayın: Şemanızı zorunlu kılmak için Pydantic / Zod kullanın. Geçersizse hatayla birlikte yeniden istem gönderin.
  • Bir hafta boyunca %1'ini elle kontrol edin, sonrasında sürekli %0,1. Yalnızca kayıt düzeyini değil, alan düzeyindeki doğruluğu izleyin.

Hangi model ne zaman kullanılmalı

Belge türüÖnerilen model
Basit yapılandırılmış belgeler (fatura, makbuz)Claude Haiku 4.5
Uzun sözleşmeler / anlaşmalarClaude Sonnet 5 (uzun bağlamı işler)
Doğrudan görsel (OCR'siz PDF)Claude Haiku 4.5 veya büyük sayfalar için Claude Sonnet 5
Yüksek riskli (hukuki, tıbbi)Claude Sonnet 5 + insan doğrulaması
Toplu alım (günde 100K+)Haiku 4.5 + few-shot örnekleri + önbellekleme

Uyumlulukla ilgili hususlar

Kişisel veri içeren belgelerde (faturalarda adlar ve adresler; tıbbi kayıtlarda her şey bulunabilir) çıkarma işleminden önce takma adlandırma yapın veya üst akışta Zero Data Retention kullanın. Bölgeye özgü yaklaşımlar için uyumluluk kılavuzuna, Almanya'ya özgü uygulamalar için DSGVO ayrıntılı incelemesine bakın.

Başlangıç: /app/signup — kullandıkça öde modeliyle yapılan $10 yükleme yaklaşık 3.000 fatura çıkarımını karşılar ve bakiyenizin süresi hiçbir zaman dolmaz. Her model ailesinde response_format tarafından uygulanan kurallar ve araç kullanımı yaklaşımları için /docs/chat adresindeki sohbet belgelerini okuyun.

SSS

Bir belgeden LLM ile veri çıkarmak ne kadara mal olur?

Claude Haiku 4.5 ile belge başına yaklaşık 0,003–0,005 $, Claude Sonnet 4.6 ile yaklaşık 0,02–0,04 $. Ayda 10.000 faturanın işlenmesi yaklaşık 30 $ tutar; ticari veri çıkarma hizmetlerinde bu maliyet 2,000–5,000 $'dır.

Sıfır örneklemeli LLM veri çıkarımı ne kadar doğrudur?

Yaklaşık 30 satır kodla, örnek verilmeden alan düzeyinde %95–98 doğruluk sağlar — OCR ve regex tabanlı bir işlem hattının yerini alacak kadar doğrudur.

Belge verilerini çıkarmak için hangi modeli kullanmalıyım?

Fatura ve makbuz gibi basit, yapılandırılmış belgeler Claude Haiku 4.5'e verilir. Uzun sözleşmeler Claude Sonnet 4.6'ya verilir. Doğrudan görüntü olarak okunan belgeler Claude Haiku 4.5'e, büyük sayfalar ise Sonnet 4.6'ya verilir.

Üretim ortamında veri çıkarımının doğruluğunu nasıl koruyabilirim?

Beş uygulama: null değerleri açıkça ele alma, ISO 8601 tarihleri, ISO para birimi kodları, çıktıyı şemaya göre doğrulama ve geçersiz çıktı alındığında istemi yeniden gönderme, ayrıca manuel örnek kontrolü — ilk hafta çıktıların %1'i, devamında %0,1'i. Kayıt düzeyinde değil, alan düzeyinde doğruluğu izleyin.