AIAssistant

TsgcHTMLAIAssistant: zamienia pytanie wpisane zwykłym językiem w zwalidowany zestaw operacji dla siatki, tabeli danych, tabeli przestawnej lub formularza, w Delphi, C++ Builder i .NET. Nigdy nie dotyka Twojego zestawu danych, nie buduje SQL i nie emituje HTML.

TsgcHTMLAIAssistant

Komponent niewizualny. Zamienia pytanie w zamknięty zestaw operacji: filtry, sortowania, grupowanie, wyróżnienia i limit dla siatki albo wiersze, kolumny, miarę i agregat dla tabeli przestawnej, a komponent danych stosuje je do własnych wierszy. Dostawca jest opcjonalny: wbudowany parser odpowiada bez klucza API.

Klasa komponentu

TsgcHTMLAIAssistant (jednostka sgcHTML_AI, niewizualny, TsgcComponent_Base)

Renderuje

Bez znaczników: zwraca zwalidowane operacje, a komponenty danych je renderują

Rodzina

Czat i AI

Języki

Delphi, C++ Builder, .NET

Utwórz go, przypisz, skieruj zapytanie

Opcjonalnie skonfiguruj dostawcę za pomocą Provider, APIKey i Model. Przypisz asystenta do właściwości AIAssistant komponentu danych, ustaw AIQueryEnabled, aby wyrenderować pasek zapytań, i skieruj akcję, którą pasek odsyła. Możesz też wywołać asystenta bezpośrednio.

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
}

Kluczowe właściwości i metody

Składniki, po które sięgasz najczęściej.

Edycje i platformy

Dostawca wymaga jednostek AI z edycji Enterprise lub All-Access albo pakietu sgcAI, a działają one tylko w Windows. Wbudowany parser odpowiada na każdej platformie bez dostawcy. Jednostka kompiluje się, gdy zdefiniowane jest SGC_HTML, czego sgcVer.inc nie robi dla Androida i iOS, a sgcHTML to samodzielny pakiet, sprzedawany niezależnie od sgcWebSockets.

Gdzie go przypisać

AIAssistant istnieje w TsgcHTMLComponent_Grid, TsgcHTMLComponent_DataTable, TsgcHTMLComponent_PivotTable, TsgcHTMLComponent_Form i TsgcHTMLComponent_InlineAIPrompt. AIQueryEnabled istnieje w siatce, tabeli danych i tabeli przestawnej: renderuje pasek zapytań, chip z informacją, jak zinterpretowano zapytanie, i kontrolkę czyszczenia. Formularz nie ma AIQueryEnabled: używa asystenta do inteligentnego wklejania, a InlineAIPrompt używa go do swojej odpowiedzi. Dopóki żaden asystent nie jest przypisany, siatka w ogóle nie renderuje znaczników AI.

Co opuszcza maszynę

Pytanie o siatkę lub tabelę przestawną wysyła nazwy kolumn, podpisy, typy i do trzech przykładowych wartości na kolumnę, każdą obciętą do 40 znaków. Nic więcej, niezależnie od ustawienia bramki. Wiersze opuszczają maszynę tylko przez wywołania, które dotyczą wierszy, i tylko gdy AllowRowDataToProvider ma wartość True, a domyślnie tak nie jest: bez tego SuggestColumnValues i Summarize zwracają False i niczego nie wysyłają, a MaxRows ogranicza to, co mogą przenieść. Inteligentne wklejanie wysyła tekst wklejony przez użytkownika oraz nazwę, etykietę i typ każdego pola, a żadnej wartości formularza.

Walidacja jest granicą

Wszystko, co zwraca dostawca, jest traktowane jako wrogi tekst. Każda nazwa kolumny musi pasować do Twojej białej listy, po dokładnej nazwie, bez rozróżniania wielkości liter. Każdy operator musi być jednym z 13 z TsgcHTMLAIOperator, każdy agregat jednym z sum, count, avg, min i max, a każda wartość jest rzutowana na typ swojej kolumny: wartość, której nie da się rzutować, odrzuca całą swoją operację. Styl wyróżnienia musi być jednym z primary, secondary, success, danger, warning, info, light lub dark. Limity są przycinane do MaxLimit, jest co najwyżej 32 filtry, 32 sortowania i 32 wyróżnienia, znaki sterujące są usuwane, a wszystko nieznane jest po cichu odrzucane. Jeśli nic nie przetrwa, cały zestaw jest czyszczony, razem z wyjaśnieniem. Prompt injection daje pusty lub częściowy zestaw, nigdy wyjątek.

Model operacji

TsgcHTMLGridOps zawiera Filters, Sorts, Highlights, GroupBy, Limit i Explanation. TsgcHTMLPivotOps zawiera Rows, Columns, Measure, Aggregate i Explanation. TsgcHTMLAIColumns to biała lista: Add(aName, aDataType, aCaption) dla każdej kolumny, z AddSample dla przykładów. Obie klasy operacji oferują IsEmpty, ToText i ToJSON, a FromJSON jest pełną granicą tylko wtedy, gdy przekażesz kolumny, więc wszystko odczytane z powrotem z przeglądarki waliduj ponownie względem aktualnej białej listy.

