sgcAI in fünf Minuten

Eine Komponente, eine Anbieter-Eigenschaft, ein Aufruf. Diese Seite bringt eine Delphi-Anwendung dazu, mit einem großen Sprachmodell zu sprechen, zeigt dir, wie du die Antwort streamst, statt auf sie zu warten, und benennt klar die eine Plattformgrenze, an der viele hängenbleiben.

OpenAI, Claude, Gemini, DeepSeek, Ollama, Grok, Mistral
TsgcAIChat unter Windows, macOS, Linux, iOS und Android
Enterprise-Edition oder das eigenständige sgcAI-Paket

Was der erste Aufruf benötigt

Eine Komponente, ein Schlüssel, ein Modellname und ein Prompt. Kein JSON zu bauen und kein HTTP-Client zu konfigurieren.

Komponente

TsgcAIChat auf der Palettenseite SGC AI. Sie ist ein schlanker veröffentlichter Wrapper um TsgcAI_Chat, das die mitgelieferten Demos im Code erzeugen.

Unit

sgcAI_Chat.pas für die Klasse oder die Barrel-Unit sgcAI.pas für die Palettenkomponente. Die Demos schreiben uses sgcAI_Chat;.

Die eine Eigenschaft, die den Anbieter wechselt

Provider vom Typ TsgcAIChatProvider. Die sieben Member sind aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok und aicpMistral. In deinem Code ändert sich sonst nichts.

Plattform, lies das hier

TsgcAIChat wird für jede Plattform kompiliert: Win32, Win64, macOS, Linux64, iOS und Android, und die IDE bietet es in Formularen für alle an. HTTPS-Aufrufe brauchen die übliche TLS-Einrichtung der jeweiligen Plattform, zum Beispiel die OpenSSL-Bibliotheken unter Linux. Siehe die Tabelle unten.

Voraussetzungen und Editionen

Die Editionsspalte nennt das Define, das den Code steuert, samt der Zeile in Source/sgcVer.inc, in der es steht.

Was Wert
IDE Delphi 7 bis RAD Studio 13 sowie die passenden C++Builder-Versionen. ChatAsync ist der einzige Member mit einer höheren Untergrenze, weil er in {$IFDEF D2010} eingeschlossen ist.
Uses-Klausel sgcAI_Chat für TsgcAI_Chat, TsgcAIChatProvider und die Ereignistypen.
Edition, innerhalb von sgcWebSockets SGC_AI wird in Zeile 796 definiert, innerhalb des Blocks {$IFDEF SGC_EDT_ENT}, der von Zeile 759 bis Zeile 842 reicht. Also Enterprise und höher, nicht Standard und nicht Professional.
Edition, eigenständiges Paket Das Produkt sgcAI definiert SGC_PACK_AI in Zeile 857, und sein eigener Block in den Zeilen 946 bis 959 definiert SGC_AI in Zeile 947. Dieselben Komponenten, ohne den Rest der Bibliothek.
Plattformen Keine der beiden Definitionen von SGC_AI, Zeile 796 und Zeile 947, hat einen Plattform-Guard, daher wird sgcAI_Chat.pas für jedes Ziel kompiliert und die Komponente trägt ComponentPlatforms(0). Nur TsgcAudioRecorderMCI, TsgcAudioRecorderWave, TsgcAudioPlayerMCI und TsgcTextToSpeechSystem, die Windows-Audio- und Sprach-APIs aufrufen, werden ausschließlich unter Windows kompiliert.
Was plattformübergreifend ist SGC_AI_MCP in Zeile 797 und Zeile 955 hat keinen Plattform-Guard. Der MCP-Client und -Server laufen also auch unter Linux, macOS, iOS und Android. Die Anbieter-Defines SGC_OPENAI, SGC_ANTHROPIC, SGC_GEMINI, SGC_DEEPSEEK, SGC_OLLAMA, SGC_GROK und SGC_MISTRAL, Zeilen 786 bis 792, sind ebenfalls nicht plattformbeschränkt.

Baust du einen Linux-Dienst oder eine mobile App? TsgcAIChat lässt sich auch dort kompilieren. Alternativ rufst du den REST-Client des Anbieters direkt auf, zum Beispiel TsgcHTTP_API_OpenAI oder TsgcHTTP_API_Anthropic. Der Leitfaden Ein LLM aus Delphi aufrufen zeigt beide Wege nebeneinander.

Installieren und die Palettenseite finden

sgcAI wird im sgcWebSockets-Installer und auch als eigenes Paket ausgeliefert. In beiden Fällen läuft die Installation gleich ab.

1. Entpacken

Entpacke den Download in einen Ordner, unten {$DIR} genannt.

2. Bibliothekspfad

Tools, Optionen, Bibliothek. Füge {$DIR}\source und den lib-Ordner für deine IDE hinzu, zum Beispiel {$DIR}\libD13\$(Platform).

