Gemini API Delphi Client

· Bileşenler

Google Gemini, bugün mevcut olan en güçlü çok modlu yapay zeka model ailelerinden biridir; metin üretimi, görüntü anlama, yapılandırılmış çıktılar ve geniş bir kullanım yelpazesinde işlev çağırma konularında üstünlük gösterir. Gemini'yi uygulamalarına entegre etmek isteyen Delphi geliştiricileri için sgcWebSockets, TsgcHTTP_API_Gemini sunar; bu, tüm Google Gemini API yüzeyini saran kapsamlı, yerel bir bileşendir.

İster sohbet asistanları oluşturuyor, yapılandırılmış veri üretiyor, görüntü işliyor, anlamsal arama için embeddings oluşturuyor ister araçla zenginleştirilmiş iş akışlarını düzenliyor olun, bu bileşen temiz, tip güvenli Delphi kodu aracılığıyla her Gemini özelliğine doğrudan erişim sağlar. REST kalıp kodu yok. JSON ile boğuşmak yok. Yalnızca bileşeni bırakın, API anahtarınızı ayarlayın ve oluşturmaya başlayın.

Tam API Kapsamı

Google Gemini API'sinin her büyük özelliği kutudan çıkar çıkmaz desteklenir.

İçerik Üretimi
İsteğe bağlı sistem talimatlarıyla istemlerden metin üretin. Çıktıyı temperature, top-p, top-k ve durdurma dizileriyle ince ayarlayın.
Gerçek Zamanlı Akış
Server-Sent Events kullanarak yanıtları belirteç belirteç akıtın. Yanıtları üretildikçe gösteren duyarlı arayüzler oluşturun.
Görüntü (Vision)
Bir metin istemiyle base64 kodlu veri göndererek görüntüleri analiz edin. Gemini, görsel içeriği tanımlar, yorumlar ve hakkında akıl yürütür.
Yapılandırılmış JSON Çıktısı
Gemini'yi şemanıza uygun geçerli JSON döndürmeye zorlayın. Garantili ayrıştırılabilir sonuçlar için bir yanıt MIME türü ve şema ayarlayın.
İşlev Çağırma
JSON Schema ile özel işlevler tanımlayın. Gemini bunları ne zaman çağıracağına karar vererek aracılı, çok adımlı iş akışlarını mümkün kılar.
Embeddings
Metin için vektör embeddings üretin. Anlamsal arama, kümeleme, sınıflandırma ve öneri sistemlerine güç verin.
Belirteç Sayımı
İstek göndermeden önce belirteçleri sayın. Maliyetleri doğru bir şekilde tahmin edin ve bağlam penceresi bütçelerini yönetin.
Model Yönetimi
Mevcut tüm Gemini modellerini listeleyin veya giriş/çıkış belirteç sınırları dahil belirli bir modelin ayrıntılarını alın.
Yerleşik Yeniden Deneme & Günlük Kaydı
Yapılandırılabilir deneme ve bekleme aralıklarıyla geçici hatalarda otomatik yeniden deneme. Hata ayıklama için tam istek/yanıt günlük kaydı.

Başlarken

Google Gemini'yi Delphi projenize bir dakikadan kısa sürede entegre edin. Bileşeni bırakın, API anahtarınızı yapılandırın ve ilk mesajınızı gönderin.

// Create the component and configure the API key
var
  Gemini: TsgcHTTP_API_Gemini;
  vResponse: string;
begin
  Gemini := TsgcHTTP_API_Gemini.Create(nil);
  Try
    Gemini.GeminiOptions.ApiKey := 'YOUR_API_KEY';
    // Send a simple message to Gemini
    vResponse := Gemini._CreateContent(
      'gemini-2.5-flash', 'Hello, Gemini!');
    ShowMessage(vResponse);
  Finally
    Gemini.Free;
  End;
end;

İki API stili. Her özellik hem kolaylık metotları (dize tabanlı, minimum kod) hem de tipli istek/yanıt sınıfları (tam denetim, tip güvenliği) sunar. Kullanım senaryonuza en uygun yaklaşımı seçin.

İçerik Üretimi & Akış

GenerateContent API'si, her Gemini etkileşiminin temelidir. İsteğe bağlı sistem talimatlarıyla metin gönderin ve yanıtları senkron olarak veya gerçek zamanlı akış halinde alın.

Sistem Talimatları

Konuşma için bağlamı, kişiliği veya kısıtlamaları belirleyen bir sistem talimatı sağlayarak Gemini'nin davranışını denetleyin.