Wybór dostawcy

Provider to jedno z aiprOpenAI (domyślne), aiprAnthropic, aiprGemini, aiprDeepSeek, aiprOllama, aiprGrok i aiprMistral, czyli siedem wartości TsgcAIChatProvider w sgcAI_Chat. Ustaw APIKey lub BaseUrl, a asystent stanie się właścicielem TsgcAI_Chat skonfigurowanego z Provider, APIKey, Model (puste zachowuje domyślną wartość czatu) i BaseUrl. Albo przypisz własny komponent czatu do Chat, który jest deklarowany tylko tam, gdzie skompilowano jednostki AI. Każde wywołanie prosi o ustrukturyzowane wyjście zgodne ze schematem JSON, a Twój czat jest potem przywracany. HasProvider mówi, w którym przypadku jesteś.

Zapasowy mechanizm oparty na regułach

Bez dostawcy asystent odpowiada własnym parserem, a UseRuleBasedFallback (domyślnie włączone) pozwala mu odpowiadać także po nieudanym wywołaniu dostawcy. Czyta klauzule w postaci kolumna operator wartość, połączone słowem and albo przecinkiem, a także sort by, group by, top N, between A and B i highlight, a dla tabeli przestawnej wiersze, kolumny i agregat. Akceptuje zwykłe angielskie zapisy każdego operatora i oba separatory dziesiętne. Pytanie, którego nie rozumie, nie daje żadnej operacji, a strona zachowuje swoje wiersze. SuggestColumnValues i Summarize nie mają mechanizmu zapasowego.

SmartPaste dla formularzy

SmartPaste(aText, aFields, aValues) odwzorowuje wklejony tekst na zestaw pól. Ustaw SmartPasteEnabled w TsgcHTMLComponent_Form, a wyrenderuje on strefę wklejania; ProcessSmartPaste(aText) przekazuje tekst asystentowi, zapisuje to, co wróciło, do pól według nazwy i oznacza je jako wypełnione przez AI, małą plakietką przy etykiecie. Parser oparty na regułach odpowiada na to bez dostawcy, a podziały wierszy przetrwają drogę do serwera.

Asystent kolumny

SuggestColumnValues(aPrompt, aRows, aValues) obsługuje asystenta kolumny siatki. Kolumna, której AIMode nie jest acOff, renderuje kontrolkę sugestii, ProcessAIColumnValues(aColumnName) prosi jednym wywołaniem o jedną wartość na każdy widoczny wiersz, a odpowiedzi stają się AIProposals z kontrolkami Akceptuj i Odrzuć. Biblioteka niczego nie zapisuje: zaakceptowana propozycja wywołuje OnAIColumnValues, a Twoja aplikacja ją zapisuje. Wywołanie wysyła wiersze, więc wymaga dostawcy i włączonego AllowRowDataToProvider.

Ustawienia odpowiedzi i zdarzenia

Language ustawia język swobodnego tekstu, a pusty oznacza ustawienia regionalne żądania. CacheMinutes (5) odpowiada z pamięci podręcznej na identyczne pytanie dla identycznego zestawu kolumn, a ClearCache ją opróżnia. MaxLimit (1000) nie może zostać podniesione powyżej 1000. OnBeforeQuery(Sender, aPrompt, aAllow) widzi cały prompt przed każdym wywołaniem dostawcy i blokuje je, gdy ustawisz aAllow na False. Żadna metoda nie zgłasza wyjątku: błąd dostawcy trafia do OnAIError(Sender, E, aHandled).

Kontrakt hosta

Nie ma trasy HTTP. Każda kontrolka to formularz data-sgc-ws-send, a Twoja aplikacja rozdziela według action: gridAIQuery, gridAIClear, gridAIColumn, gridAIAccept, gridAIReject, pivotAIQuery, pivotAIClear, formSmartPaste i cztery akcje promptu inline. Odpowiedz ponownie wyrenderowanym komponentem jako fragmentem poza pasmem. Jeden zestaw komponentów to jeden użytkownik, więc utrzymuj osobny zestaw dla każdej sesji i zachowaj autoryzację tego, co robi akcja, po stronie serwera.

Poznawaj dalej

Pomoc onlinePełna dokumentacja API i przewodnik użytkowania tego komponentu.
Przewodnik po AI Data PackPełny obraz: co otrzymuje model, walidacja, parser oparty na regułach, kontrakt hosta i limity.
Wszystkie komponenty sgcHTMLPrzejrzyj pełną matrycę funkcji 80+ komponentów.
Pobierz bezpłatną wersję próbną30-dniowa wersja próbna zawiera projekty demonstracyjne 60.HTML, w tym 18.AIData, który pyta siatkę, tabelę przestawną i formularz zwykłym językiem.
CennikLicencje Single, Team i Site z pełnym kodem źródłowym.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy, aby zacząć?

Pobierz bezpłatną wersję próbną i zacznij budować interfejsy webowe w Delphi, C++ Builder i .NET.