InlineAIPrompt

TsgcHTMLComponent_InlineAIPrompt: ユーザーが作業している場所、つまりメモ、リッチエディター、グリッド列のヘッダーの横でアシスタントに問い合わせるポップオーバーを、Delphi、C++ Builder、.NET で提供します。何を残すかは人が決めます。

TsgcHTMLComponent_InlineAIPrompt

人が判断に加わる(human in the loop)コントロールです。プロンプトはポップオーバーに入力され、回答もその中に表示され、Accept を押したときにだけ、OnAIAccept を通じてアプリケーションに回答が報告されます。コンポーネントがデータセット、フィールド、ページに書き込むことはありません。回答は AIAssistant プロパティ(TsgcHTMLAIAssistant)を通じて得られます。

コンポーネントクラス

TsgcHTMLComponent_InlineAIPrompt(ユニット sgcHTML_Component_InlineAIPrompt

レンダリング内容

トリガーボタンと、プロンプトボックス、回答、Accept、Discard を備えたポップオーバーカード

ファミリー

チャット & AI

言語

Delphi, C++ Builder, .NET

アシスタントを割り当て、4 つのアクションを振り分け、回答を承認する

ポップオーバーに PromptIDTargetName を指定し、AIAssistant を割り当て、アシスタントが参照してよい行を Context に入れ、ポストされる 4 つのアクションを OpenProcessPromptAcceptDiscard に振り分けます。承認された内容は 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);

主なプロパティとメソッド

最もよく使うメンバーです。

人による確認(Human in the loop)

プロンプトはポップオーバーに入力され、回答もその中に表示され、Accept を押したときにだけ、OnAIAccept を通じてアプリケーションに回答が報告されます。Discard はポップオーバーを閉じて回答を破棄します。コンポーネントがデータセット、フィールド、ページに書き込むことはありません。戻ってきた内容をどうするかはアプリケーションが決めます。モデルのテキストはノード層を通じて書き込まれるため、エスケープされ、マークアップになることはありません。

メソッド

Open はプロンプトが未入力の状態でポップオーバーを開きます。ProcessPrompt(aPrompt) は、まず OnAIPrompt に問い合わせ、それが処理しなかった場合は Context に対してアシスタントに問い合わせ、回答を ResultText に入れたままポップオーバーを開いた状態にします。AcceptResultTextOnAIAccept を通じて報告してポップオーバーを閉じ、回答がない場合は何も報告しません。Discard はポップオーバーを閉じます。

イベント

OnAIPrompt(Sender, aPrompt, aResult, aHandled) を使うと、アプリケーション自身で回答できます。aResultaHandled を設定してください。aHandledFalse のままにすると、代わりにアシスタントに問い合わせます。OnAIAccept(Sender, aValue) は人が Accept を押したときに発生し、aValue は画面に表示されていた回答です。

アシスタントと Context

TsgcHTMLAIAssistantAIAssistant に割り当てます。AIAssistant を参照してください。ポップオーバーは、アシスタントの SuggestColumnValuesContext(行ごとに 1 行を持つ TStringList)に対して呼び出します。これらは行データです。アシスタントの AllowRowDataToProviderFalse の間は何も送信されず、Context が空で OnAIPrompt も回答しなかった場合は、そもそも何も問い合わせません。

プロパティ

PromptID(既定値 sgcInlineAI)はポップオーバーの ID で、prompt フィールドにポストされる値です。TargetName は承認された回答の宛先となるコントロールの名前で、target フィールドにポストされるため、それを使って振り分けられます。TitlePlaceholderButtonText でテキストを設定し、IsOpen はパネルを表示し、PromptTextResultText は、問い合わせた内容と回答を保持します。

ポストするアクション

HTTP のルートはありません。すべてのコントロールは data-sgc-ws-send フォームです。inlineAIOpen(フィールドは prompttarget)、inlineAIAsk(さらに text)、inlineAIAcceptinlineAIDiscard があります。action で振り分け、prompt を確認してどのポップオーバーが送信したかを判断し、再レンダリングしたコンポーネントを送り返します。回答をストリーミングするホストは、ResultText が増えた状態で再レンダリングします。

Output

トリガーは常にレンダリングされます。IsOpen がオンの場合は、その横にカードがレンダリングされ、タイトル、プロンプトボックス、問い合わせボタンが含まれ、回答があれば、回答と Accept、Discard のコントロールも含まれます。テキストはローカライズされた文字列 AIAskAIAcceptAIDiscard から取得されます。

インスタンスごとに 1 ユーザー

コンポーネントは、2 つのメッセージの間、質問と保留中の回答を保持するため、1 つのインスタンスは 1 人のユーザーに対応します。マルチユーザーのアプリケーションでは、セッションごとにキーを付けてください。メッセージは、他の htmx WebSocket メッセージと同様に CSRF チェックされないため、OnAIAccept が行う処理の認可はサーバー側で維持してください。

エディションとプラットフォーム

ユニットは SGC_HTML が定義されている場合にコンパイルされ、sgcVer.inc は Android と iOS についてはそれを定義しません。プロバイダーには Enterprise または All-Access エディション、あるいは sgcAI パックの AI ユニットが必要で、それらは Windows 専用です。このコンポーネントにはルールベースのフォールバックがないため、他のプラットフォームや、プロバイダーがない場合は、OnAIPrompt で自分で回答してください。

さらに詳しく

オンラインヘルプこのコンポーネントの完全な API リファレンスと使用ガイドです。
AI Data Pack ガイドアシスタント、操作モデル、データコンポーネントがどのように連携するか、そしてマシンの外に出るデータについて説明します。
すべての sgcHTML コンポーネント80 以上のコンポーネントの全機能マトリックスを閲覧できます。
無料体験版のダウンロード30 日間の体験版には 60.HTML デモプロジェクトが付属し、ポップオーバーがフォームのメモを下書きする 18.AIData も含まれます。
価格完全なソースコード付きの Single、Team、Site ライセンス。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

始める準備はできましたか?

無料体験版をダウンロードして、Delphi、C++ Builder、.NET で Web UI の構築を始めましょう。