sgcAI 5분 시작 가이드

컴포넌트 하나, 공급자 속성 하나, 호출 하나면 돼요. 이 페이지에서는 Delphi 애플리케이션이 대규모 언어 모델과 대화하도록 만들고, 답변을 기다리는 대신 스트리밍으로 받는 방법을 보여 드려요. 많은 분이 걸려 넘어지는 플랫폼 제한도 분명하게 알려 드려요.

OpenAI, Claude, Gemini, DeepSeek, Ollama, Grok, Mistral
TsgcAIChat은 Windows 전용
Enterprise 에디션 또는 독립 sgcAI 패키지

첫 번째 호출에 필요한 것

컴포넌트, 키, 모델 이름, 프롬프트가 필요해요. JSON을 만들 필요도, HTTP 클라이언트를 설정할 필요도 없어요.

컴포넌트

SGC AI 팔레트 페이지의 TsgcAIChat이에요. 포함된 데모가 코드로 생성하는 TsgcAI_Chat을 감싼 얇은 published 래퍼예요.

유닛

클래스에는 sgcAI_Chat.pas를, 팔레트 컴포넌트에는 바렐 유닛 sgcAI.pas를 쓰세요. 데모는 uses sgcAI_Chat;라고 작성해요.

공급업체를 바꾸는 속성 하나

TsgcAIChatProvider 타입의 Provider예요. 멤버 일곱 개는 aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok, aicpMistral이에요. 코드의 나머지는 바뀌지 않아요.

플랫폼, 꼭 읽어 주세요

TsgcAIChat은 Windows 전용으로 컴파일돼요. Win32와 Win64예요. 공급업체별 REST 클라이언트와 MCP 클라이언트 및 서버에는 제한이 없어요. 이유는 아래 표를 보세요.

요구 사항과 에디션

에디션 열은 코드를 제어하는 define이며, Source/sgcVer.inc에서 그 define이 있는 줄 번호도 함께 적었어요.

항목 값
IDE Delphi 7부터 RAD Studio 13까지, 그리고 그에 대응하는 C++Builder 버전. ChatAsync는 {$IFDEF D2010}으로 감싸져 있어서 지원 하한이 더 높은 유일한 멤버예요.
Uses 절 TsgcAI_Chat, TsgcAIChatProvider, 이벤트 타입을 위한 sgcAI_Chat.
에디션, sgcWebSockets 안에서 SGC_AI는 798번째 줄에 정의되어 있으며, 760번째 줄부터 839번째 줄까지 이어지는 {$IFDEF SGC_EDT_ENT} 블록 안에 있어요. 따라서 Enterprise 이상이며 Standard나 Professional은 아니에요.
에디션, 독립 패키지 sgcAI 제품은 854번째 줄에서 SGC_PACK_AI를 정의하고, 943번째 줄부터 957번째 줄까지의 자체 블록이 945번째 줄에서 SGC_AI를 정의해요. 라이브러리의 나머지 부분 없이 같은 컴포넌트를 쓸 수 있어요.
왜 Windows 전용인가요 SGC_AI의 두 정의는 모두 797번째 줄과 944번째 줄의 {$IFDEF MSWINDOWS} 안에 있어요. Windows가 아니면 이 define이 나타나지 않으므로 sgcAI_Chat.pas는 빈 유닛으로 컴파일돼요. 컴포넌트에도 ComponentPlatforms(pidWin32 or pidWin64)가 붙어 있어요.
크로스플랫폼인 것 800번째 줄과 954번째 줄의 SGC_AI_MCP에는 플랫폼 가드가 없어요. 그래서 MCP 클라이언트와 서버는 Linux, macOS, iOS, Android에서도 실행돼요. 787번째 줄부터 793번째 줄까지의 공급자 define인 SGC_OPENAI, SGC_ANTHROPIC, SGC_GEMINI, SGC_DEEPSEEK, SGC_OLLAMA, SGC_GROK, SGC_MISTRAL도 플랫폼으로 제한되지 않아요.

Linux 서비스나 모바일 앱을 만드나요? TsgcAIChat은 건너뛰고 공급업체 REST 클라이언트를 직접 호출하세요. 예를 들면 TsgcHTTP_API_OpenAI나 TsgcHTTP_API_Anthropic이에요. Delphi에서 LLM 호출하기 가이드에서 두 방법을 나란히 보여 줘요.

