Şema Odaklı Veri Çıkarma
Yapılandırılmış çıktı biçimini güvenceye almak için istemlerde JSON şemaları sağlayın.
Şema Odaklı Veri Çıkarma, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
Neden Şema Tabanlı Çıkarma
Bir modele önemli verileri çıkarın dediğinizde tutarsız ve öngörülemez bir çıktı alırsınız. Bir JSON şeması sağlayıp tam olarak bu şemaya uyan verileri çıkarın dediğinizde ise her seferinde makinece okunabilir, tutarlı ve tür güvenli bir çıktı alırsınız.
Şema tabanlı çıkarma; faturaları, sözleşmeleri, tıbbi kayıtları, toplantı notlarını ve yapılandırılmış verilerin yapılandırılmamış metinden güvenilir biçimde çıkarılması gereken her türlü belgeyi işleyen üretim sistemlerinde kullanılan örüntüdür.
İstemde Şemayı Sağlama
Şema doğrudan istemde yer alır. Model, şemayı çıktı sözleşmesi olarak kullanır:
import anthropic, json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
INVOICE_SCHEMA = '''
{
"invoice_number": "string",
"vendor_name": "string",
"vendor_address": "string or null",
"invoice_date": "YYYY-MM-DD",
"due_date": "YYYY-MM-DD or null",
"line_items": [
{
"description": "string",
"quantity": "number",
"unit_price": "number",
"total": "number"
}
],
"subtotal": "number",
"tax": "number or null",
"total_amount": "number",
"currency": "3-letter ISO code e.g. USD"
}
'''
def extract_invoice(invoice_text):
prompt = f'Extract structured data from this invoice.\nReturn JSON matching this schema exactly:\n{INVOICE_SCHEMA}\n\nInvoice:\n{invoice_text}'
r = client.messages.create(model='claude-opus-4-5', max_tokens=500, messages=[{'role': 'user', 'content': prompt}])
return json.loads(r.content[0].text)
print('Invoice schema defined.')Fatura Çıkarma Örneği
Gerçek bir fatura metninden yapılandırılmış veri çıkarmak için şemanın uygulanması:
invoice_text = '''
INVOICE #INV-2025-0342
From: Acme Software Ltd.
123 Tech Street, San Francisco, CA 94105
Date: March 15, 2025
Due: April 14, 2025
Items:
- Annual Pro License (5 seats) x1 @ $2,400.00 = $2,400.00
- Setup & Onboarding x2 @ $300.00 = $600.00
Subtotal: $3,000.00
Tax (8.5%): $255.00
TOTAL DUE: $3,255.00 USD
'''
result = extract_invoice(invoice_text)
print(f'Invoice: {result["invoice_number"]}')
print(f'Vendor: {result["vendor_name"]}')
print(f'Total: {result["currency"]} {result["total_amount"]}')
print(f'Line items: {len(result["line_items"])}')Toplantı Notlarını Çıkarma
Şema tabanlı çıkarmanın daha az yapılandırılmış bir belge türü olan toplantı notlarına uygulanması:
MEETING_SCHEMA = '''
{
"meeting_title": "string",
"date": "YYYY-MM-DD",
"attendees": ["string"],
"decisions": ["string"],
"action_items": [
{
"task": "string",
"owner": "string or null",
"due_date": "YYYY-MM-DD or null"
}
],
"next_meeting": "string or null"
}
'''
meeting_notes = '''
Product Sync - March 20, 2025
Attendees: Sarah (PM), Jake (Engineering), Priya (Design)
Decided to push the v2.0 launch to April 15.
Will not include the analytics dashboard in v2.0.
Actions:
- Jake to fix the login bug by March 25
- Priya to finalize mockups by March 22
- Sarah to send updated roadmap to stakeholders (no date set)
Next sync: March 27, same time.
'''
print(f'Meeting schema: {len(MEETING_SCHEMA)} chars')
print(f'Notes length: {len(meeting_notes)} chars')Ürün Özelliklerini Çıkarma
Bir katalog açıklamasından yapılandırılmış ürün özelliklerinin çıkarılması:
PRODUCT_SCHEMA = '''
{
"product_name": "string",
"sku": "string or null",
"category": "string",
"price": {"amount": "number", "currency": "string"},
"dimensions": {
"length_cm": "number or null",
"width_cm": "number or null",
"height_cm": "number or null",
"weight_kg": "number or null"
},
"colors": ["string"],
"materials": ["string"],
"features": ["string"],
"in_stock": true | false
}
'''
product_text = 'AlphaDesk Pro standing desk. SKU: AD-PRO-001. $899. Available in white and black. 120x60x75cm, 35kg. Steel frame, bamboo top. Features: memory height, anti-collision, app control. In stock.'
prompt = f'Extract product specs. Return JSON:\n{PRODUCT_SCHEMA}\n\nProduct: {product_text}'
r = client.messages.create(model='claude-opus-4-5', max_tokens=400, messages=[{'role': 'user', 'content': prompt}])
print(json.loads(r.content[0].text))İsteğe Bağlı Alanları Ele Alma
Şemalar, isteğe bağlı alanları uygun şekilde ele almalıdır. Çıktı yapısını tutarlı tutmak için eksik verilerde alanı çıkarmak yerine varsayılan değer olarak null kullanın:
prompt_optional = '''
Extract the data. For fields not present in the source text,
use null — do NOT omit the field.
Every field in the schema must appear in the output.
Schema:
{
"company": "string",
"ceo": "string or null",
"founded": "YYYY or null",
"revenue": "string or null",
"employees": "number or null"
}
Text: Vertex AI Solutions is a B2B SaaS company.
'''
# Expected output: ceo, founded, revenue, employees all set to null
# NOT omitted — null fields are still present in the JSON
print(prompt_optional)Aynı Şemayla Birden Fazla Belgeden Çıkarma
Aynı şema birçok belgeye tutarlı biçimde uygulanabilir. Yapılandırılmamış belgelerden büyük ölçekte yapılandırılmış bir veritabanı oluşturmanın yolu budur:
def extract_many(documents, schema):
results = []
for i, doc in enumerate(documents):
try:
r = client.messages.create(
model='claude-opus-4-5', max_tokens=400,
messages=[{'role': 'user', 'content': f'Extract data. Return JSON matching schema:\n{schema}\n\nDocument:\n{doc}'}]
)
parsed = json.loads(r.content[0].text)
parsed['_source_doc'] = i
parsed['_extraction_ok'] = True
results.append(parsed)
except (json.JSONDecodeError, Exception) as e:
results.append({'_source_doc': i, '_extraction_ok': False, '_error': str(e)})
return results
invoices = ['Invoice from Acme, March 2025, $500', 'Invoice from Beta Corp, April 2025, $1200']
results = extract_many(invoices, INVOICE_SCHEMA)
print(f'Processed: {len([r for r in results if r["_extraction_ok"]])} success, {len([r for r in results if not r["_extraction_ok"]])} failed')Çıkarma Sonrasında Şema Doğrulaması
Çıkarılan verileri Python'ın jsonschema kitaplığını veya özel doğrulayıcıları kullanarak beklenen şemaya göre doğrulayın:
def validate_extracted(data, required_fields, type_checks):
errors = []
# Check required fields
for field in required_fields:
if field not in data or data[field] is None:
errors.append(f'Required field missing or null: {field}')
# Check types
for field, expected_type in type_checks.items():
if field in data and data[field] is not None:
if not isinstance(data[field], expected_type):
errors.append(f'{field}: expected {expected_type.__name__}, got {type(data[field]).__name__}')
return errors
extracted = {'invoice_number': 'INV-001', 'total_amount': 3255.0, 'vendor_name': 'Acme', 'invoice_date': '2025-03-15'}
required = ['invoice_number', 'total_amount', 'vendor_name']
types = {'total_amount': float, 'invoice_number': str, 'line_items': list}
errors = validate_extracted(extracted, required, types)
print('Validation errors:', errors)Şemayı Yinelemeli Olarak İyileştirme
Şemalar, yinelemeli sınamalarla gelişir. Süreç:
- Alan bilgisine dayalı bir başlangıç şeması tanımlayın
- Çıkarmayı 20 örnek belge üzerinde çalıştırın
- Çıktıyı inceleyin — hangi alanlar sürekli olarak yanlış veya eksik?
- Şema açıklamasını iyileştirin ve alan tanımları ekleyin
- Aynı 20 belge üzerinde yeniden çalıştırın
- Kalite eşiği karşılanana kadar tekrarlayın
Şemaya Alan Açıklamaları Ekleme
Bir alan belirsiz olduğunda, modele yol göstermek için açıklama yorumu ekleyin:
ANNOTATED_SCHEMA = '''
{
"invoice_number": "string // The unique identifier for this invoice, e.g., INV-2025-001",
"invoice_date": "YYYY-MM-DD // Date the invoice was issued",
"due_date": "YYYY-MM-DD or null // Payment due date; null if not specified",
"subtotal": "number // Amount before tax, as a decimal number",
"tax": "number or null // Tax amount as a decimal; null if tax is not listed",
"total_amount": "number // Final amount to pay, including tax",
"payment_terms": "string or null // e.g., Net 30, Due on receipt; null if not mentioned"
}
'''
print('Annotated schema adds context per field.')
print(f'Schema length: {len(ANNOTATED_SCHEMA)} chars')Çıkarılan Alanlar İçin Güven Puanları
Üretim sistemleri için her alana bir güven puanı ekleyin. Güven düzeyi düşük çıkarımlar insan incelemesine yönlendirilebilir:
SCHEMA_WITH_CONFIDENCE = '''
{
"fields": {
"invoice_number": {"value": "string", "confidence": "high|medium|low"},
"total_amount": {"value": "number", "confidence": "high|medium|low"},
"due_date": {"value": "YYYY-MM-DD or null", "confidence": "high|medium|low"}
},
"overall_confidence": "high|medium|low",
"extraction_notes": "string or null // Any ambiguities encountered"
}
'''
prompt = f'Extract invoice data with confidence scores.\nReturn JSON:\n{SCHEMA_WITH_CONFIDENCE}\n\nInvoice: Payment due within 30 days. Total is approximately $500.'
r = client.messages.create(model='claude-opus-4-5', max_tokens=300, messages=[{'role': 'user', 'content': prompt}])
result = json.loads(r.content[0].text)
print('Overall confidence:', result.get('overall_confidence'))
print('Notes:', result.get('extraction_notes'))Hızlı Kontrol
Kaynak belgede zorunlu bir alan bulunmadığında, şema tabanlı çıkarma istemi modelin bu alan için ne döndürmesini istemelidir?
Şema Tabanlı Çıkarma — Temel Çıkarımlar
Şema tabanlı çıkarma, üretimde güvenilir belge işleme için standarttır:
- Tam JSON şemasını istemde sağlayın — model bunu çıktı sözleşmesi olarak kullanır
- Modelin yorumuna yön vermek için belirsiz alanlara alan açıklamaları ekleyin
- Her zaman şunu belirtin: eksik alanlar için null döndürün, alanları asla atlamayın
- Tutarlı ve veritabanına hazır çıktı için aynı şemayı birçok belgeye uygulayın
- İnsan incelemesine yönlendirmeyi mümkün kılmak için alan başına güven puanları ekleyin
- Her çıkarmadan sonra çıkarılan verileri program aracılığıyla doğrulayın
- Şemaları yinelemeli olarak iyileştirin: 20 örnek çıkarın, inceleyin, geliştirin ve tekrarlayın
Sıkça Sorulan Sorular
“Şema Odaklı Veri Çıkarma” dersi ücretsiz mi?
Evet — “Şema Odaklı Veri Çıkarma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
“Şema Odaklı Veri Çıkarma” dersinde ne öğreneceğim?
Yapılandırılmış çıktı biçimini güvenceye almak için istemlerde JSON şemaları sağlayın. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Şema Odaklı Veri Çıkarma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Adlandırılmış Varlık Çıkarma İstemleri
- Şema Odaklı Veri Çıkarma
- Metin Sınıflandırıcısı Olarak LLM
- Sınıflandırmada Güven ve Belirsizlik