AI Chat

O TsgcAIChat é um único cliente de chat para sete provedores de modelos de linguagem. Defina Provider, informe uma chave de API e um modelo, e então chame Chat. Trocar de fornecedor é uma única atribuição, o resto do seu código continua igual.

TsgcAIChat

Um componente de chat neutro em relação ao provedor. Ele mantém o histórico da conversa, monta o corpo JSON específico de cada provedor, comanda o cliente de API HTTP correspondente e devolve o texto do assistente, seja em uma única chamada ou token a token.

Classe do componente

TsgcAIChat

Finalidade

Chat com LLM neutro em relação ao provedor

Família

Chat e agentes

Plataformas

Win32 e Win64

O sgcAI é autossuficiente. Este componente vem dentro do sgcAI junto com o runtime sgcWebSockets Core sobre o qual foi construído.

Faça uma pergunta a um modelo

Escolha o provedor, defina a chave e o modelo, chame Chat. As variantes em streaming e assíncrona usam a mesma configuração.

uses
  sgcAI, sgcAI_Chat;

var
  oChat: TsgcAIChat;
  vAnswer: string;
begin
  oChat := TsgcAIChat.Create(nil);
  oChat.Provider := aicpAnthropic;
  oChat.ChatOptions.ApiKey    := 'sk-ant-...';
  oChat.ChatOptions.Model     := 'claude-sonnet-4-5';
  oChat.ChatOptions.MaxTokens := 4096;
  oChat.SystemMessage := 'You are a Delphi expert.';
  oChat.MaxHistoryMessages := 20;

  // Blocking call, returns the assistant text.
  vAnswer := oChat.Chat('How do I keep a WebSocket connection alive?');

  // Token by token, delivered on OnChatStream.
  oChat.OnChatStream := OnChatStreamHandler;
  oChat.ChatStream('Now explain it to a beginner.');
end;

procedure TForm1.OnChatStreamHandler(Sender: TObject;
  const aChunk: string; var Cancel: Boolean);
begin
  Memo1.Text := Memo1.Text + aChunk;
  Cancel := StopRequested;   // abort a long generation
end;
// includes: sgcAI.hpp, sgcAI_Chat.hpp

TsgcAIChat *oChat = new TsgcAIChat(NULL);
oChat->Provider = aicpOpenAI;
oChat->ChatOptions->ApiKey = "sk-...";
oChat->ChatOptions->Model  = "gpt-6-astra";
oChat->SystemMessage = "You are a Delphi expert.";

String vAnswer = oChat->Chat("How do I keep a WebSocket connection alive?");

// Local models: same code, no data leaves the machine.
oChat->Provider = aicpOllama;
oChat->ChatOptions->BaseUrl = "http://127.0.0.1:11434";
oChat->ChatOptions->Model   = "llama3";
vAnswer = oChat->Chat("Same question, local model.");

Principais propriedades & métodos

Os membros que você usa com mais frequência.

Provider

Provider escolhe o fornecedor: aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok ou aicpMistral. Alterá-lo libera o cliente em cache do provedor anterior.

ChatOptions

ApiKey, Model, MaxTokens, Temperature, TopP e BaseUrl. Deixe Temperature e TopP no valor padrão e eles são omitidos da requisição, então vale o padrão do provedor.

Conversa

SystemMessage define a persona em cada turno. MaxHistoryMessages limita quantas mensagens anteriores são reenviadas, o que controla o custo em tokens. ClearHistory e GetHistory reiniciam e leem a transcrição.

Chamadas

Chat bloqueia e retorna a resposta. ChatStream transmite via SSE. ChatWithSystem sobrescreve o prompt de sistema em um único turno. ChatAsync retorna um future no Delphi 2010 e posteriores.

Eventos

OnChatMessage reporta cada mensagem concluída com o seu papel. OnChatStream entrega cada trecho e carrega um sinalizador Cancel. OnChatError expõe erros do provedor e de transporte.

Documentos e extração

ChatWithDocument e ChatWithDocumentBase64 enviam um PDF ou uma imagem junto com a mensagem, ChatWithAttachments e ChatJSONWithAttachments enviam vários, mantidos em uma lista TsgcAIChatAttachments. A OpenAI, a Anthropic e a Gemini leem PDFs nativamente, os demais provedores recebem imagens. Conecte o chat a um TsgcAIDocumentExtractor para transformar faturas, recibos e documentos de identidade em JSON validado contra um schema, com um nível de confiança por campo.

