Klient API Gemini dla Delphi

· Komponenty

Google Gemini to jedna z najpotężniejszych rodzin multimodalnych modeli AI dostępnych dziś, doskonałych w generowaniu tekstu, rozumieniu obrazów, ustrukturyzowanych danych wyjściowych i wywoływaniu funkcji w szerokim zakresie zastosowań. Dla programistów Delphi chcących zintegrować Gemini ze swoimi aplikacjami, sgcWebSockets dostarcza TsgcHTTP_API_Gemini — kompleksowy, natywny komponent opakowujący całą powierzchnię API Google Gemini.

Niezależnie od tego, czy budujesz asystentów konwersacyjnych, generujesz ustrukturyzowane dane, przetwarzasz obrazy, tworzysz embeddingi do wyszukiwania semantycznego, czy orkiestrowujesz przepływy pracy wspomagane narzędziami — ten komponent daje ci bezpośredni dostęp do każdej funkcji Gemini za pomocą czystego, typebezpiecznego kodu Delphi. Żadnych szablonów REST. Żadnego żonglowania JSON. Wystarczy upuścić komponent, ustawić klucz API i zacząć budować.

Pełne pokrycie API

Każda główna funkcja API Google Gemini jest obsługiwana od razu po wyjęciu z pudełka.

Generowanie treści
Generuj tekst z promptów z opcjonalnymi instrukcjami systemowymi. Dostrajaj dane wyjściowe za pomocą temperatury, top-p, top-k i sekwencji zatrzymania.
Strumieniowanie w czasie rzeczywistym
Strumieniuj odpowiedzi token po tokenie za pomocą Server-Sent Events. Buduj responsywne interfejsy wyświetlające odpowiedzi w trakcie generowania.
Wizja
Analizuj obrazy, wysyłając dane zakodowane w base64 wraz z promptem tekstowym. Gemini opisuje, interpretuje i wnioskuje na temat treści wizualnych.
Ustrukturyzowane dane wyjściowe JSON
Wymusz na Gemini zwracanie prawidłowego JSON zgodnego ze schematem. Ustaw typ MIME odpowiedzi i schemat, aby zagwarantować parsowalne wyniki.
Wywołanie funkcji
Definiuj niestandardowe funkcje za pomocą schematu JSON. Gemini decyduje, kiedy je wywołać, umożliwiając agentyczne, wieloetapowe przepływy pracy.
Embeddingi
Generuj wektorowe embeddingi dla tekstu. Zasilaj wyszukiwanie semantyczne, klastrowanie, klasyfikację i systemy rekomendacji.
Liczenie tokenów
Zliczaj tokeny przed wysyłaniem żądań. Dokładnie szacuj koszty i zarządzaj budżetami okna kontekstu.
Zarządzanie modelami
Wyświetl wszystkie dostępne modele Gemini lub pobierz szczegóły konkretnego modelu, w tym limity tokenów wejściowych/wyjściowych.
Wbudowane ponawianie i logowanie
Automatyczne ponawianie przy przejściowych błędach z konfigurowalną liczbą prób i interwałami oczekiwania. Pełne logowanie żądań/odpowiedzi do debugowania.

Pierwsze kroki

Zintegruj Google Gemini ze swoim projektem Delphi w mniej niż minutę. Upuść komponent, skonfiguruj klucz API i wyślij pierwszą wiadomość.

// 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;

Dwa style API. Każda funkcja oferuje zarówno wygodne metody (oparte na łańcuchach znaków, minimalny kod), jak i typizowane klasy żądań/odpowiedzi (pełna kontrola, bezpieczeństwo typów). Wybierz podejście najlepiej pasujące do Twojego przypadku użycia.

Generowanie treści i strumieniowanie

API GenerateContent stanowi podstawę każdej interakcji z Gemini. Wysyłaj tekst z opcjonalnymi instrukcjami systemowymi i odbieraj odpowiedzi synchronicznie lub strumieniowane w czasie rzeczywistym.

Instrukcje systemowe

Steruj zachowaniem Gemini, podając instrukcję systemową, która określa kontekst, osobowość lub ograniczenia rozmowy.

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."

Strumieniowanie w czasie rzeczywistym