vResponse := Gemini._CreateContentWithSystem(
  'gemini-2.5-flash',
  'You are a helpful assistant that responds in Spanish.',
  'What is the capital of France?');
// Returns: "La capital de Francia es París."

Gerçek Zamanlı Akış

Duyarlı kullanıcı arayüzleri için, Server-Sent Events kullanarak Gemini'nin yanıtını belirteç belirteç akıtın. OnHTTPAPISSE olay işleyicisini atayın ve _CreateContentStream çağırın.

// Enable streaming via SSE
Gemini.OnHTTPAPISSE := OnSSEEvent;
Gemini._CreateContentStream('gemini-2.5-flash',
  'Tell me a story about a brave explorer.');
procedure TForm1.OnSSEEvent(Sender: TObject;
  const aEvent, aData: string; var Cancel: Boolean);
begin
  // aData: JSON payload with generated content
  Memo1.Lines.Add(aData);
end;

Gelişmiş Tipli API

İstek parametreleri üzerinde tam denetim için (temperature, top-p, top-k, durdurma dizileri, maksimum çıkış belirteçleri) tipli istek ve yanıt sınıflarını kullanın.

var
  oRequest: TsgcGeminiClass_Request_GenerateContent;
  oResponse: TsgcGeminiClass_Response_GenerateContent;
begin
  oRequest := TsgcGeminiClass_Request_GenerateContent.Create;
  Try
    oRequest.Model := 'gemini-2.5-flash';
    oRequest.SystemInstruction := 'You are a helpful assistant.';
    oRequest.MaxOutputTokens := 2048;
    oRequest.Temperature := 0.7;
    oRequest.TopP := 0.9;
    oRequest.TopK := 40;
    oRequest.Contents.Add('user', 'Explain quantum computing in simple terms.');
    oResponse := Gemini.CreateContent(oRequest);
    Try
      if Length(oResponse.Candidates) > 0 then
        ShowMessage(oResponse.Candidates[0].Parts[0].Text);
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Görüntü (Vision), Görüntü Anlama

Gemini doğal olarak çok modludur. Bir metin istemiyle birlikte fotoğraflar, ekran görüntüleri, diyagramlar veya grafikler gönderin ve ayrıntılı açıklamalar, veri çıkarımı veya görsel soru-cevap alın.

// Load an image and ask Gemini to describe it
var
  vBase64: string;
begin
  vBase64 := sgcBase64Encode(LoadFileToBytes('product-photo.png'));
  ShowMessage(Gemini._CreateVisionContent(
    'gemini-2.5-flash',
    'Describe this product image for an e-commerce listing.',
    vBase64, 'image/png'));
end;

Kullanım senaryosu. Kalite denetimini otomatikleştirin, erişilebilirlik için alt metin üretin, grafiklerden veri çıkarın veya görsel arama özellikleri oluşturun; hepsi yerel Delphi kodundan.

Yapılandırılmış JSON Çıktısı

Gemini'nin tam şemanıza uygun, ayrıştırılabilir geçerli JSON döndürmesini garanti edin. Son işlemeyi ortadan kaldırmak için bir yanıt MIME türü ve şema ayarlayın; yanıt, doğrudan Delphi kayıtlarınıza seri durumdan çıkarılmaya hazırdır.

var
  vSchema, vResponse: string;
begin
  vSchema :=
    '{"type":"object","properties":{"name":{"type":"string"},' +
    '"age":{"type":"integer"}},"required":["name","age"]}';
  vResponse := Gemini._CreateContentJSON(
    'gemini-2.5-flash',
    'Extract the name and age: John is 30 years old.',
    vSchema);
  // Returns: {"name": "John", "age": 30}
end;

Şema uygulaması. ResponseMimeType'application/json' olarak ayarlayıp bir ResponseSchema sağlayarak, Gemini her seferinde yapısal olarak geçerli çıktıyı garanti eder.

İşlev Çağırma

JSON Schema ile özel işlevler tanımlayın; Gemini bunları ne zaman ve nasıl çağıracağına karar verecektir. Bu, yapay zekayı iş mantığınıza bağlayan aracılı, çok adımlı iş akışları oluşturmanın temelidir.

var
  oRequest: TsgcGeminiClass_Request_GenerateContent;
  oFunc: TsgcGeminiClass_Request_FunctionDeclaration;
  oResponse: TsgcGeminiClass_Response_GenerateContent;
