Claude için Neden Yerel Bir Delphi Bileşeni?
Anthropic Claude, piyasadaki en yetenekli Yapay Zeka ailelerinden biridir, ancak her genel örnek Python veya Node kullanır. Delphi ve C++Builder geliştiricileri için REST uç noktalarını elle çağırmak, JSON'u elle hazırlamak, Server-Sent Events ile uğraşmak, TLS'yi yönetmek, rate limitlerini işlemek ve Anthropic her yeni özellik sunduğunda — ki bunu yaklaşık her üç ayda bir yaparlar — tekrar eden kodu yeniden yazmak anlamına gelir. sgcWebSockets ile birlikte gelen TsgcHTTP_API_Anthropic bileşeni bu sürtünmeyi ortadan kaldırır. Tüm Anthropic yüzeyi — mesajlar, akış, görü, araç kullanımı, genişletilmiş düşünme, komut önbelleğe alma, dosyalar, toplu işler ve Model Context Protocol konnektörü — etrafında tür güvenli bir sarmalayıcıdır; bir forma bırakıp herhangi bir VCL, FMX veya konsol uygulamasından kullanabilirsiniz.
Bu eğitim, çalışan Delphi koduyla her başlıca yeteneği adım adım anlatır. Sonunda bir sohbet istemcisi, görü destekli bir belge analiz aracı, aracılı bir araç çalıştırıcı ve maliyet açısından optimize edilmiş bir üretim hattı oluşturabileceksiniz. Tüm kod parçaları en son claude-sonnet-4-20250514 ve claude-opus-4-20250514 modellerini hedefler ve tümü Delphi 7'den Delphi 13'e kadar değişmeden çalışır.
Konuya dalmadan önce felsefe hakkında hızlı bir not. Bileşen kasıtlı olarak iki yüzey sunar. "Hızlı" yüzey (_CreateMessage, _CreateMessageStream, _CreateMessageWithImage gibi metotlar) birkaç dize kabul eder ve bir dize döndürür — prototipler, demolar ve temperature, top-p, meta veriler veya durdurma dizileriyle ilgilenmediğiniz çağrıların %80'i için mükemmeldir. "Tür belirtilmiş" yüzey (TsgcAnthropicClass_Request_Messages ve TsgcAnthropicClass_Response_Messages gibi sınıflar), güçlü tür belirtme ve IDE otomatik tamamlama ile Anthropic API'sinin desteklediği her parametre üzerinde tam kontrol sağlar. Öğrenmek için hızlı API'yi kullanın; üretim için tür belirtilmiş API'ye geçin. Aynı bileşen, iki katman, tekrar yok.
1. Kurulum ve İlk Mesajınız
uses bölümünüze sgcHTTP_API_Anthropic ekleyin, bileşeni oluşturun, API anahtarınızı ayarlayın (console.anthropic.com'dan bir tane alın) ve _CreateMessage'i çağırın. Claude ile konuşmak için mutlak minimum budur.
uses
sgcHTTP_API_Anthropic;
var
oClaude: TsgcHTTP_API_Anthropic;
vReply : string;
begin
oClaude := TsgcHTTP_API_Anthropic.Create(nil);
try
oClaude.AnthropicOptions.ApiKey := 'sk-ant-api03-...';
vReply := oClaude._CreateMessage(
'claude-sonnet-4-20250514',
'Write a haiku about Pascal compilers.');
ShowMessage(vReply);
finally
oClaude.Free;
end;
end;
Bileşen ağır işi yapar: JSON istek gövdesini oluşturur, x-api-key ve anthropic-version başlıklarını ayarlar, /v1/messages'e gönderir ve yanıtı sade bir Delphi dizesine ayrıştırır. İstek parametreleri üzerinde tam kontrole ihtiyacınız varsa, tür belirtilmiş TsgcAnthropicClass_Request_Messages sınıfını kullanın.
Operasyonel bir ipucu: API anahtarını asla ikili dosyaya gömmeyin. Onu bir ortam değişkeninden, bir kayıt defteri anahtarından veya bir gizli yöneticisinden okuyun. Anthropic artık sızdırılan anahtarlar için GitHub'ı tarar ve onları otomatik olarak iptal eder — birisi .pas dosyanızın ekran görüntüsünü aldığı için cuma akşamı saat 6'da bir güncelleme göndermek istemezsiniz.
2. SSE ile Akış Yanıtları
Senkron çağrılar kısa komutlar için iyidir, ancak bir sohbet UI'si için tokenların Claude bunları üretirken görünmesini istersiniz. Anthropic yanıtları Server-Sent Events olarak akıtır ve bileşen bunları OnHTTPAPISSE olayı aracılığıyla sunar.
procedure TForm1.FormCreate(Sender: TObject);
begin
oClaude := TsgcHTTP_API_Anthropic.Create(Self);
oClaude.AnthropicOptions.ApiKey := 'sk-ant-api03-...';
oClaude.OnHTTPAPISSE := ClaudeSSE;
end;
procedure TForm1.ClaudeSSE(Sender: TObject;
const aEvent, aData: string; var Cancel: Boolean);
var
vDelta: string;
begin
// aEvent values: message_start, content_block_delta,
// content_block_stop, message_stop
if aEvent = 'content_block_delta' then
begin
vDelta := oClaude.SSEExtractText(aData);
Memo1.Text := Memo1.Text + vDelta;
Application.ProcessMessages;
end;
end;
procedure TForm1.btnAskClick(Sender: TObject);
begin
Memo1.Clear;
oClaude._CreateMessageStream(
'claude-sonnet-4-20250514',
edtPrompt.Text);
end;
Dikkat edilmesi gereken bir ayrıntı: akış bir arka plan iş parçacığında çalışır, bu nedenle üretim kodunda UI'yi TThread.Synchronize veya TThread.Queue aracılığıyla güncelleyin. Yukarıdaki kod parçası kısalık için ProcessMessages kullanır. Bir diğeri: SSE akışı sırayla birden fazla olay türü gönderir (message_start, content_block_start, tekrarlanan content_block_delta, content_block_stop, message_delta, message_stop) ve ihtiyacınız olmayanları yok saymalısınız. SSEExtractText yardımcısı, metin deltasını content_block_delta'dan çekme yaygın durumunu işler; kullanım istatistikleri ve durdurma nedenleri için message_delta'yı doğrudan ayrıştırırsınız.
Akış, kullanıcıya yönelik herhangi bir sohbet UI'si için gereklidir — kullanıcılar 400 ms içinde başlayan bir yanıtı, tam yanıt on saniye sürse bile hızlı olarak algılar. Akış olmadan on saniye boyunca bir döndürücüye bakar ve uygulamanın bozuk olduğunu varsayarlar. Maliyet aynıdır: akışlı ve akışsız istekler aynı şekilde faturalandırılır.
3. Görü — Görüntü Gönderme
Claude, JPEG, PNG, GIF ve WebP görüntülerini analiz edebilir. Bunları ya genel bir URL olarak ya da base64 ile kodlanmış baytlar olarak geçirirsiniz. Bileşen, URL durumu için _CreateMessageWithImage'i ve diğer her şey için tür belirtilmiş API'yi sunar.
var
oRequest : TsgcAnthropicClass_Request_Messages;
oMessage : TsgcAnthropicClass_Request_Message;
oImage : TsgcAnthropicClass_Request_Content_Image;
oResponse: TsgcAnthropicClass_Response_Messages;
begin
oRequest := TsgcAnthropicClass_Request_Messages.Create;
try
oRequest.Model := 'claude-sonnet-4-20250514';
oRequest.MaxTokens := 1024;
oMessage := oRequest.NewMessage('user');
oMessage.AddText('Describe what you see and read any text.');
oImage := oMessage.AddImage;
oImage.Source.LoadFromFile('C:\invoices\inv-2026-05-12.png');
oImage.MediaType := 'image/png';
oResponse := oClaude.CreateMessage(oRequest);
try
Memo1.Lines.Add(oResponse.Content[0].Text);
finally
oResponse.Free;
end;
finally
oRequest.Free;
end;
end;
Görü; taranmış faturalarda OCR, destek taleplerinde ekran görüntüsü değerlendirmesi, grafik yorumlama ve belirleyici bir OCR motorunun düzenle zorlanacağı her görev için idealdir. Token maliyetine dikkat edin: 1024x1024 bir görüntü yaklaşık 1.600 girdi tokenı tüketir. Anthropic, uzun kenarda 1568 pikselden büyük her şeyi işlemeden önce yeniden boyutlandırır, bu nedenle 4K ekran görüntüleri yüklemenin bir anlamı yoktur — kendi tarafınızda küçültün ve bant genişliğinden tasarruf edin.
Delphi firmalarının geçen yıl ürettiğini gördüğümüz pratik kullanım senaryoları: geleneksel OCR hatları için fazla tutarsız olan tedarikçi PDF'lerinden satır öğeleri çıkarma, uzman yazılıma yönlendirmeden önce tıbbi görüntüleri geniş kategorilere sınıflandırma, saha hizmeti fotoğraflarından sayaç değerlerini okuma ve yardım masası taleplerindeki UI hatası ekran görüntülerini değerlendirme ("ekran görüntüsü bir düzen sorunu mu yoksa bir veri sorunu mu gösteriyor?"). Her durumda kazanç ham doğruluk değildi — kırılgan, belge başına bir ayrıştırıcı yazma ve sürdürme ihtiyacını ortadan kaldırmaktı.
4. Araç Kullanımı (İşlev Çağırma)
Araç kullanımı, Claude'un Pascal işlevlerinizi ne zaman çağıracağına karar vermesini sağlar. Her aracı bir ad, açıklama ve parametreleri için JSON Schema ile bildirirsiniz. Claude sade metin yerine bir tool_use bloğuyla yanıt verdiğinde, çağrıyı çalıştırır ve sonucu konuşmaya geri beslersiniz.
var
oRequest: TsgcAnthropicClass_Request_Messages;
oTool : TsgcAnthropicClass_Request_Tool;
begin
oRequest := TsgcAnthropicClass_Request_Messages.Create;
oRequest.Model := 'claude-sonnet-4-20250514';
oRequest.MaxTokens := 1024;
oTool := oRequest.NewTool;
oTool.Name := 'get_stock_price';
oTool.Description := 'Return the current bid/ask for a US ticker symbol.';
oTool.InputSchema :=
'{"type":"object",' +
'"properties":{"symbol":{"type":"string","description":"Ticker, e.g. AAPL"}},' +
'"required":["symbol"]}';
oRequest.NewMessage('user').AddText('What is Apple trading at?');
oResponse := oClaude.CreateMessage(oRequest);
if oResponse.StopReason = 'tool_use' then
begin
vSymbol := oResponse.ToolUse[0].InputAsJSON.S['symbol'];
vPrice := MyQuoteFeed.Quote(vSymbol); // your code
oClaude.SendToolResult(oResponse.ToolUse[0].Id,
Format('{"bid":%.2f,"ask":%.2f}', [vPrice.Bid, vPrice.Ask]));
end;
end;
Araçları zincirleyerek aracılı iş akışları oluşturun: bir araştırma aracısı web_search, read_pdf ve send_email araçlarını birleştirebilir. Hatalı davranan bir modelin sonsuza kadar döngüye girememesi için her zaman bir iMaxIterations koruması bulundurun. Üretimde maliyet nedenleriyle kullanıcı sırası başına beş araç çağrısıyla sınırlandırırız; Claude daha fazlasına ihtiyaç duyarsa, bu genellikle komutun veya araç tasarımının yanlış olduğunun bir işaretidir.
Araç çağırma kalitesinin tek en büyük belirleyicisi açıklama metnidir. Açıklamalar kesin olduğunda modeller doğru aracı doğru bağımsız değişkenlerle yaklaşık %99 oranında seçer ("Bir ABD ticker sembolü için güncel bid/ask'i döndür. Bunu yalnızca hisse senetleri için kullan, kripto veya FX için değil"); belirsiz bir açıklamayla ("Bir fiyat al") belki %70'e düşerler. Zaman ayırın. Açıklamaya örnekler ekleyin. Aracın NE YAPMADIĞINI belirtin. Gelecekteki siz, gece 11'de 0,40 dolarlık halüsinasyonlu bir işlev çağrısında hata ayıklarken, şimdiki size teşekkür edecek.
5. Genişletilmiş Düşünme
Claude 4, modelin yanıtlamadan önce bir problemi adım adım akıl yürüttüğü bir düşünme modu sunar. Token cinsinden bir düşünme bütçesi ayırırsınız ve Claude akıl yürütme izini nihai yanıttan ayrı olarak döndürür. Bu; matematik, kod incelemesi ve çok adımlı analiz için oyunun kurallarını değiştiren bir şeydir.
oRequest.Thinking.Enabled := True;
oRequest.Thinking.BudgetTokens := 8000; // soft cap on internal reasoning
oRequest.MaxTokens := 16000;
oRequest.NewMessage('user').AddText(
'A train leaves Madrid at 07:00 doing 220 km/h. Another leaves ' +
'Barcelona at 07:15 doing 250 km/h. The route is 621 km. ' +
'Where do they meet?');
oResponse := oClaude.CreateMessage(oRequest);
MemoThinking.Lines.Text := oResponse.Thinking; // reasoning trace
MemoAnswer.Lines.Text := oResponse.Content[0].Text;
Genişletilmiş düşünmeyi tutumlu kullanın — akıl yürütme tokenları çıktı olarak faturalandırılır, bu nedenle Opus 4'te 16k tokenlık bir düşünme bütçesi kolayca normal bir çağrıdan daha pahalıya mal olabilir. Bunu, doğruluğun gecikmeden daha önemli olduğu problemler için saklayın. İyi uyum: yasal belge analizi, finansal mutabakat, karmaşık SQL üretimi, yığın izlerinde hata ayıklama, çok kısıtlamalı zamanlama. Kötü uyum: sohbet yanıtları, içerik sınıflandırma, basit aramalar — düşünme süresi ve maliyeti haklı çıkmaz.
Yararlı bir hile, akıl yürütme izini UI'nizde, genel Claude uygulamasının yaptığı gibi, daraltılabilir bir "düşünmeyi göster" bölümü olarak sunmaktır. İleri düzey kullanıcılar modelin yanıta nasıl ulaştığını görmeyi sever; sıradan kullanıcılar bunu yok sayar. Her iki durumda da ücretsiz bir denetim izine sahip olursunuz.
6. Komut Önbelleğe Alma
Aynı uzun sistem komutunu, bilgi tabanını veya araç tanımlarını göndermeye devam ediyorsanız, komut önbelleğe alma maliyetleri %90'a kadar azaltabilir ve ilk tokena kadar geçen süreyi %80 düşürebilir. Bir içerik bloğunu önbelleğe alınabilir olarak işaretlersiniz; Anthropic bunu 5 dakika boyunca (veya genişletilmiş önbellekle 1 saat) kendi tarafında depolar ve sonraki çağrılarda yalnızca daha ucuz olan cache-read fiyatını yeniden faturalandırır.
var
oSystem: TsgcAnthropicClass_Request_System;
begin
oSystem := oRequest.NewSystemBlock;
oSystem.Text := LoadFile('C:\kb\product-manual.txt'); // 50k tokens
oSystem.CacheControl := 'ephemeral'; // mark as cacheable
oRequest.NewMessage('user').AddText('How do I configure SSL on the server?');
oResponse := oClaude.CreateMessage(oRequest);
// Inspect cache stats
ShowMessage(Format('Cache: created=%d, read=%d, input=%d, output=%d',
[oResponse.Usage.CacheCreationInputTokens,
oResponse.Usage.CacheReadInputTokens,
oResponse.Usage.InputTokens,
oResponse.Usage.OutputTokens]));
end;
Genel kural: beş dakika içinde yeniden kullandığınız 1.024 tokenın üzerindeki her şey önbelleğe almaya değer. Büyük belge külliyatları, az örnekli örnekler ve büyük araç şemaları bariz adaylardır. Hesap: cache yazmaları normal bir girdi tokenından %25 daha pahalıdır, cache okumaları normal bir girdi tokenının %10'una mal olur. Bu nedenle ikinci isabetten sonra başabaş noktasına ulaşır ve üçüncüden itibaren gerçek para tasarrufu etmeye başlarsınız. 40k tokenlık bir bilgi tabanına karşı dakikada 50 soru yanıtlayan bir müşteri destek botu için komut önbelleğe alma, aylık Anthropic faturasını tipik olarak %80–85 azaltır.
İstek başına en fazla dört içerik bloğunu önbelleğe alınabilir olarak işaretleyebilirsiniz. Yaygın bir kalıp şudur: araçlar (önbelleğe alınabilir, nadiren değişir), sistem komutu (önbelleğe alınabilir, nadiren değişir), büyük belge (önbelleğe alınabilir, oturum başına değişir), son mesajlar (önbelleğe alınamaz, her sırada değişir). Bileşen bu katmanlamayı doğal olarak işler — yalnızca önbelleğe almak istediğiniz bloklarda CacheControl'ü ayarlayın.
7. MCP Konnektörü
Model Context Protocol, her aracı elle sarmalamak zorunda kalmadan Claude'un uzak araç sunucularıyla konuşmasını sağlar. Bileşeni bir MCP sunucusu URL'sine yönlendirin, Claude araçları keşfedebilir, onları çağırabilir ve sonuçları zincirleyebilir.
oRequest.MCPServers.Add(
'weather-mcp',
'https://mcp.example.com/weather',
'Bearer ' + GetMcpToken);
oRequest.NewMessage('user').AddText(
'What is the weather like in Madrid and should I take an umbrella?');
oResponse := oClaude.CreateMessage(oRequest);
ShowMessage(oResponse.Content[0].Text);
MCP konnektörünü kendi TsgcAI_MCP_Server'ınızla (ayrı bir eğitimde ele alınmıştır) birleştirin ve etki alanı API'lerinizi MCP'den haberdar herhangi bir Yapay Zeka istemcisine — Claude Desktop, Cursor, Continue, kendi uygulamalarınız, protokolü konuşan her şey — sunan tamamen Delphi yerel bir aracıya sahip olursunuz. Kimlik doğrulama sizin sorumluluğunuzdadır: bir bearer token veya imzalı başlık geçirin ve sunucu tarafında doğrulayın. Anthropic kimlik bilgilerinizi görmez — MCP konnektörü el sıkışması, tokenı istekten hedef sunucuya yönlendirir.
Çok kiracılı SaaS dağıtımları için tipik kalıp, kiracı kimliğinin URL'ye veya bearer tokena gömüldüğü, kiracı başına tek bir MCP sunucusudur. Claude, verileri asla çapraz bulaştırmadan her kiracının araçlarını çağırır. Tek bir konuşmadan 200'den fazla MCP sunucusuna dağılan üretim dağıtımları gördük.
Üretim Kontrol Listesi
Anthropic destekli bir Delphi uygulamasını üretime almadan önce bu kısa listeyi gözden geçirin:
| Husus | Nasıl ele alınır |
| API anahtarı depolama | Ortam değişkeni veya işletim sistemi gizli deposu, asla koda gömülü değil |
| 429 / 529'da yeniden denemeler | Jitter ile üstel geri çekilme, en fazla 3 deneme |
| Maliyet tavanları | İstek başına Usage'ı izleyin, günlük bütçeyi aşan yeni çağrıları reddedin |
| PII düzeltmesi | API'ye göndermeden önce e-postaları/SSN/CC numaralarını ayıklayın |
| Model sürümü sabitleme | Tam tarihli model adlarını kullanın; "latest" takma adlarına güvenmeyin |
| Komut sürümleme | Sistem komutlarını kodla birlikte sürüm denetiminde depolayın |
| Telemetri | Çağrı başına modeli, girdi tokenlarını, çıktı tokenlarını, gecikmeyi günlüğe kaydedin |
Sonra Nereye Gidilir
Bu eğitim, zamanın %95'inde ihtiyaç duyduğunuz sekiz özelliği kapsadı. Bileşen ayrıca mesaj toplu işlerini (binlerce komutun ucuz asenkron işlenmesi — senkron çağrılardan %50 daha ucuz, gece zenginleştirme işleri için ideal), Files API'sini (bir kez yükleyin, sonsuza kadar başvurun — tekrar tekrar sorguladığınız büyük PDF'ler için mükemmel), token sayımını (ödemeden önce maliyetleri tahmin etme) ve yapılandırılmış JSON çıktılarını (zorunlu şema uyumu, artık ayrıştırma hatası yok) destekler. Tam özellik matrisi için Anthropic bileşeni sayfasına göz atın ve sgcWebSockets'i henüz kurmadıysanız Başlarken merkezine gidin.
Ve Delphi'de Claude ile ilginç bir şey oluşturursanız — bir aracı, bir yardımcı pilot, bir belge analiz aracı — bize söyleyin. Yapay Zeka sürtünmesi ortadan kalktığında Pascal geliştiricilerinin neler yaptığını görmeyi seviyoruz.