sgcAI w pięć minut

Jeden komponent, jedna właściwość dostawcy, jedno wywołanie. Ta strona sprawia, że aplikacja Delphi rozmawia z dużym modelem językowym, pokazuje, jak strumieniować odpowiedź zamiast na nią czekać, i jasno mówi o jednym ograniczeniu platformy, które zaskakuje ludzi.

OpenAI, Claude, Gemini, DeepSeek, Ollama, Grok, Mistral
TsgcAIChat działa tylko w systemie Windows
Edycja Enterprise lub samodzielny pakiet sgcAI

Czego potrzebuje pierwsze wywołanie

Komponent, klucz, nazwa modelu i prompt. Bez budowania JSON i bez konfigurowania klienta HTTP.

Komponent

TsgcAIChat na stronie palety SGC AI. To cienka opublikowana nakładka na TsgcAI_Chat, który dostarczane dema tworzą w kodzie.

Jednostka

sgcAI_Chat.pas dla klasy lub jednostka zbiorcza sgcAI.pas dla komponentu palety. Dema zawierają uses sgcAI_Chat;.

Jedna właściwość przełączająca dostawcę

Provider, typu TsgcAIChatProvider. Siedem elementów to aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok i aicpMistral. Nic więcej w twoim kodzie się nie zmienia.

Platforma, przeczytaj to

TsgcAIChat jest kompilowany tylko dla systemu Windows, Win32 i Win64. Klienty REST poszczególnych dostawców oraz klient i serwer MCP nie są ograniczone. Powód znajdziesz w tabeli poniżej.

Wymagania i edycje

Kolumna edycji to define, który ogranicza kod, wraz z linią w Source/sgcVer.inc, w której się znajduje.

Co Wartość
IDE Od Delphi 7 do RAD Studio 13 oraz odpowiadające im wersje C++Builder. ChatAsync to jedyny element z węższym minimum, ponieważ jest objęty {$IFDEF D2010}.
Klauzula uses sgcAI_Chat dla TsgcAI_Chat, TsgcAIChatProvider i typów zdarzeń.
Edycja, wewnątrz sgcWebSockets SGC_AI jest zdefiniowany w linii 798, wewnątrz bloku {$IFDEF SGC_EDT_ENT}, który biegnie od linii 760 do linii 839. Czyli Enterprise i wyższe, a nie Standard ani Professional.
Edycja, samodzielny pakiet Produkt sgcAI definiuje SGC_PACK_AI w linii 854, a jego własny blok w liniach 943 do 957 definiuje SGC_AI w linii 945. Te same komponenty, bez reszty biblioteki.
Dlaczego tylko Windows Obie definicje SGC_AI znajdują się wewnątrz {$IFDEF MSWINDOWS}, w linii 797 i w linii 944. Poza systemem Windows define nigdy się nie pojawia, więc sgcAI_Chat.pas kompiluje się do pustej jednostki. Komponent ma też ComponentPlatforms(pidWin32 or pidWin64).
Co jest wieloplatformowe SGC_AI_MCP, w linii 800 i linii 954, nie ma warunku platformy. Dlatego klient i serwer MCP działają także w systemach Linux, macOS, iOS i Android. Definy dostawców SGC_OPENAI, SGC_ANTHROPIC, SGC_GEMINI, SGC_DEEPSEEK, SGC_OLLAMA, SGC_GROK i SGC_MISTRAL, linie 787 do 793, również nie są ograniczone platformą.

Budujesz usługę dla Linuksa lub aplikację mobilną? Pomiń TsgcAIChat i wywołaj bezpośrednio klienta REST dostawcy, na przykład TsgcHTTP_API_OpenAI lub TsgcHTTP_API_Anthropic. Przewodnik wywołanie LLM z Delphi pokazuje obie drogi obok siebie.

Zainstaluj i znajdź stronę palety

sgcAI jest dostarczany w instalatorze sgcWebSockets, a także jako osobny pakiet. W obu przypadkach instalacja wygląda tak samo.

1. Rozpakuj

Rozpakuj pobrany plik do folderu, który poniżej nazywamy {$DIR}.

2. Ścieżka biblioteki

Tools, Options, Library. Dodaj {$DIR}\source oraz folder lib dla swojego IDE, na przykład {$DIR}\libD13\$(Platform).

3. Zbuduj pakiety

Otwórz grupę pakietów dla swojej wersji IDE w {$DIR}\Packages\. Najpierw skompiluj uruchomieniowy .dpk, a potem zainstaluj ten czasu projektowania z prefiksem dcl.

4. Sprawdź paletę

Pojawia się strona o nazwie SGC AI z piętnastoma komponentami. TsgcAIChat jest pierwszy. Jeśli strony brakuje w środowisku docelowym innym niż Windows, jest to oczekiwane, ponieważ SGC_AI jest ograniczony do Windows.

5. Zdobądź klucz API

Dla hostowanego dostawcy używasz własnego klucza od tego dostawcy i przypisujesz go do ChatOptions.ApiKey. Ollama w ogóle nie potrzebuje klucza, ponieważ model działa na twoim komputerze.