3. Pakete erstellen

Öffne die Paketgruppe für deine IDE-Version unter {$DIR}\Packages\. Kompiliere zuerst das Laufzeit-.dpk und installiere dann das Entwurfszeitpaket mit dcl.

4. Palette prüfen

Es erscheint eine Seite namens SGC AI mit fünfzehn Komponenten. TsgcAIChat ist die erste. Fehlt die Seite bei einem Nicht-Windows-Ziel, ist das zu erwarten, denn die IDE-Palette bietet diese Komponenten nur für Win32 und Win64 an, während die Units auf jeder Plattform kompilieren.

5. Einen API-Schlüssel besorgen

Bei einem gehosteten Anbieter bringst du deinen eigenen Schlüssel dieses Anbieters mit und weist ihn ChatOptions.ApiKey zu. Ollama braucht überhaupt keinen Schlüssel, weil das Modell auf deinem Rechner läuft.

Deine erste Antwort in etwa zehn Zeilen

Erzeuge die Komponente, setze Anbieter, Schlüssel und Modell, rufe dann Chat auf und lies den zurückgegebenen String.

fUnifiedChat.pas
uses
  Classes, SysUtils,
  // sgc
  sgcAI_Chat;

procedure TfrmUnifiedChat.btnChatClick(Sender: TObject);
var
  oChat: TsgcAI_Chat;
begin
  oChat := TsgcAI_Chat.Create(nil);
  try
    oChat.Provider := aicpOpenAI;
    oChat.ChatOptions.ApiKey := GetApiKey;
    oChat.ChatOptions.Model := 'gpt-4o-mini';
    oChat.ChatOptions.MaxTokens := 1024;
    oChat.SystemMessage := 'You are a concise assistant inside a Delphi ERP.';

    memoResponse.Lines.Text := oChat.Chat(memoPrompt.Text);
  finally
    oChat.Free;
  end;
end;

Den Anbieter zu wechseln, ist eine Zeile. Provider akzeptiert aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok und aicpMistral. Alles andere bleibt, wo es ist.

fUnifiedChat.pas
procedure TfrmUnifiedChat.OnChatStream(Sender: TObject; const aChunk: string;
  var Cancel: Boolean);
begin
  memoResponse.Text := memoResponse.Text + aChunk;
  // set Cancel to stop the generation early
end;

procedure TfrmUnifiedChat.OnChatError(Sender: TObject; const aError: string);
begin
  memoResponse.Text := 'error: ' + aError;
end;

procedure TfrmUnifiedChat.btnChatStreamClick(Sender: TObject);
begin
  GetChat.Provider := aicpAnthropic;
  GetChat.ChatOptions.ApiKey := GetApiKey;
  GetChat.ChatOptions.Model := 'claude-sonnet-4-20250514';
  GetChat.SystemMessage := memoSystem.Text;

  memoResponse.Lines.Clear;
  GetChat.ChatStream(memoPrompt.Text);
end;

Die Demo baut ihre Komponente einmal in GetChat und weist dort OnChatStream und OnChatError zu. ChatStream gibt auch die vollständige Antwort zurück, du kannst den Rückgabewert also ignorieren und nur das Ereignis verwenden, oder beides nutzen.

uLocal.pas
uses
  Classes, SysUtils,
  // sgc
  sgcAI_Chat;

var
  oChat: TsgcAI_Chat;
begin
  oChat := TsgcAI_Chat.Create(nil);
  try
    // no API key at all: the model runs on this machine
    oChat.Provider := aicpOllama;
    oChat.ChatOptions.Model := 'llama3';

    // BaseUrl is read only for the Ollama provider, and only when
    // the server is not on the default address. Internally it is
    // forwarded to the Ollama client's Host property.
    oChat.ChatOptions.BaseUrl := 'http://localhost:11434';

    Writeln(oChat.Chat('Summarise this invoice in one line.'));
  finally
    oChat.Free;
  end;
end;

Es gibt kein OllamaOptions.BaseUrl. Auf der Ebene der rohen API heißt die Eigenschaft OllamaOptions.Host bei TsgcHTTP_API_Ollama, und ChatOptions.BaseUrl speist sie von dieser Schicht aus.

Die ersten beiden Tabs sind die mitgelieferte Demo Demos\15.AI\02.Applications\06.UnifiedChat\fUnifiedChat.pas, wobei die Formularsteuerelemente durch Literale ersetzt wurden. Der dritte Tab ist dieselbe Komponente, auf einen lokalen Ollama-Server gerichtet. Eine zweite Demo, 07.ConversationHistory, zeigt im selben Ordner die History-API.

Prüfen, ob es funktioniert hat, und den Fehler sehen, wenn nicht