begin
  oRequest := TsgcGeminiClass_Request_GenerateContent.Create;
  Try
    oRequest.Model := 'gemini-2.5-flash';
    // Define a function
    oFunc := TsgcGeminiClass_Request_FunctionDeclaration.Create;
    oFunc.Name := 'get_weather';
    oFunc.Description := 'Get the current weather in a location';
    oFunc.Parameters :=
      '{"type":"object","properties":{"location":{"type":"string"}}}';
    oRequest.FunctionDeclarations.Add(oFunc);
    oRequest.Contents.Add('user',
      'What is the weather in Madrid?');
    oResponse := Gemini.CreateContent(oRequest);
    Try
      // Check if Gemini wants to call a function
      if oResponse.Candidates[0].Parts[0].FunctionCallName  '' then
      begin
        ShowMessage('Function: ' + oResponse.Candidates[0].Parts[0].FunctionCallName);
        ShowMessage('Args: ' + oResponse.Candidates[0].Parts[0].FunctionCallArgs);
      end;
    Finally
      oResponse.Free;
    End;
  Finally
    oRequest.Free;
  End;
end;

Embeddings

Metin için yüksek kaliteli vektör embeddings üretin. Embeddings; anlamsal aramaya, belge kümelemesine, öneri motorlarına ve sınıflandırma görevlerine güç verir.

// Generate embeddings for a text
var
  vEmbedding: string;
begin
  vEmbedding := Gemini._EmbedContent(
    'text-embedding-004',
    'Delphi is a powerful programming language.');
  ShowMessage(vEmbedding);
end;

Tam denetim için, ham embedding değerleri dizisine erişmek üzere tipli API'yi kullanın.

var
  oResponse: TsgcGeminiClass_Response_Embedding;
  i: Integer;
begin
  oResponse := Gemini.EmbedContent(
    'text-embedding-004',
    'Delphi is a powerful programming language.');
  Try
    for i := 0 to Length(oResponse.Values) - 1 do
      Memo1.Lines.Add(FloatToStr(oResponse.Values[i]));
  Finally
    oResponse.Free;
  End;
end;

Belirteç Sayımı

İstek göndermeden önce maliyetleri tahmin edin ve bağlam penceresi bütçelerini doğru bir şekilde yönetin.

var
  vTokens: string;
begin
  vTokens := Gemini._CountTokens(
    'gemini-2.5-flash',
    'How many tokens does this message consume?');
  ShowMessage(vTokens);
end;

Model Yönetimi

Mevcut Gemini modellerini programatik olarak sorgulayın. Tüm modelleri listeleyin veya görünen ad, açıklama ve belirteç sınırları dahil belirli bir model kimliğinin ayrıntılarını alın.

// List all available Gemini models
vModels := Gemini._GetModels;
// Get details for a specific model
vModel := Gemini._GetModel('gemini-2.5-flash');
// Typed API: access model properties directly
var
  oModel: TsgcGeminiClass_Response_Model;
begin
  oModel := Gemini.GetModel('gemini-2.5-flash');
  Try
    ShowMessage('Name: ' + oModel.DisplayName);
    ShowMessage('Input limit: ' + IntToStr(oModel.InputTokenLimit));
    ShowMessage('Output limit: ' + IntToStr(oModel.OutputTokenLimit));
  Finally
    oModel.Free;
  End;
end;

Yapılandırma & Seçenekler

Bileşen davranışını kapsamlı yapılandırma seçenekleriyle ince ayarlayın.

Özellik Açıklama
GeminiOptions.ApiKey Google Gemini API anahtarınız (zorunlu)
HttpOptions.ReadTimeout Milisaniye cinsinden HTTP okuma zaman aşımı (varsayılan: 60000)
LogOptions.Enabled İstek/yanıt günlük kaydını etkinleştirir
LogOptions.FileName İstek/yanıt yakalama için günlük dosyası yolu
RetryOptions.Enabled Geçici hatalarda otomatik yeniden deneme (429, 503)
RetryOptions.Retries Maksimum yeniden deneme sayısı (varsayılan: 3)
RetryOptions.Wait Milisaniye cinsinden yeniden denemeler arası bekleme süresi (varsayılan: 3000)

İstek Parametreleri

Parametre Açıklama
Temperature Örnekleme sıcaklığı (0,0–2,0). Düşük değerler = daha deterministik.
TopP Çekirdek örnekleme (0,0–1,0). Kümülatif olasılık eşiğini denetler.
TopK Top-K örnekleme. Belirteç seçimini en iyi K aday ile sınırlar.
MaxOutputTokens Yanıttaki maksimum belirteç sayısı (varsayılan: 4096).
StopSequences Karşılaşıldığında üretimi durduran özel diziler.
ResponseMimeType Çıkış biçimi: JSON için 'application/json', metin için 'text/plain'.
ToolChoice Modelin çağrılacak işlevleri nasıl seçeceğini denetler.