Çoğu işletme yazılımında hâlâ bir PDF'yi okuyup rakamlarını bir forma elle yazan biri vardır. Tedarikçi faturaları, kasa fişleri, resepsiyonda taranan bir kimlik kartı. Büyük dil modelleri bugün bu belgeleri iyi okuyor, ama bir modelden "fatura verilerini" istemek size düz metin, ya da modelin canının istediği şekilde yazdığı bir JSON verir, hangi değerlerden emin olmadığını anlamanın da hiçbir yolu yoktur.
sgcWebSockets 2026.10, Delphi, C++Builder ve .NET için TsgcAIDocumentExtractor'ı ekliyor. Ona bir PDF veya bir görüntü verirsiniz, o da zaten TsgcAIChat üzerinden kullandığınız modele sorar ve size bir şemaya karşı doğrulanmış, her alan için bir güven değeri taşıyan JSON döndürür. Bileşen mevcut indirmenin parçası değildir. 2026.10 sürümüyle birlikte gelir.
TsgcAIDocumentExtractor gerçek bir fatura PDF'sini Anthropic Claude ile okuyor ve her alan için bir güven değeriyle doğrulanmış JSON döndürüyor. YouTube'da da mevcut.
PDF Girer, JSON Çıkar
Bir forma bir TsgcAIChat ve bir TsgcAIDocumentExtractor yerleştirin, extractor'ı chat'e yönlendirin, bir preset seçin ve ExtractFile'ı çağırın. OpenAI, Anthropic ve Gemini PDF dosyalarını oldukları gibi okur. DeepSeek, Grok, Mistral ve Ollama yalnızca görüntü kabul eder, bu yüzden bu sağlayıcılar için sayfaları PNG veya JPEG olarak gönderirsiniz.
uses
sgcAI, sgcAI_Chat, sgcAI_DocumentExtractor;
procedure TForm1.btnExtractClick(Sender: TObject);
begin
oChat := TsgcAIChat.Create(Self);
oChat.Provider := aicpAnthropic;
oChat.ChatOptions.ApiKey := 'your-api-key';
oExtractor := TsgcAIDocumentExtractor.Create(Self);
oExtractor.AIChat := oChat;
oExtractor.Preset := dpInvoice;
Memo1.Lines.Text := oExtractor.ExtractFile('invoice.pdf');
end;
Bu, videoda gösterilen akıştır ve gerçek bir fatura PDF'si üzerinde Anthropic Claude'a karşı canlı olarak doğrulanmıştır. ExtractFiles, bir belgenin birden fazla sayfasını tek bir istekte gönderir ve ExtractAttachments, halihazırda bellekte base64 olarak tuttuğunuz belgeleri alır.
Extractor işini TsgcAIChat üzerinden yapar ve o, kendi promptlarınız için de aynı yetenekleri kazanır. ChatWithDocument bir mesajla birlikte bir PDF veya görüntü gönderir, ChatWithAttachments birkaçını aynı anda gönderir ve ChatJSONWithAttachments bunlar hakkında JSON formatında bir yanıt ister. Yeni bir TLSOptions özelliği, her sağlayıcı için kullanılan OpenSSL sürümünü, IOHandler'ı ve sertifikaları ayarlar.
Memo1.Lines.Text := oChat.ChatWithDocument('Summarize this contract', 'contract.pdf');
oFiles := TsgcAIChatAttachments.Create;
try
oFiles.AddFile('page1.png');
oFiles.AddFile('page2.png');
Memo1.Lines.Text := oChat.ChatJSONWithAttachments(
'List every line item as JSON', oFiles);
finally
oFiles.Free;
end;
Presetler ve Kendi Şemanız
Üç preset yaygın belgeleri kapsar: dpInvoice, dpReceipt ve dpIDCard. Her biri kendi JSON şemasını ve çıkarma talimatlarını beraberinde getirir, bu yüzden yapılandırılacak başka bir şey yoktur. Başka herhangi bir belge için Preset'i dpCustom olarak ayarlayın ve şemayı kendiniz yazın.
oExtractor.Preset := dpCustom;
oExtractor.SchemaName := 'purchase_order';
oExtractor.Schema.Text :=
'{"type": "object", "additionalProperties": false,' +
' "required": ["order_number", "supplier", "total"],' +
' "properties": {' +
' "order_number": {"type": "string"},' +
' "supplier": {"type": ["string", "null"]},' +
' "total": {"type": "number"}}}';
oExtractor.Instructions.Text := 'Write every amount without a currency symbol.';
OpenAI ile şema sıkı modda gönderilir, bu yüzden sıkı kurallara uymak zorundadır: her nesne "additionalProperties": false bildirir, her özellik required içinde listelenir ve isteğe bağlı bir değer ["string", "null"] gibi null'lanabilir bir tür kullanır. Yerleşik presetler bu kurallara zaten uyar. Bunlardan birinden başlayıp bir alan eklemek için TsgcAIDocumentExtractor.GetPresetSchema(dpInvoice) ile kopyalayın.
Doğrulama ve Yeniden Deneme
Yanıt hiçbir zaman kontrol edilmeden kodunuza ulaşmaz. Extractor onu yerel olarak şemaya karşı doğrular: türler, zorunlu özellikler, iç içe nesneler ve diziler, ve enum'lar. Eşleşmediğinde, bileşen modele neyin yanlış olduğunu söyler ve bir kez daha ister. ValidationRetries kaç kez deneneceğini belirler ve varsayılan değeri 1'dir.
Veriler yeniden denemelerden sonra da geçersiz kalırsa extractor bir exception fırlatır. Verileri yine de almak ve sorunları LastResult.ValidationErrors içinden okumak için RaiseOnInvalid'i False olarak ayarlayın. Her sorun bir path: message satırı olarak listelenir.
oExtractor.ValidationRetries := 1;
oExtractor.RaiseOnInvalid := False;
Memo1.Lines.Text := oExtractor.ExtractFile('invoice.pdf');
if not oExtractor.LastResult.Valid then
Memo1.Lines.AddStrings(oExtractor.LastResult.ValidationErrors);
Güven ve İnsan İncelemesi
Geçerli JSON, doğru JSON ile aynı şey değildir. Bulanık bir toplam veya lekelenmiş bir tarih yine de iyi biçimlendirilmiş bir sayı üretebilir. Bu yüzden model, çıkardığı her alan hakkında ne kadar emin olduğunu da bildirir ve extractor bu değerleri size verir. LastResult.Confidence bunların en düşüğüdür, LastResult.FieldConfidence('total') tek bir yol için değeri döndürür ve OnLowConfidence, MinConfidence altındaki her alan için bir kez tetiklenir.
oExtractor.MinConfidence := 0.8;
oExtractor.OnLowConfidence := OnLowConfidenceEvent;
Memo1.Lines.Text := oExtractor.ExtractFile('invoice.pdf');
if oExtractor.LastResult.FieldConfidence('total') < 0.8 then
ShowMessage('Check the total by hand');
procedure TForm1.OnLowConfidenceEvent(Sender: TObject; const aField: string;
aConfidence: Double);
begin
lstReview.Items.Add(Format('%s: %.2f', [aField, aConfidence]));
end;
Bu, bir inceleme kuyruğunu bir kişinin bitirebileceği bir şeye dönüştürür: modelin şüphe duyduğu iki alanı kontrol ederler, faturanın tamamını değil.
Yerel OCR, Hiçbir Şey Makineden Çıkmaz
Bazı belgelerin hiçbir bulut hizmetine gitmemesi gerekir. Extractor'a bir OCR bileşeni bağlayın ve size uygun motoru seçin. TsgcAIOCRTesseract, makinede kurulu Tesseract OCR motorunu çalıştırır. TsgcAIOCRWindows, Windows 10 ve sonrasına yerleşik metin tanımayı kullanır, böylece kurulacak hiçbir şey yoktur. OCRMode, domAlways olarak ayarlandığında görüntüler asla modele gönderilmez. OCR motoru metni yerel olarak okur ve Ollama gibi bir metin modeli çıkarmayı yapar, böylece tüm işlem hattı kendi donanımınızda çalışır.
oOCR := TsgcAIOCRTesseract.Create(Self);
oOCR.Language := 'eng';
oChat.Provider := aicpOllama;
oChat.ChatOptions.Model := 'llama3.1';
oExtractor.OCR := oOCR;
oExtractor.OCRMode := domAlways;
oExtractor.Preset := dpReceipt;
Memo1.Lines.Text := oExtractor.ExtractFile('receipt.png');
Windows motoru, en-US gibi bir BCP-47 dil etiketi alır; kullanıcı profilinin dillerini kullanmak için Language boş bırakılabilir.
oWinOCR := TsgcAIOCRWindows.Create(Self);
oWinOCR.Language := 'en-US';
oExtractor.OCR := oWinOCR;
oExtractor.OCRMode := domFallback;
Memo1.Lines.Text := oExtractor.ExtractFile('invoice.png');
Bu ikinci örnekte kullanılan domFallback diğer seçenektir. Extractor önce görsel isteği dener ve yalnızca bu istek başarısız olduğunda tanınan metni kullanır, bunun gerçekleştiğini bilmeniz için OnOCRFallback'i tetikler. LastResult.UsedOCR ve LastResult.OCRText, verilerin hangi yoldan üretildiğini sonradan size söyler. OCR adımı görüntüleri okur, bu yüzden taranmış bir PDF sayfa görüntüleri olarak girer.
.NET için C#
sgcWebSockets'in .NET sürümü, esegece.sgcWebSockets ad alanında aynı adlara sahip aynı bileşenleri içerir. Presetler, güven değerleri ve olaylar aynı şekilde çalışır ve her iki OCR motoru, TsgcAIOCRTesseract ve TsgcAIOCRWindows, de burada mevcuttur.
using esegece.sgcWebSockets;
var chat = new TsgcAIChat();
chat.Provider = TsgcAIChatProvider.aicpAnthropic;
chat.ChatOptions.ApiKey = "your-api-key";
var extractor = new TsgcAIDocumentExtractor();
extractor.AIChat = chat;
extractor.Preset = TsgcAIDocumentPreset.dpInvoice;
extractor.MinConfidence = 0.8;
extractor.OnLowConfidence += (sender, field, confidence) =>
Console.WriteLine($"review {field}: {confidence:0.00}");
string json = extractor.ExtractFile("invoice.pdf");
Console.WriteLine(json);
Console.WriteLine($"valid: {extractor.LastResult.Valid}, confidence: {extractor.LastResult.Confidence:0.00}");
Kullanılabilirlik
TsgcAIDocumentExtractor, TsgcAIOCRTesseract, TsgcAIOCRWindows ve yeni TsgcAIChat metotları, Delphi, C++Builder ve .NET için sgcWebSockets 2026.10 ile geliyor. Bugün indirebileceğiniz sürümde bulunmazlar. 2026.10 yayınlandığında, indirme sayfasında olacak.
Her özellik ve olayla birlikte adım adım bir fatura kılavuzu içeren tam referans, TsgcAIDocumentExtractor yardımında bulunur. Yapay zeka bileşenlerinin yaptığı diğer her şey için sgcAI ürün sayfasına ve sgcWebSockets Yapay Zeka sayfasına bakın.
Devamını Okuyun
- Delphi ve .NET İçin Bir Server-Sent Events İstemcisi, 2026.10'da da yeni
- Delphi'de Bir AI Aracısı Oluşturun: Function Calling ve MCP Araç Kullanımı
Sorularınız mı var, geri bildiriminiz mi var ya da geçiş konusunda yardıma mı ihtiyacınız var? Bizimle iletişime geçin. Kodu yazan kişilerden bir yanıt alacaksınız.
