InlineAIPrompt
TsgcHTMLComponent_InlineAIPrompt: ユーザーが作業している場所、つまりメモ、リッチエディター、グリッド列のヘッダーの横でアシスタントに問い合わせるポップオーバーを、Delphi、C++ Builder、.NET で提供します。何を残すかは人が決めます。
TsgcHTMLComponent_InlineAIPrompt: ユーザーが作業している場所、つまりメモ、リッチエディター、グリッド列のヘッダーの横でアシスタントに問い合わせるポップオーバーを、Delphi、C++ Builder、.NET で提供します。何を残すかは人が決めます。
人が判断に加わる(human in the loop)コントロールです。プロンプトはポップオーバーに入力され、回答もその中に表示され、Accept を押したときにだけ、OnAIAccept を通じてアプリケーションに回答が報告されます。コンポーネントがデータセット、フィールド、ページに書き込むことはありません。回答は AIAssistant プロパティ(TsgcHTMLAIAssistant)を通じて得られます。
TsgcHTMLComponent_InlineAIPrompt(ユニット sgcHTML_Component_InlineAIPrompt)
トリガーボタンと、プロンプトボックス、回答、Accept、Discard を備えたポップオーバーカード
Delphi, C++ Builder, .NET
ポップオーバーに 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);
最もよく使うメンバーです。
プロンプトはポップオーバーに入力され、回答もその中に表示され、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 は画面に表示されていた回答です。
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 が増えた状態で再レンダリングします。
トリガーは常にレンダリングされます。IsOpen がオンの場合は、その横にカードがレンダリングされ、タイトル、プロンプトボックス、問い合わせボタンが含まれ、回答があれば、回答と Accept、Discard のコントロールも含まれます。テキストはローカライズされた文字列 AIAsk、AIAccept、AIDiscard から取得されます。
コンポーネントは、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 ライセンス。 | 開く |