AIAssistant

TsgcHTMLAIAssistant: wandelt eine in natürlicher Sprache eingegebene Frage in eine validierte Operationsmenge für ein Grid, eine Datentabelle, ein Pivot oder ein Formular um, in Delphi, C++ Builder und .NET. Er berührt nie Ihr Dataset, baut kein SQL und gibt kein HTML aus.

TsgcHTMLAIAssistant

Eine nicht visuelle Komponente. Sie wandelt eine Frage in eine geschlossene Menge von Operationen um, nämlich Filter, Sortierungen, eine Gruppierung, Hervorhebungen und ein Limit für ein Grid oder Zeilen, Spalten, eine Kennzahl und ein Aggregat für ein Pivot, und die Datenkomponente wendet sie auf ihre eigenen Zeilen an. Ein Provider ist optional: Ein eingebauter Parser antwortet ohne API-Schlüssel.

Komponentenklasse

TsgcHTMLAIAssistant (Unit sgcHTML_AI, nicht visuell, eine TsgcComponent_Base)

Rendert

Kein Markup: liefert validierte Operationen, die Datenkomponenten stellen sie dar

Familie

Chat & KI

Sprachen

Delphi, C++ Builder, .NET

Anlegen, zuweisen, die Abfrage weiterleiten

Konfigurieren Sie optional einen Provider mit Provider, APIKey und Model. Weisen Sie den Assistenten der Eigenschaft AIAssistant der Datenkomponente zu, setzen Sie AIQueryEnabled, um die Abfrageleiste darzustellen, und leiten Sie die Aktion weiter, die die Leiste sendet. Sie können den Assistenten auch direkt aufrufen.

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
}

Wichtige Eigenschaften & Methoden

Die Member, die Sie am häufigsten verwenden.

Editionen und Plattformen

Ein Provider benötigt die KI-Units der Enterprise- oder All-Access-Edition oder das sgcAI-Paket, und diese gibt es nur für Windows. Der eingebaute Parser antwortet auf jeder Plattform ohne Provider. Die Unit kompiliert, wenn SGC_HTML definiert ist, was sgcVer.inc für Android und iOS nicht tut, und sgcHTML ist ein eigenständiges Paket, das unabhängig von sgcWebSockets verkauft wird.

Wo Sie ihn zuweisen

AIAssistant ist verfügbar bei TsgcHTMLComponent_Grid, TsgcHTMLComponent_DataTable, TsgcHTMLComponent_PivotTable, TsgcHTMLComponent_Form und TsgcHTMLComponent_InlineAIPrompt. AIQueryEnabled gibt es beim Grid, der Datentabelle und dem Pivot: Es rendert die Abfrageleiste, den Interpretiert-als-Chip und das Steuerelement zum Leeren. Das Formular hat kein AIQueryEnabled, es nutzt den Assistenten für Smart Paste, und InlineAIPrompt nutzt ihn für seine Antwort. Solange kein Assistent zugewiesen ist, rendert ein Grid überhaupt kein KI-Markup.

Was den Rechner verlässt

Eine Grid- oder Pivot-Frage sendet die Spaltennamen, die Beschriftungen, die Typen und bis zu drei Beispielwerte pro Spalte, jeweils auf 40 Zeichen gekürzt. Sonst nichts, unabhängig von der Freigabe. Zeilen verlassen den Rechner nur über die Aufrufe, die sich um Zeilen drehen, und nur, wenn AllowRowDataToProvider True ist, was standardmäßig nicht der Fall ist: Andernfalls geben SuggestColumnValues und Summarize False zurück und senden nichts, und MaxRows begrenzt, was sie tragen dürfen. Smart Paste sendet den Text, den eine Person eingefügt hat, sowie Name, Beschriftung und Typ jedes Feldes, aber keinen Wert des Formulars.

Die Validierung ist die Grenze

Alles, was ein Provider zurückliefert, wird als nicht vertrauenswürdiger Text behandelt. Jeder Spaltenname muss mit Ihrer Whitelist übereinstimmen, über den exakten Namen und ohne Beachtung der Groß- und Kleinschreibung. Jeder Operator muss einer der 13 aus TsgcHTMLAIOperator sein, jedes Aggregat eines von sum, count, avg, min und max, und jeder Wert wird nach dem Typ seiner Spalte umgewandelt: Ein Wert, der sich nicht umwandeln lässt, verwirft seine gesamte Operation. Ein Hervorhebungsstil muss einer von primary, secondary, success, danger, warning, info, light oder dark sein. Limits werden auf MaxLimit begrenzt, es gibt höchstens 32 Filter, 32 Sortierungen und 32 Hervorhebungen, Steuerzeichen werden entfernt, und alles Unbekannte wird stillschweigend verworfen. Bleibt nichts übrig, wird die gesamte Menge geleert, einschließlich der Erklärung. Eine Prompt-Injection erzeugt eine leere oder teilweise Menge, nie eine Exception.

Das Operationsmodell

TsgcHTMLGridOps enthält Filters, Sorts, Highlights, GroupBy, Limit und Explanation. TsgcHTMLPivotOps enthält Rows, Columns, Measure, Aggregate und Explanation. TsgcHTMLAIColumns ist die Whitelist: Add(aName, aDataType, aCaption) für jede Spalte, mit AddSample für die Beispiele. Beide Operationsklassen bieten IsEmpty, ToText und ToJSON, und FromJSON ist nur dann die vollständige Grenze, wenn Sie die Spalten übergeben, prüfen Sie daher alles, was aus einem Browser zurückgelesen wird, erneut gegen die aktuelle Whitelist.

