sgcAI in vijf minuten

Eén component, één providereigenschap, één aanroep. Deze pagina laat een Delphi-toepassing praten met een groot taalmodel, laat zien hoe je het antwoord streamt in plaats van erop te wachten en is duidelijk over de ene platformbeperking waar mensen over struikelen.

OpenAI, Claude, Gemini, DeepSeek, Ollama, Grok, Mistral
TsgcAIChat werkt alleen op Windows
Enterprise-editie, of het zelfstandige sgcAI-package

Wat de eerste aanroep nodig heeft

Een component, een sleutel, een modelnaam en een prompt. Geen JSON om te bouwen en geen HTTP-client om te configureren.

Component

TsgcAIChat op de palettabpagina SGC AI. Het is een dunne gepubliceerde wrapper rond TsgcAI_Chat, wat de meegeleverde demo's in code aanmaken.

Unit

sgcAI_Chat.pas voor de klasse, of de barrel-unit sgcAI.pas voor het palettcomponent. De demo's schrijven uses sgcAI_Chat;.

De ene eigenschap die van leverancier wisselt

Provider, van het type TsgcAIChatProvider. De zeven leden zijn aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok en aicpMistral. Verder verandert er niets in je code.

Platform, lees dit goed

TsgcAIChat wordt alleen voor Windows gecompileerd, Win32 en Win64. De REST-clients per leverancier en de MCP-client en -server zijn niet beperkt. Zie de onderstaande tabel voor de reden.

Vereisten en edities

De editiekolom noemt de define die de code afschermt, met het regelnummer in Source/sgcVer.inc.

Onderdeel Waarde
IDE Delphi 7 tot en met RAD Studio 13 en de bijbehorende C++Builder-versies. ChatAsync is het enige lid met een hogere ondergrens, omdat het in {$IFDEF D2010} staat.
Uses-clausule sgcAI_Chat voor TsgcAI_Chat, TsgcAIChatProvider en de eventtypen.
Editie, binnen sgcWebSockets SGC_AI wordt gedefinieerd op regel 798, binnen het {$IFDEF SGC_EDT_ENT}-blok dat loopt van regel 760 tot regel 839. Dus Enterprise en hoger, niet Standard en niet Professional.
Editie, zelfstandig package Het product sgcAI definieert SGC_PACK_AI op regel 854 en het eigen blok op regel 943 tot 957 definieert SGC_AI op regel 945. Dezelfde componenten, zonder de rest van de bibliotheek.
Waarom alleen Windows Beide definities van SGC_AI staan binnen een {$IFDEF MSWINDOWS}, op regel 797 en op regel 944. Buiten Windows verschijnt de define nooit, dus sgcAI_Chat.pas compileert tot een lege unit. Het component heeft ook ComponentPlatforms(pidWin32 or pidWin64).
Wat is cross-platform SGC_AI_MCP, op regel 800 en regel 954, heeft geen platformbeveiliging. Dus de MCP-client en -server draaien ook op Linux, macOS, iOS en Android. De providerdefines SGC_OPENAI, SGC_ANTHROPIC, SGC_GEMINI, SGC_DEEPSEEK, SGC_OLLAMA, SGC_GROK and SGC_MISTRAL, regel 787 tot 793, zijn ook niet platformgebonden.

Bouw je een Linux-service of een mobiele app? Sla TsgcAIChat over en roep de REST-client van de leverancier rechtstreeks aan, bijvoorbeeld TsgcHTTP_API_OpenAI of TsgcHTTP_API_Anthropic. De gids een LLM aanroepen vanuit Delphi laat beide routes naast elkaar zien.

Installeer en vind de palettabpagina

sgcAI wordt geleverd in het sgcWebSockets-installatieprogramma en ook als eigen package. In beide gevallen verloopt de installatie op dezelfde manier.

1. Uitpakken

Pak de download uit in een map, hieronder {$DIR} genoemd.

2. Bibliotheekpad

Tools, Options, Library. Voeg {$DIR}\source toe en de libmap voor jouw IDE, bijvoorbeeld {$DIR}\libD13\$(Platform).

3. De packages bouwen

Open de packagegroep voor jouw IDE-versie onder {$DIR}\Packages\. Compileer eerst de runtime-.dpk en installeer daarna die van designtime (dcl).

4. Het palet controleren

Er verschijnt een pagina met de naam SGC AI met vijftien componenten. TsgcAIChat is de eerste. Als de pagina ontbreekt op een niet-Windows-doel is dat normaal, want SGC_AI is aan Windows gebonden.

5. Een API-sleutel verkrijgen

Voor een gehoste provider gebruik je je eigen sleutel van die leverancier en wijs je die toe aan ChatOptions.ApiKey. Ollama heeft helemaal geen sleutel nodig, omdat het model op je eigen machine draait.

