AIAssistant

TsgcHTMLAIAssistant: convierte una pregunta escrita en lenguaje natural en un conjunto validado de operaciones para un grid, una tabla de datos, una tabla dinámica o un formulario, en Delphi, C++ Builder y .NET. Nunca toca tu dataset, no construye SQL y no emite HTML.

TsgcHTMLAIAssistant

Un componente no visual. Convierte una pregunta en un conjunto cerrado de operaciones, filtros, ordenaciones, una agrupación, resaltados y un límite para un grid, o filas, columnas, una medida y un agregado para una tabla dinámica, y el componente de datos las aplica a sus propias filas. El proveedor es opcional: un analizador integrado responde sin clave de API.

Clase del componente

TsgcHTMLAIAssistant (unidad sgcHTML_AI, no visual, un TsgcComponent_Base)

Genera

Sin marcado: devuelve operaciones validadas, y los componentes de datos las renderizan

Familia

Chat e IA

Lenguajes

Delphi, C++ Builder, .NET

Créalo, asígnalo, enruta la consulta

Configura opcionalmente un proveedor con Provider, APIKey y Model. Asigna el asistente a la propiedad AIAssistant del componente de datos, establece AIQueryEnabled para renderizar la barra de consulta, y enruta la acción que envía la barra. También puedes llamar al asistente directamente.

uses
  sgcHTML_AI, sgcHTML_Component_Grid;

FAI := TsgcHTMLAIAssistant.Create(Self);
FAI.Provider := aiprOpenAI;
FAI.APIKey := 'API_KEY';   // optional, the built-in parser answers without it
FAI.Model := 'gpt-4o-mini';
FAI.AllowRowDataToProvider := False;   // the default

oGrid.AIAssistant := FAI;
oGrid.AIQueryEnabled := True;

// in the message handler, action = gridAIQuery
oGrid.LoadAIQueryState(vState);   // empty when the state lives in the session
oGrid.ProcessAIQuery(vQuery);
oGrid.LoadFromDataSource;         // when the grid is bound to a dataset
oHTMX.PushFragment(vGuid, oGrid.HTML);

// Or call it directly and read the validated operations
oCols := TsgcHTMLAIColumns.Create;
oOps := TsgcHTMLGridOps.Create;
try
  oCols.Add('Amount', aidtFloat, 'Order amount');
  oCols.Add('Country', aidtString).AddSample('Spain');
  oCols.Add('Date', aidtDate);
  if FAI.QueryToGridOps('amount greater than 500 sort by date desc',
    oCols, oOps) then
    vText := oOps.ToText;   // what survived validation, as text
finally
  oOps.Free;
  oCols.Free;
end;
// includes: sgcHTML_AI.hpp, sgcHTML_Component_Grid.hpp

FAI = new TsgcHTMLAIAssistant(this);
FAI->Provider = aiprOpenAI;
FAI->APIKey = "API_KEY";   // optional, the built-in parser answers without it
FAI->Model = "gpt-4o-mini";
FAI->AllowRowDataToProvider = false;   // the default

oGrid->AIAssistant = FAI;
oGrid->AIQueryEnabled = true;

// in the message handler, action = gridAIQuery
oGrid->LoadAIQueryState(vState);   // empty when the state lives in the session
oGrid->ProcessAIQuery(vQuery);
oGrid->LoadFromDataSource();       // when the grid is bound to a dataset
oHTMX->PushFragment(vGuid, oGrid->HTML);

// Or call it directly and read the validated operations
String vText;
TsgcHTMLAIColumns *oCols = new TsgcHTMLAIColumns();
TsgcHTMLGridOps *oOps = new TsgcHTMLGridOps();
try
{
  oCols->Add("Amount", aidtFloat, "Order amount");
  oCols->Add("Country", aidtString, "")->AddSample("Spain");
  oCols->Add("Date", aidtDate, "");
  if (FAI->QueryToGridOps("amount greater than 500 sort by date desc",
    oCols, oOps))
    vText = oOps->ToText();   // what survived validation, as text
}
__finally
{
  delete oOps;
  delete oCols;
}
using esegece.sgcWebSockets;

var ai = new TsgcHTMLAIAssistant();
ai.Provider = TsgcHTMLAIAssistant.TsgcHTMLAIProvider.aiprOpenAI;
ai.APIKey = "API_KEY";   // optional, the built-in parser answers without it
ai.Model = "gpt-4o-mini";
ai.AllowRowDataToProvider = false;   // the default

