AIAssistant

TsgcHTMLAIAssistant: zet een in gewone taal getypte vraag om in een gevalideerde bewerkingenset voor een raster, een datatabel, een pivot of een formulier, in Delphi, C++ Builder en .NET. Het raakt je dataset nooit aan, bouwt geen SQL en genereert geen HTML.

TsgcHTMLAIAssistant

Een niet-visueel component. Het zet een vraag om in een gesloten set bewerkingen: filters, sorteringen, een groepering, markeringen en een limiet voor een raster, of rijen, kolommen, een meetwaarde en een aggregatie voor een pivot, en het datacomponent past ze toe op zijn eigen rijen. Een provider is optioneel: een ingebouwde parser antwoordt zonder API-sleutel.

Componentklasse

TsgcHTMLAIAssistant (unit sgcHTML_AI, niet-visueel, een TsgcComponent_Base)

Rendert

Geen markup: het geeft gevalideerde bewerkingen terug en de datacomponenten renderen ze

Familie

Chat en AI

Talen

Delphi, C++ Builder, .NET

Maak het aan, wijs het toe, routeer de query

Configureer eventueel een provider met Provider, APIKey en Model. Wijs de assistent toe aan de eigenschap AIAssistant van het datacomponent, stel AIQueryEnabled in om de querybalk te renderen en routeer de actie die de balk post. Je kunt de assistent ook rechtstreeks aanroepen.

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
}

Belangrijkste eigenschappen en methoden

De members die je het vaakst gebruikt.

Edities en platforms

Een provider heeft de AI-units van de Enterprise- of All-Access-editie nodig, of het sgcAI-pack, en die zijn alleen voor Windows. De ingebouwde parser antwoordt op elk platform zonder provider. De unit compileert wanneer SGC_HTML is gedefinieerd, wat sgcVer.inc niet doet voor Android en iOS, en sgcHTML is een zelfstandig pack, los van sgcWebSockets verkocht.

Waar je het toewijst

AIAssistant bestaat op TsgcHTMLComponent_Grid, TsgcHTMLComponent_DataTable, TsgcHTMLComponent_PivotTable, TsgcHTMLComponent_Form en TsgcHTMLComponent_InlineAIPrompt. AIQueryEnabled bestaat op het raster, de datatabel en de pivot: het rendert de querybalk, de chip 'geïnterpreteerd als' en de wis-knop. Het formulier heeft geen AIQueryEnabled, het gebruikt de assistent voor slim plakken, en InlineAIPrompt gebruikt die voor zijn antwoord. Zolang er geen assistent is toegewezen, rendert een raster helemaal geen AI-markup.

Wat de machine verlaat

Een vraag over een raster of pivot verstuurt de kolomnamen, de titels, de typen en maximaal drie voorbeeldwaarden per kolom, elk afgekapt tot 40 tekens. Verder niets, ongeacht de instelling. Rijen verlaten de machine alleen via de aanroepen die over rijen gaan, en alleen wanneer AllowRowDataToProvider True is, wat standaard niet zo is: zolang dat niet zo is, geven SuggestColumnValues en Summarize False terug en versturen niets, en MaxRows begrenst wat ze mogen bevatten. Slim plakken verstuurt de tekst die een persoon heeft geplakt en de naam, het label en het type van elk veld, en geen enkele waarde van het formulier.

Validatie is de grens

Alles wat een provider teruggeeft, wordt behandeld als vijandige tekst. Elke kolomnaam moet overeenkomen met je whitelist, op exacte naam en zonder onderscheid tussen hoofdletters en kleine letters. Elke operator moet een van de 13 van TsgcHTMLAIOperator zijn, elke aggregatie een van sum, count, avg, min en max, en elke waarde wordt gedwongen naar het type van zijn kolom: een waarde die zich niet laat omzetten, laat de hele bewerking vervallen. Een markeringsstijl moet een van primary, secondary, success, danger, warning, info, light of dark zijn. Limieten worden begrensd op MaxLimit, er zijn maximaal 32 filters, 32 sorteringen en 32 markeringen, stuurtekens worden verwijderd en alles wat onbekend is, wordt stilzwijgend weggegooid. Als er niets overblijft, wordt de hele set leeggemaakt, inclusief de toelichting. Een prompt injection levert een lege of gedeeltelijke set op, nooit een exceptie.

Het bewerkingenmodel

TsgcHTMLGridOps bevat Filters, Sorts, Highlights, GroupBy, Limit en Explanation. TsgcHTMLPivotOps bevat Rows, Columns, Measure, Aggregate en Explanation. TsgcHTMLAIColumns is de whitelist: Add(aName, aDataType, aCaption) voor elke kolom, met AddSample voor de voorbeeldwaarden. Beide bewerkingsklassen bieden IsEmpty, ToText en ToJSON, en FromJSON is alleen de volledige grens wanneer je de kolommen meegeeft, dus valideer alles wat uit een browser wordt teruggelezen opnieuw tegen de actuele whitelist.

