AI Chat

TsgcAIChat to jeden klient czatu dla siedmiu dostawców dużych modeli językowych. Ustaw Provider, podaj klucz API i model, a następnie wywołaj Chat. Zmiana dostawcy to jedno przypisanie, reszta twojego kodu pozostaje bez zmian.

TsgcAIChat

Komponent czatu niezależny od dostawcy. Przechowuje historię rozmowy, buduje treść JSON właściwą dla dostawcy, steruje odpowiednim klientem HTTP API i zwraca ci tekst asystenta, w jednym wywołaniu albo token po tokenie.

Klasa komponentu

TsgcAIChat

Przeznaczenie

Czat LLM niezależny od dostawcy

Rodzina

Czat i agenci

Platformy

Win32 i Win64

sgcAI jest samowystarczalny. Ten komponent jest dostarczany w sgcAI razem ze środowiskiem uruchomieniowym sgcWebSockets Core, na którym jest zbudowany.

Zadaj modelowi pytanie

Wybierz dostawcę, ustaw klucz i model, wywołaj Chat. Warianty strumieniowy i asynchroniczny korzystają z tej samej konfiguracji.

uses
  sgcAI, sgcAI_Chat;

var
  oChat: TsgcAIChat;
  vAnswer: string;
begin
  oChat := TsgcAIChat.Create(nil);
  oChat.Provider := aicpAnthropic;
  oChat.ChatOptions.ApiKey    := 'sk-ant-...';
  oChat.ChatOptions.Model     := 'claude-sonnet-4-5';
  oChat.ChatOptions.MaxTokens := 4096;
  oChat.SystemMessage := 'You are a Delphi expert.';
  oChat.MaxHistoryMessages := 20;

  // Blocking call, returns the assistant text.
  vAnswer := oChat.Chat('How do I keep a WebSocket connection alive?');

  // Token by token, delivered on OnChatStream.
  oChat.OnChatStream := OnChatStreamHandler;
  oChat.ChatStream('Now explain it to a beginner.');
end;

procedure TForm1.OnChatStreamHandler(Sender: TObject;
  const aChunk: string; var Cancel: Boolean);
begin
  Memo1.Text := Memo1.Text + aChunk;
  Cancel := StopRequested;   // abort a long generation
end;
// includes: sgcAI.hpp, sgcAI_Chat.hpp

TsgcAIChat *oChat = new TsgcAIChat(NULL);
oChat->Provider = aicpOpenAI;
oChat->ChatOptions->ApiKey = "sk-...";
oChat->ChatOptions->Model  = "gpt-6-astra";
oChat->SystemMessage = "You are a Delphi expert.";

String vAnswer = oChat->Chat("How do I keep a WebSocket connection alive?");

// Local models: same code, no data leaves the machine.
oChat->Provider = aicpOllama;
oChat->ChatOptions->BaseUrl = "http://127.0.0.1:11434";
oChat->ChatOptions->Model   = "llama3";
vAnswer = oChat->Chat("Same question, local model.");

Kluczowe właściwości i metody

Składowe, po które sięgasz najczęściej.

Provider

Provider wybiera dostawcę: aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok lub aicpMistral. Zmiana tej wartości zwalnia buforowanego klienta poprzedniego dostawcy.

ChatOptions

ApiKey, Model, MaxTokens, Temperature, TopP i BaseUrl. Pozostaw Temperature oraz TopP z wartością domyślną, a zostaną pominięte w żądaniu, więc zastosowana będzie wartość domyślna dostawcy.

Rozmowa

SystemMessage ustawia personę dla każdej tury. MaxHistoryMessages ogranicza liczbę odtwarzanych wcześniejszych wiadomości, co ogranicza koszt tokenów. ClearHistory i GetHistory resetują i odczytują zapis rozmowy.

Wywołania

Chat blokuje i zwraca odpowiedź. ChatStream strumieniuje przez SSE. ChatWithSystem nadpisuje prompt systemowy dla jednej tury. ChatAsync zwraca future w Delphi 2010 i nowszych.

Zdarzenia

OnChatMessage raportuje każdą ukończoną wiadomość wraz z jej rolą. OnChatStream dostarcza każdy fragment i niesie flagę Cancel. OnChatError wystawia błędy dostawcy i transportu.

Dokumenty i ekstrakcja

ChatWithDocument i ChatWithDocumentBase64 wysyłają wraz z wiadomością jeden PDF albo obraz, ChatWithAttachments i ChatJSONWithAttachments wysyłają kilka, przechowywanych na liście TsgcAIChatAttachments. OpenAI, Anthropic i Gemini odczytują PDF-y natywnie, pozostali dostawcy przyjmują obrazy. Podłącz czat do TsgcAIDocumentExtractor, aby zamienić faktury, paragony i dokumenty tożsamości w JSON zwalidowany wobec schematu, z poziomem pewności dla każdego pola.

