sgcAI en cinco minutos

Un componente, una propiedad de proveedor, una llamada. Esta página hace que una aplicación Delphi hable con un modelo de lenguaje grande, te enseña a recibir la respuesta en streaming en lugar de esperarla y deja claro el único límite de plataforma que pilla a más de uno por sorpresa.

OpenAI, Claude, Gemini, DeepSeek, Ollama, Grok, Mistral
TsgcAIChat es solo para Windows
Edición Enterprise, o el paquete sgcAI independiente

Lo que necesita la primera llamada

Un componente, una clave, un nombre de modelo y un prompt. Sin JSON que construir y sin cliente HTTP que configurar.

Componente

TsgcAIChat en la página SGC AI de la paleta. Es una envoltura publicada y delgada sobre TsgcAI_Chat, que es lo que las demos incluidas crean por código.

Unit

sgcAI_Chat.pas para la clase, o la unit barrel sgcAI.pas para el componente de la paleta. Las demos escriben uses sgcAI_Chat;.

La propiedad que cambia de proveedor

Provider, de tipo TsgcAIChatProvider. Los siete miembros son aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok y aicpMistral. Nada más en tu código cambia.

Plataforma, lee esto

TsgcAIChat se compila solo para Windows, Win32 y Win64. Los clientes REST de cada proveedor y el cliente y servidor MCP no tienen restricciones. Mira la tabla de abajo para saber por qué.

Requisitos y ediciones

La columna de edición es el define que controla el código, con la línea en la que se encuentra en Source/sgcVer.inc.

Qué Valor
IDE Delphi 7 hasta RAD Studio 13, y las versiones equivalentes de C++Builder. ChatAsync es el único miembro con un mínimo más alto, porque está envuelto en {$IFDEF D2010}.
Cláusula uses sgcAI_Chat para TsgcAI_Chat, TsgcAIChatProvider y los tipos de evento.
Edición, dentro de sgcWebSockets SGC_AI se define en la línea 798, dentro del bloque {$IFDEF SGC_EDT_ENT} que va de la línea 760 a la 839. Es decir, Enterprise y superiores, ni Standard ni Professional.
Edición, paquete independiente El producto sgcAI define SGC_PACK_AI en la línea 854, y su propio bloque de las líneas 943 a 957 define SGC_AI en la línea 945. Mismos componentes, sin el resto de la biblioteca.
Por qué solo Windows Las dos definiciones de SGC_AI están dentro de un {$IFDEF MSWINDOWS}, en la línea 797 y en la línea 944. Fuera de Windows el define nunca aparece, así que sgcAI_Chat.pas se compila como una unit vacía. El componente lleva además ComponentPlatforms(pidWin32 or pidWin64).
Qué es multiplataforma SGC_AI_MCP, en la línea 800 y en la línea 954, no lleva guarda de plataforma. Así que el cliente y el servidor MCP funcionan también en Linux, macOS, iOS y Android. Los defines de proveedor SGC_OPENAI, SGC_ANTHROPIC, SGC_GEMINI, SGC_DEEPSEEK, SGC_OLLAMA, SGC_GROK y SGC_MISTRAL, líneas 787 a 793, tampoco están restringidos por plataforma.

¿Estás construyendo un servicio Linux o una app móvil? Olvídate de TsgcAIChat y llama directamente al cliente REST del proveedor, por ejemplo TsgcHTTP_API_OpenAI o TsgcHTTP_API_Anthropic. La guía llamar a un LLM desde Delphi muestra ambas rutas lado a lado.

Instala y localiza la página de la paleta

sgcAI se distribuye dentro del instalador de sgcWebSockets y también como paquete propio. En ambos casos la instalación tiene la misma forma.

1. Descomprime

Descomprime la descarga en una carpeta, llamada {$DIR} más abajo.

2. Ruta de biblioteca

Tools, Options, Library. Añade {$DIR}\source y la carpeta lib de tu IDE, por ejemplo {$DIR}\libD13\$(Platform).

3. Compila los paquetes

Abre el grupo de paquetes de tu versión de IDE en {$DIR}\Packages\. Compila primero el .dpk de runtime y después instala el de tiempo de diseño, el dcl.

4. Comprueba la paleta

Aparece una página llamada SGC AI con quince componentes. TsgcAIChat es el primero. Si falta la página en un destino que no es Windows es lo esperado, porque SGC_AI está restringido a Windows.

5. Consigue una clave de API

Para un proveedor alojado aportas tu propia clave de ese proveedor y la asignas a ChatOptions.ApiKey. Ollama no necesita clave alguna, porque el modelo se ejecuta en tu máquina.

