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 na Windows, macOS, Linux, iOS i Android
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 kompiluje się dla każdej platformy: Win32, Win64, macOS, Linux64, iOS i Android, a IDE oferuje go na formularzach każdej z nich. Wywołania HTTPS wymagają zwykłej konfiguracji TLS danej platformy, na przykład bibliotek OpenSSL w systemie Linux. Zobacz tabelę 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 796, wewnątrz bloku {$IFDEF SGC_EDT_ENT}, który biegnie od linii 759 do linii 842. Czyli Enterprise i wyższe, a nie Standard ani Professional.
Edycja, samodzielny pakiet Produkt sgcAI definiuje SGC_PACK_AI w linii 857, a jego własny blok w liniach 946 do 959 definiuje SGC_AI w linii 947. Te same komponenty, bez reszty biblioteki.
Platformy Żadna z definicji SGC_AI, w linii 796 i w linii 947, nie ma warunku platformy, więc sgcAI_Chat.pas kompiluje się dla każdego celu, a komponent ma ComponentPlatforms(0). Tylko TsgcAudioRecorderMCI, TsgcAudioRecorderWave, TsgcAudioPlayerMCI i TsgcTextToSpeechSystem, które wywołują API audio i mowy systemu Windows, są kompilowane wyłącznie w Windows.
Co jest wieloplatformowe SGC_AI_MCP, w linii 797 i linii 955, 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 786 do 792, również nie są ograniczone platformą.

Budujesz usługę dla Linuksa lub aplikację mobilną? TsgcAIChat również się tam kompiluje. Ewentualnie 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ż paleta IDE oferuje te komponenty tylko dla Win32 i Win64, natomiast jednostki kompilują się na każdej platformie.

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.

Kompilacja dla Linuksa, macOS lub urządzeń mobilnych

sgcAI_Chat.pas kompiluje się dla każdej platformy. TsgcAudioRecorderMCI, TsgcAudioRecorderWave, TsgcAudioPlayerMCI i TsgcTextToSpeechSystem wywołują API audio i mowy systemu Windows i są kompilowane tylko w Windows, więc nie umieszczaj ich na formularzu wieloplatformowym. Wywołania HTTPS wymagają zwykłej konfiguracji TLS danej platformy, na przykład bibliotek OpenSSL w systemie Linux.

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 796 pliku sgcVer.inc, wewnątrz bloku SGC_EDT_ENT, który biegnie od linii 759 do linii 842. To edycja Enterprise i wyższe. Standard, linie 674 do 723, i Professional, linie 726 do 757, go nie definiują. Jeśli nie chcesz reszty biblioteki, samodzielny pakiet sgcAI definiuje SGC_PACK_AI w linii 857, a jego własny blok w liniach 946 do 959 włącza te same komponenty.
Tak. SGC_AI jest definiowany bez warunku platformy, w linii 796 w bloku Enterprise i w linii 947 w samodzielnym bloku pakietu, więc sgcAI_Chat.pas i sgcAI.pas kompilują się dla Windows, macOS, Linux, iOS i Android, a TsgcAIChat ma ComponentPlatforms(0). Wyjątkiem są TsgcAudioRecorderMCI, TsgcAudioRecorderWave, TsgcAudioPlayerMCI i TsgcTextToSpeechSystem, które wywołują API audio i mowy systemu Windows i są kompilowane tylko w Windows. Wywołania HTTPS wymagają zwykłej konfiguracji TLS danej platformy, na przykład bibliotek OpenSSL w systemie Linux.
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.