grid.AIAssistant = ai;
grid.AIQueryEnabled = true;

// in the message handler, action = gridAIQuery
grid.LoadAIQueryState(state);   // empty when the state lives in the session
grid.ProcessAIQuery(query);
grid.LoadFromDataSource();      // when the grid is bound to a dataset
htmx.PushFragment(guid, grid.HTML);

// Or call it directly and read the validated operations
var cols = new TsgcHTMLAIColumns();
var ops = new TsgcHTMLGridOps();
cols.Add("Amount", TsgcHTMLAIDataType.aidtFloat, "Order amount");
cols.Add("Country", TsgcHTMLAIDataType.aidtString).AddSample("Spain");
cols.Add("Date", TsgcHTMLAIDataType.aidtDate);
if (ai.QueryToGridOps("amount greater than 500 sort by date desc", cols, ops))
{
    string text = ops.ToText();   // what survived validation, as text
}

Propiedades y métodos clave

Los miembros que usarás con más frecuencia.

Ediciones y plataformas

Un proveedor necesita las unidades de IA de la edición Enterprise o All-Access, o el pack sgcAI, y solo funcionan en Windows. El analizador integrado responde en todas las plataformas sin proveedor. La unidad se compila cuando SGC_HTML está definido, algo que sgcVer.inc no hace para Android e iOS, y sgcHTML es un pack autónomo, que se vende de forma independiente de sgcWebSockets.

Dónde asignarlo

AIAssistant existe en TsgcHTMLComponent_Grid, TsgcHTMLComponent_DataTable, TsgcHTMLComponent_PivotTable, TsgcHTMLComponent_Form y TsgcHTMLComponent_InlineAIPrompt. AIQueryEnabled existe en el grid, la tabla de datos y la tabla dinámica: renderiza la barra de consulta, el chip de «interpretado como» y el control para limpiar. El formulario no tiene AIQueryEnabled, usa el asistente para el pegado inteligente, y InlineAIPrompt lo usa para su respuesta. Mientras no haya un asistente asignado, un grid no renderiza ningún marcado de IA.

Qué sale de la máquina

Una pregunta sobre un grid o una tabla dinámica envía los nombres de las columnas, los títulos, los tipos y hasta tres valores de muestra por columna, cada uno recortado a 40 caracteres. Nada más, sea cual sea la configuración. Las filas solo salen mediante las llamadas que tratan de filas, y solo cuando AllowRowDataToProvider es True, algo que no ocurre por defecto: SuggestColumnValues y Summarize devuelven entonces False y no envían nada, y MaxRows limita lo que pueden llevar. El pegado inteligente envía el texto que una persona pegó y el nombre, la etiqueta y el tipo de cada campo, y ningún valor del formulario.

La validación es la frontera

Todo lo que devuelve un proveedor se trata como texto hostil. Cada nombre de columna debe coincidir con tu lista de permitidos, por nombre exacto y sin distinguir entre mayúsculas y minúsculas. Cada operador debe ser uno de los 13 de TsgcHTMLAIOperator, cada agregado uno de sum, count, avg, min y max, y cada valor se convierte según el tipo de su columna: un valor que no se puede convertir descarta toda su operación. Un estilo de resaltado debe ser uno de primary, secondary, success, danger, warning, info, light o dark. Los límites se acotan a MaxLimit, hay como máximo 32 filtros, 32 ordenaciones y 32 resaltados, se eliminan los caracteres de control, y todo lo desconocido se descarta en silencio. Si no sobrevive nada, se borra el conjunto completo, explicación incluida. Un prompt injection produce un conjunto vacío o parcial, nunca una excepción.

El modelo de operaciones

TsgcHTMLGridOps contiene Filters, Sorts, Highlights, GroupBy, Limit y Explanation. TsgcHTMLPivotOps contiene Rows, Columns, Measure, Aggregate y Explanation. TsgcHTMLAIColumns es la lista de permitidos: Add(aName, aDataType, aCaption) por cada columna, con AddSample para las muestras. Ambas clases de operaciones ofrecen IsEmpty, ToText y ToJSON, y FromJSON es la frontera completa solo cuando le pasas las columnas, así que vuelve a validar todo lo que leas de un navegador contra la lista de permitidos vigente.

