AIAssistant

TsgcHTMLAIAssistant: transforma uma pergunta digitada em linguagem natural em um conjunto de operações validado para um grid, uma tabela de dados, um pivot ou um formulário, em Delphi, C++ Builder e .NET. Nunca toca no seu dataset, não monta SQL e não emite HTML.

TsgcHTMLAIAssistant

Um componente não visual. Ele transforma uma pergunta em um conjunto fechado de operações, filtros, ordenações, um agrupamento, destaques e um limite para um grid, ou linhas, colunas, uma medida e um agregado para um pivot, e o componente de dados as aplica às suas próprias linhas. Um provedor é opcional: um parser embutido responde sem chave de API.

Classe do componente

TsgcHTMLAIAssistant (unit sgcHTML_AI, não visual, um TsgcComponent_Base)

Renderiza

Sem markup: ele devolve operações validadas, e os componentes de dados as renderizam

Família

Chat & IA

Linguagens

Delphi, C++ Builder, .NET

Crie-o, atribua-o, encaminhe a consulta

Se quiser, configure um provedor com Provider, APIKey e Model. Atribua o assistente à propriedade AIAssistant do componente de dados, defina AIQueryEnabled para renderizar a barra de consulta e encaminhe a ação que a barra envia. Você também pode chamar o assistente diretamente.

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
}

Principais propriedades & métodos

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

Edições e plataformas

Um provedor precisa das units de IA da edição Enterprise ou All-Access, ou do pacote sgcAI, e elas são somente Windows. O parser embutido responde em todas as plataformas, sem provedor. A unit compila quando SGC_HTML está definido, o que o sgcVer.inc não faz para Android e iOS, e o sgcHTML é um pacote autônomo, vendido de forma independente do sgcWebSockets.

Onde atribuí-lo

AIAssistant existe em TsgcHTMLComponent_Grid, TsgcHTMLComponent_DataTable, TsgcHTMLComponent_PivotTable, TsgcHTMLComponent_Form e TsgcHTMLComponent_InlineAIPrompt. AIQueryEnabled existe no grid, na tabela de dados e no pivot: ele renderiza a barra de consulta, o chip de interpretação e o controle de limpeza. O formulário não tem AIQueryEnabled, ele usa o assistente para a colagem inteligente, e o InlineAIPrompt o usa para a sua resposta. Enquanto nenhum assistente estiver atribuído, um grid não renderiza nenhum markup de IA.

O que sai da máquina

Uma pergunta de grid ou pivot envia os nomes das colunas, os títulos, os tipos e até três valores de exemplo por coluna, cada um cortado em 40 caracteres. Nada além disso, independentemente da permissão. As linhas só saem pelas chamadas que tratam de linhas, e somente quando AllowRowDataToProvider é True, o que não é o padrão: SuggestColumnValues e Summarize então devolvem False e não enviam nada, e MaxRows limita o que elas podem carregar. A colagem inteligente envia o texto que uma pessoa colou e o nome, o rótulo e o tipo de cada campo, e nenhum valor do formulário.

A validação é a fronteira

Tudo o que um provedor devolve é tratado como texto hostil. Todo nome de coluna precisa corresponder à sua lista de permissões, pelo nome exato e sem distinção de maiúsculas e minúsculas. Todo operador precisa ser um dos 13 de TsgcHTMLAIOperator, todo agregado um entre sum, count, avg, min e max, e todo valor é convertido pelo tipo da sua coluna: um valor que não converte descarta a operação inteira. Um estilo de destaque precisa ser um entre primary, secondary, success, danger, warning, info, light ou dark. Os limites são ajustados a MaxLimit, há no máximo 32 filtros, 32 ordenações e 32 destaques, os caracteres de controle são removidos, e tudo o que for desconhecido é descartado em silêncio. Se nada sobreviver, o conjunto inteiro é limpo, inclusive a explicação. Uma prompt injection produz um conjunto vazio ou parcial, nunca uma exceção.

O modelo de operações

TsgcHTMLGridOps guarda Filters, Sorts, Highlights, GroupBy, Limit e Explanation. TsgcHTMLPivotOps guarda Rows, Columns, Measure, Aggregate e Explanation. TsgcHTMLAIColumns é a lista de permissões: Add(aName, aDataType, aCaption) para cada coluna, com AddSample para os exemplos. As duas classes de operações oferecem IsEmpty, ToText e ToJSON, e FromJSON é a fronteira completa somente quando você passa as colunas, então revalide tudo o que for lido de volta de um navegador contra a lista de permissões ativa.

