AIAssistant

TsgcHTMLAIAssistant: 自然言語で入力された質問を、グリッド、データテーブル、ピボット、フォーム向けの検証済みの操作セットに、Delphi、C++ Builder、.NET で変換します。データセットには一切触れず、SQL を組み立てず、HTML も出力しません。

TsgcHTMLAIAssistant

非ビジュアルコンポーネントです。質問を、閉じた操作の集合に変換します。グリッドの場合はフィルター、並べ替え、グループ化、ハイライト、件数の上限、ピボットの場合は行、列、メジャー、集計で、データコンポーネントがそれらを自身の行に適用します。プロバイダーは省略可能で、組み込みのパーサーは API キーなしで応答します。

コンポーネントクラス

TsgcHTMLAIAssistant(ユニット sgcHTML_AI、非ビジュアル、TsgcComponent_Base

レンダリング内容

マークアップなし: 検証済みの操作を返し、データコンポーネントがそれをレンダリングします

ファミリー

チャット & AI

言語

Delphi, C++ Builder, .NET

作成し、割り当て、クエリを振り分ける

必要に応じて、ProviderAPIKeyModel でプロバイダーを設定します。アシスタントをデータコンポーネントの AIAssistant プロパティに割り当て、AIQueryEnabled を設定してクエリバーをレンダリングし、バーがポストするアクションを振り分けます。アシスタントを直接呼び出すこともできます。

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
}

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

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

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

プロバイダーには Enterprise または All-Access エディション、あるいは sgcAI パックの AI ユニットが必要で、それらは Windows 専用です。組み込みのパーサーは、プロバイダーなしですべてのプラットフォームで応答します。ユニットは SGC_HTML が定義されている場合にコンパイルされ、sgcVer.inc は Android と iOS についてはそれを定義しません。sgcHTML はスタンドアロンのパックで、sgcWebSockets とは別に販売されています。

割り当て先

AIAssistant は、TsgcHTMLComponent_GridTsgcHTMLComponent_DataTableTsgcHTMLComponent_PivotTableTsgcHTMLComponent_FormTsgcHTMLComponent_InlineAIPrompt にあります。AIQueryEnabled はグリッド、データテーブル、ピボットにあり、クエリバー、「解釈結果」チップ、クリアコントロールをレンダリングします。フォームには AIQueryEnabled がなく、アシスタントをスマートペーストに使い、InlineAIPrompt は回答に使います。アシスタントが割り当てられていない間、グリッドは AI 関連のマークアップを一切レンダリングしません。

マシンの外に出るデータ

グリッドまたはピボットの質問では、列名、キャプション、型、および列ごとに最大 3 つのサンプル値(それぞれ 40 文字に切り詰め)が送信されます。ゲートの設定にかかわらず、それ以外は送信されません。行が外に出るのは、行を対象とする呼び出しだけで、しかも AllowRowDataToProviderTrue の場合に限ります。既定ではそうなっていません。SuggestColumnValuesSummarizeFalse を返して何も送信せず、MaxRows は、それらが運べる行数の上限を決めます。スマートペーストは、人が貼り付けたテキストと、各フィールドの名前、ラベル、型を送信し、フォームの値は一切送信しません。

検証が境界になる

プロバイダーが返すものはすべて、悪意のあるテキストとして扱われます。すべての列名は、大文字と小文字を区別しない名前の完全一致で、ホワイトリストと一致しなければなりません。すべての演算子は TsgcHTMLAIOperator の 13 個のいずれかで、すべての集計は sum、count、avg、min、max のいずれかで、すべての値は列の型によって強制変換されます。強制変換できない値は、その操作全体が破棄されます。ハイライトのスタイルは、primary、secondary、success、danger、warning、info、light、dark のいずれかでなければなりません。件数の上限は MaxLimit に丸められ、フィルターは最大 32 個、並べ替えは最大 32 個、ハイライトは最大 32 個で、制御文字は除去され、未知のものはすべて黙って破棄されます。何も残らない場合は、説明を含めてセット全体がクリアされます。プロンプトインジェクションが生み出すのは、空または部分的なセットであり、例外が発生することはありません。

操作モデル