Je eerste antwoord, in ongeveer tien regels

Maak het component aan, stel een provider, een sleutel en een model in, roep daarna Chat aan en lees de string die wordt teruggegeven.

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;

Van leverancier wisselen is één regel. Provider accepteert aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok en aicpMistral. Al het andere blijft zoals het is.

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;

De demo bouwt zijn component één keer in GetChat en wijst daar OnChatStream en OnChatError toe. ChatStream geeft ook het volledige antwoord terug, dus je kunt de retourwaarde negeren en alleen de gebeurtenis gebruiken, of beide.

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;

Er is geen OllamaOptions.BaseUrl. Op het niveau van de ruwe API is de eigenschap OllamaOptions.Host op TsgcHTTP_API_Ollama en ChatOptions.BaseUrl voedt die vanuit deze laag.

De eerste twee tabbladen zijn de meegeleverde demo Demos\15.AI\02.Applications\06.UnifiedChat\fUnifiedChat.pas, met de formulierbesturingselementen vervangen door literals. Het derde tabblad is hetzelfde component gericht op een lokale Ollama-server. Een tweede demo, 07.ConversationHistory, toont de geschiedenis-API in dezelfde map.

Controleer of het werkt en zie de fout als dat niet zo is

Chat veroorzaakt geen exception bij een mislukte aanroep, wat mensen verrast. In plaats daarvan geeft het een lege string terug en roept het een gebeurtenis aan.

De retourwaarde

Chat geeft de tekst van de assistent terug als string. Een lege string betekent dat de aanroep is mislukt, omdat een fout geen exception veroorzaakt.

OnChatError

procedure(Sender: TObject; const aError: string). Zowel Chat als ChatStream vangen de exception af en sturen die hierheen. Dit is de eerste gebeurtenis om te koppelen, voor al het andere.

OnChatStream

procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean). Tekst die in het memo verschijnt terwijl het model nog schrijft, is het bewijs dat streaming werkt en er niet wordt gebufferd.

Het gesprek

GetHistory geeft terug wat het component bij de volgende aanroep opnieuw afspeelt. MaxHistoryMessages begrenst dat en ClearHistory begint opnieuw.

Wat er de eerste keer meestal misgaat

Zes problemen verklaren bijna elke mislukte eerste aanroep.

De unit compileert niet buiten Windows

Dat is zo ontworpen. SGC_AI wordt gedefinieerd binnen een {$IFDEF MSWINDOWS} op regel 797 en opnieuw op regel 944, dus op Linux, macOS, iOS en Android is sgcAI_Chat.pas een lege unit. Gebruik op die doelplatforms de REST-clients van de leverancier.

Chat geeft een lege string terug en er wordt geen exception veroorzaakt

Chat and ChatStream slikken de exception in en sturen die naar OnChatError, met als signatuur procedure(Sender: TObject; const aError: string). Koppel die gebeurtenis voordat je iets anders debugt.

Een lokaal Ollama-model wordt genegeerd

Het basisadres van Ollama hoort in ChatOptions.BaseUrl, niet in het optieobject van de leverancier. Het wordt intern doorgegeven aan OllamaOptions.Host en het is de enige provider waarvoor BaseUrl wordt gelezen.

Het formulier loopt vast tijdens een lang antwoord

Chat and ChatStream zijn synchroon. Gebruik vanaf Delphi 2010 ChatAsync, dat een IsgcFuture<string> teruggeeft. Voer de aanroep op oudere compilers uit in je eigen thread.

De modelnaam wordt geweigerd

Modelnamen horen bij de leverancier, niet bij het component, en ze veranderen. ChatOptions.Model wordt rechtstreeks doorgegeven, dus een naam die in de console van de leverancier werkt, werkt ook hier.

De rekening loopt op bij een lang gesprek

Het component speelt bij elke aanroep de geschiedenis opnieuw af, en dat is wat een vervolgvraag laat werken. Begrens die met MaxHistoryMessages en begin opnieuw met ClearHistory.

Wat mensen bouwen na het eerste antwoord

Een promptvak is het begin. Alle vier hiervan zitten al in het package.

Antwoorden uit je eigen documenten

Zet je content om in vectoren met TsgcAIOpenAIEmbeddings, sla ze op in TsgcAIDatabaseVectorFile of TsgcAIDatabaseVectorPinecone en haal de best passende passages op om in de prompt te plaatsen.

Embeddings-referentie en vectordatabasereferentie

Praat er hardop mee

TsgcAIOpenAIChatBot koppelt een recorder, transcriptie, de chataanroep en tekst-naar-spraak aan elkaar in één component. TsgcAIOpenAITranslator doet hetzelfde voor live vertaling.

ChatBot-referentie en vertalerreferentie

Stel je app beschikbaar aan een agent