Chat löst bei einem fehlgeschlagenen Aufruf keine Exception aus, was manche überrascht. Stattdessen gibt es einen leeren String zurück und löst ein Ereignis aus.

Der Rückgabewert

Chat liefert den Text des Assistenten als string. Ein leerer String bedeutet, dass der Aufruf fehlgeschlagen ist, denn ein Fehler löst keine Exception aus.

OnChatError

procedure(Sender: TObject; const aError: string). Sowohl Chat als auch ChatStream fangen die Exception ab und leiten sie hierher weiter. Dies ist das erste Ereignis, das du vor allem anderen verdrahten solltest.

OnChatStream

procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean). Text, der im Memo erscheint, während das Modell noch schreibt, ist der Beleg, dass Streaming funktioniert und nicht gepuffert wird.

Die Konversation

GetHistory liefert, was die Komponente beim nächsten Aufruf erneut sendet. MaxHistoryMessages begrenzt es und ClearHistory beginnt von vorn.

Was beim ersten Mal meistens schiefgeht

Sechs Probleme erklären fast jeden fehlgeschlagenen ersten Aufruf.

Build für Linux, macOS oder Mobilgeräte

sgcAI_Chat.pas wird für jede Plattform kompiliert. TsgcAudioRecorderMCI, TsgcAudioRecorderWave, TsgcAudioPlayerMCI und TsgcTextToSpeechSystem rufen Windows-Audio- und Sprach-APIs auf und werden nur unter Windows kompiliert, halte sie also von einem plattformübergreifenden Formular fern. HTTPS-Aufrufe brauchen die übliche TLS-Einrichtung der jeweiligen Plattform, zum Beispiel die OpenSSL-Bibliotheken unter Linux.

Chat liefert einen leeren String und nichts wird ausgelöst

Chat und ChatStream verschlucken die Exception und leiten sie an OnChatError weiter, dessen Signatur procedure(Sender: TObject; const aError: string) lautet. Verdrahte dieses Ereignis, bevor du irgendetwas anderes debuggst.

Ein lokales Ollama-Modell wird ignoriert

Die Ollama-Basisadresse gehört in ChatOptions.BaseUrl, nicht in das Optionsobjekt des Anbieters. Sie wird intern an OllamaOptions.Host weitergereicht, und Ollama ist der einzige Anbieter, bei dem BaseUrl überhaupt gelesen wird.

Das Formular friert bei einer langen Antwort ein

Chat und ChatStream sind synchron. Verwende ab Delphi 2010 ChatAsync, das ein IsgcFuture<string> zurückgibt. Führe den Aufruf bei älteren Compilern in einem eigenen Thread aus.

Der Modellname wird abgelehnt

Modellnamen gehören dem Anbieter, nicht der Komponente, und sie ändern sich. ChatOptions.Model wird unverändert durchgereicht, ein Name, der in der Konsole des Anbieters funktioniert, funktioniert also auch hier.

Die Rechnung wächst bei einer langen Konversation

Die Komponente sendet bei jedem Aufruf den Verlauf erneut, wodurch eine Folgefrage funktioniert. Begrenze ihn mit MaxHistoryMessages und beginne mit ClearHistory von vorn.

Was Leute nach der ersten Antwort bauen

Ein Prompt-Feld ist der Anfang. Alle vier hier sind bereits im Paket enthalten.

Aus deinen eigenen Dokumenten antworten

Wandle deine Inhalte mit TsgcAIOpenAIEmbeddings in Vektoren um, speichere sie in TsgcAIDatabaseVectorFile oder TsgcAIDatabaseVectorPinecone und rufe die passendsten Passagen ab, um sie in den Prompt zu setzen.

Embeddings-Referenz und Referenz zur Vektordatenbank

Per Sprache mit ihr sprechen

TsgcAIOpenAIChatBot verbindet Recorder, Transkription, den Chat-Aufruf und Text-to-Speech in einer Komponente. TsgcAIOpenAITranslator tut dasselbe für Live-Übersetzung.

ChatBot-Referenz und Übersetzer-Referenz

Deine App für einen Agenten bereitstellen

Die MCP-Server-Komponente macht deine Anwendung zu einem Werkzeug, das ein Assistent aufrufen kann, und der MCP-Client nutzt andere Server. Beide sind nicht auf Windows beschränkt, ein in Delphi geschriebener MCP-Server läuft also unter Linux.

MCP-Server-Referenz und MCP-Client-Referenz

Die gesamte Anbieter-API nutzen

Vision, Dokumente, erweitertes Denken, Batches, Bildgenerierung, Transkription und Moderation liegen in den REST-Clients der einzelnen Anbieter und nicht in der neutralen Chat-Schicht.

OpenAI-Referenz und Anthropic-Referenz

Referenz, Demos und Dokumentation

