InlineAIPrompt

TsgcHTMLComponent_InlineAIPrompt: un popover che interroga l’assistente proprio dove lavora l’utente, accanto a un memo, a un editor ricco o nell’intestazione di una colonna di griglia, in Delphi, C++ Builder e .NET. Una persona decide che cosa tenere.

TsgcHTMLComponent_InlineAIPrompt

Un controllo human in the loop. Il prompt si digita nel popover, la risposta viene mostrata al suo interno e solo Accetta comunica la risposta alla tua applicazione tramite OnAIAccept. Il componente non scrive mai in un dataset, in un campo o nella pagina. Risponde tramite la sua proprietà AIAssistant, un TsgcHTMLAIAssistant.

Classe del componente

TsgcHTMLComponent_InlineAIPrompt (unit sgcHTML_Component_InlineAIPrompt)

Renderizza

Un pulsante di attivazione e una card popover con la casella del prompt, la risposta, Accetta e Scarta

Famiglia

Chat e IA

Linguaggi

Delphi, C++ Builder, .NET

Assegna l’assistente, instrada quattro azioni, accetta la risposta

Assegna al popover un PromptID e un TargetName, assegna l’AIAssistant, riempi Context con le righe che l’assistente può vedere e instrada le quattro azioni che invia a Open, ProcessPrompt, Accept e Discard. Ciò che è stato accettato ti arriva in OnAIAccept.

uses
  sgcHTML_AI, sgcHTML_Component_InlineAIPrompt;

FAI := TsgcHTMLAIAssistant.Create(Self);
FAI.Provider := aiprOpenAI;
FAI.APIKey := 'API_KEY';
FAI.AllowRowDataToProvider := True;   // the answer is drafted over Context

FPrompt := TsgcHTMLComponent_InlineAIPrompt.Create(Self);
FPrompt.PromptID := 'notePrompt';
FPrompt.TargetName := 'Note';
FPrompt.Title := 'Draft the note';
FPrompt.Placeholder := 'e.g. write a short delivery note';
FPrompt.AIAssistant := FAI;
FPrompt.Context.Add('Customer=Northwind');   // the rows the assistant may see
FPrompt.OnAIAccept := PromptAccept;

Response := FPrompt.HTML;   // the trigger, and the popover while IsOpen

// only when a human presses Accept, aValue is the answer that was on screen
procedure TMain.PromptAccept(Sender: TObject; const aValue: string);
begin
  SaveNote(aValue);   // your application writes it where it belongs
end;

// in the message handler, one call for each action the popover posts
if vAction = 'inlineAIOpen' then
  FPrompt.Open
else if vAction = 'inlineAIAsk' then
  FPrompt.ProcessPrompt(vText)
else if vAction = 'inlineAIAccept' then
  FPrompt.Accept
else if vAction = 'inlineAIDiscard' then
  FPrompt.Discard;
oHTMX.PushFragment(vGuid, FPrompt.HTML);
// includes: sgcHTML_AI.hpp, sgcHTML_Component_InlineAIPrompt.hpp

FAI = new TsgcHTMLAIAssistant(this);
FAI->Provider = aiprOpenAI;
FAI->APIKey = "API_KEY";
FAI->AllowRowDataToProvider = true;   // the answer is drafted over Context

FPrompt = new TsgcHTMLComponent_InlineAIPrompt(this);
FPrompt->PromptID = "notePrompt";
FPrompt->TargetName = "Note";
FPrompt->Title = "Draft the note";
FPrompt->Placeholder = "e.g. write a short delivery note";
FPrompt->AIAssistant = FAI;
FPrompt->Context->Add("Customer=Northwind");   // the rows the assistant may see
FPrompt->OnAIAccept = PromptAccept;

String html = FPrompt->HTML;   // the trigger, and the popover while IsOpen

// only when a human presses Accept, aValue is the answer that was on screen
void __fastcall TMain::PromptAccept(TObject *Sender, const String aValue)
{
  SaveNote(aValue);   // your application writes it where it belongs
}

// in the message handler, one call for each action the popover posts
if (vAction == "inlineAIOpen")
  FPrompt->Open();
else if (vAction == "inlineAIAsk")
  FPrompt->ProcessPrompt(vText);
else if (vAction == "inlineAIAccept")
  FPrompt->Accept();
else if (vAction == "inlineAIDiscard")
  FPrompt->Discard();
oHTMX->PushFragment(vGuid, FPrompt->HTML);
using esegece.sgcWebSockets;

var ai = new TsgcHTMLAIAssistant();
ai.Provider = TsgcHTMLAIAssistant.TsgcHTMLAIProvider.aiprOpenAI;
ai.APIKey = "API_KEY";
ai.AllowRowDataToProvider = true;   // the answer is drafted over Context

var prompt = new TsgcHTMLComponent_InlineAIPrompt();
prompt.PromptID = "notePrompt";
prompt.TargetName = "Note";
prompt.Title = "Draft the note";
prompt.Placeholder = "e.g. write a short delivery note";
prompt.AIAssistant = ai;
prompt.Context.Add("Customer=Northwind");   // the rows the assistant may see
prompt.OnAIAccept += PromptAccept;