Het MCP-servercomponent maakt van je toepassing een tool die een assistent kan aanroepen en de MCP-client gebruikt andere servers. Geen van beide is aan Windows gebonden, dus een MCP-server geschreven in Delphi draait op Linux.

MCP-serverreferentie en MCP-clientreferentie

Gebruik de volledige API van de leverancier

Vision, documenten, extended thinking, batches, afbeeldingsgeneratie, transcriptie en moderatie zitten in de REST-clients per leverancier en niet in de neutrale chatlaag.

OpenAI-referentie en Anthropic-referentie

Referentie, demo's en documentatie

De referentiepagina's documenteren elke optie en gebeurtenis. Demoprojecten zitten in de download, onder Demos\15.AI.

Gids, een LLM aanroepen vanuit Delphi De uitgebreide uitleg: streaming, tool calling en gehost tegenover lokaal.
Referentie, OpenAI-client Elke methode, optie en gebeurtenis van TsgcHTTP_API_OpenAI.
Referentie, Anthropic-client Berichten, tools, vision, batches en tokentelling op TsgcHTTP_API_Anthropic.
Referentie, MCP-server Het component waarmee een assistent je toepassing kan aanroepen.
Componentpagina TsgcAIChat Elke eigenschap en gebeurtenis van het chatcomponent, met de andere veertien erin gelinkt.
Online help De gegenereerde referentie, altijd in lijn met de huidige release.

Verder lezen: AI-gestuurde Delphi-apps bouwen, de providers vergelijken vanuit Delphi en een MCP-server schrijven. Elk product heeft zijn eigen snelstart, te vinden op de pagina Aan de slag.

Vragen over de sgcAI-snelstart

Plaats TsgcAIChat vanaf de palettabpagina SGC AI. Het wordt gedeclareerd in sgcAI.pas als gepubliceerde wrapper rond TsgcAI_Chat, dat gedeclareerd wordt in sgcAI_Chat.pas. Code die het object tijdens runtime aanmaakt, zoals de meegeleverde demo's, gebruikt TsgcAI_Chat en uses sgcAI_Chat;. Beide geven je dezelfde eigenschappen.
Binnen sgcWebSockets is de poort SGC_AI, gedefinieerd op regel 798 van sgcVer.inc, binnen het SGC_EDT_ENT-blok dat loopt van regel 760 tot regel 839. Dat is de Enterprise-editie en hoger. Standard, regel 675 tot 724, en Professional, regel 727 tot 758, definiëren het niet. Als je de rest van de bibliotheek niet wilt, definieert het zelfstandige sgcAI-package SGC_PACK_AI op regel 854, waarvan het eigen blok op regel 943 tot 957 dezelfde componenten inschakelt.
Omdat SGC_AI alleen wordt gedefinieerd binnen een {$IFDEF MSWINDOWS}, op regel 797 in het Enterprise-blok en op regel 944 in het zelfstandige packblok. Zonder de define compileren sgcAI_Chat.pas en het TsgcAIChat-gedeelte van sgcAI.pas tot niets. Designtime spiegelt dat met ComponentPlatforms(pidWin32 or pidWin64). Roep op die doelplatforms in plaats daarvan de REST-clients van de leverancier aan, of gebruik de MCP-componenten, die geen platformbeveiliging hebben.
Wijzig Provider. Die accepteert aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok en aicpMistral. Stel daarna de sleutel en het model voor die leverancier in. Voor aicpOllama is er geen sleutel en als de server niet op het standaardadres staat, stel je ChatOptions.BaseUrl in, die het component intern doorgeeft aan de Ollama-client.
Roep ChatStream aan in plaats van Chat en handel OnChatStream af. De signatuur is procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean): voeg aChunk toe aan je memo zodra die binnenkomt en stel Cancel in op True om de generatie vroegtijdig te stoppen.
Chat and ChatStream veroorzaken geen exception. Ze vangen de exception af, roepen OnChatError aan met de melding en geven een lege string terug. Een niet-afgehandelde OnChatError ziet er dus precies uit als een model dat met niets antwoordde. Koppel die eerst.
Roep vanaf Delphi 2010 ChatAsync aan, dat in {$IFDEF D2010} staat en een IsgcFuture<string> teruggeeft. Op Delphi 7 tot en met 2009 bestaat die methode niet, dus voer Chat uit in een thread die je zelf aanmaakt.
Ja. Het bewaart de uitwisseling en speelt die bij de volgende aanroep opnieuw af, en dat is wat een vervolgvraag laat werken. MaxHistoryMessages begrenst hoeveel er opnieuw wordt afgespeeld, ClearHistory begint een nieuw gesprek en GetHistory geeft de opgeslagen berichten terug.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om een model in je toepassing te plaatsen?

Download de proefversie en draai de unified chat-demo met je eigen sleutel.