설치하고 팔레트 페이지 찾기

sgcAI는 sgcWebSockets 설치 프로그램에 들어 있고 독립 패키지로도 제공돼요. 어느 쪽이든 설치 방식은 같아요.

1. 압축 풀기

다운로드한 파일을 폴더에 압축 해제하세요. 아래에서는 이 폴더를 {$DIR}이라고 불러요.

2. 라이브러리 경로

Tools, Options, Library로 이동해요. {$DIR}\source와 사용하는 IDE의 lib 폴더를 추가하세요. 예를 들면 {$DIR}\libD13\$(Platform)이에요.

3. 패키지 빌드

{$DIR}\Packages\ 아래에서 IDE 버전에 맞는 패키지 그룹을 여세요. 런타임 .dpk를 먼저 컴파일하고 그다음 디자인 타임 dcl 패키지를 설치해요.

4. 팔레트 확인

컴포넌트 열다섯 개가 들어 있는 SGC AI 페이지가 나타나요. TsgcAIChat이 첫 번째예요. Windows가 아닌 대상에서 페이지가 보이지 않는 것은 정상이에요. SGC_AI가 Windows로 제한되어 있기 때문이에요.

5. API 키 발급받기

호스팅되는 공급자를 쓰려면 해당 업체에서 직접 키를 발급받아 ChatOptions.ApiKey에 할당하세요. Ollama는 모델이 내 컴퓨터에서 실행되므로 키가 전혀 필요 없어요.

첫 번째 답변, 약 열 줄로

컴포넌트를 만들고, 공급자, 키, 모델을 설정한 다음, Chat을 호출해 반환된 문자열을 읽어요.

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;

공급업체를 바꾸는 것은 한 줄이에요. Provider는 aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok, aicpMistral을 받아요. 나머지는 모두 그대로예요.

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;

데모는 컴포넌트를 GetChat에서 한 번만 만들고 거기서 OnChatStream과 OnChatError를 할당해요. ChatStream은 전체 답변도 반환하므로 반환값을 무시하고 이벤트만 쓰거나 둘 다 써도 돼요.

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;

OllamaOptions.BaseUrl은 없어요. 원시 API 수준에서는 TsgcHTTP_API_Ollama의 OllamaOptions.Host가 그 속성이고, 이 계층에서 그 값을 채워 주는 것이 ChatOptions.BaseUrl이에요.

처음 두 탭은 포함된 데모 Demos\15.AI\02.Applications\06.UnifiedChat\fUnifiedChat.pas이며 폼 컨트롤은 리터럴로 바꿨어요. 세 번째 탭은 같은 컴포넌트를 로컬 Ollama 서버로 향하게 한 거예요. 같은 폴더의 두 번째 데모 07.ConversationHistory는 히스토리 API를 보여 줘요.

제대로 동작했는지, 그리고 실패했을 때는 어떻게 보이는지 확인하기

Chat은 호출이 실패해도 예외를 발생시키지 않아서 많은 분이 놀라요. 대신 빈 문자열을 반환하고 이벤트를 발생시켜요.

반환값

Chat은 어시스턴트의 텍스트를 string으로 반환해요. 빈 문자열은 호출이 실패했다는 뜻이에요. 실패해도 예외가 발생하지 않기 때문이에요.

OnChatError

procedure(Sender: TObject; const aError: string). Chat과 ChatStream 모두 예외를 잡아서 여기로 전달해요. 다른 무엇보다 먼저 연결해야 하는 이벤트예요.

OnChatStream

procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean). 모델이 아직 쓰는 중인데 메모에 텍스트가 나타난다면 버퍼링이 아니라 스트리밍이 동작하고 있다는 증거예요.

대화

GetHistory는 컴포넌트가 다음 호출에서 다시 보낼 내용을 반환해요. MaxHistoryMessages로 상한을 정하고, ClearHistory로 처음부터 다시 시작해요.

처음 실행할 때 흔히 생기는 문제

실패한 첫 호출은 거의 다 여섯 가지 문제 중 하나가 원인이에요.

Windows가 아닌 곳에서 유닛이 컴파일되지 않아요

