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 つのアクションを振り分け、回答を承認する

ポップオーバーに PromptID と TargetName を指定し、AIAssistant を割り当て、アシスタントが参照してよい行を Context に入れ、ポストされる 4 つのアクションを Open、ProcessPrompt、Accept、Discard に振り分けます。承認された内容は 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 に入れたままポップオーバーを開いた状態にします。Accept は ResultText を OnAIAccept を通じて報告してポップオーバーを閉じ、回答がない場合は何も報告しません。Discard はポップオーバーを閉じます。

イベント

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

アシスタントと Context

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

プロパティ

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

ポストするアクション

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

Output

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

インスタンスごとに 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 の構築を始めましょう。