Dla responsywnych interfejsów użytkownika strumieniuj odpowiedź Gemini token po tokenie za pomocą Server-Sent Events. Przypisz obsługę zdarzenia OnHTTPAPISSE i wywołaj _CreateContentStream.

// 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;

Zaawansowane API z typami

Aby mieć pełną kontrolę nad parametrami żądania — temperaturą, top-p, top-k, sekwencjami zatrzymania, maksymalną liczbą tokenów wyjściowych — użyj klas żądań i odpowiedzi z typami.

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;

Wizja — rozumienie obrazów

Gemini jest natywnie multimodalny. Wysyłaj zdjęcia, zrzuty ekranu, diagramy lub wykresy razem z promptem tekstowym i odbieraj szczegółowe opisy, ekstrakcję danych lub wizualne pytania i odpowiedzi.

// 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;

Przypadek użycia. Automatyzuj inspekcję jakości, generuj tekst alt dla dostępności, ekstrahuj dane z wykresów lub buduj funkcje wyszukiwania wizualnego — wszystko z natywnego kodu Delphi.

Ustrukturyzowane dane wyjściowe JSON

Zagwarantuj, że Gemini zwróci prawidłowy, parsowalny JSON zgodny z Twoim dokładnym schematem. Ustaw typ MIME odpowiedzi i schemat, aby wyeliminować przetwarzanie końcowe — odpowiedź jest gotowa do bezpośredniej deserializacji do Twoich rekordów Delphi.

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;

Wymuszanie schematu. Ustawiając ResponseMimeType na 'application/json' i podając ResponseSchema, Gemini gwarantuje strukturalnie prawidłowe dane wyjściowe za każdym razem.

Wywołanie funkcji

Definiuj niestandardowe funkcje za pomocą schematu JSON, a Gemini zdecyduje, kiedy i jak je wywołać. To podstawa budowania agentycznych, wieloetapowych przepływów pracy łączących AI z logiką biznesową.

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;

Embeddingi

Generuj wysokiej jakości wektorowe embeddingi dla tekstu. Embeddingi zasilają wyszukiwanie semantyczne, klastrowanie dokumentów, silniki rekomendacji i zadania klasyfikacji.

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

Aby mieć pełną kontrolę, użyj API z typami, aby uzyskać dostęp do tablicy surowych wartości embeddingów.

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;

Liczenie tokenów

Dokładnie szacuj koszty i zarządzaj budżetami okna kontekstu przed wysyłaniem żądań.

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

Zarządzanie modelami

Programowo odpytuj dostępne modele Gemini. Wyświetl wszystkie modele lub pobierz szczegóły dla konkretnego ID modelu, w tym nazwę wyświetlaną, opis i limity tokenów.

// 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;

Konfiguracja i opcje

Dostrajaj zachowanie komponentu za pomocą kompleksowych opcji konfiguracji.

Właściwość Opis
GeminiOptions.ApiKey Twój klucz API Google Gemini (wymagany)
HttpOptions.ReadTimeout Limit czasu odczytu HTTP w milisekundach (domyślnie: 60000)
LogOptions.Enabled Włącz logowanie żądań/odpowiedzi
LogOptions.FileName Ścieżka pliku dziennika do przechwytywania żądań/odpowiedzi
RetryOptions.Enabled Automatyczne ponawianie przy przejściowych błędach (429, 503)
RetryOptions.Retries Maksymalna liczba prób ponowienia (domyślnie: 3)
RetryOptions.Wait Czas oczekiwania między ponowieniami w milisekundach (domyślnie: 3000)

Parametry żądania

Parametr Opis
Temperature Temperatura próbkowania (0.0–2.0). Niższe wartości = bardziej deterministyczne.
TopP Próbkowanie jądra (0.0–1.0). Kontroluje próg skumulowanego prawdopodobieństwa.
TopK Próbkowanie Top-K. Ogranicza wybór tokenów do K najlepszych kandydatów.
MaxOutputTokens Maksymalna liczba tokenów w odpowiedzi (domyślnie: 4096).
StopSequences Niestandardowe sekwencje zatrzymujące generowanie po napotkaniu.
ResponseMimeType Format danych wyjściowych: 'application/json' dla JSON, 'text/plain' dla tekstu.
ToolChoice Kontroluj sposób wyboru funkcji do wywołania przez model.