Een provider kiezen

Provider is een van aiprOpenAI (de standaard), aiprAnthropic, aiprGemini, aiprDeepSeek, aiprOllama, aiprGrok en aiprMistral, de zeven van TsgcAIChatProvider in sgcAI_Chat. Stel APIKey of BaseUrl in en de assistent bezit een TsgcAI_Chat, geconfigureerd op basis van Provider, APIKey, Model (leeg behoudt de standaard van de chat) en BaseUrl. Of wijs je eigen chatcomponent toe aan Chat, dat alleen wordt gedeclareerd waar de AI-units zijn meegecompileerd. Elke aanroep vraagt om gestructureerde uitvoer die een JSON-schema volgt, en je chat wordt daarna hersteld. HasProvider vertelt in welk geval je zit.

Regelgebaseerde terugval

Zonder provider antwoordt de assistent met zijn eigen parser, en met UseRuleBasedFallback (standaard aan) kan die ook een mislukte provideraanroep beantwoorden. De parser leest clausules van de vorm kolom operator waarde, verbonden door and of een komma, plus sort by, group by, top N, between A and B en highlight, en voor een pivot de rijen, de kolommen en de aggregatie. De parser accepteert de gebruikelijke Engelse schrijfwijzen van elke operator en beide decimaalscheidingstekens. Een vraag die de parser niet begrijpt, levert geen bewerking op en de pagina behoudt haar rijen. SuggestColumnValues en Summarize hebben geen terugval.

SmartPaste voor formulieren

SmartPaste(aText, aFields, aValues) verdeelt geplakte tekst over een set velden. Stel SmartPasteEnabled in op TsgcHTMLComponent_Form en het rendert een plakzone; ProcessSmartPaste(aText) geeft de tekst aan de assistent, schrijft wat terugkwam op naam in de velden en markeert ze als door AI ingevuld, met een kleine badge op het label. De regelgebaseerde parser beantwoordt het zonder provider, en regeleinden blijven behouden op weg naar de server.

Kolomassistent

SuggestColumnValues(aPrompt, aRows, aValues) stuurt de kolomassistent van het raster aan. Een kolom waarvan AIMode niet acOff is, rendert een suggestieknop, ProcessAIColumnValues(aColumnName) vraagt in één aanroep om één waarde per zichtbare rij, en de antwoorden worden AIProposals met een Accept- en een Reject-knop. De bibliotheek schrijft niets: een geaccepteerd voorstel roept OnAIColumnValues op en je applicatie legt het vast. De aanroep verstuurt rijen, dus die vereist een provider en AllowRowDataToProvider ingeschakeld.

Antwoordinstellingen en gebeurtenissen

Language bepaalt de taal van de vrije tekst, leeg betekent de locale van het verzoek. CacheMinutes (5) beantwoordt een identieke vraag over een identieke kolomset uit de cache, en ClearCache leegt die. MaxLimit (1000) kan niet boven 1000 worden verhoogd. OnBeforeQuery(Sender, aPrompt, aAllow) ziet de hele prompt vóór elke provideraanroep en blokkeert die wanneer je aAllow op False zet. Geen enkele methode veroorzaakt een exceptie: een providerfout komt terecht in OnAIError(Sender, E, aHandled).

Contract met de host

Er is geen HTTP-route. Elk besturingselement is een data-sgc-ws-send-formulier en je applicatie verdeelt op basis van action: gridAIQuery, gridAIClear, gridAIColumn, gridAIAccept, gridAIReject, pivotAIQuery, pivotAIClear, formSmartPaste en de vier acties van de inline prompt. Antwoord met het opnieuw gerenderde component als out-of-band-fragment. Eén set componenten is één gebruiker, dus houd per sessie een eigen set aan, en houd de autorisatie van wat een actie doet op de server.

Blijf ontdekken

Online helpVolledige API-referentie en gebruikshandleiding voor dit onderdeel.
AI Data Pack-handleidingHet hele plaatje: wat het model ontvangt, validatie, de regelgebaseerde parser, het contract met de host en de limieten.
Alle sgcHTML-componentenBlader door de volledige functiematrix van 80+ componenten.
Download gratis proefversieDe proefversie van 30 dagen bevat de 60.HTML-demoprojecten, waaronder 18.AIData, dat een raster, een pivot en een formulier in gewone taal bevraagt.
PrijzenSingle-, Team- en Site-licenties met volledige broncode.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om te beginnen?

Download de gratis proefversie en begin met het bouwen van web-UI's in Delphi, C++ Builder en .NET.