AIAssistant

TsgcHTMLAIAssistant : transforme une question saisie en langage courant en un ensemble validé d'opérations pour une grille, un tableau de données, un tableau croisé ou un formulaire, en Delphi, C++ Builder et .NET. Il ne touche jamais à votre jeu de données, ne construit aucun SQL et n'émet aucun HTML.

TsgcHTMLAIAssistant

Un composant non visuel. Il transforme une question en un ensemble fermé d'opérations : des filtres, des tris, un regroupement, des mises en évidence et une limite pour une grille, ou des lignes, des colonnes, une mesure et un agrégat pour un tableau croisé, et le composant de données les applique à ses propres lignes. Un fournisseur est facultatif : un analyseur intégré répond sans clé d'API.

Classe du composant

TsgcHTMLAIAssistant (unité sgcHTML_AI, non visuel, un TsgcComponent_Base)

Produit

Aucun balisage : il renvoie des opérations validées, et les composants de données les affichent

Famille

Chat & IA

Langages

Delphi, C++ Builder, .NET

Créez-le, affectez-le, acheminez la requête

Configurez éventuellement un fournisseur avec Provider, APIKey et Model. Affectez l'assistant à la propriété AIAssistant du composant de données, définissez AIQueryEnabled pour afficher la barre de requête, et acheminez l'action qu'envoie la barre. Vous pouvez aussi appeler directement l'assistant.

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
}

Propriétés & méthodes clés

Les membres que vous utilisez le plus souvent.

Éditions et plateformes

Un fournisseur nécessite les unités IA de l'édition Enterprise ou All-Access, ou le pack sgcAI, et elles ne sont disponibles que sous Windows. L'analyseur intégré répond sur toutes les plateformes sans fournisseur. L'unité se compile lorsque SGC_HTML est défini, ce que sgcVer.inc ne fait pas pour Android et iOS, et sgcHTML est un pack autonome, vendu indépendamment de sgcWebSockets.

Où l'affecter

AIAssistant existe sur TsgcHTMLComponent_Grid, TsgcHTMLComponent_DataTable, TsgcHTMLComponent_PivotTable, TsgcHTMLComponent_Form et TsgcHTMLComponent_InlineAIPrompt. AIQueryEnabled existe sur la grille, le tableau de données et le tableau croisé : il affiche la barre de requête, la pastille « interprété comme » et le contrôle d'effacement. Le formulaire n'a pas de AIQueryEnabled, il utilise l'assistant pour le collage intelligent, et InlineAIPrompt l'utilise pour sa réponse. Tant qu'aucun assistant n'est affecté, une grille n'affiche aucun balisage IA.

Ce qui quitte la machine

Une question sur une grille ou un tableau croisé envoie les noms de colonnes, les libellés, les types et jusqu'à trois valeurs d'exemple par colonne, chacune tronquée à 40 caractères. Rien d'autre, quel que soit ce réglage. Les lignes ne partent que via les appels qui portent sur les lignes, et seulement lorsque AllowRowDataToProvider vaut True, ce qui n'est pas le cas par défaut. Sinon, SuggestColumnValues et Summarize renvoient False et n'envoient rien, et MaxRows plafonne ce qu'ils peuvent transporter. Le collage intelligent envoie le texte qu'une personne a collé ainsi que le nom, le libellé et le type de chaque champ, et aucune valeur du formulaire.

La validation est la frontière

Tout ce qu'un fournisseur renvoie est traité comme un texte hostile. Chaque nom de colonne doit correspondre à votre liste blanche, par nom exact et sans distinguer les majuscules des minuscules. Chaque opérateur doit être l'un des 13 de TsgcHTMLAIOperator, chaque agrégat l'un de sum, count, avg, min et max, et chaque valeur est convertie selon le type de sa colonne : une valeur qui ne se convertit pas fait abandonner toute son opération. Un style de mise en évidence doit être l'un de primary, secondary, success, danger, warning, info, light ou dark. Les limites sont bornées à MaxLimit, il y a au plus 32 filtres, 32 tris et 32 mises en évidence, les caractères de contrôle sont supprimés, et tout ce qui est inconnu est écarté en silence. Si rien ne survit, l'ensemble entier est vidé, explication comprise. Une injection de prompt produit un ensemble vide ou partiel, jamais une exception.

Le modèle d'opérations

TsgcHTMLGridOps contient Filters, Sorts, Highlights, GroupBy, Limit et Explanation. TsgcHTMLPivotOps contient Rows, Columns, Measure, Aggregate et Explanation. TsgcHTMLAIColumns est la liste blanche : Add(aName, aDataType, aCaption) pour chaque colonne, avec AddSample pour les échantillons. Les deux classes d'opérations offrent IsEmpty, ToText et ToJSON, et FromJSON n'est la frontière complète que si vous passez les colonnes, revalidez donc tout ce qui est relu depuis un navigateur par rapport à la liste blanche courante.