Tu primera respuesta, en unas diez líneas

Crea el componente, define un proveedor, una clave y un modelo, y llama a Chat para leer la cadena que devuelve.

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;

Cambiar de proveedor es una línea. Provider acepta aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok y aicpMistral. Todo lo demás se queda donde está.

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;

La demo construye su componente una sola vez en GetChat y asigna ahí OnChatStream y OnChatError. ChatStream también devuelve la respuesta completa, así que puedes ignorar el valor de retorno y usar solo el evento, o usar ambos.

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;

No existe OllamaOptions.BaseUrl. A nivel de la API en bruto la propiedad es OllamaOptions.Host en TsgcHTTP_API_Ollama, y ChatOptions.BaseUrl es lo que la alimenta desde esta capa.

Las dos primeras pestañas son la demo incluida Demos\15.AI\02.Applications\06.UnifiedChat\fUnifiedChat.pas, con los controles del formulario sustituidos por literales. La tercera pestaña es el mismo componente apuntando a un servidor Ollama local. Una segunda demo, 07.ConversationHistory, muestra la API de historial en la misma carpeta.

Comprueba que funcionó y mira el fallo cuando no lo hace

Chat no lanza una excepción cuando una llamada falla, lo que sorprende a más de uno. En su lugar devuelve una cadena vacía y dispara un evento.

El valor de retorno

Chat devuelve el texto del asistente como un string. Una cadena vacía significa que la llamada falló, porque un fallo no lanza excepción.

OnChatError

procedure(Sender: TObject; const aError: string). Tanto Chat como ChatStream capturan la excepción y la encaminan aquí. Es el primer evento que debes conectar, antes que cualquier otra cosa.

OnChatStream

procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean). Que aparezca texto en el memo mientras el modelo todavía está escribiendo es la prueba de que el streaming funciona y no está almacenando en búfer.

La conversación

GetHistory devuelve lo que el componente va a reenviar en la siguiente llamada. MaxHistoryMessages lo limita y ClearHistory empieza de cero.

Lo que suele fallar la primera vez

Seis problemas explican casi todas las primeras llamadas fallidas.

La unit no compila fuera de Windows

Es por diseño. SGC_AI se define dentro de un {$IFDEF MSWINDOWS} en la línea 797 y otra vez en la 944, así que en Linux, macOS, iOS y Android sgcAI_Chat.pas es una unit vacía. En esos destinos usa los clientes REST de los proveedores.

Chat devuelve una cadena vacía y no se lanza nada

Chat y ChatStream se tragan la excepción y la encaminan a OnChatError, cuya firma es procedure(Sender: TObject; const aError: string). Conecta ese evento antes de depurar cualquier otra cosa.

Se ignora un modelo local de Ollama

La dirección base de Ollama va en ChatOptions.BaseUrl, no en el objeto de opciones del proveedor. Internamente se reenvía a OllamaOptions.Host, y es el único proveedor para el que se lee BaseUrl.

El formulario se congela durante una respuesta larga

Chat y ChatStream son síncronos. En Delphi 2010 y posteriores usa ChatAsync, que devuelve un IsgcFuture<string>. En compiladores más antiguos ejecuta la llamada en tu propio hilo.

Se rechaza el nombre del modelo

Los nombres de modelo pertenecen al proveedor, no al componente, y cambian. ChatOptions.Model se pasa tal cual, así que un nombre que funciona en la consola del proveedor funciona aquí.

La factura crece en una conversación larga

El componente reenvía el historial en cada llamada, que es lo que hace que funcione una pregunta de seguimiento. Límitalo con MaxHistoryMessages y empieza de cero con ClearHistory.

Lo que se construye después de la primera respuesta

Un cuadro de prompt es solo el principio. Las cuatro cosas siguientes ya están en el paquete.

Responde desde tus propios documentos

Convierte tu contenido en vectores con TsgcAIOpenAIEmbeddings, guárdalos en TsgcAIDatabaseVectorFile o TsgcAIDatabaseVectorPinecone y recupera los pasajes más cercanos para ponerlos en el prompt.

Referencia de embeddings y referencia de bases de datos vectoriales

Háblale en voz alta

TsgcAIOpenAIChatBot une un grabador, la transcripción, la llamada de chat y la síntesis de voz en un solo componente. TsgcAIOpenAITranslator hace lo mismo para la traducción en directo.

Referencia de ChatBot y referencia del traductor

Expón tu app a un agente

