GeniusResultContext: スコープ指定
GeniusResultContext API は、Genius 結果構成のコンテキストから検索クエリ情報を取得するためのメソッドを提供します。
この API で取得した検索クエリの詳細を使用して、 GeniusResultAnswer API で作成された Genius 結果回答オブジェクトに入力できます。
この API を sn_ais 名前空間識別子とともに Genius 結果のサーバー側スクリプトで使用します。Genius 結果のスクリプティングロジックの詳細については、「 新しい Genius 結果構成の作成」を参照してください。
GeniusResultContext:getMatchingDocuments()
Genius 結果構成をトリガーする検索クエリから検索結果ドキュメントを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| [アレイ] | オブジェクトのアレイ。各オブジェクトは、検索クエリに一致した検索結果ドキュメントを表します。 データタイプ:アレイ
注: 検索クエリによっては、リストされている名前と値のペアに加えて、検索結果ドキュメントの AI 検索 インデックスフィールドの一部がオブジェクトに表示される場合があります。 |
| [アレイ]..スコア | 検索クエリのコンテキストで検索結果ドキュメントに対して計算された関連性スコア。 データタイプ:数値 注: この名前と値のペアの名前は、 AI 検索 インデックスの スコア 共通フィールドと区別するためにピリオドで始まります。 |
| [アレイ]..テーブル | 検索結果ドキュメントのインデックス作成元の ServiceNow AI Platform テーブルの名前。 データタイプ:文字列 注: この名前と値のペアの名前は、 AI 検索 インデックスの テーブル 共通フィールドと区別するためにピリオドで始まります。 |
| [アレイ]..テキスト | 検索結果ドキュメントのインデックス付きテキスト。 データタイプ:文字列 注: この名前と値のペアの名前は、 AI 検索 インデックスの テキスト 共通フィールドと区別するためにピリオドで始まります。 |
| [アレイ]..タイトル | 検索結果ドキュメントのインデックス付きタイトル。 データタイプ:文字列 注: この名前と値のペアの名前は、 AI 検索 インデックスの タイトル 共通フィールドと区別するためにピリオドで始まります。 |
| [アレイ]..URL | 検索結果ドキュメントの URL。 データタイプ:文字列 注: この名前と値のペアの名前は、 AI 検索 インデックスの URL 共通フィールドと区別するためにピリオドで始まります。 |
| [アレイ].class_name | 検索結果ドキュメントが属する子クラス。テーブルの子クラスの詳細については、「 Table extension and classes」を参照してください。 データタイプ:文字列 |
| [アレイ].sys_id | 検索結果ドキュメントのSys_id。 データタイプ:文字列 |
| [アレイ].<field_name> | AI 検索 検索結果ドキュメントのインデックスフィールド。 データタイプ: AI 検索 インデックスフィールドのデータタイプ。 |
この AI Search response processor スクリプトは、検索クエリに一致する最大 3 つの検索結果ドキュメントを取得し、それらのいずれかがナレッジ [kb_knowledge] テーブルからのものであるかどうかを確認します。ナレッジテーブルから検索結果ドキュメントが見つかった場合、この関数はそのドキュメントのフィールドを GeniusResultAnswer オブジェクトに追加して、UI でユーザーに表示できるようにします。
function process(context) {
var answer = new sn_ais.GeniusResultAnswer();
var matchingDocuments = context.getMatchingDocuments();
if (matchingDocuments.length > 1) {
for (var i = 0; i < 3; i++) {
var currentDocument = matchingDocuments[i];
if (currentDocument['.table'] == 'kb_knowledge') {
var gr = new GlideRecord("kb_knowledge");
if (gr.get(currentDocument['sys_id'])) {
answer.addDataMap({
"number": currentDocument['number'],
"url": currentDocument['.url'],
"title": currentDocument['.title']
});
}
}
break;
}
}
return answer;
}
GeniusResultContext – getOriginalSearchPhrase()
Genius 結果構成をトリガーする検索クエリから元の検索用語を取得します。
取得した検索用語を使用して、 GeniusResultAnswer API メソッドを使用して Genius 結果回答を入力できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | 検索クエリの元の用語。 データタイプ:文字列 |
この AI Search request processor スクリプトは、検索クエリの元の用語を取得し、それらを新しいスニペット検索のクエリ用語として使用します。
function process(context) {
var answer = new sn_ais.GeniusResultAnswer();
var searchPhrase = context.getOriginalSearchPhrase();
answer.setSearchPhrase(searchPhrase);
answer.snippetSearch(true);
return answer;
}
GeniusResultContext – getPredictionResult()
Genius 結果構成 NLU トリガーする検索クエリのモデル予測結果を取得します。
このメソッドを Genius 結果構成の要求または応答プロセッサスクリプトで使用して、トリガー検索クエリに対して検出されたインテントを取得します。GeniusResultAnswer API メソッドを使用して、検出されたインテントの詳細を Genius 結果回答に入力できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| [アレイ] | 各オブジェクトが検索クエリの NLU モデルインテント予測結果を表すオブジェクトのアレイ。 データタイプ:アレイ |
| [アレイ].intentName | 検索クエリで検出された NLU モデルインテントの名前。 データタイプ:文字列 |
| [Array].result | 検索クエリの NLU モデルインテント予測結果を表すオブジェクト。 データタイプ: オブジェクト |
| [アレイ].result.application | 予測結果を生成した検索アプリケーションのメタデータを含むオブジェクト。 データタイプ: オブジェクト |
| [アレイ].result.application.language | 予測結果を生成した ServiceNow AI Platform アプリケーションの言語コンテキスト。 データタイプ:文字列 |
| [アレイ].result.application.type | 予測結果を生成した ServiceNow AI Platform アプリケーションのタイプ。 データタイプ:文字列 |
| [アレイ].result.result | NLUモデルインテント予測結果の詳細を含むオブジェクト。 データタイプ: オブジェクト |
| [アレイ].result.result.entities | 各オブジェクトが検索クエリで検出された NLU モデルインテントエンティティを表すオブジェクトのアレイ。 データタイプ:アレイ |
| [アレイ].result.result.entities.matchingSegments | 各オブジェクトが検出された NLU エンティティの一致するセグメントを表すオブジェクトのアレイ。 データタイプ:アレイ |
| [アレイ].result.result.entities.matchingSegments.directMatch | NLUエンティティ一致セグメントがエンティティ値の完全一致を表すかどうかを示すフラグ。 |
| [アレイ].result.result.entities.matchingSegments.meta | NLUエンティティ一致セグメントのメタデータを表すキーと値のペアフィールドを含むオブジェクト。 データタイプ: オブジェクト |
| [アレイ].result.result.entities.matchingSegments.value | NLUエンティティ一致セグメントの文字列値。 データタイプ:文字列 |
| [Array].result.result.entities.name | 検出された NLU エンティティの名前 ( エンティティ:[NLU_model].[インテント]。[entity_type] 形式。 データタイプ:文字列 |
| [Array].result.result.entities.parts | 各オブジェクトが予測結果で見つかった NLU エンティティ部分を表すオブジェクトのアレイ。 データタイプ:アレイ |
| [アレイ].result.result.entities.parts.meta | NLUエンティティパーツのメタデータを表すキーと値のペアのフィールドを含むオブジェクト。 データタイプ: オブジェクト |
| [アレイ].result.result.entities.parts.value | NLUエンティティパートの文字列値。 データタイプ:文字列 |
| [アレイ].result.result.entities.score | 検出された NLU エンティティの信頼性を示す 0 〜 1 の数値スコア。 データタイプ:数値 |
| [アレイ].result.result.entities.startingPosition | 検出された NLU エンティティが開始される検索クエリ内の文字位置の数値インデックス。 データタイプ:数値 |
| [アレイ].result.result.entities.value | 検索クエリで検出された NLU の文字列値。 データタイプ:文字列 |
| [アレイ].result.result.intentName | 検索クエリで検出された NLU モデルインテントの名前。 データタイプ:文字列 |
| [アレイ].result.result.intents | 各オブジェクトが、検索クエリで検出されたネストされた NLU モデルインテントを表すオブジェクトのアレイ。 ネストされたインテントオブジェクトには、親 NLU モデルインテントオブジェクトと同じパラメーター名とデータタイプが含まれます。 データタイプ:アレイ |
| [アレイ].result.result.nluModelName | 予測結果を生成した NLU モデルの名前。 データタイプ:文字列 |
| [アレイ].result.result.score | NLUモデル予測結果の信頼性を示す 0 〜 1 の数値スコア。 データタイプ:数値 |
| [アレイ].result.solutionLabel | 予測結果を生成した NLU モデルのラベル。 データタイプ:文字列 |
| [アレイ].result.solutionName | 予測結果を生成した NLU モデルの名前。 データタイプ:文字列 |
| [アレイ].result.solutionType | 予測結果を生成した NLU モデルのタイプ。 データタイプ:文字列 |
| [アレイ].result.type | 予測結果のタイプ。 データタイプ:文字列 |
| [アレイ].result.version | 予測結果を生成した NLU モデルのバージョン。 データタイプ:数値 |
| [アレイ].solutionName | 予測結果を生成した NLU モデルの名前。 データタイプ:文字列 |
この AI Search request processor スクリプトは、検索クエリに NLU モデル予測結果が含まれているかどうかを確認します。予測結果が見つかると、検出されたすべての catalogItem エンティティから一致するセグメントが検索用語として追加されます。
function process(context) {
var answer = new sn_ais.GeniusResultAnswer();
answer.setTable('sc_cat_item');
answer.setSearchLimit(2);
var predictionResult = context.getPredictionResult();
if (predictionResult && predictionResult.length == 1) {
var detail = predictionResult[0];
if (detail['result'] && detail['result']['entities']) {
var entities = detail['result']['entities'];
for (var i = 0; i < entities.length; i++) {
if (entities[i]['name'].endsWith('catalogItem')) {
var matchingSegments = entities[i]['matchingSegments'];
for (var j = 0; j < matchingSegments.length; j++)
answer.addSearchPhrases([matchingSegments[j]['value']]);
}
}
}
}
return answer;
}