Die Referenzseiten dokumentieren jede Option und jedes Ereignis. Die Demo-Projekte liegen im Download unter Demos\15.AI.

Leitfaden, ein LLM aus Delphi aufrufen Die ausführliche Anleitung: Streaming, Tool-Aufrufe, gehostet im Vergleich zu lokal.
Referenz, OpenAI-Client Jede Methode, Option und jedes Ereignis von TsgcHTTP_API_OpenAI.
Referenz, Anthropic-Client Messages, Tools, Vision, Batches und Token-Zählung in TsgcHTTP_API_Anthropic.
Referenz, MCP-Server Die Komponente, mit der ein Assistent in deine Anwendung hineinrufen kann.
Komponentenseite TsgcAIChat Jede Eigenschaft und jedes Ereignis der Chat-Komponente, mit Verweisen auf die anderen vierzehn.
Online-Hilfe Die generierte Referenz, stets auf dem Stand der aktuellen Version.

Zum Weiterlesen: KI-gestützte Delphi-Apps bauen, die Anbieter aus Delphi im Vergleich und einen MCP-Server schreiben. Jedes Produkt hat einen eigenen Schnellstart, aufgelistet auf der Seite Erste Schritte.

Fragen zum sgcAI-Schnellstart

Platziere TsgcAIChat von der Palettenseite SGC AI. Sie ist in sgcAI.pas als veröffentlichter Wrapper um TsgcAI_Chat deklariert, das in sgcAI_Chat.pas deklariert ist. Code, der das Objekt zur Laufzeit erzeugt, wie es die mitgelieferten Demos tun, verwendet TsgcAI_Chat und uses sgcAI_Chat;. Beide bieten dieselben Eigenschaften.
Innerhalb von sgcWebSockets ist das Gate SGC_AI, definiert in Zeile 796 von sgcVer.inc, innerhalb des Blocks SGC_EDT_ENT, der von Zeile 759 bis Zeile 842 reicht. Das ist die Enterprise-Edition und höher. Standard, Zeilen 674 bis 723, und Professional, Zeilen 726 bis 757, definieren es nicht. Wenn du den Rest der Bibliothek nicht willst, definiert das eigenständige sgcAI-Paket SGC_PACK_AI in Zeile 857, dessen eigener Block in den Zeilen 946 bis 959 dieselben Komponenten einschaltet.
Ja. SGC_AI wird ohne Plattform-Guard definiert, in Zeile 796 im Enterprise-Block und in Zeile 947 im eigenständigen Pack-Block, daher werden sgcAI_Chat.pas und sgcAI.pas für Windows, macOS, Linux, iOS und Android kompiliert, und TsgcAIChat trägt ComponentPlatforms(0). Die Ausnahmen sind TsgcAudioRecorderMCI, TsgcAudioRecorderWave, TsgcAudioPlayerMCI und TsgcTextToSpeechSystem, die Windows-Audio- und Sprach-APIs aufrufen und nur unter Windows kompiliert werden. HTTPS-Aufrufe brauchen die übliche TLS-Einrichtung der jeweiligen Plattform, zum Beispiel die OpenSSL-Bibliotheken unter Linux.
Ändere Provider. Die Eigenschaft akzeptiert aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok und aicpMistral. Setze dann Schlüssel und Modell für diesen Anbieter. Für aicpOllama gibt es keinen Schlüssel, und wenn der Server nicht auf der Standardadresse liegt, setzt du ChatOptions.BaseUrl, was die Komponente intern an den Ollama-Client weiterreicht.
Rufe ChatStream statt Chat auf und behandle OnChatStream. Die Signatur lautet procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean): Hänge aChunk an dein Memo an, sobald es eintrifft, und setze Cancel auf True, um die Generierung vorzeitig zu beenden.
Chat und ChatStream lösen keine Exception aus. Sie fangen sie ab, lösen OnChatError mit der Meldung aus und geben einen leeren String zurück. Ein nicht behandeltes OnChatError sieht also genau so aus wie ein Modell, das mit nichts geantwortet hat. Verdrahte es zuerst.
Rufe ab Delphi 2010 ChatAsync auf, das in {$IFDEF D2010} eingeschlossen ist und ein IsgcFuture<string> zurückgibt. Unter Delphi 7 bis 2009 existiert diese Methode nicht, führe Chat also in einem Thread aus, den du selbst erzeugst.
Ja. Sie behält den Austausch und sendet ihn beim nächsten Aufruf erneut, wodurch eine Folgefrage funktioniert. MaxHistoryMessages begrenzt, wie viel erneut gesendet wird, ClearHistory beginnt eine neue Konversation und GetHistory liefert die gespeicherten Nachrichten.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, ein Modell in deine Anwendung zu bringen?

Lade die Testversion herunter und starte die Unified-Chat-Demo mit deinem eigenen Schlüssel.