Twoja pierwsza odpowiedź w około dziesięciu linijkach

Utwórz komponent, ustaw dostawcę, klucz i model, a następnie wywołaj Chat i odczytaj zwrócony tekst.

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;

Zmiana dostawcy to jedna linijka. Provider przyjmuje aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok i aicpMistral. Cała reszta zostaje na swoim miejscu.

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;

Demo buduje swój komponent raz w GetChat i przypisuje tam OnChatStream oraz OnChatError. ChatStream zwraca też pełną odpowiedź, więc możesz zignorować wartość zwracaną i użyć tylko zdarzenia albo użyć obu.

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;

Nie ma OllamaOptions.BaseUrl. Na poziomie surowego API właściwością jest OllamaOptions.Host w TsgcHTTP_API_Ollama, a ChatOptions.BaseUrl zasila ją z tej warstwy.

Pierwsze dwie karty to dostarczane demo Demos\15.AI\02.Applications\06.UnifiedChat\fUnifiedChat.pas, z kontrolkami formularza zastąpionymi literałami. Trzecia karta to ten sam komponent skierowany na lokalny serwer Ollama. Drugie demo, 07.ConversationHistory, pokazuje API historii w tym samym folderze.

Sprawdź, czy działa, i zobacz błąd, gdy nie działa

Chat nie zgłasza wyjątku przy nieudanym wywołaniu, co ludzi zaskakuje. Zamiast tego zwraca pusty tekst i wywołuje zdarzenie.

Wartość zwracana

Chat zwraca tekst asystenta jako string. Pusty tekst oznacza, że wywołanie się nie powiodło, ponieważ błąd nie zgłasza wyjątku.

OnChatError

procedure(Sender: TObject; const aError: string). Zarówno Chat, jak i ChatStream przechwytują wyjątek i kierują go tutaj. To pierwsze zdarzenie, które warto podpiąć, przed wszystkim innym.

OnChatStream

procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean). Tekst pojawiający się w polu memo, gdy model jeszcze pisze, to dowód, że strumieniowanie działa, a nie buforowanie.

Rozmowa

GetHistory zwraca to, co komponent odtworzy przy następnym wywołaniu. MaxHistoryMessages ją ogranicza, a ClearHistory zaczyna od nowa.

Co zwykle idzie nie tak za pierwszym razem

Sześć problemów odpowiada za niemal każde nieudane pierwsze wywołanie.

Jednostka nie kompiluje się poza Windows

Tak jest zaprojektowane. SGC_AI jest definiowany wewnątrz {$IFDEF MSWINDOWS} w linii 797 i ponownie w linii 944, więc w systemach Linux, macOS, iOS i Android sgcAI_Chat.pas jest pustą jednostką. W tych środowiskach używaj klientów REST dostawców.

Chat zwraca pusty tekst i nic nie jest zgłaszane

Chat i ChatStream połykają wyjątek i kierują go do OnChatError, którego sygnatura to procedure(Sender: TObject; const aError: string). Podepnij to zdarzenie, zanim zaczniesz debugować cokolwiek innego.

Lokalny model Ollama jest ignorowany

Bazowy adres Ollama trafia do ChatOptions.BaseUrl, a nie do obiektu opcji dostawcy. Wewnętrznie jest przekazywany do OllamaOptions.Host i jest to jedyny dostawca, dla którego BaseUrl jest w ogóle odczytywany.

Formularz zawiesza się przy długiej odpowiedzi

Chat i ChatStream są synchroniczne. W Delphi 2010 i nowszych używaj ChatAsync, które zwraca IsgcFuture<string>. W starszych kompilatorach uruchom wywołanie we własnym wątku.

Nazwa modelu jest odrzucana

Nazwy modeli należą do dostawcy, a nie do komponentu, i się zmieniają. ChatOptions.Model jest przekazywane wprost, więc nazwa, która działa w konsoli dostawcy, działa też tutaj.

Rachunek rośnie przy długiej rozmowie

Komponent odtwarza historię przy każdym wywołaniu, dzięki czemu działa pytanie uzupełniające. Ogranicz ją przez MaxHistoryMessages i zacznij od nowa przez ClearHistory.

Co ludzie budują po pierwszej odpowiedzi

Pole na prompt to dopiero początek. Wszystkie cztery poniższe elementy są już w pakiecie.

Odpowiadaj na podstawie własnych dokumentów

Zamień swoją treść na wektory za pomocą TsgcAIOpenAIEmbeddings, zapisz je w TsgcAIDatabaseVectorFile lub TsgcAIDatabaseVectorPinecone i pobierz najbliższe fragmenty, by umieścić je w promptcie.

Dokumentacja embeddingów i dokumentacja bazy wektorowej

Rozmawiaj z nim na głos

TsgcAIOpenAIChatBot łączy w jednym komponencie rejestrator, transkrypcję, wywołanie czatu i syntezę mowy. TsgcAIOpenAITranslator robi to samo dla tłumaczenia na żywo.

Dokumentacja ChatBota i dokumentacja tłumacza