Modele lokalne

Gdy Provider jest ustawiony na aicpOllama, ChatOptions.BaseUrl kieruje komponent na twój własny host Ollama, więc prompty i odpowiedzi nigdy nie opuszczają maszyny.

Wywoływanie narzędzi

ChatWithTools wysyła definicje twoich narzędzi (nazwę, opis i JSON Schema) wraz z wiadomością i zwraca wywołania narzędzi, o które prosi model. Wykonaj je, przekaż każdy wynik przez AddToolResult i wywołaj ponownie. Działa u wszystkich siedmiu dostawców, każdego w jego własnym formacie. TsgcAIAgent uruchamia tę pętlę za ciebie.

Aliasy modeli i fallback

ChatOptions.Model może być aliasem, takim jak fast lub smart, odwzorowanym w ModelAliases na model albo na provider:model i wczytanym przez LoadModelAliasesFromFile, LoadModelAliasesFromJSON lub LoadModelAliasesFromURL. Fallbacks wymienia następnego dostawcę i model do wypróbowania przy błędzie połączenia, HTTP 5xx, HTTP 429 lub nieznanym modelu, a OnFallback raportuje każde przełączenie.

Użycie tokenów i guardrails

LastUsage i OnChatUsage raportują dostawcę, model oraz tokeny wejściowe, wyjściowe i z pamięci podręcznej każdego żądania, wraz z UserId i SessionId, a LastFinishReason mówi, dlaczego ostatnia odpowiedź się zakończyła, na przykład stop lub length. Przypisz TsgcAIUsageMeter do UsageMeter, aby uzyskać koszty i budżety, a TsgcAIGuardrails do Guardrails, aby maskować PII, stosować reguły narzędzi i walidować schematy.

Aliasy modeli, fallback i użycie tokenów

Nazywaj modele według roli, odpowiadaj dalej, gdy dostawca zawiedzie, i czytaj tokeny każdego żądania. Nowość w 2026.11.0.

uses
  sgcAI, sgcAI_Chat;

procedure TForm1.ChatWithFallback;
var
  oFallback: TsgcAIChatFallback;
begin
  sgcAIChat1.Provider := aicpOpenAI;
  sgcAIChat1.ChatOptions.ApiKey := 'sk-...';
  // aliases: alias=model or alias=provider:model
  sgcAIChat1.ModelAliases.Add('fast=gpt-6-luna');
  sgcAIChat1.ModelAliases.Add('smart=anthropic:claude-opus-5-5');
  sgcAIChat1.ProviderApiKeys.Add('anthropic=sk-ant-...');
  sgcAIChat1.ChatOptions.Model := 'fast';
  // tried in order on a connection error, HTTP 5xx, HTTP 429 or an unknown model
  oFallback := sgcAIChat1.Fallbacks.Add;
  oFallback.Provider := aicpGemini;
  oFallback.Model := 'gemini-3-flash';
  oFallback.ApiKey := 'AIza...';
  sgcAIChat1.OnFallback := DoFallback;

  Memo1.Lines.Add(sgcAIChat1.Chat('Write a haiku about Delphi.'));
  Memo1.Lines.Add(Format('Answered by %s %s: %d input, %d output tokens',
    [sgcAIChat1.LastUsage.Provider, sgcAIChat1.LastUsage.Model,
    sgcAIChat1.LastUsage.InputTokens, sgcAIChat1.LastUsage.OutputTokens]));
end;

procedure TForm1.DoFallback(Sender: TObject; const aFromProvider, aFromModel,
  aToProvider, aToModel, aError: string);
begin
  Memo1.Lines.Add('Fallback from ' + aFromProvider + ' to ' + aToProvider +
    ': ' + aError);
end;

Specyfikacje i materiały źródłowe

Miarodajne źródła dla usług i protokołów, z których korzysta ten komponent.

Poznawaj dalej

Pomoc onlinePełna dokumentacja API i przewodnik użytkowania komponentów sgcAI.
Wszystkie komponenty sgcAIPrzejrzyj pełną matrycę funkcji wszystkich 15 komponentów.
Pobierz bezpłatną wersję próbnąWypróbuj wszystkich siedmiu dostawców z własnymi kluczami API.
CennikLicencje Single, Team i Site, pełny kod źródłowy.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy, aby zacząć?

Pobierz bezpłatną wersję próbną i podłącz model językowy pod formularz Delphi w kilka minut.