Escolhendo um provedor

Provider é um entre aiprOpenAI (o padrão), aiprAnthropic, aiprGemini, aiprDeepSeek, aiprOllama, aiprGrok e aiprMistral, os sete de TsgcAIChatProvider em sgcAI_Chat. Defina APIKey ou BaseUrl e o assistente passa a ter um TsgcAI_Chat próprio, configurado a partir de Provider, APIKey, Model (vazio mantém o padrão do chat) e BaseUrl. Ou atribua o seu próprio componente de chat a Chat, que só é declarado onde as units de IA são compiladas. Cada chamada pede uma saída estruturada que segue um esquema JSON, e o seu chat é restaurado depois. HasProvider informa em qual caso você está.

Fallback baseado em regras

Sem um provedor, o assistente responde com o seu próprio parser, e UseRuleBasedFallback (ativado por padrão) permite que ele responda também a uma chamada de provedor que falhou. Ele lê cláusulas da forma coluna operador valor unidas por and ou por uma vírgula, além de sort by, group by, top N, between A and B e highlight, e, para um pivot, as linhas, as colunas e o agregado. Aceita as grafias usuais em inglês de cada operador e qualquer um dos separadores decimais. Uma pergunta que ele não entende não produz nenhuma operação e a página mantém as suas linhas. SuggestColumnValues e Summarize não têm fallback.

SmartPaste para formulários

SmartPaste(aText, aFields, aValues) mapeia o texto colado para um conjunto de campos. Defina SmartPasteEnabled em TsgcHTMLComponent_Form e ele renderiza uma zona de colagem; ProcessSmartPaste(aText) entrega o texto ao assistente, escreve o que voltou nos campos pelo nome e os marca como preenchidos por IA, com um pequeno badge no rótulo. O parser baseado em regras a atende sem provedor, e as quebras de linha sobrevivem à viagem até o servidor.

Assistente de coluna

SuggestColumnValues(aPrompt, aRows, aValues) aciona o assistente de coluna do grid. Uma coluna cujo AIMode não é acOff renderiza um controle de sugestão, ProcessAIColumnValues(aColumnName) pede um valor por linha visível em uma única chamada, e as respostas viram AIProposals com um controle Accept e um Reject. A biblioteca não escreve nada: uma proposta aceita dispara OnAIColumnValues e a sua aplicação a persiste. A chamada envia linhas, então exige um provedor e AllowRowDataToProvider ligado.

Configurações e eventos de resposta

Language define o idioma do texto livre, e vazio significa a localidade da requisição. CacheMinutes (5) responde uma pergunta idêntica sobre um conjunto de colunas idêntico a partir do cache, e ClearCache o esvazia. MaxLimit (1000) não pode ser elevado acima de 1000. OnBeforeQuery(Sender, aPrompt, aAllow) vê o prompt inteiro antes de cada chamada ao provedor e a bloqueia quando você define aAllow como False. Nenhum método levanta exceção: uma falha do provedor chega a OnAIError(Sender, E, aHandled).

Contrato do host

Não há rota HTTP. Cada controle é um formulário data-sgc-ws-send e a sua aplicação despacha por action: gridAIQuery, gridAIClear, gridAIColumn, gridAIAccept, gridAIReject, pivotAIQuery, pivotAIClear, formSmartPaste e as quatro ações do prompt inline. Responda com o componente renderizado de novo como um fragmento out of band. Um conjunto de componentes é um usuário, então use um por sessão, e mantenha no servidor a autorização do que uma ação faz.

Continue explorando

Ajuda onlineReferência completa da API e guia de uso para este componente.
Guia do AI Data PackO quadro completo: o que o modelo recebe, a validação, o parser baseado em regras, o contrato do host e os limites.
Todos os Componentes sgcHTMLExplore a matriz completa de recursos com mais de 80 componentes.
Baixar Versão de Avaliação GratuitaA avaliação de 30 dias inclui os projetos de demonstração 60.HTML, entre eles o 18.AIData, que faz perguntas em linguagem natural a um grid, a um pivot e a um formulário.
PreçosLicenças Single, Team e Site com 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 versão de avaliação gratuita e comece a construir UIs web em Delphi, C++ Builder e .NET.