TsgcHTMLGridOpsFiltersSortsHighlightsGroupByLimitExplanation を保持します。TsgcHTMLPivotOpsRowsColumnsMeasureAggregateExplanation を保持します。TsgcHTMLAIColumns はホワイトリストで、列ごとに Add(aName, aDataType, aCaption) を呼び出し、サンプル値には AddSample を使います。どちらの操作クラスにも IsEmptyToTextToJSON があり、FromJSON は列を渡した場合にだけ完全な境界になるので、ブラウザーから読み戻したものはすべて、稼働中のホワイトリストに対して再検証してください。

プロバイダーを選ぶ

ProvideraiprOpenAI(既定値)、aiprAnthropicaiprGeminiaiprDeepSeekaiprOllamaaiprGrokaiprMistral のいずれかで、TsgcAIChatProvidersgcAI_Chat 内)にある 7 つです。APIKey または BaseUrl を設定すると、アシスタントは TsgcAI_Chat を所有し、これは ProviderAPIKeyModel(空の場合はチャットの既定値を使用)、BaseUrl から構成されます。あるいは、独自のチャットコンポーネントを、AI ユニットがコンパイルされている環境でのみ宣言される Chat に割り当てます。各呼び出しでは JSON スキーマに従う構造化出力を要求し、チャットは呼び出し後に元の状態に戻されます。HasProvider は、どちらの場合かを示します。

ルールベースのフォールバック

プロバイダーがない場合、アシスタントは独自のパーサーで応答します。UseRuleBasedFallback(既定でオン)を使うと、プロバイダーの呼び出しが失敗した場合にもそのパーサーで応答します。パーサーは、列 演算子 値の形式の句を、and またはカンマでつないだものに加えて、sort by、group by、top N、between A and B、highlight を読み取り、ピボットの場合は行、列、集計を読み取ります。各演算子について一般的な英語の表記を受け付け、小数点の区切りはどちらの形式でも受け付けます。理解できない質問は操作を生成せず、ページの行はそのまま維持されます。SuggestColumnValuesSummarize にはフォールバックがありません。

フォーム向けの SmartPaste

SmartPaste(aText, aFields, aValues) は、貼り付けられたテキストをフィールドの集合に割り当てます。SmartPasteEnabledTsgcHTMLComponent_Form に設定すると貼り付けゾーンがレンダリングされ、ProcessSmartPaste(aText) はテキストをアシスタントに渡し、返された内容を名前でフィールドに書き込み、ラベルに小さなバッジを付けて AI が入力したことを示します。ルールベースのパーサーはプロバイダーなしで応答し、改行はサーバーに届くまで保持されます。

列アシスタント

SuggestColumnValues(aPrompt, aRows, aValues) は、グリッドの列アシスタントを駆動します。AIModeacOff ではない列は、提案コントロールをレンダリングします。ProcessAIColumnValues(aColumnName) は、表示されている行ごとに 1 つの値を 1 回の呼び出しで要求し、回答は Accept と Reject のコントロールを持つ AIProposals になります。ライブラリは何も書き込みません。承認された提案は OnAIColumnValues を発生させ、アプリケーションがそれを永続化します。この呼び出しは行を送信するため、プロバイダーと、オンにした AllowRowDataToProvider が必要です。

回答の設定とイベント

Language は自由記述テキストの言語を設定し、空の場合はリクエストのロケールを意味します。CacheMinutes(5)は、同一の列セットに対する同一の質問にキャッシュから応答し、ClearCache はキャッシュを空にします。MaxLimit(1000)は 1000 を超えて引き上げることはできません。OnBeforeQuery(Sender, aPrompt, aAllow) は、プロバイダーの呼び出しごとにその前にプロンプト全体を確認でき、aAllowFalse に設定すると呼び出しをブロックします。どのメソッドも例外を発生させません。プロバイダーの失敗は OnAIError(Sender, E, aHandled) に届きます。

ホストの契約

HTTP のルートはありません。各コントロールは data-sgc-ws-send フォームで、アプリケーションは action で振り分けます: gridAIQuerygridAICleargridAIColumngridAIAcceptgridAIRejectpivotAIQuerypivotAIClearformSmartPaste、およびインラインプロンプトの 4 つのアクションです。再レンダリングしたコンポーネントを、アウトオブバンドのフラグメントとして返します。1 セットのコンポーネントは 1 人のユーザーに対応するため、セッションごとにキーを付け、アクションが行う処理の認可はサーバー側で維持してください。

さらに詳しく

オンラインヘルプこのコンポーネントの完全な 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 の構築を始めましょう。