Modelos locais

Com Provider definido como aicpOllama, ChatOptions.BaseUrl aponta o componente para o seu próprio host Ollama, então prompts e respostas nunca saem da máquina.

Tool calling

ChatWithTools envia as definições das suas ferramentas (nome, descrição e JSON Schema) junto com a mensagem e retorna as chamadas de ferramenta que o modelo pede. Execute-as, devolva cada resultado com AddToolResult e chame de novo. Funciona nos sete provedores, cada um no seu próprio formato. O TsgcAIAgent executa esse loop para você.

Aliases de modelo e fallback

ChatOptions.Model pode ser um alias como fast ou smart, mapeado em ModelAliases para um modelo ou para provider:model, e carregado com LoadModelAliasesFromFile, LoadModelAliasesFromJSON ou LoadModelAliasesFromURL. Fallbacks lista o próximo provedor e modelo a tentar em caso de erro de conexão, HTTP 5xx, HTTP 429 ou modelo desconhecido, e OnFallback reporta cada troca.

Uso de tokens e guardrails

LastUsage e OnChatUsage reportam o provedor, o modelo e os tokens de entrada, saída e em cache de cada requisição, com UserId e SessionId, e LastFinishReason informa por que a última resposta terminou, como stop ou length. Atribua um TsgcAIUsageMeter a UsageMeter para custos e orçamentos, e um TsgcAIGuardrails a Guardrails para mascaramento de PII, regras de ferramentas e validação de schema.

Aliases de modelo, fallback e uso de tokens

Dê nomes aos modelos por função, continue respondendo quando um provedor falha e leia os tokens de cada requisição. Novidade da versão 2026.11.0.

uses
  sgcAI, sgcAI_Chat;

procedure TForm1.ChatWithFallback;
var
  oFallback: TsgcAIChatFallback;
begin
  sgcAIChat1.Provider := aicpOpenAI;
  sgcAIChat1.ChatOptions.ApiKey := 'sk-...';
  // aliases: alias=model or alias=provider:model
  sgcAIChat1.ModelAliases.Add('fast=gpt-6-luna');
  sgcAIChat1.ModelAliases.Add('smart=anthropic:claude-opus-5-5');
  sgcAIChat1.ProviderApiKeys.Add('anthropic=sk-ant-...');
  sgcAIChat1.ChatOptions.Model := 'fast';
  // tried in order on a connection error, HTTP 5xx, HTTP 429 or an unknown model
  oFallback := sgcAIChat1.Fallbacks.Add;
  oFallback.Provider := aicpGemini;
  oFallback.Model := 'gemini-3-flash';
  oFallback.ApiKey := 'AIza...';
  sgcAIChat1.OnFallback := DoFallback;

  Memo1.Lines.Add(sgcAIChat1.Chat('Write a haiku about Delphi.'));
  Memo1.Lines.Add(Format('Answered by %s %s: %d input, %d output tokens',
    [sgcAIChat1.LastUsage.Provider, sgcAIChat1.LastUsage.Model,
    sgcAIChat1.LastUsage.InputTokens, sgcAIChat1.LastUsage.OutputTokens]));
end;

procedure TForm1.DoFallback(Sender: TObject; const aFromProvider, aFromModel,
  aToProvider, aToModel, aError: string);
begin
  Memo1.Lines.Add('Fallback from ' + aFromProvider + ' to ' + aToProvider +
    ': ' + aError);
end;

Especificações & referências

Fontes oficiais dos serviços e protocolos que este componente usa.

Continue explorando

Ajuda onlineReferência completa da API e guia de uso dos componentes sgcAI.
Todos os componentes sgcAIExplore a matriz de recursos completa dos 15 componentes.
Baixar avaliação gratuitaTeste os sete provedores com suas próprias chaves de API.
PreçosLicenças Single, Team e Site, código-fonte completo.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para começar?

Baixe a avaliação gratuita e coloque um modelo de linguagem por trás de um formulário Delphi em poucos minutos.