Choisir un fournisseur

Provider est l'un de aiprOpenAI (par défaut), aiprAnthropic, aiprGemini, aiprDeepSeek, aiprOllama, aiprGrok et aiprMistral, les sept de TsgcAIChatProvider dans sgcAI_Chat. Définissez APIKey ou BaseUrl et l'assistant possède un TsgcAI_Chat configuré à partir de Provider, APIKey, Model (s'il est vide, la valeur par défaut du chat est conservée) et BaseUrl. Ou affectez votre propre composant de chat à Chat, qui n'est déclaré que là où les unités IA sont compilées. Chaque appel demande une sortie structurée qui suit un schéma JSON, et votre chat est restauré ensuite. HasProvider indique dans quel cas vous vous trouvez.

Repli basé sur des règles

Sans fournisseur, l'assistant répond avec son propre analyseur, et UseRuleBasedFallback (activé par défaut) lui permet aussi de répondre après l'échec d'un appel au fournisseur. Il lit des clauses de la forme colonne opérateur valeur reliées par « and » ou par une virgule, ainsi que « sort by », « group by », « top N », « between A and B » et « highlight », et pour un tableau croisé les lignes, les colonnes et l'agrégat. Il accepte les orthographes anglaises usuelles de chaque opérateur et l'un ou l'autre séparateur décimal. Une question qu'il ne comprend pas ne produit aucune opération et la page conserve ses lignes. SuggestColumnValues et Summarize n'ont pas de repli.

SmartPaste pour les formulaires

SmartPaste(aText, aFields, aValues) associe un texte collé à un ensemble de champs. Définissez SmartPasteEnabled sur TsgcHTMLComponent_Form et il affiche une zone de collage ; ProcessSmartPaste(aText) transmet le texte à l'assistant, écrit ce qui revient dans les champs par nom et les marque comme remplis par l'IA, avec un petit badge sur le libellé. L'analyseur à base de règles y répond sans fournisseur, et les sauts de ligne survivent au trajet jusqu'au serveur.

Assistant de colonne

SuggestColumnValues(aPrompt, aRows, aValues) pilote l'assistant de colonne de la grille. Une colonne dont AIMode n'est pas acOff affiche un contrôle de suggestion, ProcessAIColumnValues(aColumnName) demande une valeur par ligne visible en un seul appel, et les réponses deviennent des AIProposals avec un contrôle Accepter et un contrôle Rejeter. La bibliothèque n'écrit rien : une proposition acceptée déclenche OnAIColumnValues et votre application l'enregistre. L'appel envoie des lignes, il nécessite donc un fournisseur et AllowRowDataToProvider activé.

Paramètres de réponse et événements

Language définit la langue du texte libre, vide signifiant les paramètres régionaux de la requête. CacheMinutes (5) répond depuis le cache à une question identique sur un ensemble de colonnes identique, et ClearCache le vide. MaxLimit (1000) ne peut pas être porté au-delà de 1000. OnBeforeQuery(Sender, aPrompt, aAllow) voit le prompt complet avant chaque appel au fournisseur et le bloque lorsque vous définissez aAllow à False. Aucune méthode ne lève d'exception : un échec du fournisseur aboutit à OnAIError(Sender, E, aHandled).

Contrat avec l'hôte

Il n'y a pas de route HTTP. Chaque contrôle est un formulaire data-sgc-ws-send et votre application aiguille selon action : gridAIQuery, gridAIClear, gridAIColumn, gridAIAccept, gridAIReject, pivotAIQuery, pivotAIClear, formSmartPaste et les quatre actions du prompt intégré. Répondez avec le composant réaffiché sous forme de fragment hors-bande. Un ensemble de composants correspond à un utilisateur, créez-le donc par session, et gardez côté serveur l'autorisation de ce que fait une action.

Continuez l'exploration

Aide en ligneRéférence API complète et guide d’utilisation pour ce composant.
Guide de l'AI Data PackVue d'ensemble : ce que reçoit le modèle, la validation, l'analyseur à base de règles, le contrat avec l'hôte et les limites.
Tous les composants sgcHTMLParcourez la matrice complète des fonctionnalités de plus de 80 composants.
Télécharger la version d'essai gratuiteLa version d'essai de 30 jours fournit les projets de démonstration 60.HTML, dont 18.AIData, qui interroge en langage courant une grille, un tableau croisé et un formulaire.
TarifsLicences Single, Team et Site avec code source complet.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à démarrer ?

Téléchargez la version d'essai gratuite et commencez à créer des interfaces web en Delphi, C++ Builder et .NET.