의도된 동작이에요. SGC_AI는 797번째 줄과 944번째 줄의 {$IFDEF MSWINDOWS} 안에서만 정의되므로 Linux, macOS, iOS, Android에서는 sgcAI_Chat.pas가 빈 유닛이 돼요. 그 대상에서는 공급업체 REST 클라이언트를 사용하세요.

Chat이 빈 문자열을 반환하고 아무 예외도 없어요

Chat과 ChatStream은 예외를 삼키고 OnChatError로 전달해요. 시그니처는 procedure(Sender: TObject; const aError: string)이에요. 다른 것을 디버깅하기 전에 이 이벤트부터 연결하세요.

로컬 Ollama 모델이 무시돼요

Ollama의 기본 주소는 공급업체 옵션 객체가 아니라 ChatOptions.BaseUrl에 지정해요. 내부적으로 OllamaOptions.Host로 전달되며, BaseUrl을 읽는 공급자는 Ollama뿐이에요.

긴 답변 중에 폼이 멈춰요

Chat과 ChatStream은 동기 방식이에요. Delphi 2010 이상에서는 IsgcFuture<string>을 반환하는 ChatAsync를 쓰세요. 더 오래된 컴파일러에서는 직접 만든 스레드에서 호출을 실행하세요.

모델 이름이 거부돼요

모델 이름은 컴포넌트가 아니라 공급업체의 것이며 자주 바뀌어요. ChatOptions.Model은 그대로 전달되므로, 공급업체 콘솔에서 동작하는 이름이면 여기서도 동작해요.

대화가 길어지면 요금이 늘어나요

컴포넌트는 호출할 때마다 히스토리를 다시 보내며, 그래서 후속 질문이 동작해요. MaxHistoryMessages로 상한을 정하고 ClearHistory로 처음부터 다시 시작하세요.

첫 답변 이후에 만드는 것들

프롬프트 상자는 시작일 뿐이에요. 아래 네 가지는 모두 이미 패키지에 들어 있어요.

내 문서로 답변하기

TsgcAIOpenAIEmbeddings로 콘텐츠를 벡터로 바꾸고, TsgcAIDatabaseVectorFile이나 TsgcAIDatabaseVectorPinecone에 저장한 다음, 가장 가까운 구절을 찾아 프롬프트에 넣어요.

Embeddings 레퍼런스와 벡터 데이터베이스 레퍼런스

음성으로 대화하기

TsgcAIOpenAIChatBot은 녹음기, 음성 인식, 채팅 호출, 음성 합성을 하나의 컴포넌트로 연결해요. TsgcAIOpenAITranslator는 실시간 번역을 같은 방식으로 처리해요.

ChatBot 레퍼런스와 번역기 레퍼런스

내 앱을 에이전트에 노출하기

MCP 서버 컴포넌트는 애플리케이션을 어시스턴트가 호출할 수 있는 도구로 만들어 주고, MCP 클라이언트는 다른 서버를 사용해요. 둘 다 Windows로 제한되지 않으므로 Delphi로 작성한 MCP 서버를 Linux에서 실행할 수 있어요.

MCP 서버 레퍼런스와 MCP 클라이언트 레퍼런스

공급업체 API 전체 활용하기

비전, 문서, 확장 사고, 배치, 이미지 생성, 음성 인식, 콘텐츠 검토는 중립적인 채팅 계층이 아니라 공급업체별 REST 클라이언트에 있어요.

OpenAI 레퍼런스와 Anthropic 레퍼런스

레퍼런스, 데모, 문서

레퍼런스 페이지에는 모든 옵션과 이벤트가 문서화되어 있어요. 데모 프로젝트는 다운로드 안의 Demos\15.AI 아래에 있어요.

가이드, Delphi에서 LLM 호출하기 스트리밍, 도구 호출, 호스팅과 로컬 비교까지 다루는 자세한 안내.
레퍼런스, OpenAI 클라이언트 TsgcHTTP_API_OpenAI의 모든 메서드, 옵션, 이벤트.
레퍼런스, Anthropic 클라이언트 TsgcHTTP_API_Anthropic의 메시지, 도구, 비전, 배치, 토큰 계산.
레퍼런스, MCP 서버 어시스턴트가 내 애플리케이션을 호출할 수 있게 해 주는 컴포넌트.
TsgcAIChat 컴포넌트 페이지 채팅 컴포넌트의 모든 속성과 이벤트, 그리고 여기서 연결되는 나머지 열네 개 컴포넌트.
온라인 도움말 자동 생성된 레퍼런스로, 항상 최신 릴리스와 일치해요.