El componente servidor MCP convierte tu aplicación en una herramienta a la que un asistente puede llamar, y el cliente MCP consume otros servidores. Ninguno está restringido a Windows, así que un servidor MCP escrito en Delphi funciona en Linux.

Referencia del servidor MCP y referencia del cliente MCP

Usa toda la API del proveedor

Visión, documentos, razonamiento extendido, lotes, generación de imágenes, transcripción y moderación están en los clientes REST de cada proveedor y no en la capa de chat neutra.

Referencia de OpenAI y referencia de Anthropic

Referencia, demos y documentación

Las páginas de referencia documentan cada opción y evento. Los proyectos de demo se incluyen dentro de la descarga, en Demos\15.AI.

Guía, llamar a un LLM desde Delphi El recorrido largo: streaming, llamadas a herramientas, y alojado frente a local.
Referencia, cliente de OpenAI Todos los métodos, opciones y eventos de TsgcHTTP_API_OpenAI.
Referencia, cliente de Anthropic Mensajes, herramientas, visión, lotes y recuento de tokens en TsgcHTTP_API_Anthropic.
Referencia, servidor MCP El componente que permite a un asistente llamar a tu aplicación.
Página del componente TsgcAIChat Todas las propiedades y eventos del componente de chat, con los otros catorce enlazados desde ella.
Ayuda en línea La referencia generada, siempre al día con la versión actual.

Lecturas relacionadas: construir apps Delphi con IA, comparar los proveedores desde Delphi y escribir un servidor MCP. Cada producto tiene su propio inicio rápido, listado en la página de primeros pasos.

Preguntas sobre el inicio rápido de sgcAI

Suelta TsgcAIChat desde la página SGC AI de la paleta. Está declarado en sgcAI.pas como una envoltura publicada sobre TsgcAI_Chat, que se declara en sgcAI_Chat.pas. El código que crea el objeto en tiempo de ejecución, como hacen las demos incluidas, usa TsgcAI_Chat y uses sgcAI_Chat;. Ambos te dan las mismas propiedades.
Dentro de sgcWebSockets la puerta es SGC_AI, definido en la línea 798 de sgcVer.inc, dentro del bloque SGC_EDT_ENT que va de la línea 760 a la 839. Es la edición Enterprise y superiores. Standard, líneas 675 a 724, y Professional, líneas 727 a 758, no lo definen. Si no quieres el resto de la biblioteca, el paquete sgcAI independiente define SGC_PACK_AI en la línea 854, cuyo propio bloque de las líneas 943 a 957 activa los mismos componentes.
Porque SGC_AI solo se define dentro de un {$IFDEF MSWINDOWS}, en la línea 797 en el bloque Enterprise y en la línea 944 en el bloque del paquete independiente. Sin el define, sgcAI_Chat.pas y la sección TsgcAIChat de sgcAI.pas se compilan a nada. El tiempo de diseño lo refleja con ComponentPlatforms(pidWin32 or pidWin64). En esos destinos llama a los clientes REST de los proveedores, o usa los componentes MCP, que no llevan guarda de plataforma.
Cambia Provider. Acepta aicpOpenAI, aicpAnthropic, aicpGemini, aicpDeepSeek, aicpOllama, aicpGrok y aicpMistral. Después define la clave y el modelo de ese proveedor. Para aicpOllama no hay clave, y si el servidor no está en la dirección por defecto defines ChatOptions.BaseUrl, que el componente reenvía internamente al cliente de Ollama.
Llama a ChatStream en lugar de a Chat, y gestiona OnChatStream. Su firma es procedure(Sender: TObject; const aChunk: string; var Cancel: Boolean): añade aChunk a tu memo según llega, y pon Cancel a True para detener la generación antes de tiempo.
Chat y ChatStream no lanzan excepciones. Capturan la excepción, disparan OnChatError con el mensaje y devuelven una cadena vacía. Así que un OnChatError sin gestionar se ve exactamente igual que un modelo que no contestó nada. Conéctalo primero.
En Delphi 2010 y posteriores llama a ChatAsync, que está envuelto en {$IFDEF D2010} y devuelve un IsgcFuture<string>. En Delphi 7 hasta 2009 ese método no existe, así que ejecuta Chat en un hilo que crees tú mismo.
Sí. Guarda el intercambio y lo reenvía en la siguiente llamada, que es lo que hace que funcione una pregunta de seguimiento. MaxHistoryMessages limita cuánto se reenvía, ClearHistory inicia una conversación nueva y GetHistory devuelve los mensajes almacenados.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para poner un modelo dentro de tu aplicación?

Descarga la versión de prueba y ejecuta la demo de chat unificado con tu propia clave.