Udostępnij swoją aplikację agentowi

Komponent serwera MCP zamienia twoją aplikację w narzędzie, które asystent może wywołać, a klient MCP korzysta z innych serwerów. Żaden z nich nie jest ograniczony do Windows, więc serwer MCP napisany w Delphi działa w Linuksie.

Dokumentacja serwera MCP i dokumentacja klienta MCP

Użyj całego API dostawcy

Wizja, dokumenty, rozszerzone myślenie, partie zadań, generowanie obrazów, transkrypcja i moderacja znajdują się w klientach REST poszczególnych dostawców, a nie w neutralnej warstwie czatu.

Dokumentacja OpenAI i dokumentacja Anthropic

Dokumentacja, dema i materiały

Strony referencyjne opisują każdą opcję i zdarzenie. Projekty demo znajdują się w pobranym pakiecie, w Demos\15.AI.

Przewodnik, wywołanie LLM z Delphi Obszerny opis krok po kroku: strumieniowanie, wywoływanie narzędzi oraz modele hostowane kontra lokalne.
Dokumentacja, klient OpenAI Każda metoda, opcja i zdarzenie w TsgcHTTP_API_OpenAI.
Dokumentacja, klient Anthropic Wiadomości, narzędzia, wizja, partie zadań i liczenie tokenów w TsgcHTTP_API_Anthropic.
Dokumentacja, serwer MCP Komponent, który pozwala asystentowi wywoływać twoją aplikację.
Strona komponentu TsgcAIChat Każda właściwość i zdarzenie komponentu czatu, z odnośnikami do pozostałych czternastu.
Pomoc online Generowana dokumentacja, zawsze zgodna z bieżącym wydaniem.

Powiązane lektury: budowanie aplikacji Delphi z AI, porównanie dostawców z poziomu Delphi i pisanie serwera MCP. Każdy produkt ma własny szybki start, wymieniony na stronie pierwszych kroków.

Pytania o szybki start sgcAI

Upuść TsgcAIChat ze strony palety SGC AI. Jest zadeklarowany w sgcAI.pas jako opublikowana nakładka na TsgcAI_Chat, który jest zadeklarowany w sgcAI_Chat.pas. Kod tworzący obiekt w czasie działania, tak jak robią to dostarczane dema, używa TsgcAI_Chat i uses sgcAI_Chat;. Oba dają te same właściwości.
W sgcWebSockets bramką jest SGC_AI, zdefiniowany w linii 798 pliku sgcVer.inc, wewnątrz bloku SGC_EDT_ENT, który biegnie od linii 760 do linii 839. To edycja Enterprise i wyższe. Standard, linie 675 do 724, i Professional, linie 727 do 758, go nie definiują. Jeśli nie chcesz reszty biblioteki, samodzielny pakiet sgcAI definiuje SGC_PACK_AI w linii 854, a jego własny blok w liniach 943 do 957 włącza te same komponenty.
Ponieważ SGC_AI jest definiowany wyłącznie wewnątrz {$IFDEF MSWINDOWS}, w linii 797 w bloku Enterprise i w linii 944 w samodzielnym bloku pakietu. Bez tego definu sgcAI_Chat.pas oraz sekcja TsgcAIChat w sgcAI.pas kompilują się do niczego. Czas projektowania odzwierciedla to przez ComponentPlatforms(pidWin32 or pidWin64). W tych środowiskach wywołuj zamiast tego klientów REST dostawców albo użyj komponentów MCP, które nie mają warunku platformy.
Zmień Provider. Przyjmuje aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok i aicpMistral. Następnie ustaw klucz i model tego dostawcy. Dla aicpOllama nie ma klucza, a jeśli serwer nie jest pod domyślnym adresem, ustawiasz ChatOptions.BaseUrl, który komponent wewnętrznie przekazuje klientowi Ollama.
Wywołaj ChatStream zamiast Chat i obsłuż OnChatStream. Jego sygnatura to procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean): dołączaj aChunk do swojego memo w miarę napływania i ustaw Cancel na True, aby wcześniej zatrzymać generowanie.
Chat i ChatStream nie zgłaszają wyjątku. Przechwytują go, wywołują OnChatError z komunikatem i zwracają pusty tekst. Nieobsłużone OnChatError wygląda więc dokładnie jak model, który odpowiedział niczym. Podepnij je jako pierwsze.
W Delphi 2010 i nowszych wywołaj ChatAsync, które jest objęte {$IFDEF D2010} i zwraca IsgcFuture<string>. W Delphi od 7 do 2009 ta metoda nie istnieje, więc uruchom Chat w wątku, który sam utworzysz.
Tak. Zachowuje wymianę i odtwarza ją przy następnym wywołaniu, dzięki czemu działa pytanie uzupełniające. MaxHistoryMessages ogranicza, ile jest odtwarzane, ClearHistory zaczyna nową rozmowę, a GetHistory zwraca zapisane wiadomości.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy umieścić model w swojej aplikacji?

Pobierz wersję próbną i uruchom demo ujednoliconego czatu z własnym kluczem.