함께 읽어 보세요. AI 기반 Delphi 앱 만들기, Delphi에서 공급자 비교하기, MCP 서버 작성하기. 모든 제품에는 각자의 빠른 시작이 있으며, 시작하기 페이지에서 모아 볼 수 있어요.

sgcAI 빠른 시작 FAQ

SGC AI 팔레트 페이지에서 TsgcAIChat을 올리세요. sgcAI.pas에 선언된 published 래퍼이며, 감싸는 대상인 TsgcAI_Chat은 sgcAI_Chat.pas에 선언되어 있어요. 포함된 데모처럼 런타임에 객체를 만드는 코드는 TsgcAI_Chat과 uses sgcAI_Chat;을 써요. 두 방식 모두 같은 속성을 제공해요.
sgcWebSockets 안에서 제어하는 것은 sgcVer.inc의 798번째 줄에 정의된 SGC_AI이며, 760번째 줄부터 839번째 줄까지 이어지는 SGC_EDT_ENT 블록 안에 있어요. 즉 Enterprise 에디션 이상이에요. 675번째 줄부터 724번째 줄까지의 Standard와 727번째 줄부터 758번째 줄까지의 Professional은 이를 정의하지 않아요. 라이브러리의 나머지가 필요 없다면, 독립 sgcAI 패키지가 854번째 줄에서 SGC_PACK_AI를 정의하고, 943번째 줄부터 957번째 줄까지의 자체 블록이 같은 컴포넌트를 켜요.
SGC_AI는 Enterprise 블록의 797번째 줄과 독립 팩 블록의 944번째 줄에 있는 {$IFDEF MSWINDOWS} 안에서만 정의되기 때문이에요. define이 없으면 sgcAI_Chat.pas와 sgcAI.pas의 TsgcAIChat 부분은 아무것도 컴파일되지 않아요. 디자인 타임에서도 ComponentPlatforms(pidWin32 or pidWin64)가 같은 제한을 적용해요. 그 대상에서는 대신 공급업체 REST 클라이언트를 호출하거나 플랫폼 가드가 없는 MCP 컴포넌트를 쓰세요.
Provider를 바꾸세요. aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok, aicpMistral을 받아요. 그다음 해당 공급업체의 키와 모델을 설정하세요. aicpOllama는 키가 없고, 서버가 기본 주소에 있지 않다면 ChatOptions.BaseUrl을 설정하세요. 컴포넌트가 내부적으로 Ollama 클라이언트에 전달해요.
Chat 대신 ChatStream을 호출하고 OnChatStream을 처리하세요. 시그니처는 procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean)이에요. aChunk가 도착하는 대로 메모에 덧붙이고, 생성을 일찍 멈추려면 Cancel을 True로 설정하세요.
Chat과 ChatStream은 예외를 발생시키지 않아요. 예외를 잡아서 메시지와 함께 OnChatError를 발생시키고 빈 문자열을 반환해요. 그래서 처리하지 않은 OnChatError는 모델이 아무 말도 하지 않은 것과 똑같이 보여요. 가장 먼저 연결하세요.
Delphi 2010 이상에서는 {$IFDEF D2010}으로 감싸져 있고 IsgcFuture<string>을 반환하는 ChatAsync를 호출하세요. Delphi 7부터 2009까지는 그 메서드가 없으므로 직접 만든 스레드에서 Chat을 실행하세요.
네. 주고받은 내용을 보관했다가 다음 호출에서 다시 보내며, 그래서 후속 질문이 동작해요. MaxHistoryMessages는 다시 보낼 양의 상한을 정하고, ClearHistory는 새 대화를 시작하며, GetHistory는 저장된 메시지를 반환해요.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

애플리케이션 안에 모델을 넣을 준비가 되셨나요?

체험판을 다운로드하고, 내 키로 통합 채팅 데모를 실행해 보세요.