Dokumentacja
Kluczowe właściwości i metody
Składniki, po które sięgasz najczęściej.
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(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.