Riferimento
Proprietà e metodi principali
I membri che utilizzerai più spesso.
Un provider richiede le unit AI dell’edizione Enterprise o All-Access, oppure il pack sgcAI, e sono solo per Windows. Il parser integrato risponde su ogni piattaforma senza alcun provider. L’unit compila quando è definito SGC_HTML, cosa che sgcVer.inc non fa per Android e iOS, e sgcHTML è un pack autonomo, venduto indipendentemente da sgcWebSockets.
Dove assegnarlo
AIAssistant esiste su TsgcHTMLComponent_Grid, TsgcHTMLComponent_DataTable, TsgcHTMLComponent_PivotTable, TsgcHTMLComponent_Form e TsgcHTMLComponent_InlineAIPrompt. AIQueryEnabled esiste su griglia, tabella dati e pivot: renderizza la barra di query, il chip di interpretazione e il controllo di cancellazione. Il modulo non ha AIQueryEnabled: usa l’assistente per l’incolla intelligente, e InlineAIPrompt lo usa per la sua risposta. Finché non è assegnato alcun assistente, una griglia non renderizza alcun markup AI.
Che cosa esce dalla macchina
Una domanda su una griglia o un pivot invia i nomi delle colonne, le didascalie, i tipi e fino a tre valori di esempio per colonna, ciascuno tagliato a 40 caratteri. Nient’altro, qualunque sia il valore dell’interruttore. Le righe escono solo tramite le chiamate che riguardano le righe, e solo quando AllowRowDataToProvider è True, cosa che per impostazione predefinita non è: SuggestColumnValues e Summarize restituiscono allora False e non inviano nulla, e MaxRows limita ciò che possono trasportare. L’incolla intelligente invia il testo incollato da una persona e il nome, l’etichetta e il tipo di ogni campo, e nessun valore del modulo.
La validazione è il confine
Tutto ciò che restituisce un provider viene trattato come testo ostile. Ogni nome di colonna deve corrispondere alla tua whitelist, per nome esatto e senza distinguere maiuscole e minuscole. Ogni operatore deve essere uno dei 13 di TsgcHTMLAIOperator, ogni aggregato uno tra sum, count, avg, min e max, e ogni valore viene convertito in base al tipo della sua colonna: un valore che non si converte elimina l’intera operazione. Lo stile di un’evidenziazione deve essere uno tra primary, secondary, success, danger, warning, info, light o dark. I limiti vengono ricondotti a MaxLimit, ci sono al massimo 32 filtri, 32 ordinamenti e 32 evidenziazioni, i caratteri di controllo vengono rimossi e tutto ciò che è sconosciuto viene scartato in silenzio. Se non sopravvive nulla, l’intero insieme viene svuotato, spiegazione inclusa. Una prompt injection produce un insieme vuoto o parziale, mai un’eccezione.
Il modello delle operazioni
TsgcHTMLGridOps contiene Filters, Sorts, Highlights, GroupBy, Limit e Explanation. TsgcHTMLPivotOps contiene Rows, Columns, Measure, Aggregate e Explanation. TsgcHTMLAIColumns è la whitelist: Add(aName, aDataType, aCaption) per ogni colonna, con AddSample per i valori di esempio. Entrambe le classi di operazioni offrono IsEmpty, ToText e ToJSON, e FromJSON costituisce il confine completo solo quando gli passi le colonne, quindi rivalida tutto ciò che rileggi da un browser rispetto alla whitelist attuale.
Scegliere un provider
Provider è uno tra aiprOpenAI (predefinito), aiprAnthropic, aiprGemini, aiprDeepSeek, aiprOllama, aiprGrok e aiprMistral, i sette di TsgcAIChatProvider in sgcAI_Chat. Imposta APIKey oppure BaseUrl e l’assistente gestisce un proprio TsgcAI_Chat configurato a partire da Provider, APIKey, Model (se vuoto, mantiene il valore predefinito della chat) e BaseUrl. Oppure assegna il tuo componente chat a Chat, dichiarato solo dove le unit AI sono compilate. Ogni chiamata richiede un output strutturato che segue uno schema JSON, e la tua chat viene ripristinata al termine. HasProvider indica in quale dei due casi ti trovi.
Ripiego basato su regole
Senza provider l’assistente risponde con il proprio parser, e UseRuleBasedFallback (attivo per impostazione predefinita) gli consente di rispondere anche quando una chiamata al provider fallisce. Legge clausole della forma colonna operatore valore unite da and oppure da una virgola, più sort by, group by, top N, between A and B e highlight, e per un pivot le righe, le colonne e l’aggregato. Accetta le consuete grafie inglesi di ciascun operatore ed entrambi i separatori decimali. Una domanda che non comprende non produce alcuna operazione e la pagina mantiene le sue righe. SuggestColumnValues e Summarize non hanno alcun ripiego.
SmartPaste per i moduli
SmartPaste(aText, aFields, aValues) associa il testo incollato a un insieme di campi. Imposta SmartPasteEnabled su TsgcHTMLComponent_Form e renderizza una zona di incollaggio; ProcessSmartPaste(aText) passa il testo all’assistente, scrive ciò che torna indietro nei campi per nome e li contrassegna come compilati dall’AI, con un piccolo badge sull’etichetta. Il parser basato su regole risponde anche senza provider, e le interruzioni di riga sopravvivono al viaggio verso il server.
Assistente di colonna
SuggestColumnValues(aPrompt, aRows, aValues) pilota l’assistente di colonna della griglia. Una colonna il cui AIMode non è acOff renderizza un controllo di suggerimento, ProcessAIColumnValues(aColumnName) chiede un valore per ogni riga visibile in una sola chiamata, e le risposte diventano AIProposals con un controllo Accetta e uno Rifiuta. La libreria non scrive nulla: una proposta accettata genera OnAIColumnValues e la tua applicazione la salva. La chiamata invia righe, quindi richiede un provider e AllowRowDataToProvider attivo.
Impostazioni delle risposte ed eventi
Language imposta la lingua del testo libero, e se vuoto usa le impostazioni locali della richiesta. CacheMinutes (5) risponde dalla cache a una domanda identica su un insieme di colonne identico, e ClearCache la svuota. MaxLimit (1000) non può essere aumentato oltre 1000. OnBeforeQuery(Sender, aPrompt, aAllow) vede l’intero prompt prima di ogni chiamata al provider e la blocca quando imposti aAllow a False. Nessun metodo solleva eccezioni: un errore del provider arriva a OnAIError(Sender, E, aHandled).
Contratto con l’host
Non esiste alcuna route HTTP. Ogni controllo è un modulo data-sgc-ws-send e la tua applicazione smista in base a action: gridAIQuery, gridAIClear, gridAIColumn, gridAIAccept, gridAIReject, pivotAIQuery, pivotAIClear, formSmartPaste e le quattro azioni del prompt inline. Rispondi con il componente renderizzato di nuovo come frammento out of band. Un insieme di componenti corrisponde a un utente, quindi associalo a una sessione e mantieni sul server l’autorizzazione di ciò che fa un’azione.