Einen Provider wählen

Provider ist einer von aiprOpenAI (Standard), aiprAnthropic, aiprGemini, aiprDeepSeek, aiprOllama, aiprGrok und aiprMistral, den sieben von TsgcAIChatProvider in sgcAI_Chat. Setzen Sie APIKey oder BaseUrl, dann besitzt der Assistent ein TsgcAI_Chat, das aus Provider, APIKey, Model (leer behält den Chat-Standard) und BaseUrl konfiguriert wird. Oder weisen Sie Chat Ihre eigene Chat-Komponente zu. Die Eigenschaft ist nur dort deklariert, wo die KI-Units einkompiliert sind. Jeder Aufruf fordert strukturierte Ausgabe an, die einem JSON-Schema folgt, und Ihr Chat wird anschließend wiederhergestellt. HasProvider zeigt an, in welchem Fall Sie sich befinden.

Regelbasierter Fallback

Ohne Provider antwortet der Assistent mit seinem eigenen Parser, und UseRuleBasedFallback (standardmäßig aktiviert) lässt ihn auch einen fehlgeschlagenen Provider-Aufruf beantworten. Er liest Klauseln der Form Spalte Operator Wert, verbunden durch and oder ein Komma, dazu sort by, group by, top N, between A and B und highlight, und für ein Pivot die Zeilen, die Spalten und das Aggregat. Er akzeptiert die üblichen englischen Schreibweisen jedes Operators und beide Dezimaltrennzeichen. Eine Frage, die er nicht versteht, erzeugt keine Operation, und die Seite behält ihre Zeilen. SuggestColumnValues und Summarize haben keinen Fallback.

SmartPaste für Formulare

SmartPaste(aText, aFields, aValues) ordnet eingefügten Text einer Menge von Feldern zu. Setzen Sie SmartPasteEnabled an TsgcHTMLComponent_Form, dann rendert sie eine Einfügezone; ProcessSmartPaste(aText) übergibt den Text an den Assistenten, schreibt das Ergebnis nach Namen in die Felder und markiert sie als KI-befüllt, mit einem kleinen Abzeichen an der Beschriftung. Der regelbasierte Parser beantwortet es ohne Provider, und Zeilenumbrüche überstehen den Weg zum Server.

Spaltenassistent

SuggestColumnValues(aPrompt, aRows, aValues) steuert den Spaltenassistenten des Grids. Eine Spalte, deren AIMode nicht acOff ist, rendert ein Vorschlags-Steuerelement, ProcessAIColumnValues(aColumnName) fragt in einem einzigen Aufruf nach einem Wert pro sichtbarer Zeile, und die Antworten werden zu AIProposals mit den Steuerelementen Übernehmen und Ablehnen. Die Bibliothek schreibt nichts: Ein übernommener Vorschlag löst OnAIColumnValues aus, und Ihre Anwendung speichert ihn. Der Aufruf sendet Zeilen, daher benötigt er einen Provider und aktiviertes AllowRowDataToProvider.

Einstellungen und Ereignisse der Antwort

Language legt die Sprache des freien Texts fest, leer bedeutet die Locale der Anfrage. CacheMinutes (5) beantwortet eine identische Frage über einen identischen Spaltensatz aus dem Cache, und ClearCache leert ihn. MaxLimit (1000) kann nicht über 1000 erhöht werden. OnBeforeQuery(Sender, aPrompt, aAllow) sieht den vollständigen Prompt vor jedem Provider-Aufruf und blockiert ihn, wenn Sie aAllow auf False setzen. Keine Methode löst eine Exception aus: Ein Provider-Fehler erreicht OnAIError(Sender, E, aHandled).

Vertrag mit dem Host

Es gibt keine HTTP-Route. Jedes Steuerelement ist ein data-sgc-ws-send-Formular, und Ihre Anwendung verzweigt anhand von action: gridAIQuery, gridAIClear, gridAIColumn, gridAIAccept, gridAIReject, pivotAIQuery, pivotAIClear, formSmartPaste und die vier Aktionen des Inline-Prompts. Antworten Sie mit der neu gerenderten Komponente als Out-of-Band-Fragment. Ein Satz Komponenten entspricht einem Benutzer, legen Sie sie daher pro Sitzung an, und lassen Sie die Autorisierung dessen, was eine Aktion tut, auf dem Server.

Weiter entdecken

Online-HilfeVollständige API-Referenz und Verwendungshandbuch für diese Komponente.
Anleitung zum AI Data PackDas Gesamtbild: was das Modell erhält, die Validierung, der regelbasierte Parser, der Vertrag mit dem Host und die Grenzen.
Alle sgcHTML-KomponentenDurchsuchen Sie die vollständige Funktionsmatrix von über 80 Komponenten.
Kostenlose Testversion herunterladenDie 30-Tage-Testversion enthält die 60.HTML-Demoprojekte, darunter 18.AIData, das ein Grid, ein Pivot und ein Formular in natürlicher Sprache befragt.
PreiseSingle-, Team- und Site-Lizenzen mit vollständigem Quellcode.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit loszulegen?

Laden Sie die kostenlose Testversion herunter und beginnen Sie, Web-UIs in Delphi, C++ Builder und .NET zu erstellen.