string html = prompt.HTML;   // the trigger, and the popover while IsOpen

// only when a human presses Accept, value is the answer that was on screen
void PromptAccept(object sender, string value)
{
    SaveNote(value);   // your application writes it where it belongs
}

// in the message handler, one call for each action the popover posts
if (action == "inlineAIOpen")
    prompt.Open();
else if (action == "inlineAIAsk")
    prompt.ProcessPrompt(text);
else if (action == "inlineAIAccept")
    prompt.Accept();
else if (action == "inlineAIDiscard")
    prompt.Discard();
htmx.PushFragment(guid, prompt.HTML);

Proprietà e metodi principali

I membri che utilizzerai più spesso.

Human in the loop

Il prompt si digita nel popover, la risposta viene mostrata al suo interno e solo Accept comunica la risposta alla tua applicazione, tramite OnAIAccept. Discard chiude il popover e scarta la risposta. Il componente non scrive mai in un dataset, in un campo o nella pagina: è la tua applicazione a decidere che cosa fare di ciò che torna indietro. Il testo del modello viene scritto tramite il livello dei nodi, quindi viene sottoposto a escape e non può mai diventare markup.

Metodi

Open apre il popover senza alcun prompt ancora digitato. ProcessPrompt(aPrompt) interpella prima OnAIPrompt e, se questo non l’ha gestito, l’assistente su Context, e lascia il popover aperto con la risposta in ResultText. Accept comunica ResultText tramite OnAIAccept e chiude il popover, e non comunica nulla quando non c’è una risposta. Discard lo chiude.

Eventi

OnAIPrompt(Sender, aPrompt, aResult, aHandled) permette alla tua applicazione di rispondere da sé: imposta aResult e aHandled. Lascia aHandled a False e verrà interpellato l’assistente. OnAIAccept(Sender, aValue) scatta quando una persona preme Accetta, e aValue è la risposta che era a schermo.

L’assistente e Context

Assegna un TsgcHTMLAIAssistant a AIAssistant, vedi AIAssistant. Il popover chiama il suo SuggestColumnValues su Context, una TStringList con una riga per ogni record. Sono dati delle righe: non viene inviato nulla finché l’assistente ha AllowRowDataToProvider impostato a False, e non viene chiesto nulla quando Context è vuoto e OnAIPrompt non ha risposto.

Proprietà

PromptID (predefinito sgcInlineAI) è l’id del popover e il valore inviato nel campo prompt. TargetName indica il controllo a cui appartiene la risposta accettata e viene inviato nel campo target, così puoi instradarla. Title, Placeholder e ButtonText impostano i testi, IsOpen mostra il pannello, e PromptText e ResultText contengono ciò che è stato chiesto e risposto.

Azioni che invia

Non esiste alcuna route HTTP. Ogni controllo è un modulo data-sgc-ws-send: inlineAIOpen (campi prompt, target), inlineAIAsk (più text), inlineAIAccept e inlineAIDiscard. Smista in base a action, controlla prompt per sapere quale popover l’ha inviato, e rimanda indietro il componente renderizzato di nuovo. Un host che trasmette una risposta in streaming lo renderizza di nuovo con più ResultText.

Output

L’attivatore viene sempre renderizzato. Con IsOpen attivo, accanto a esso viene renderizzata una card con il titolo, la casella del prompt, il pulsante di richiesta e, quando c’è una risposta, la risposta con un controllo Accetta e uno Scarta. I testi provengono dalle stringhe localizzate AIAsk, AIAccept e AIDiscard.

Un utente per istanza

Il componente conserva la domanda e la risposta in sospeso tra due messaggi, quindi un’istanza corrisponde a un utente: in un’applicazione multiutente associa un’istanza a ciascuna sessione. I messaggi non sono soggetti al controllo CSRF, come qualsiasi altro messaggio WebSocket htmx, quindi mantieni sul server l’autorizzazione di ciò che fa OnAIAccept.

Edizioni e piattaforme

L’unit compila quando è definito SGC_HTML, cosa che sgcVer.inc non fa per Android e iOS. Un provider richiede le unit AI dell’edizione Enterprise o All-Access, oppure il pack sgcAI, e sono solo per Windows. Questo componente non ha un ripiego basato su regole, quindi su altre piattaforme, o senza provider, rispondi tu stesso in OnAIPrompt.

Continua a esplorare

Guida in lineaRiferimento API completo e guida all’uso per questo componente.
Guida all’AI Data PackCome si combinano l’assistente, il modello delle operazioni e i componenti dati, e che cosa esce dalla macchina.
Tutti i componenti sgcHTMLEsplora la matrice completa delle funzionalità di oltre 80 componenti.
Scarica la Prova GratuitaLa prova di 30 giorni include i progetti demo 60.HTML, tra cui 18.AIData, in cui un popover redige la nota di un modulo.
PrezziLicenze Single, Team e Site con codice sorgente completo.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto a Iniziare?

Scarica la versione di prova gratuita e inizia a creare interfacce web in Delphi, C++ Builder e .NET.