Elegir un proveedor

Provider es uno de aiprOpenAI (el valor por defecto), aiprAnthropic, aiprGemini, aiprDeepSeek, aiprOllama, aiprGrok y aiprMistral, los siete de TsgcAIChatProvider en sgcAI_Chat. Establece APIKey o BaseUrl y el asistente es propietario de un TsgcAI_Chat configurado a partir de Provider, APIKey, Model (vacío conserva el valor por defecto del chat) y BaseUrl. O asigna tu propio componente de chat a Chat, que solo se declara donde las unidades de IA están compiladas. Cada llamada pide una salida estructurada que sigue un esquema JSON, y tu chat se restaura después. HasProvider indica en qué caso estás.

Alternativa basada en reglas

Sin proveedor, el asistente responde con su propio analizador, y UseRuleBasedFallback (activado por defecto) le permite responder también cuando falla una llamada al proveedor. Lee cláusulas de la forma columna operador valor unidas por and o una coma, además de sort by, group by, top N, between A and B y highlight, y para una tabla dinámica las filas, las columnas y el agregado. Acepta las grafías habituales en inglés de cada operador y cualquiera de los dos separadores decimales. Una pregunta que no entiende no produce ninguna operación y la página conserva sus filas. SuggestColumnValues y Summarize no tienen alternativa.

SmartPaste para formularios

SmartPaste(aText, aFields, aValues) asigna el texto pegado a un conjunto de campos. Establece SmartPasteEnabled en TsgcHTMLComponent_Form y renderiza una zona de pegado; ProcessSmartPaste(aText) entrega el texto al asistente, escribe lo que vuelve en los campos por nombre y los marca como rellenados por IA, con una pequeña insignia en la etiqueta. El analizador basado en reglas lo responde sin proveedor, y los saltos de línea sobreviven al viaje hasta el servidor.

Asistente de columna

SuggestColumnValues(aPrompt, aRows, aValues) maneja el asistente de columna del grid. Una columna cuyo AIMode no es acOff renderiza un control de sugerencia, ProcessAIColumnValues(aColumnName) pide un valor por cada fila visible en una sola llamada, y las respuestas se convierten en AIProposals con un control Aceptar y otro Rechazar. La biblioteca no escribe nada: una propuesta aceptada dispara OnAIColumnValues y tu aplicación la guarda. La llamada envía filas, así que necesita un proveedor y AllowRowDataToProvider activado.

Ajustes de respuesta y eventos

Language establece el idioma del texto libre, y vacío significa la configuración regional de la petición. CacheMinutes (5) responde desde la caché a una pregunta idéntica sobre un conjunto de columnas idéntico, y ClearCache la vacía. MaxLimit (1000) no se puede subir por encima de 1000. OnBeforeQuery(Sender, aPrompt, aAllow) ve el prompt completo antes de cada llamada al proveedor y la bloquea cuando estableces aAllow en False. Ningún método lanza una excepción: un fallo del proveedor llega a OnAIError(Sender, E, aHandled).

Contrato con el host

No hay ruta HTTP. Cada control es un formulario data-sgc-ws-send y tu aplicación despacha según action: gridAIQuery, gridAIClear, gridAIColumn, gridAIAccept, gridAIReject, pivotAIQuery, pivotAIClear, formSmartPaste y las cuatro acciones del prompt en línea. Responde con el componente renderizado de nuevo como un fragmento fuera de banda. Un conjunto de componentes es un usuario, así que asígnalos por sesión, y mantén en el servidor la autorización de lo que hace una acción.

Sigue explorando

Ayuda en líneaReferencia completa de la API y guía de uso para este componente.
Guía de AI Data PackEl panorama completo: lo que recibe el modelo, la validación, el analizador basado en reglas, el contrato con el host y los límites.
Todos los componentes de sgcHTMLExplora la matriz completa de más de 80 componentes.
Descargar prueba gratuitaLa prueba de 30 días incluye los proyectos de demostración 60.HTML, entre ellos 18.AIData, que pregunta a un grid, a una tabla dinámica y a un formulario en lenguaje natural.
PreciosLicencias Single, Team y Site con código fuente completo.
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 empezar?

Descarga la prueba gratuita y empieza a crear interfaces web en Delphi, C++ Builder y .NET.