SQLダイアログ・スキル

SQLダイアログは、ユーザーの自然言語発話をSQL問合せに変換し、問合せをバックエンド・データ・ソースに送信し、レスポンスを表示できるスキルです。このバージョンのSQLダイアログでは、Oracle Enterprise Database ServiceなどのOracleデータベース・サービスとの統合がサポートされています。

ノート

このバージョンは、プライマリ言語が英語ではない複数言語のSQLダイアログ・スキルまたはスキルをサポートしていません。新しいスキル(またはスキルのバージョンまたはクローン)を作成する場合、「作成」ダイアログの「プライマリ言語」フィールドを使用してプライマリ言語を指定します。たとえば、リソース・バンドル、サンプル発話、機械学習および値リストに複数の言語がある場合や、ダイアログ・フローにユーザー入力の言語を検出してバックグラウンドで翻訳するコードが含まれている場合、スキルは多言語です。

エンド・ユーザーにデータベース情報を提供するスキルを記述する場合、開発者は通常、ユース・ケースを定義し、データを取得するためのカスタム・コンポーネントを記述し、ユース・ケースのインテントを作成し、ユーザー発話をインテントにマップし、すべてのインテントを処理するためのダイアログ・フローを記述する必要があります。SQLダイアログのスキルでは、これらのステップを実行する必要はありません。かわりに、ユーザーのデータの精神モデルを物理データ・ソースにマップし、スキルはマップを使用して自然言語発話からSQLを動的に生成します。

たとえば、従業員はさまざまな勤務地の部門に属し、従業員ID、職務名、採用日、およびコミッションがあるとわかっている場合があります。彼らのメンタルモデルを考えると、スキル「ジェームズ・スミスの仕事は何ですか?」「ジェームズ・スミスはいつ採用されましたか?」「ニューヨークにいる従業員は何人ですか?」「誰が最高のコミッションを持っていますか?」を尋ねることで、データを取得できます。

SQLダイアログ・スキルは、通常のスキルとは異なります。スキルが自然言語の発話を理解して応答できるようにするには、物理モデルから論理モデルを作成し、自然言語の用語を使用して物理モデルを記述してそのモデルを教えます。

SQLダイアログの動作

SQLダイアログ・スキルを実装するには、ビジュアル・ダイアログ・スキルを作成し、データ・サービスから物理モデル(データベース・スキーマ)に関する情報をインポートします。Oracle Digital Assistantでは、この情報を使用して、インポートした表(論理モデル)ごとに問合せエンティティを作成します。問合せエンティティには、表の列をモデル化する属性が含まれます。

物理モデルの表に外部キーがある場合、問合せエンティティには、関連する問合せエンティティにリンクする属性があります。たとえば、Emp表にDept表に対する外部キーがある場合、Emp問合せエンティティには、Deptエンティティにリンクするdept属性があります。

問合せエンティティを作成して主キーを識別するとすぐに、スキルをトレーニングでき、基礎的な方法で使用できます。つまり、フリー・フォームの発話を使用できますが、今のところ、問合せでは、物理モデルの名前(正規名)から最初に導出された正確なエンティティおよび属性のプライマリ名を使用する必要があります。これは、自然言語をより詳細に反映するように論理モデルを拡張すると変化します。

エンド・ユーザーが自然言語を使用してデータについて質問できるようにするには、プライマリ名を変更し、問合せエンティティとその属性の両方にシノニムを追加して、エンド・ユーザーの用語を物理モデルにマップします。たとえば、Emp表のプライマリ名をemployeeに変更し、staffメンバー・シノニムを追加できます。プライマリ名とシノニムの追加は、発話をOracle Mean Representation Query Language (OMRQL)問合せに解決するために自然言語パーサー(NLP)をトレーニングする方法の2つです。OMRQL問合せはSQL問合せに似ていますが、オブジェクト・モデル(問合せエンティティ)の正規名に基づいています。たとえば、empnoのプライマリ名を従業員番号に変更すると、Joe Smithの従業員番号がSELECT empno FROM emp WHERE ename = 'Joe Smith'に変換されます。

自然言語プロセッサ(NLP)の解決をさらに改善するために、属性と値リストを関連付けることもできます。値リストには、作成時にデータ・サービスから自動的に移入されます。

たとえば、データ・サービスからEmp表およびDept表をインポートすると、EmpおよびDept問合せエンティティになります。表をインポートしてスキルをトレーニングした直後に、次のような発話を使用して問合せエンティティを問い合せることができます:

Show all Emp in dept 10

エンティティおよび属性のプライマリ名をより自然言語の用語(エンティティの場合はEmployees、属性の場合はdepartmentなど)に変更した後、次のような発話を使用できます。

Show all the employees in department 10

シノニムをさらに追加して、個人がエンティティまたは属性を参照するすべての方法をモデル化できます。たとえば、NLPがこの発話を認識するように、departmentにシノニムdistrictおよびterritoryを追加できます。

Show all employees in district 10

より複雑な発話では、発話と特定のOMRQL文を関連付けるカスタム・トレーニング・データを追加することで、OMRQLへの問合せの解決方法をスキルに教えることができます。

スキルに非SQLユース・ケースを処理するインテントがある場合、またはDAに含まれている場合は、SQL関連の発話と非SQL関連の発話をスキルが区別できるように、問合せエンティティ・データセットにルーティング発話を追加する必要があります。

スキルが問合せ結果を出力すると、結果が正しくなるかどうかを示すために、ユーザーは親指を上げるか下げるかを指定できます。インサイト・ページには、サムズ・アップ(正しい問合せ)およびサムズ・ダウン(不正な問合せ)の数が表示されるため、スキルのパフォーマンスを確認できます。

サポートされる問合せ

SQLダイアログの自然言語処理モデルでは、基本的なSQL句(SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BYおよびLIMIT)に変換する問合せがサポートされています。

問合せには、最大3つの異なるエンティティを含めることができます。つまり、最大2つの結合を持つことができます。3つの結合を含む問合せは、ユースケースに応じて正しい結果に解決される場合があります。4つ以上の結合の場合、スキルで正しい結果が得られるようにカスタム・トレーニング・データを追加する必要があります。

SQLダイアログでは、副問合せおよびSET演算子(INTERSECT、UNION、EXCEPTおよびNONE)を含む複雑な問合せはサポートされません。また、英語以外のクエリー、はいまたはいいえの応答を要求するクエリー、代名詞を含むクエリー、およびフォローアップクエリーはサポートしていません。これらおよびその他のSQLダイアログの問合せ制限について学習するには、「SQL問合せのトラブルシューティング」を参照してください。

サポートされていない問合せの中には、データベース・ビューを使用するか、「カスタム属性の追加」の説明に従って仮想属性を作成することで、問題を解決できるものがあります。

SQLダイアログでサポートされる問合せのタイプを説明する表を次に示します。次のデータベース値が使用されます。

従業員表

employee_id 名前 ロール Salary department_id
1 Alex Smith 副社長 500000 1
2 Samyra Kent 販売員 60000 1
3 Laticia Fan 販売員 80000 1

部門表

department_id 名前 ロケーション
1 Sales Dallas

SQLダイアログでサポートされる問合せのタイプは次のとおりです。

カテゴリ 説明 サンプル
表示する

エンティティ、属性および属性集計をリクエストできます。

サポートされている集計は、平均、合計、最小、最大、count(属性)、count(列)、count(個別属性)です

問合せに属性の名前が指定されていない場合、スキルのエンティティの「プレゼンテーション」タブに「デフォルト属性」にリストされている属性がスキルに表示されます。

  • すべての従業員の表示
  • 従業員の名前、給与および部門名
  • 従業員が持つことができる一意のジョブは何ですか。
  • 従業員数
  • すべての従業員の最高給与を返します
フィルタ

特定の属性の条件によって表の行をフィルタできます。

テキスト属性は、値と等しい、値を含む、または値の先頭または末尾にすることができます。

異なるコンパレータを使用して、数値列および日時列(= 、<、<= 、>、>=)をフィルタできます。

ANDとORを使用して、複数の条件を組み合せます。

  • 役職が事務員である従業員の名前の表示
  • すべての事務員の給与を返す
  • 名前がJoで始まる従業員
  • 2020年に入社し、7000を上回る従業員を表示
日付を含むフィルタ

日付または日時属性でフィルタリングする場合は、次の点を考慮してください。

  • 日時属性の場合、値には日時(2020年12月10日の午後3時)を含める必要があります。
  • 値は絶対値(2020年12月10日)または相対値(今日)です。
  • フィルタには、「前年」や「1月5日から7月5日」などの間隔を指定でき、日付や日付を時間とともに指定できます。
  • 「一般情報」タブの属性の「一時プリファレンス」設定を使用して、「水曜日」などのあいまいな値を、最も近い日付、過去または将来の日付にデフォルト設定するかどうかを設定します。
  • 「2日」など、日付に強制変換する必要がある期間値がサポートされます。
  • 絶対的な例: 2020年12月10日に採用された従業員は誰ですか
  • 相対間隔の例: 昨年採用された従業員
  • 相対日付の例: 本日採用された従業員
  • 日付と時刻の例: 昨日午後6時に配送されたパッケージ
  • 日付と時間間隔の例: 1月7日の午後5時から2月10日の午前5時の間に配信されたパッケージ
  • あいまいな日付の例: 水曜日に採用された従業員は誰ですか
  • 期間例: 1か月から採用された従業員
行数の順序付けおよび制限 スキルが結果の行を特定の属性でソートするように明示的にリクエストできます。属性またはエンティティの最大値または最小値の特定の数を要求することもできます。
  • 従業員を部門名でソートして表示します
  • 名前順の従業員(ZからA)
  • すべての従業員の名前と給与を給与の降順で返します
  • すべての従業員の10の最高給与は何ですか?
  • 給与が最も低い従業員
  • 上位5人の従業員を表示
グループ基準 属性またはエンティティでグループ化した後、異なる集計をリクエストできます。
  • 各職務の平均給与
  • 部門ごとの最高給与はいくらですか?
  • 部門ごとの名前、場所および従業員数を表示
グループ化およびフィルタ 集計に基づいて属性またはエンティティをフィルタ処理できます。
  • 平均給与が3000を超えるすべてのジョブを表示します
  • 最低給与が4000の部門
  • 従業員が20人以上いる部門は?
オプションの制限付きでグループ化および順序 集計に基づいて属性またはエンティティをソートしたり、オプションで上下の行数を表示するようにリクエストできます。
  • すべてのジョブを、そのジョブで従業員に支払われた最高給与でソートして表示します
  • 平均給与が最も低い部門はどれですか。
  • 従業員数が3つ高い部門の名前を表示

チュートリアル: SQLダイアログの開始

次のチュートリアルに従って、SQLダイアログを実際に確認できます。

SQLダイアログのスタート・ガイド

SQLダイアログ・ワークフロー

SQLダイアログ・スキルの構築方法は、通常のスキルとは異なります。ここでは、SQLダイアログ・スキルを構築し、それをトレーニングして、ユーザーが自然言語を使用してデータ・サービスを問い合せることができるようにするための主なステップを示します。

次のステップの参加者は、スキル開発者、サービス管理者、データベース・エキスパートおよびAIトレーナです。

  • スキル開発者は、スキル要件(ユーザー・ペルソナ、ユース・ケースおよびタスク)およびトレーニング・コーパス(ユーザー発話のサンプル)を収集し、スキルを作成します。開発者は、結果の表示方法の定義にも役立ちます。この人は会話デザイナーと呼ばれることもあります。

  • サービス管理者は、データ・サービスに接続を追加します。

  • データベース・エキスパートは、スキル要件およびトレーニング・コーパスを分析して、回答を提供する表および属性を識別します。エキスパートは、物理モデルからスキルに情報をインポートして、基本論理モデルを作成します。エキスパートは、SQL式ベースの属性の追加、表からアップロードされた値リストへの属性の関連付け、規制式への属性の関連付け、カスタム・トレーニングの実行などのタスクをスキル開発者およびAIトレーナにも支援します。

  • AIトレーナは、自然言語パーサー(NLP)に自然言語発話を理解する方法を教えるために、プライマリ名とシノニムを追加します。スキルがOMRQLに変換できない発話の場合、AIトレーナは、これらの発話を理解する方法を自然言語パーサーに教えるためのカスタム・トレーニングを追加します。トレーナーは、自然言語をデータベース問合せに変換する精度を高めるために、スキルを継続的に監視およびテストします。

ワークフローの説明に役立つように、次の表とともに買掛金データ・サービスの例を使用します。簡潔にするために、このトピックで説明する列のみを表示します。

請求書
  • invoice_num
  • invoice_date
  • pmt_status_flag
  • invoice_amount
  • 仕入先
payment_schedules
  • invoice_num
  • due_date
  • amount_remaining
サプライヤ
  • vendor_num
  • vendor_name
  1. 要件の定義:スキル開発者は、SQLダイアログ・スキルがサポートすると予想されるユースケースおよびタスクを収集します。たとえば、買掛管理部門には次のユースケースがあります。

    • ユースケース: 支払 30日以内に未回収残高があるすべての請求書を、ペナルティを回避できるように支払います。

      • タスク:期限が30日以内の未承認の請求書をすべて検索して、時間内に承認できるようにします。

      • タスク:期限が30日以内の未回収の承認済請求書をすべて検索し、支払をスケジュールできるようにします。

    この要件フェーズの一環として、スキル開発者は、この情報を要求する様々な方法の代表的なリストをコンパイルします。このリストは、AIトレーナがトレーニング・コーパスに使用する発話例のセットとして機能します。

  2. スキルの設定: サービス管理者、スキル開発者およびデータベース・エキスパートが連携して基本スキルを設定します。

    1. サービスとの統合: サービス管理者は、Oracle Digital Assistantからデータ・サービスへの接続を作成します。データ・サービスへの接続を参照してください。

    2. SQLダイアログ・スキルの作成: スキル開発者は、「スキルの作成」ダイアログでダイアログ・モードが「ビジュアル」に設定されていることを確認して、SQLダイアログ・スキルを作成します。「SQLダイアログ・スキルの作成」を参照してください。

    3. スキーマのインポート: データベース・エキスパートは、ユースケースをサポートするために必要な表およびフィールドを識別し、スキルの「エンティティ」ページから、「データ・サービスをモデル化する問合せエンティティの作成」の説明に従って、それらをデータ・サービスからインポートします。これにより、インポートされた表ごとに問合せエンティティを含む基本論理モデルが作成されます。

      この例では、データベース・エキスパートはinvoicespayment_schedulesおよびvendorsの各表をインポートします。

      この時点で、スキルは限られた機能で使用できるようになります。基本論理モデルの場合、エンティティ名と属性名は物理モデルの表名とフィールド名から導出されます。たとえば、表名がpayment_schedulesの場合、プライマリ名はpayment schedulesです。AIトレーナは、「エンティティ」ページから問合せをテストするか、会話テスター(「プレビュー」)を使用してSQL機能を試すことができます。

      データ・サービスの例では、「支払ステータス・フラグNの請求書の表示」、「請求書番号17445の表示」、「支払スケジュールの期日が2022-08-30より前であることを示す」などのテスト発話を使用できます。

  3. トレーニング: OMRQLにマップされたプライマリ名、シノニム、値リスト、正規表現および自然言語問合せを介してトレーニング・データを追加します。

    1. 自然言語用語の追加:自然言語フレーズを基礎となるデータ構造に関連付けるために、AIトレーナは、エンド・ユーザーがエンティティおよび属性を参照する様々な方法をスキルに教えます。つまり、人々が自然言語の発話で使用する名前です。トレーナは、スキル開発者が収集したフレーズを分析して、スキルで処理する必要がある発話(トレーニング・コーパス)を識別します。また、同義語についてはシソーラスを参照し、類似語についてはクラウド・ソースを参照できます。次に、AIトレーナは、プライマリ名を変更し、シノニムを追加することで、同等の用語を記録します。名前とシノニムによるトレーニング・データの提供を参照してください。

      この例では、要件フェーズで収集された発話の1つが「未回収残高がゼロより大きい請求書のリストを私に与えてください」です。バランスを含む属性はamount remainingであるため、AIトレーナはシノニムoutstanding balanceをその属性に追加します。

    2. 値リストとの関連付け:正確性を高めるために、AIトレーナは、必要に応じて、データ・サービスからのサンプル値を含む値リストを作成できます。スキルは、リストをそれぞれの属性と自動的に関連付けます。これは、自然言語パーサーがそれらの属性が保持できる値の種類を理解するのに役立ちます。値リストを使用したトレーニング・データの提供を参照してください。

      この例では、vendor_name属性をデータ・サービスから取得した値リストに関連付けます。値リストに「Seven Corporation」が含まれ、ユーザーが「show summary flag for Seven Corporation」と尋ねた場合、NLPは「Seven Corporation」がベンダー名であると推測します。

    3. 正規表現との関連付け:属性の値が特定のパターンと一致する必要がある場合、AIトレーナは正規表現エンティティを作成して、その属性に関連付けることができます。正規表現を使用したトレーニング・データの指定を参照してください。

      たとえば、AIトレーナは、ip_address属性を正規表現(\\d{1,2}|(0|1)\\d{2}|2[0-4]\\d|25[0-5])に関連付けることができます。

    4. 複合問合せのマップ:スキルが有効な発話をOMRQLに変換できない場合、AIトレーナは、その発話をトレーニング・データに追加し、「発話によるトレーニング・データの提供」の説明に従ってOMRQLにマップします。たとえば、「未払請求書の表示」をSELECT * payment_schedules WHERE payment_status_flag = 'Y'にマップできます。

    5. オートコンプリートの提案の指定:論理モデルが応答できる内容をユーザーが学習できるように、「SQLダイアログ・ユーザーの問合せ提案の指定」の説明に従って発話例を追加します。

    6. ルーティング・データの提供: SQLダイアログ・スキルにインテントがある場合、またはインテントがDAにある場合は、スキルがデータベース問合せを区別できるように発話を追加する必要があります。SQLダイアログの会話への発話のルーティングを参照してください。

    7. NLPモデルのトレーニング:トレーニング・データをNLPモデルに組み込むには、スキル開発者またはAIトレーナ「トレーニング」アイコンをクリックし、「送信」をクリックします。

  4. 情報の表示方法の構成: データベース・エキスパートスキル開発者が連携して、各エンティティの結果の表示方法を微調整します(エンティティおよび属性のプレゼンテーションの構成を参照)。たとえば、エンティティのデフォルトのソート順序の設定、フォームまたは表として表示、出力に含める最小属性の設定、結果へのボタンおよびリンクの追加、導出データまたは計算済データを表示する属性の追加などができます。

    この例では、請求書エンティティのデフォルトのソート順序と最小属性の両方をinvoice_numに設定し、デフォルト属性をinvoice_numinvoice_datepmt_status_flagおよびinvoice_amountに設定できます。また、今日の日付と請求書日付の差異を使用して計算されるage属性を追加することもできます。

  5. 問合せルールの構成: データベース・エキスパートAIトレーナが連携して問合せルールを設定します。たとえば、部分一致を使用するタイミングや、比較する属性を指定せずに行を比較するように要求するタイミングを測定するために使用する属性などです。「問合せルールの定義」を参照してください。

    この例では、エンド・ユーザーが最も多い10件の支払を要求すると想定しているため、比較にdue_dateを使用するようにpayment schedulesエンティティを構成し、その属性の比較を反転して、以前の日付が後の日付より上位にランク付けされるようにします。

  6. テストおよび修復: AIトレーナは、「エンティティ」ページの問合せテスターを使用して、テスト発話が目的のOMRQLに解決され、スキルがOMRQLを実行可能なSQLに変換できることを確認します。問合せテスターがOMRQLをSQLに変換できない場合は、トレーニング・データをリクエストします。多くの場合、これを解決するには、発話をトレーニング・データに追加し、OMRQL文に関連付けます。Test and Repairを参照してください。

  7. モニターと改善:スキルがベータ・テスト・フェーズに入った後、AIトレーナースキル開発者、プロジェクト・マネージャおよび利害関係者は、バッチ・テストおよびインサイト・データを継続的に監視して、スキルのパフォーマンスを確認し、改善すべき領域を特定できます。モニターおよび改善を参照してください。

データ・サービスへの接続

SQLダイアログ・スキルからデータ・サービスにアクセスするには、Oracle Digital Assistantがデータ・サービスにアクセスできるようにするデータ・サービス統合を追加する必要があります。データ・サービスごとに1つの統合のみが必要です。

統合は、Oracle Database Cloud Service Enterprise Edition 12cおよび19c Oracle Autonomous Transaction ProcessingおよびMySQL HeatWave Database ServiceとMySQLバージョン8でテストされています。

ノート

サービスを作成した後は変更できません。パスワードを変更した場合は、データ・サービス統合を削除して再作成する必要があります。

Oracleデータ・サービス

Oracleデータベースに接続するには、次のステップを実行します。

  1. デジタル・アシスタントで、サイド・メニュー・アイコンをクリックしてサイド・メニューを開き、「設定」「追加サービス」「データ」タブをクリックします。

  2. 「+サービスの追加」をクリックします

  3. 「新規データ・サービス」ダイアログで、次の基本情報を指定します:

    フィールド名 説明
    データベース・タイプ 「Oracle」を選択します。
    名前 サービスの一意の名前。
    データ・サービスの説明 データベースの説明や目的など、データ・サービス統合のオプションの説明。
    ユーザー名 「データ・サービスをモデル化するための問合せエンティティの作成」の説明に従って、スキル開発者がSQLダイアログ・スキルのコンポジット・エンティティを作成するために必要な表へのアクセス権を付与するユーザー名とパスワードをデータベース管理者に問い合せてください。
    パスワード ユーザーのパスワード。Oracle Digital Assistantの統合では、パスワードは14文字以上30文字以下である必要があり、大文字、小文字および数字を少なくとも1つ含める必要があります。数字から始めることもできない。
  4. データ・サービスがロールベースのアクセス用に構成されている場合、「続行」をクリックしてエンドユーザー認証を構成します。このページのフィールドの説明を次に示します。

    フィールド名 説明
    エンドユーザー認証は必須です データ・サービスがロールベースのアクセス用に構成されている場合は、このオプションを選択します。
    認証サービス

    「設定」→「認証サービス」で構成した認証サービスを選択します。

    エンドユーザー識別子 エンドユーザーIDのタイプを選択します。
    カスタム式

    選択したエンド・ユーザー識別子タイプがカスタムの場合は、エンド・ユーザー識別子を表すユーザー・プロファイル変数にFreeMarker式を入力します。

    詳細および例は、OICDプロファイル要求の式を参照してください。

  5. 「続行」をクリックして、接続詳細を追加します。

  6. 「接続の詳細」ページで、接続タイプの「基本」または「クラウドWallet接続」を選択します。

    • 単一ノード・データベースおよびRAC対応データベースの場合、「基本」を選択する必要があります。
    • ATPデータベースに接続する場合は、「Cloud Wallet Connection」を選択する必要があります。
  7. 接続タイプが「基本」の場合は、次の値を入力します。この値はデータベース管理者から取得できます:

    フィールド名 説明
    TLS TLS (Transport Layer Security)を使用して接続を保護する場合は、このスイッチをON位置に移動します。
    ノート

    プライベートCA証明書を使用してデータベースに接続している場合は、このオプションをオンにする必要があります。
    ホスト名

    データサービスのホストを入力します。https://接頭辞は省略します。例: example.com

    ポート番号 データベースへのクライアント接続を許可するポート。
    サービス識別子

    次のいずれかを行います。

    • 「SID」を選択し、データベース・インスタンスのOracleシステム識別子を入力します。

    • 「サービス名」を選択し、データベースのサービス名を入力します。

    プライベート・エンドポイント このオプションは、デジタル・アシスタント・インスタンスでプライベート・エンドポイントが構成されている場合にのみ表示されます。

    プライベート・エンドポイントに接続してサービスにアクセスする場合は、「プライベート・エンドポイント」トグルを「ON」位置に切り替え、インスタンスに関連付けられているプライベート・エンドポイントのリストから選択します。

    (プライベート・エンドポイントを使用すると、パブリック・インターネットから直接アクセスできないサービスにアクセスできます。詳細は、「プライベート・エンドポイント」を参照してください。)

  8. 接続タイプが「クラウドWallet接続」の場合は、次の値を入力します。この値はデータベース管理者から取得できます:

    フィールド名 説明
    Walletファイル クライアント資格証明を含むCloud Walletファイルを見つけて選択するか、フィールドにドラッグ・アンド・ドロップします。
    Walletパスワード ウォレット・ファイルのダウンロード時に指定したパスワードを入力します。Oracle Digital Assistantの統合では、ウォレット・パスワードは15文字以上30文字以下である必要があり、大文字、小文字、特殊文字および数字を少なくとも1つ含める必要があります。数字から始めることもできない。
    サービス データベース・サービスの名前を選択します。クエリーが30秒(その時点でタイムアウト)を超えないように、サービスの同時実行性が十分に高いサービスを選択してください。接尾辞が_tpおよび_tpurgentのサービス名は、通常、ここで最も適しています。これらの考慮事項の詳細は、Autonomous Databaseのデータベース・サービス名およびサービス同時実行性を参照してください。
    プライベート・エンドポイント このオプションは、デジタル・アシスタント・インスタンスでプライベート・エンドポイントが構成されている場合にのみ表示されます。

    プライベート・エンドポイントに接続してサービスにアクセスする場合は、「プライベート・エンドポイント」トグルを「ON」位置に切り替え、インスタンスに関連付けられているプライベート・エンドポイントのリストから選択します。

    (プライベート・エンドポイントを使用すると、パブリック・インターネットから直接アクセスできないサービスにアクセスできます。詳細は、「プライベート・エンドポイント」を参照してください。)

  9. 「拡張プロパティ」ページで、データベースに接続するためにプライベートCA証明書が必要な場合は、「プライベート信頼の使用」トグルをONの位置に切り替え、残りの必須フィールドに入力します。
    フィールド名 説明
    プライベート・トラストの使用 プライベートCA証明書を使用してデータベースに接続している場合は、このトグルをON位置に切り替えます。このスイッチは、「接続の詳細」ページで「TLSの使用」を選択した場合にのみ有効になります。
    証明書リソース 「自己管理」を選択します。
    PEMファイルの選択およびPEMテキストの貼付け 証明書を指定するために、次のいずれかのオプションを選択します。
  10. 「サービスの追加」をクリックします

    データベース・スキーマをスキルにインポートして問合せエンティティを作成できるようになりました。これにより、ユーザーは自然言語を使用してデータベースを問い合せることができます。

OICDプロファイル要求の式

ロールベースのアクセスを持つデータ・サービスへの接続があり、ユーザー識別子タイプとして「カスタム」を選択した場合は、標準またはカスタムのOpenID Connect (OIDC)要求として、エンド・ユーザー識別子を表すユーザー・プロファイル変数にFreeMarker式を指定する必要があります。いくつかの例を示します。

  • ${userProfile.MyAuthService1.value.sub}
  • ${userProfile.MyAuthService1.value["http://acme.com/custom_identifier"]}

OIDCでのプロファイル要求の動作および要求の例の詳細は、次のリソースを参照してください。

MySQLデータ・サービス

  1. デジタル・アシスタントで、サイド・メニュー・アイコンをクリックしてサイド・メニューを開き、「設定」「追加サービス」「データ」タブをクリックします。

  2. 「+サービスの追加」をクリックします

  3. 「新規データ・サービス」ダイアログで、次の基本情報を指定します:

    フィールド名 説明
    データベース・タイプ MySQLを選択します。
    名前 サービスの一意の名前。
    データ・サービスの説明 データベースの説明や目的など、データ・サービス統合のオプションの説明。
    認証タイプ データベース管理者は、「デフォルト」「Kerberos」または「OS」を選択するかどうかを通知します。
    ユーザー名 「データ・サービスをモデル化するための問合せエンティティの作成」の説明に従って、スキル開発者がSQLダイアログ・スキルのコンポジット・エンティティを作成するために必要な表へのアクセス権を付与するユーザー名とパスワードをデータベース管理者に問い合せてください。
    パスワード ユーザーのパスワード。Oracle Digital Assistantの統合では、パスワードは14文字以上30文字以下である必要があり、大文字、小文字および数字を少なくとも1つ含める必要があります。数字から始めることもできない。
  4. 「続行」をクリックして、この表にリストされている接続詳細を構成します:

    フィールド名 説明
    TLS TLS (Transport Layer Security)を使用して接続を保護する場合は、このスイッチをON位置に移動します。
    ノート

    プライベートCA証明書を使用してデータベースに接続している場合は、このオプションをオンにする必要があります。
    ホスト名

    データサービスのホストを入力します。https://接頭辞は省略します。例: example.com

    ポート データベースへのクライアント接続を許可するポート。
    データベース

    データベースの名前

    プライベート・エンドポイント このオプションは、デジタル・アシスタント・インスタンスでプライベート・エンドポイントが構成されている場合にのみ表示されます。

    プライベート・エンドポイントに接続してサービスにアクセスする場合は、「プライベート・エンドポイント」トグルを「ON」位置に切り替え、インスタンスに関連付けられているプライベート・エンドポイントのリストから選択します。

    (プライベート・エンドポイントを使用すると、パブリック・インターネットから直接アクセスできないサービスにアクセスできます。詳細は、「プライベート・エンドポイント」を参照してください。)

  5. 「拡張プロパティ」ページで、データベースに接続するためにプライベートCA証明書が必要な場合は、「プライベート信頼の使用」トグルをONの位置に切り替え、残りの必須フィールドに入力します。
    フィールド名 説明
    プライベート・トラストの使用 プライベートCA証明書を使用してデータベースに接続している場合は、このトグルをON位置に切り替えます。このスイッチは、「接続の詳細」ページで「TLSの使用」を選択した場合にのみ有効になります。
    証明書リソース 「自己管理」を選択します。
    PEMファイルの選択およびPEMテキストの貼付け 証明書を指定するために、次のいずれかのオプションを選択します。
  6. 「サービスの追加」をクリックします

    データベース・スキーマをスキルにインポートして問合せエンティティを作成できるようになりました。これにより、ユーザーは自然言語を使用してデータベースを問い合せることができます。

SQLダイアログ・スキルの作成

SQLダイアログ・スキルを作成するには、「ダイアログ・モード」「ビジュアル」に設定したスキルを作成します。

データ・サービスをモデル化する問合せエンティティの作成

SQLダイアログ・スキルでデータ・サービス問合せを有効にするには、データ・サービスの物理モデル(表またはビューとその列)に関する情報をインポートして、基本論理モデルを作成します。インポート中に、スキルによって問合せエンティティが論理モデルに追加され、各問合せエンティティは物理表を表します。

ノート

スキルには、50個以下の問合せエンティティおよび属性を指定できます。たとえば、5つの問合せエンティティを組み合せて45個の属性を持つことができます。

スキルをトレーニングすると、問合せエンティティの情報を使用して自然言語パーサーのモデルが構築され、これにより、スキルはユーザー発話をOMRQLに変換できます。OMRQLは、SQLに似ていますが、オブジェクト・モデル(この場合は問合せエンティティ)に基づいています。

開始する前に、次が必要です:

  • 「ビジュアル」モードを使用して作成されたスキル。

  • データ・サービスへの接続の説明に従って、データ・サービスに接続するためのデータ・サービス統合。

データ・サービスで目的の表の問合せエンティティを作成するには:

  1. 「エンティティ」ページで、「詳細」「データ・サービスからインポート」の順に選択します。

    「問合せエンティティのインポート」ダイアログが表示されます。

  2. データ・サービスを選択し、スキルで使用する表および属性を選択します。

  3. 「インポート」をクリックします

    スキルによって、選択した表の問合せエンティティが追加されます。正規名に基づいてエンティティおよび属性のプライマリ名を設定します。たとえば、正規名が"invoice_num"の場合、プライマリ名は"invoice num"になります。

  4. 追加された問合せエンティティごとに、エンティティを選択し、「構成」タブをクリックして、「バックエンド・マッピング」セクションで主キーが設定されていることを確認します。

この時点で、「請求書番号が12345である請求書の表示」など、エンティティおよび属性のプライマリ名を使用して問合せをテストできます。ただし、最初にバッジ付きのトレイン・アイコンをクリックしてから、完了後に「問合せのテスト」をクリックして発話を試すか、「プレビュー」をクリックして会話テスターでテストできます。

最小SQLダイアログ・スキルを使用しているため、Trainer HtまたはTrainer Tmのいずれかでトレーニングできます。ただし、オートコンプリートの提案、ルーティング・データおよびカスタム・トレーニング・データを追加すると、Trainer Tmはより正確な結果を生成します。

次のステップは、エンド・ユーザーがエンティティおよび属性をどのように参照するかをスキルに教えることです。「自然言語発話をSQLに変換するためのスキルのトレーニング」を参照してください。

自然言語発話をSQLに変換するスキルのトレーニング

AIトレーナーとしての役割は、自然言語パーサーが、基礎となるデータ・ソース(物理モデル)から回答を取得するために、「期日が12/15/22より前の請求書の数」などの自然言語発話をOMRQL問合せに変換できるようにすることです。これを行うには、自然言語を厳密に反映するデータの直感的な論理モデルを構築します。

データ・ソースからインポートして論理モデルを作成した後、プライマリ名、シノニム、値リストおよび発話を使用して、スキルの自然言語パーサーが自然言語フレーズを物理モデルの表および列に関連付けるのに役立ちます。

  • ユーザーがオブジェクトを参照する様々な方法をスキルに教えるには、名前およびシノニムによるトレーニング・データの提供の説明に従って、プライマリ名とシノニムを追加します。たとえば、ユーザーが「請求書番号」を使用してinvoice_num列を参照するスキルを学習し、シノニムとして「請求書番号」および「参照番号」を追加することもできます。

  • スキルが発話の属性値を識別できるように、値リストを使用したトレーニング・データの提供の説明に従って、サンプル値リストを作成し、それらを属性に関連付けます。たとえば、実際の支払ステータスを含む値リストを作成し、そのリストを請求書のpayment status属性に関連付けることができます。

  • スキルがパターンに基づいて属性値を識別できるように、正規表現エンティティを作成し、それらを属性に関連付けます(正規表現を使用したトレーニング・データの提供を参照)。たとえば、式(\\d{1, 2}|(0|1)\\d{2}|2[0-4]\\d|25[0-5])を使用して正規表現エンティティを作成し、それをip_address属性に関連付けることができます。

  • スキルで発話がOMRQLに正しく変換できない場合は、発話によるトレーニング・データの提供およびテストおよび修復の説明に従って、発話からOMRQLへのマッピングを問合せエンティティ・データセットに追加できます。また、発話を追加して、発話をSQL実行として処理するフローにルーティングするタイミングをスキルが把握できるようにすることもできます(つまり、OMRQLに変換してから、SQL問合せをデータ・ソースに送信します)。

名前とシノニムによるトレーニング・データの提供

SQLダイアログ・スキルが自然言語フレーズを基礎となるデータ構造(物理モデル)に関連付けられるようにするには、まず、スキルで処理する必要がある識別された発話(トレーニング・コーパス)を取得し、それらを分析してエンド・ユーザーがエンティティおよび属性を参照する様々な方法を検出します。

たとえば、トレーニング・コーパスに次の発話があるとします。

  • 未回収残高がゼロより大きい請求書を表示します。

  • 参照12656の未払額はいくらですか?

ここでは、ユーザーがamount_remaining列を参照するために「未回収残高」および「未回収金額」を使用していることがわかります。「参照」は、invoice_numを参照する方法の1つであることがわかります。

トレーニング・コーパスに加えて、ターゲット・ユーザーからの発話のクラウドソース化によって、より多くのフレーズを取得して分析することもできます。

ユーザーがエンティティおよび属性を参照する方法のリストをコンパイルした後、各エンティティおよび属性のプライマリ名に使用する用語を選択します。最も一般的な使用法に最も近い名前にする必要があります。名前を選択するときは、すぐに使えるNLPモデルがドメイン固有の関係を理解できないと考えてください。たとえば、請求書番号参照が同じものを参照していることは、自動的に理解されません。請求書番号は一般的に使用され、請求書番号請求番号など、一般的に使用される他の用語にも最も近いため、プライマリ名にします。

残りの用語をシノニムとして扱います。前述の例では、シノニム・リストに参照請求書番号および請求番号を追加します。

プライマリ名は結果列のヘッダーおよびラベルのデフォルトですが、「プレゼンテーション」タブで変更できます。

リストを使用して、「エンティティ」ページでトレーニング・データを作成します。

  • エンティティの「プライマリ名」および「シノニム」を設定するには、エンティティの「構成」タブを開き、「自然言語」を展開します。

  • 属性の「プライマリ名」および「シノニム」を設定するには、属性の「自然言語」タブを開きます。

ノート

発話を処理する場合、自然言語パーサーでは物理モデルの正規名は考慮されません。つまり、表名と列名は参照されません。名前とシノニム(論理モデル)を使用して定義した自然言語マッピングのみが使用されます。

値リストを使用したトレーニング・データの提供

属性を値リストまたは動的エンティティに関連付けることで、自然言語パーサーの精度を向上できます。これは、パーサーが既知の値に基づいて属性を識別するのに役立ちます。属性の「一般情報」タブで「参照エンティティ」を使用して、属性を参照エンティティの値に関連付けます。値リスト・エンティティの場合、エンティティを自動的に作成し、データ・サービスの値をインポートして、参照エンティティとしてすべてを1ステップで関連付けることができます。

値リストと動的エンティティのどちらを使用して値を格納するかを決定する場合は、エンティティがオープンクローズかを考慮してください。

  • オープン・リストは、無限または動的(あるいはその両方)であるリストです。オープン・リストの場合は、値リストではなく動的エンティティを作成および保守することを検討してください。値リストを使用する場合は、少なくとも最も一般的に使用される値が含まれるようにリストをキュレートする必要があります。たとえば、時間の経過とともに増加する可能性が最も高い仕入先リストの場合、最も頻繁に使用される仕入先をリストに含める必要があります。これは、"show the summary flag for Seven Corporation"など、"vendor"という単語を使用しないベンダーに関するクエリーが、その値が値リスト内にない場合には一致しないためです。したがって、最も頻繁に使用される値を少なくとも含めて、正しい変換の頻度を増やします。

  • 終了リストは静的有限リストです。これらは、値リスト・エンティティに最適です。

値リストと動的エンティティの両方について、各エンティティ値に単数形と複数形(該当する場合)の両方のシノニムを追加して、エンド・ユーザーが値を参照する方法を指定します。

シノニムは、エンド・ユーザーが通常使用しない値がリストに含まれている場合に特に重要です。たとえば、この有効な支払ステータスのリストを考えてみます。ユーザーは、Y、N、Pを使用するよりも、有給、無給、一部支払などの単語を使用する可能性がはるかに高くなります。これらの単語をシノニムとして追加すると、ユーザーが支払ステータス属性を参照していることがNLPで認識されるようになります。

支払ステータス値 Synonyms
はい 支払済
N 未払、未払
P 一部、一部支払済、未払

用語で複数のエンティティ値が記述されている場合は、その用語をそれぞれにシノニムとして追加します。たとえば、NPは、請求書が未払であることを示します。両方のステータスのシノニムとして「未払」を追加すると、「未払請求書の表示」によって、payment_status値がNまたはPの請求書が取得されます。

動的エンティティの場合、エンティティを作成し、属性の「一般情報」タブで「参照エンティティ」を使用して属性をリストに関連付けます。

値リストの場合、次のステップに従って、データ・サービスから値リストを作成し、エンティティに関連付けることができます:

  1. 「エンティティ」ページで、属性を編集し、「一般情報」タブに移動します。

  2. 「タイプ」ドロップダウン・リストから、「エンティティ」を選択します。

  3. 目的のエンティティが存在しない場合は、ここをクリックして、バックグラウンド・マッピングに基づいて値リスト・エンティティを生成できます。値リストが作成され、データ・サービスから移入され、「参照エンティティ」が新しい値リストを指しています。

  4. (オプション)リストから値に一致するユーザー入力の可能性を高めるには、値リスト・エンティティを開き、「あいまい一致」をオンに切り替えます。それ以外の場合は、厳密な一致が使用されます。つまり、ユーザー入力は値およびシノニムと完全に一致する必要があります。たとえば、「車」は「車」と一致しません。

    あいまい一致では、ワード・ステミングを使用して問合せから属性を識別します。たとえば、「pound」は「pounds」、「hold」は「on hold」、「needed approval」は「needs approval」、および「rent-lease」は「rent lease」に一致します。

    ファジー・マッチングは「_」と「?」では機能しないことに注意してください。また、部分一致は機能しません。たとえば、「Seven」は「Seven Corporation」と一致しません。このような文字列の照合を有効にする必要がある場合は、シノニム・リストに追加してください。

  5. 「適用」をクリックして変更を保存します。

ノート

データ・サービスの物理表のいずれかの値がピリオド、疑問符またはスペースで終わる場合、これらの文字は標準名では許可されないため、値リストには含まれません。

正規表現を使用したトレーニング・データの提供

属性の値が特定のパターンと一致する必要がある場合は、属性を正規表現エンティティに関連付けることで、自然言語パーサーがその属性の値を識別するのに役立ちます。

これは、すべての値が特定のパターンに従う必要があり、有効な値のセットが値リストに対して大きすぎるか無限である場合に役立ちます。たとえば、ip_address属性の場合は、正規表現(\\d{1,2}|(0|1)\\d{2}|2[0-4]\\d|25[0-5])を持つIpAddressという名前の正規表現エンティティに関連付けることができます。

値リストと同様に、モデル内の複数の属性を同じ正規表現に関連付けることができる場合、ユーザーは2つ以上の属性を区別する十分なコンテキストを問合せに指定する必要があります。

正規表現に属性を関連付けるには、次の手順を実行します。

  1. 「エンティティ」ページで、「+エンティティの追加」をクリックし、「タイプ」ドロップダウンから「正規表現」を選択して正規表現を入力し、「作成」をクリックします。

    自然言語パーサーが非関連の値を属性に関連付けないように正規表現を作成してください。

  2. 正規表現に関連付ける属性を持つエンティティを選択し、属性を編集して「一般情報」タブに移動します。

  3. 「タイプ」ドロップダウンから「エンティティ」を選択します。

  4. 「参照先エンティティ」ドロップダウンから、正規表現エンティティを選択します。

  5. 「適用」をクリックして変更を保存します。

発話によるトレーニング・データの提供

AIトレーナーとして、スキルがOMRQLに変換できない自然言語の発話が発生します。たとえば、モデルでは、プライマリ名と密接に関連していないと思われるドメイン固有のシノニムを処理できない場合があります。もう1つの例は、モデルが2つの類似エンティティを区別できない場合です。この場合、トレーニング・データを使用して、発話のOMRQLへの正しい解析方法をスキルに教えることができます。

トレーニング・データへの追加は、多くの場合、カスタム・トレーニングと呼ばれます。カスタム・トレーニングを使用して、発話からOMRQLにマッピングすることで、完全な発話のコンテキストで単語およびフレーズを属性、エンティティおよびOMRQLキーワードに関連付けるようにモデルに指示します。

修正するシナリオごとに、20個の発話から開始し、必要に応じてさらに追加します。例が多すぎると、モデルが属性および演算子の予測を上回る可能性があるため、類似する品質の低い発話の大きいセットではなく、多様な発話の小さいセットに焦点を当てる必要があります。スキルごとに120の発話の制限があることに注意してください。

OMRQL文のすべての値は、データベースの値と書式と完全に一致する必要があります。たとえば、「Who is the employee whose name is Jones」という発話があるとします。name属性のデータベース値がすべて大文字の場合、name値もすべて大文字である必要があります。「SELECT * FROM Emp WHERE name = 'JONES'」です。

マッピングする発話で実際のデータベース値にシノニムを使用する場合、そのシノニムを値リストの値に定義する必要があり、OMRQLでは実際のデータベース値を使用する必要があります。たとえば、発話が"show the department whose location is the big apple"の場合、dept_loc値リストには"NEW YORK"という値のシノニムとして"big apple"を定義する必要があり、OMRQLは"SELECT * FROM Dept WHERE loc = 'NEW YORK'"である必要があります。

「2022年1月5日の請求書」など、絶対日付を含む発話を追加できますが、相対日付または年のない日付の発話は使用しません。たとえば、発話が「本日期限の請求書」の場合、今日の日付はSELECT * FROM Invoices WHERE due_date = '2022-01-01'としてOMRQLにハードコードされます。また、「今日」などの相対日付を使用すると、相対日付がサポートされていないというエラーが表示される場合があります。

カスタム・トレーニング発話のベスト・プラクティスを次に示します:

  • 発話数のバランスをとる:より複雑なシナリオの中には、単純なものよりも多くの発話が必要なものもありますが、シナリオごとの発話数のバランスをとるようにしてください。

  • 類似の属性およびエンティティのトレーニングのバランスを調整します:類似の属性が2つあり、そのうちの1つにカスタム・トレーニング・データを提供する必要がある場合は、他方に同じ量のトレーニング・データも指定する必要があります。トレーニング・データが類似する属性の1つにのみ集中する場合、モデルはその属性をそれに対応する属性よりも予測します。同様のエンティティについても同様です。たとえば、支払通貨と請求書通貨は類似の属性です。支払通貨が研修データで過剰に表現されている場合、発話で請求書通貨が要求された場合でも、モデルは支払通貨を予測することがあります。

    類似または密接に関連する2つの属性を区別する方法をモデルに教える必要がある場合は、1つの属性の発話の半分ともう一方の属性の発話の半分を提供することで、重要度の重み付けのバランスを調整します。

    これらの類似の属性を参照する発話を変更します。たとえば、モデルがamount_remainingamount_paidを区別できるように、発話の対を対比します。

    • 承認済請求書の残額を教えてください
    • 承認済請求書の支払金額を表示
    • 仕入先AADに対する合計支払期日金額の表示
    • 仕入先AADに対する支払済金額の合計を計算します
    • 仕入先AADに対する請求書の未払額はいくらですか
    • 仕入先AADに対する請求書の支払金額をリストします
  • プライマリ名またはシノニムに一致する値のトレーニングのバランスを調整します:たとえば、モデルにmanager属性があり、「manager」が従業員のjob属性の値でもあるとします。「マネージャの数」をトレーニング・データに追加する場合は、このトレーニング・データのバランスを、manager属性を使用する発話(「従業員Adam Smithのマネージャは誰か」など)、およびマネージャjobを使用する発話(「すべてのマネージャの表示」など)にする必要があります。このようにして、モデルは2つの使用方法を区別することを学習できます。両方の使用タイプの例を含めない場合、スキルでは一方の使用量が他方の使用量よりも予測される場合があります。

  • フレーズの多様化:カスタム・データの多様なフレーズのベスト・プラクティスは、インテント発話のベスト・プラクティスと似ています。

    • 完全な文を使用します。

    • 異なる動詞を使用します。例: view、list、show、tellおよびsee。

    • エンティティ名または属性名に加えて、様々なシノニムおよびパラフレーズを使用します。

    • 異なる代名詞を使用します。例: 見せて、見て、言って、欲しい。

    • 文の構造を変更します。たとえば、属性値を文の先頭、中央および末尾の近くに配置します。

    • 集計を含む発話(AVGなど)がある場合は、他の演算子とともに発話も追加します。

    • 可能な場合は、AND条件およびOR条件を持つgroup by句やwhere句など、様々な句を使用します。

  • 値の分散:シナリオの発話で複数の値を使用すると、モデルで異なる値を認識できるようになります。単語の長さが異なる値を含めます。'/'や"-"などの特殊文字を含む一部の値を含めます。'and'などの特殊なキーワードを使用して、いくつかの値を含めます。

  • 既知の値と未知の値の組合せを含めます。値リスト属性の場合、属性値の代表的なセット(すべてではない)を使用して、値リスト一致が重要なシグナルであることをトレーニングします。また、クローズ・リストではない値リストには、値リストにない値を含めて、特定のフレーズを属性に関連付けるように指示します。

マップされた発話をトレーニング・データに追加するには:

  1. 「トレイン」ボタンに赤いバッジがある場合は、バッジ付きのトレイン・アイコンをクリックし、Trainer Tmを使用してトレーニングします。

  2. 「エンティティ」ページで、「データセット」タブに移動し、「エンティティの問合せ」をクリックします。

  3. 「トレーニング・データ」タブをクリックします。

  4. 「発話の追加」をクリックします。

    発話の作成ダイアログが表示されます。

  5. 発話を入力し、「続行」をクリックします。

    ダイアログに、発話のOMRQL問合せが表示されます。発話が問合せに変換できない場合、問合せは空白になります。

    スキルがトレーニングされていない場合、発話はOMRQL問合せに変換できないことに注意してください。

  6. 問合せを確認し、間違っている場合は修正します。

    OMRQLのキーワードおよび例は、OMRQLリファレンスを参照してください。

  7. 「完了」をクリックして、マップされた発話をトレーニング・データに追加します。

SQLダイアログ・ユーザーの問合せ提案の指定

オートコンプリートの提案を提供することで、ユーザーが実行できるデータベース問合せについて学習するのに役立ちます。これらの提案は、論理モデルがどの種類の質問に回答できるかについてのヒントを提供します。発話は、スキルでのルーティングにも役立ちます。

SQLダイアログ・スキルのオートコンプリートの提案を作成するには:

  1. 「トレーニング」ボタンに赤いバッジがある場合は、バッジ付きのトレイン・アイコンをクリックし、Trainer TMを使用してトレーニングします。

  2. 「エンティティ」ページで、「データセット」タブに移動し、「エンティティの問合せ」をクリックします。

  3. 「提案のオートコンプリート」タブをクリックします。

  4. 「発話の追加」をクリックします。

    発話の作成ダイアログが表示されます。

  5. 発話を入力し、テキスト・ボックスの外側をクリックして、「続行」をクリックします。

    ダイアログに、発話のOMRQL問合せが表示されます。発話が問合せに変換できない場合、問合せは空白になります。

    スキルがトレーニングされていない場合、発話はOMRQL問合せに変換できないことに注意してください。

  6. 問合せを確認し、間違っている場合は修正します。

    OMRQLのキーワードおよび例は、OMRQLリファレンスを参照してください。

  7. 「完了」をクリックして、マップされた発話をオートコンプリートの提案に追加します。

SQLダイアログの会話への発話のルーティング

スキルにインテントがある場合、またはDA内にある場合、インテントと同様に、スキルではSQL問合せをSQLダイアログの会話にルーティングするために発話が必要です。ルーティング・メカニズムでは、オートコンプリートの提案、トレーニング・データ、生成されたルーティング発話および手作りのルーティング発話を使用して、SQL問合せを認識する方法を学習します。「問合せエンティティ・データセット」ページの個別のタブで、各タイプの発話を表示できます。

「生成されたルーティング・データ」タブから、「SQLダイアログのルーティング・データの生成」の説明に従って、論理モデルに基づく100個のルーティング発話をすばやく生成できます。その後、それらを確認し、必要に応じて編集し、承認または未承認にすることができます。承認したものは、「結合ルーティング・データ」タブに追加され、「合成」としてマークされるか、編集した場合は「調整済」としてマークされます。

「結合ルーティング・データ」タブには、すべてのデータセット・タイプがリストされます。また、Handcraft SQL Dialogs Routing Dataの説明に従って、手作りのルーティング・データを手動で追加することもできます。

オートコンプリート、トレーニング、生成および手作りの発話の合計数は10,000を超えることはできません。この制限を超えると、「このボットの最大コーパス例数(10000)に達しました」というメッセージが表示されます。また、トレーニング発話の制限は120個です。

オートコンプリートの提案およびトレーニング・データについて学習するには、「SQLダイアログ・ユーザーの問合せ提案の指定」および「発話によるトレーニング・データの指定」を参照してください。

ヒント:

各エンティティにはデータセット・タブがあり、その特定のエンティティの属性を使用する発話を表示できます。

SQLダイアログの生成ルーティング・データ

スキルにインテントがある場合、またはDA内にある場合、インテントと同様に、スキルではSQL問合せをSQLダイアログの会話にルーティングするために発話が必要です。ルーティング・メカニズムでは、オートコンプリートの提案、トレーニング・データおよび手作りのルーティング・データに加えて、「エンティティ・データセットの問合せ」「生成されたルーティング・データ」タブから作成した生成されたルーティング発話が使用されます。生成された発話は、論理モデルのすべての問合せエンティティに関する広範囲にわたる質問を表します。

ルーティング・データを生成するには:

  1. 「トレーニング」ボタンに赤いバッジがある場合は、バッジ付きのトレイン・アイコンをクリックし、Trainer TMを使用してトレーニングします。

  2. 「エンティティ」ページで、「データセット」タブに移動し、「エンティティの問合せ」をクリックします。

  3. 「生成されたルーティング・データ」タブをクリックします。

  4. 「生成」をクリックします

    「ルーティング・データの生成」ダイアログが表示されます。

  5. 「エンティティの選択」フィールドで、「すべて」を選択します。ルーティング・データを初めて生成する場合は、すべてのエンティティのデータを生成する必要があります。初期セットを生成した後、必要に応じて特定のエンティティに戻り生成できます。

  6. 「生成」をクリックします

    スキルは100の発話を生成し、論理モデルが回答できる質問を反映します。



  7. 生成されたデータをレビューし、調整が必要なデータを編集します。

    ヒント:

    発話が承認されている場合、その発話は編集できません。承認された発話を変更する場合は、その発話を承認解除して編集し、再度承認します。
  8. 必要に応じてエントリを削除し、残りを承認します。

    承認された発話が結合されたルーティング・データに追加されます。発話を編集した場合、「結合ルーティング・データ」タブのルーティング・サブタイプは「調整済」になります。それ以外の場合は、「合成」です。

Handcraft SQLダイアログ・ルーティング・データ

DAまたはスキルがSQL会話にルーティングしていない有効なSQL問合せがある場合は、「エンティティ・データセットの問合せ」ページの「結合ルーティング・データ」タブから、それらの発話をルーティング・データに追加する必要があります。

手作りのルーティング・データを追加するには:

  1. 「トレーニング」ボタンに赤いバッジがある場合は、バッジ付きのトレイン・アイコンをクリックし、Trainer TMを使用してトレーニングします。

  2. 「エンティティ」ページで、「データセット」タブに移動し、「エンティティの問合せ」をクリックします。

  3. 「結合ルーティング・データ」タブをクリックします。

  4. 「発話の追加」をクリックします。

    「発話の作成」ダイアログが表示されます。

  5. 発話を入力し、テキスト・ボックスの外側をクリックします。

  6. 「続行」をクリックします。

  7. OMRQL問合せを確認して、その結果が問合せに応答することを確認します。そうでない場合は、問合せを修正し、「再解釈」をクリックします。OMRQL問合せキーワードについては、OMRQLリファレンスを参照してください。

  8. 「完了」をクリックします

    発話は、ルーティング・サブタイプが「手作業」に設定されているデータに追加されます。

エンティティおよび属性の表示の構成

エンティティの行と属性が結果に表示されるタイミングと方法を制御するために実行できる操作を次に示します。

通常、データベース・エキスパートと会話デザイナはこのタスクで連携します。1つはデータベース・スキーマの専門知識を持ち、もう1つはユーザーの期待に精通しているためです。

「プレビュー」をクリックして会話テスターを開き、発話を入力して適切なデータを取得することで、変更をテストできます。

ヒント:

変更の多くには、自然言語パーサー(NLP)の再トレーニングが必要です。変更をテストするときに、「トレーニング」アイコンに赤いバッジ(バッジ付きのトレイン・アイコン)がある場合は、最初に「トレーニング」をクリックしてトレーニング・プロセスを完了する必要があります。

フォームまたは表を表示するかどうかの構成

スキルでは、エンティティの結果を表、フォームまたは表フォームとして表示できます(行を展開してフォーム・モードで詳細を表示できます)。エンティティの「プレゼンテーション」タブのレイアウト変換フィールドを使用して、結果を各モードに表示するタイミングを構成します。

デフォルトでは、行数が「この行数以下にフォーム・レイアウトを使用」に指定したしきい値を超えないかぎり、スキルはレスポンスの各行をフォームとして表示します。フォーム・モードおよび表モードのレスポンスの例を次に示します。


sql-results-form.pngの説明が続きます
図sql-results-form.pngの説明


sql-results-table.pngの説明が続きます
図sql-results-table.pngの説明

列数がしきい値を超える場合、スキルには表フォームが表示されます。表フォームでは、指定した数の列のみが表示され、ユーザーはフォームを展開して他の属性を表示できます。しきい値を指定するには、「列数がこの数を超える場合に表フォーム・レイアウトに切替え」を使用します。列しきい値2の表フォーム・レイアウトの例を次に示します。


sql-results-table-form.pngの説明が続きます
図sql-results-table-form.pngの説明

フォームに1つまたは2つの水平セクションを表示

デフォルトでは、フォーム・モードでは、すべての結果属性が1つ下に表示されます。部屋を保存するには、「フォーム・レイアウトの水平セクション数」を2に設定して、2つの属性列を表示できます。

結果のタイトルを設定する

デフォルトでは、スキルは結果タイトルに問合せエンティティの名前を使用しますが、「プレゼンテーション」タブの「表示名」を使用して別のタイトルを設定できます。

表示名を設定した後は、フィールドをクリアできないことに注意してください。

エンティティのデフォルトのソート順の定義

ユーザーの発話で指定されていないスキルで使用するデフォルトのソート順序を指定できます。デフォルトを設定するには、エンティティの「一般」タブに移動し、「属性順序の追加」をクリックして属性を選択し、その順序(昇順または降順)を選択します。「属性順序の追加」をクリックして、ソート順序にさらに属性を追加できます。

発話で指定されていない場合に含める属性の定義

発話で属性が指定されない場合は、結果にいくつかの必須フィールドが含まれる可能性があります。エンティティの「プレゼンテーション」タブで「デフォルト属性」を使用して、これらのフィールドを指定できます。たとえば、invoicesエンティティの場合、名前が付けられていない場合はinvoice_num, invoice_dateおよびinvoice_amountを表示できます。

問合せエンティティ・タイプの属性は、デフォルトの属性リストに追加できません。

結果に常に含める属性の定義

発話で特定の属性が識別される場合は、リクエストされた属性のみでなく、一部のコンテキストも結果に含めることができます。たとえば、誰かが「請求書金額の表示」を入力した場合、invoice_numなどの識別コンテキストではなく、invoice_amount値のみを表示してもデータは意味がありません。エンティティの「プレゼンテーション」タブで「最小属性」を使用して、最小属性を識別します。

問合せエンティティ・タイプの属性は、最小属性リストに追加できません。

結果ページ・サイズの構成

エンティティの「プレゼンテーション」タブの「ページ当たりの最大行数」を使用して、一度に表示する行数を設定します。

ユーザーは、ボタンをクリックして結果をページングできます。

結果へのボタンおよびリンクの追加

グローバル・レベルと行レベルの両方で、問合せエンティティの結果にボタンとリンクを追加できます。各行に行アクションが表示され、結果の下にグローバル アクションが表示されます。

たとえば、従業員エンティティの場合、会社の従業員検索ページにリンクするグローバル アクションを追加できます。行レベルでは、従業員の部門に関するクエリーなど、共通のフォローアップ クエリーに対するアクションを追加できます。

エンティティの「プレゼンテーション」タブからアクションを追加します。複数の異動区分がある場合は、その異動区分の表示順序を指定できます。QUERYアクション・タイプの場合、OMRQL問合せを指定する必要があります。URLアクション・タイプの場合、URLを設定する必要があります。

行レベルのフォローアップ・アクションの場合、${row.attributeName}を使用して各行の属性値を参照できます。たとえば、select * from Emp WHERE dept.loc = "${row.loc}"です。実行時に、各行のボタンの値は問合せごとに異なります。この構文は、行レベルのアクションでのみ使用できます。

オプションで、アクションが表示されるタイミングを制限できます。たとえば、従業員の直属部下を表示する行アクションを設定できます。これは、従業員の職務が管理者の場合のみ表示されます。そのためには、「可視性式」を「オン」に切り替えて、${row.job = 'MANAGER'}などのFreeMarker式を指定します。

ノート

行アクションは、フォームまたは表のフォーム・レイアウトの各行にボタンまたはリンクとして表示されます。ただし、表レイアウトには表示されません。

カスタム属性の追加

独自のカスタム属性を追加して、導出値や計算値などの追加情報を表示できます。

  1. エンティティ・ページの「属性」タブで、「+属性の追加」をクリックし、正規の名前とタイプを指定します。

  2. 「自然言語」タブで、プライマリ名を指定し、オプションでシノニムを追加します。

  3. 「バックエンド・マッピング」タブで、「SQL式」を選択し、式を追加します。

式が列を参照する場合は、物理モデル(データベース・スキーマ)の列名を使用し、${alias}を先頭に付加します。たとえば、invoicesエンティティの場合、${alias}invoice_amount + ${alias}discount_takenという式でamount_to_pay属性を追加できます。ここでは:

  • invoice_amountおよびdiscount_takenは、invoices表の既存の物理列名です。
  • 新しい導出列amount_to_payは、invoice_amountおよびdiscount_taken物理列の値の合計です。

この表を使用して、属性に使用するタイプを決定できます。

タイプ 使用する状況 サンプル
数値 値は数値のみで、セット リストに制限されません。 数値従業員ID、請求書金額
日付 値は時間のない日付です。 雇用日
日付 値には日付と時間の両方を指定できます。 出発日時
エンティティ 属性は値リスト・エンティティに関連付けられています。値リストですべての有効な値(つまり、クローズされたリスト)を列挙し、自然言語の発話で値がほとんど使用されない場合は、リストの値のシノニムを追加する必要があります。 ステータス(クローズ)、仕入先名(オープン)
文字列 値リストに関連付ける意味がない数字と文字を含めることができるテキストに使用します。 英数字の請求書番号、製品の説明
エンティティの問合せ 別の問合せエンティティにリンクする必要がある場合にのみ使用します。 例なし
Boolean 未使用 適用されません

イベント・ハンドラを使用したプレゼンテーションの動的な構成

スキルでSQL問合せ結果の表示方法を動的に変更する場合は、データ問合せイベント・ハンドラをカスタム・コンポーネント・パッケージに追加し、パッケージをカスタム・コンポーネント・サービスとしてスキルに追加してから、エンティティをエンティティの「プレゼンテーション」タブの特定のハンドラに関連付けることができます。スキルは、その問合せエンティティがFROM句の最初の名前付きエンティティ(ルート・エンティティ)である場合に、エンティティのデータ問合せイベントをトリガーします。

たとえば、ヘッダー・テキストに行数を動的に追加したり、合計を表示する行を表に追加したり、属性を表示または非表示にするタイミングを決定できます。

データ問合せイベント・ハンドラの作成方法について学習するには、「SQL問合せイベント・ハンドラの記述」を参照してください。

問合せルールの定義

「エンティティ」ページでエンティティの設定を使用して、エンド・ユーザーがデータについて尋ねる方法と結果の評価方法を制御する方法を次に示します。

「プレビュー」をクリックして会話テスターを開き、発話を入力して適切なデータを取得することで、変更をテストできます。

ヒント:

変更によっては、自然言語パーサー(NLP)の再トレーニングが必要になります。変更をテストするときに、「トレーニング」アイコンに赤いバッジ(バッジ付きのトレイン・アイコン)がある場合は、最初に「トレーニング」をクリックしてトレーニング・プロセスを完了する必要があります。
  • 測定または比較に使用する属性の識別:発話でエンティティ・アイテムを数値と比較するよう求められた場合、または「最も大きい」「最も小さい」などのスーパーレイティブを使用してエンティティをランク付けするよう求められた場合、比較の実行にスキルはどの測定可能属性を使用しますか。たとえば、ユーザーが最も大きいサプライヤについて尋ねると、スキルで比較にrating属性を使用するとします。測定または比較に使用する属性を指定するには、エンティティの「一般」タブに移動し、「測定基準」ドロップダウンから属性を選択します。5が1より優れているなど、ランキングが数値順序と反対の場合は、「一般情報」タブで属性の「比較の反転」もtrueに設定する必要があります。

  • 測定可能属性の比較方法の指定:デフォルトでは、測定可能属性値は数値順序(1は5未満)を使用して比較されます。ただし、1が5より優れている場合に比較を反転する方が適切な場合があります。たとえば、レース結果を見ると、5つの最良時刻が結果の中で最も低い値です。属性の比較を反転するには、「一般情報」タブで属性の「比較の反転」をtrueに設定します。この設定は、属性のソート順序にも影響します。

  • 文字列の部分一致の許可:ユーザーが「部門マネージャ」ではなく「マネージャ」などの先頭または末尾の文字または値を頻繁に除外することが予想される場合は、部分一致を有効にすることを検討してください。部分一致がオンになっている場合、生成されたSQLのwhere句では、= <string>のかわりにupper (<column-name>) LIKE UPPER(%<string>%)が使用されます。属性の「一般情報」タブで部分一致を有効にできます。エンティティ属性の部分一致動作は、値リストのあいまい一致動作とは異なります。

  • あいまいな日付と時刻の解決方法の指定: 日付または日時タイプの属性の場合、「水曜日」などのあいまいな値を過去、将来または最も近い日付または時刻に解決するかどうかを指定できます。これは、属性の「一般情報」タブの「一時プリファレンス」を使用して設定できます。

    警告:

    「一時プリファレンス」を最も近い日付または時間に設定することは、「水曜日」などの固定日時を入力する場合にのみ有効です。ユーザーが「2日間」などの期間値を入力した場合、期間値は過去と将来の両方で同じであるため、問合せは解決されません。ユーザーが期間値を入力しないことがかなり確実でないかぎり、「一時プリファレンス」を過去または将来にのみ設定する必要があります。

    ヒント:

    属性がコンテキストに応じて過去および将来にデフォルト設定される場合があると、異なる時間プリファレンスを使用してカスタム属性を作成することを検討してください。たとえば、due_date属性の場合、将来のプリファレンスを持つdue属性と、過去のプリファレンスを持つoverdue属性を追加できます。

非正規化列に対する自然言語問合せの有効化

パターンを使用して列が表す属性(PTD_LBR_CSTなど)を識別する名前を持つ非正規化属性がある場合、列拡張バックエンド・マッピングを使用して正規化エンティティをマッピングすることで、非正規化属性を自然言語モデルに理解できるようにすることができます。

たとえば、PTD_LBR_CST、QTD_LBR_CST、YTD_LBR_CST、PTD_SUB_CST、QTD_SUB_CST、YTD_SUB_CSTという属性を持つcostToSales問合せエンティティがあるとします。

スキルが自然言語問合せをこれらの属性に関連付けることができるようにするには、project_numなどの一意に識別する属性と、期間、タイプおよびコストを含むコスト問合せエンティティを作成します。期間およびタイプ属性はエンティティ・タイプであり、期間(PTD、QTD、YTD)およびタイプ(LBR、SUB)値リストを参照します。原価属性のバックエンド・マッピングは、式"${period}_${type}_CST"の列展開です。最後のステップは、コスト属性をcostToSalesエンティティに追加することです。このエンティティは、2つのエンティティをリンクするためにコスト問合せエンティティを参照します。

問合せが「YTD労務費はいくらですか」の場合、バックエンド列拡張マッピングは、costToSalesエンティティにあるYTD_LBR_CST属性から値を取得するようにスキルに指示します(必要なプライマリ名とシノニムが設定されていると仮定します)。

テストおよび修理

名前、シノニム、値リストおよび問合せエンティティ・データセット内のトレーニング・データを使用してエンティティおよび属性にトレーニング・データを定義および追加する際、トレーニング・データが自然言語パーサーがエンド・ユーザーの発話をSQL問合せに変換するのにどの程度役立つかをテストする必要があります。

ヒント:

トレイン・アイコンに赤いバッジ(バッジ付きのトレイン・アイコン)がある場合は、発話をテストする前に、「トレーニング」をクリックしてトレーニング・プロセスを完了する必要があります。

「エンティティ」ページには「テスト問合せ」リンクがあり、これによって、ユースケースの発話を試すための問合せテスターが開きます。テスターで、テスト発話を入力し、スキルによって生成されたOMRQL問合せを確認できます。



テスターが発話を問合せに変換する場合は、OMRQL問合せを確認して、目的の結果が生成されることを確認します。OMRQL問合せが正しくない場合は、適切な修正を使用してスキルを修復する必要があります:

ヒント:

「テスト・ケースとして保存」を使用して、有効な問合せの一部をバッチ・テスターに保存することを検討してください。バッチ・テスターを使用すると、加えた変更が他の領域に悪影響を及ぼさないようにできます。問合せエンティティ・バッチ・テストによるモニターを参照してください。

SQLダイアログ機能の制限により、一部の発話が正しく変換されない場合があります。場合によっては、カスタム・トレーニング・データを追加することで、これらの制限を回避できます。「SQL問合せのトラブルシューティング」を参照してください。

問合せテスターが十分なトレーニング・データがないとレポートした場合、「JSONの表示」をクリックして、発話の解析方法に関する情報を取得できます。translatable値は、モデルが問合せをサポートするかどうかを示します。confusionSpanTextを使用すると、サポートされていない問合せのどの部分についてわかりやすくなります。


query-tester-json.pngの説明が続きます
図query-tester-json.pngの説明

翻訳できない発話については、まず入力ミスが発生したか、問合せが不明瞭すぎるか、問合せがモデルのスコープ外にあるかを確認してください。これらの問題は、トレーニングでは解決できません。そうしないと、シノニムを追加するか、問合せエンティティ・データセット内のカスタム・トレーニング・データに発話を追加することで、不十分なトレーニング・データを解決できる場合があります。ここでは、カスタム・トレーニング・データを追加して解決できるトレーニング・データの不十分な問題の例をいくつか示します。

  • 属性の混乱:たとえば、ステータスは支払ステータスまたは承認ステータスを参照します。

  • 属性値の混乱:たとえば、マネージャの数(manager属性の値または従業員のジョブ値を参照していますか)。

  • キーワードまたは演算子でもある検索値:たとえば、シノニム"total"と演算子SUMを区別します。

OMRQLが有効な場合は、「クリックして会話テスターでテスト」をクリックして、スキルがOMRQLをSQLに変換する方法をテストできます。会話テスターが結果とともに表示されます。

会話テスターでは、「SQLダイアログ」タブでOMRQLおよびSQL文を確認できます。問合せを変換できない場合は、問合せが変換可能でないことを示し、混乱の原因となったテキストを示します。



SQL問合せのトラブルシューティング

問合せが予期したとおりに解決されない場合は、モデルに十分な情報がないか、発話が範囲外である可能性があります。また、SQLダイアログの制限が原因である可能性もあります。

モデルに十分な情報がない場合、問題の解決方法を学習するには、「テストおよび修復」を参照してください。自然言語パーサーが発話をOMRQLに正しく変換できないようにする、slso SQLダイアログの制限があります。この項では、可能な場合は、これらの制限およびそれらの回避方法について説明します。

SQLダイアログの一般的な制限事項

次の表に、注意する必要があるSQLダイアログの一般的な制限の概要を示します。これらの制限には回避策はありません。

カテゴリ 制限事項 サポートされていない問合せの例
サポートされているエンティティおよび属性の数 論理モデルには、合計50個の属性とエンティティを含めることができます。この制限には、作成される仮想属性およびエンティティが含まれます。  
英語以外の問合せ 英語以外の言語での問合せ。 numero total de empleadas
代名詞の使用 発話で「I」、「me」、「my」などの代名詞を使用します。
  • 私の給料はいくらですか。
  • マネージャーは誰ですか?
  • 私より前に採用された従業員
「はい」および「いいえ」の質問 回答が「はい」または「いいえ」の質問。SQLダイアログでは、回答がデータ表問合せの結果セットである問合せのみがサポートされます。
  • ジョンは店員?
  • 会計部門にアナリストはいますか?
  • 営業部に30人未満の従業員がいますか?
否定

「not」や「no」などの否定ワードを含む発話や、否定またはnull値を示す値の問合せ。

  • 会計部門にいない従業員はどれですか。
  • 従業員がコミッションを取得する従業員(コミッションの問合せがnullでない)
  • 未払の請求書は?
  • 非連邦サプライヤの請求書(否定を含む値の問合せ)
複雑なSQL演算子 SQLダイアログでは、副問合せ、SET演算子(INTERSECT、UNION、EXCEPTおよびNONE)、算術演算子を必要とする問合せ、およびEXISTSおよびNOTキーワードを含む、より複雑な問合せはサポートされていません。

まれに、正しく解決される複雑な問合せが見つかることがありますが、一貫性のある結果を得るには、「カスタム属性の追加」の説明に従って、データベース・ビューの使用または仮想属性の作成を検討する必要があります。

  • 給与が営業部門の最高給与を超える従業員の表示
  • 各従業員の報酬総額はいくらですか?
  • 男性と女性の両方の従業員を雇用するジョブを表示します
    • 従業員からジョブを選択(性別= M INTERSECT): 従業員からジョブを選択(性別= F)
暗黙的なSQL演算子

SQLダイアログでは、明示的にリクエストされていないSQL句ファンクションはサポートされていません。例:

  • 暗黙的distinct: 返された結果を明確にする必要があることを示します。
  • 暗黙的な集計: 集計操作を意味します。
  • 暗黙的な順序: 結果の順序付けを意味します。エンティティの「一般」タブで「デフォルトの順序式」を設定することを検討してください。

個別:

  • すべての従業員の都市を表示(繰返し都市を含む複数の行を返す)
  • すべての従業員が10000を超える給与を支給する部門名を表示します(同じ部門名を持つ複数の行が、10,000を超える給与を支給する各従業員に1行ずつ返されます)

集計:

  • 会計部門のすべての従業員にいくら支払うか(会計のすべての従業員の合計給与に対する要求を意味します)
  • 部門ごとの給与の表示(合計を意味します)

順序付け

  • すべての従業員名を表示します(ユーザーはアルファベット順にソートできますが、ソート順は明示的に示されていません)
  • 従業員を昇順で表示します(ソートする属性が暗黙的に指定されます)
フォローアップ質問の限定サポート SQLダイアログでは、即時利用可能なフォローアップ質問はサポートされていません。つまり、ユーザーは新しいフォローアップ質問を実行してレスポンスを更新することはできません。

ヒント:

一般的なフォローアップクエリーを実行するリンクまたはボタンの形式で、結果にクイックアクションを追加できます。「結果へのボタンおよびリンクの追加」を参照してください。
オリジナル発話「シアトルのすべての従業員を表示」のフォローアップ問合せの例を次に示します
  • 事務員のみ表示
  • マネージャの表示
  • 3000以上の収入は?
このような場合、ユーザーは「事務員として働くすべての従業員を表示」など、完全な質問を入力する必要があります。

基本的な問合せの問題のトラブルシューティング

カテゴリ 問題の説明 サポートされていない問合せの例 回避策
属性を選択します 3つ以上の属性の選択 すべての従業員の名前、役職、給与およびコミッションを表示します カスタム・トレーニング・データを追加します。トレーニング・データには、様々なエンティティをカバーする例と、4つ以上の属性のいくつかの異なるセットを含めることができます。
エンティティの選択 複数のエンティティを要求しています
  • すべての従業員とその部門の表示
  • すべての請求書のサプライヤおよびサプライヤ・サイトの表示
カスタム・トレーニング・データを使用して、2番目のエンティティから1つの属性を出力するようにエンティティに指示します。たとえば、「各請求書のサプライヤを表示」の場合、問合せをOMRQLにマップするトレーニング・データを追加できます: select invoiceid, vendor.vendor_name from invoices
説明 where句の3つ以上の条件 2000年以降に採用され、財務部門でアナリストとして勤務している従業員を表示 複数の条件を含む例を含むトレーニング・データの追加
順序付け 複数の属性またはエンティティによる順序付け 従業員を肩書と名前でソートして表示します 2つ以上の属性による順序付けを含む例を含むトレーニング・データの追加
グループ基準 複数の属性またはエンティティによるグループ化 ジョブと部門の場所ごとの平均給与を表示 2つの属性またはエンティティによるグループ化を含む例を含むトレーニング・データを追加します
グループ別+有 having句に複数の条件があります 従業員が20人以上、平均給与が30000人を超えるジョブを表示します having句に複数の条件を含む例を含むトレーニング・データを追加します
自己結合 エンティティにそれ自体へのリンクがある場合、カスタム・トレーニング・データの場合でも、その計算はモデルでは実行できない場合があります。 ここで、クエリーは従業員データにリンクする従業員データをリクエストしています。
  • Johnのマネージャの名前と給与を表示します。
  • クリスの部下は?
検証済の回避策はありません。

日時の問題のトラブルシューティング

カテゴリ 問題の説明 サポートされていない問合せの例 回避策
暗黙的な日付と日時の値 日付または日時でフィルタする場合、where句のコンテキストを明示的に指定する必要があります。

たとえば、「どの請求書が期限を過ぎているか」ではなく、「どの請求書が今日より前に期日があるか」のように記述する必要があります。

  • 次のイベントは何ですか。
  • どの請求書が期限超過していますか?
仮想属性(イベントが近日開催されるかどうかを示すなど)を作成し、カスタム・トレーニングを使用してモデルに期待される動作を教えます。
暗黙的な過去または将来の参照 日付および日時属性の場合、属性の「一時プリファレンス」を属性の「一般情報」タブで使用して、あいまいな日付または日時を解決する方法を指定します。

あいまいな値を過去または将来の日付または日時として解決する必要があることを意味する発話は無視され、一時プリファレンスが使用されます。

水曜日に採用される従業員
    • デフォルトの時間的プリファレンスが過去の場合、コンテキストが暗黙的に将来であっても、過去の日付に解決されます
2つの導出属性を作成して、シナリオでこの問題を解決できる場合があります。
<および>演算子を使用した過去のコンテキスト SQLダイアログでは、過去の日付または期間を含む日時での<および>演算子の使用はサポートされていません。
  • 2日前に採用された従業員
  • 期限超過請求書が2日未満
信頼できる回避策はありません。このようなことをカスタム・トレーニングで教えると、モデルが他のケースでこれを誤って予測し始める可能性があります。
日付のない時間 SQLダイアログでは、時間があるが日付がない問合せはサポートされません。 午後3時に配送される注文 既知の回避策はありません。
繰返し日 SQLダイアログでは、特定の間隔で繰返し値を指定する日付はサポートされていません。 毎月第1月曜日にどの会議が行われますか? 既知の回避策なし

属性選択の問題のトラブルシューティング

カテゴリ 問題の説明 サポートされていない問合せの例 回避策
ドメイン固有のエンティティ/属性シノニムのパフォーマンスが制限されています。 ドメイン固有または技術的なシノニムの場合、通常はシノニムとして使用されないため、モデルが正しい属性にマップするのに苦労する可能性があります

属性: ip_address

シノニム: デバイス

カスタム・トレーニング・データを追加します。属性のシノニムを使用する例、およびモデルが既存の機能を忘れないようにプライマリ名を持つ別の例セットを含めます
エンティティの識別属性 エンティティのみを参照して属性を単純化 1234を含む請求書の表示
  • 請求書番号によるフィルタリングを意味します。
カスタム・トレーニング・データを追加します。
  • = LIKEstarts withおよび ends withを使用して、例を使用してデータを作成します(「1234を含むすべての請求書を表示」など)。
  • エンティティ名を使用してエンティティ自体を参照するトレーニング・データの例がいくつかあることを確認します(例: 「すべての請求書の表示」)
明確化 複数の可能性を持つあいまいなケースでは、モデルはあいまいさを解消できません すべての請求書の金額を表示
  • 「金額」が「請求書金額」または「総金額」のどちらを参照するか不明
カスタム・トレーニング・データを追加します。
  • あいまいな名前を目的の属性にマップする例を含めます。
  • その特定のあいまいな使用のために、オプションの完全な(あいまいな)名前を使用するいくつかの例を含めます。
値リスト・エンティティにない値の暗黙的属性参照 値によってのみ属性を参照し、その値が値リストに存在しない場合(正規値/シノニムのいずれか)
  • ODAのすべての従業員の給与の表示
    • ODAは部門名の値リストの値ではありません
  • 米国にある部門の表示
    • ここで、"USA"はロケーション値リストの"United States"のシノニムではありません
カスタム・トレーニング・データは追加できますが、すべての場合において信頼性が低い可能性があります。たとえば、モデルでは、VALUEによって発行された請求書をベンダー名属性にマップする必要があることがわかります。ただし、for VALUEやbyVALUEなどの単語は非常に一般的であり、様々なコンテキストで使用できるため、モデルでは請求書を学習できません。
値の順序および属性名 発話の属性名の前に値が記述されている場合、odelはあまり堅牢ではありません。(この問題は、値が値リストおよび複数語の値に含まれていない場合に発生します。 承認済請求書の表示 カスタム・トレーニング・データを追加します。
  • 条件の属性の前に値を持つ例と、値の前に属性を持ついくつかの例を作成します。

グループ化の問題のトラブルシューティング

カテゴリ 問題の説明 サポートされていない問合せの例 回避策
2を超えるエンティティ間でのグループ化 複数のエンティティ間で集計をグループ化
  • 各サプライヤの賦払数の表示
    • サプライヤ、請求書、賦払の3つのエンティティが含まれます。
  • 各サプライヤの残りの合計金額
    • 残額が賦払エンティティにある場合
カスタム・トレーニング・データを追加できます。ただし、この問題を回避しようとするとリスクがあり、多くのカスタム・トレーニング・データが必要になります。
グループ別+ソート・キー+最小または最大 エンティティでグループ化した後に、属性の最小値または最大値に基づいてエンティティをソートします。
  • 従業員の最高給与に基づいてソートされたすべての部門を表示
  • すべてのジョブを、そのジョブで従業員に支払われた最低給与の順に表示します
カスタム・トレーニング・データを追加します。
グループ化+ソート・キー+最小/最大+制限1または制限N 最初に属性またはエンティティでグループ化し、数値属性の最小値または最大値でソートしてから、最初の行を選択します 最低給与が最も高い部門 カスタム・トレーニング・データを追加します。
Select句とHaving句の集計が異なります。 Select句とHaving句の集計が異なります。 従業員が10人以上いる各部門の平均給与を表示
  • SELECT句にはavg(invoices.amount)、HAVING句にはcount(invoice)が必要です。
カスタム・トレーニング・データを追加します。
Select句とOrder By句の集計が異なります。 Select句とOrder By句の集計が異なります。 各仕入先の名前と平均請求書を表示し、仕入先名をアルファベット順に並べ替えます
  • ここでは、SELECT句にはavg(invoices.amount)が必要で、ORDER BY句にはvendor_nameが必要です。
カスタム・トレーニング・データを追加します。
SELECT句の複数の集計 SQLダイアログでは、単一の集計、平均+合計および最小+最大を含むSelect句がサポートされています。

平均+最小、平均+合計+最大、カウント+合計などの他の組合せはサポートされません。

  • 部門ごとの平均給与と最低給与を表示
  • 各ジョブについて、従業員数と平均給与を表示します
カスタム・トレーニング・データを追加します。
Having + Where句 Having句とWhere句の両方を使用した問合せによるグループ化 6件を超える請求書があるLEGALタイプの仕入先はどれですか。 カスタム・トレーニング・データを追加します。

エンティティの問題のトラブルシューティング

カテゴリ 問題の説明 サポートされていない問合せの例 回避策
タイプ  
  • 会計部門の従業員
    • 値会計にはタイプがあります
  • ジョン・ドーEmlpoyee nme John Doe
    • 属性emlpoyee nmeにタイポがあります
回避策はありません。値の入力は、カスタム・トレーニングでも機能しません。
値リストおよび正規表現以外のエンティティ 値リスト以外のエンティティ・タイプへの属性の関連付け(例: カスタムMLエンティティ)   回避策はありません
ファジー・マッチ ファジー・マッチングの場合、ステミングのみがサポートされます。 Amazonからの請求書
  • コンテキストがなく、値リストには「Amazon LLC」があります。
値リストにシノニムを追加します。
ファジー・マッチ ファジー一致は、_および?文字では機能しません DBX EFTを使用して支払われた請求書
  • コンテキストがなく、値リストにはDBX_EFTがあります。
値リストにシノニムを追加します。
非数値形式の数値 SQLダイアログでは、他の形式(0-10、20および50)で表すことができる数値の限定リストがサポートされています。数値以外の書式で参照されている場合、他のすべての数字はサポートされません。
  • 未払額が30未満である請求書の表示
  • 未払額が1k未満の請求書の表示
  • 未払額が1,000未満である請求書の表示
  • 未払額が1,000未満の請求書を表示します
回避策はありません

その他の問題のトラブルシューティング

カテゴリ 問題の説明 サポートされていない問合せの例 回避策
2つ以上の数値フィルタ 数字を含む2つのWhere句(同じ属性か別の属性か)
  • 給与が10000を超え、コミッションが2000以上の従業員
  • 給与が2000未満または5000以上の従業員
カスタム・トレーニング・データを追加します。
トップ> Superlatives

上位または下位のNエンティティを要求しています。

ノート

モデルは、下部よりも上部の方が堅牢です
最適な従業員の表示
  • 理想的なOMRQLは、「SELECT * FROM Emp ORDER BY * DESC LIMIT 1」です。
  • ただし、モデルにorder by *の問題があります
カスタム・トレーニング・データを追加します。
集計が事前計算される属性 スキーマに、すでに合計を格納している total_amountなどの事前計算された集計がある場合、またはサーバーの合計数を格納するtotal_serversの場合、SUM/COUNT関数または事前計算された集計で属性を使用する必要がある間、モデルが混乱することがあります。 請求書1234の合計金額を表示します
  • ここで、total_amountは導出属性ですが、モデルはSUM(amount)を予測できます。
カスタム・トレーニング・データを追加します。
デフォルトの選択 モデルは、select *ではなくエンティティの名前またはIDを予測することがあります。

これはまれなエラーであり、エンティティのデフォルト属性ではなく最小属性が表示されるため、影響は重要ではありません。

承認された請求書を表示します。
  • 理想的なOMRQLは、approval_status = 'approved'である請求書からのSELECT *です。
  • ただし、モデルは「select invoice_num」を予測します。
カスタム・トレーニング・データの追加(実際の問題の場合)

監視と改善

スキルを構築およびテストするときに、インサイトおよびバッチ・テストを使用して、スキルが目標をどの程度達成しているかを監視し、改善が必要な領域を公開できます。テスト・フェーズに入り、最終的にスキルをパブリックにリリースしたら、定期的な監視およびテストの実行を続行します。

インサイトを使用したモニター

スキルの「インサイト」ページには、SQLダイアログ・スキルのパフォーマンスを測定し、改善を行う場所を決定するために使用できるいくつかのメトリックがあります。

ビジネス・アナリストとして、「概要」タブの次のデータ問合せメトリックに関心がある場合があります:

  • パフォーマンス: ステータス別会話トレンド(折れ線)には、特定の期間における会話の数、およびトラフィックが進行中、停止中または横向きのいずれであるかが表示されます。

  • 「問合せの修正」「不正な問合せ」の比率は、ボット・ユーザーが発話をSQL問合せに変換する精度にどの程度満足しているかを示します。

  • 「完了」「未完了」の会話の比率は、技術的な問題がユーザーのエクスペリエンスに与える影響の範囲を示します。

  • 「合計会話」「未解決(OOD/OOS)問合せ」の比率は、スキルがエンド・ユーザーの期待を満たす範囲を測定するのに役立ちます。

  • 「タイプ別会話トレンド」「会話合計」「データ問合せ会話」の比率は、SQL問合せの発話の割合を示しています。

  • データ問合せエンティティには、問合せが最も多いエンティティが表示されます。

AIトレーナとして、「会話」タブでユーザー・メッセージを調べて、改善の余地を見つけることができます。たとえば、次のユーザー・メッセージを確認できます。

  • タイプ: インテント、結果: 不完全ユーザー・メッセージは、発話のSQL問合せへの変換に関する問題を示します。多くの場合、これらの問題を修正するには、シノニムを追加するか、より複雑な問合せの場合は、マップされた発話を問合せエンティティ・データセットに追加します。これらのメッセージを表示するには、「エラー」ドロップダウン・リストから「システム処理エラー」を選択します。

  • タイプ: インテント、インテント: unresolvedIntentユーザー・メッセージは、スコープ外の発話と、スキルがデータ問合せ発話として認識しない発話の両方を示します。有効なデータ問合せであるが、スキルでは認識されない発話の場合、多くの場合、シノニムを追加したり、問合せデータセットで発話をOMRQLにマップすることで、問題を修正できます。

  • タイプ: データ問合せ、エンティティには、問合せエンティティ別のユーザー・メッセージが表示されます。

  • タイプ: データ問合せ、結果: 不正解は、ユーザーが誤った結果を返したと判断したメッセージを示します。結果が正しくないことを確認し、正しくない場合は、シノニム、値リストおよび問合せデータセット・エントリを適宜追加する必要があります。

問合せエンティティ・バッチ・テストによるモニター

AIトレーナとして、ある領域を改善しても別の領域に悪影響を及ぼさないように、バッチ・テストを作成することをお薦めします。バッチ・テストを使用して、論理モデルの変更がカスタム・トレーニングやSQL会話へのルーティングに悪影響を及ぼさないようにすることもできます。

インテント発話のバッチ・テストと同様に、収集した実際の問合せの約20%を、問合せバッチ・テストに使用するように確保できます。バッチ・テストは、論理モデル、カスタム・トレーニングまたはルーティング・データに変更を加えた後だけでなく、定期的に実行できます。

各テスト・ケースはテスト・スイートに属している必要があるため、テスト・ケースを作成する前に、失敗テスト、ドメイン内テスト、ドメイン外テストなどの問合せテストのいくつかの要素を反映するテスト・スイートを作成することをお薦めします。デフォルト・テスト・スイートと呼ばれるスイートが用意されています。他のテスト・スイートをまだ作成していない場合は、このテスト・スイートにテスト・ケースを割り当てることができます。

テスト・ケースをバッチ・テストに追加するには、次の2つの方法があります。

  • 問合せテスターから発話をテストした後、「テスト・ケースとして保存」ドロップダウンからテスト・スイートを選択して、そのスイートに保存できます。

  • バッチ・テスターの「テスト・スイート」タブで「+テスト・ケース」をクリックできます。

バッチ・テスターにアクセスするには:

  1. 「エンティティ」ページで、「問合せのテスト」をクリックします。

    問合せテスターが開きます。

  2. 「テスト・ケースに移動」をクリックします。

    「テスト・スイート」タブで、テスト・スイートを選択し、すべてのテスト・ケースを実行するか、特定のケースを選択して実行します。結果は、「テスト結果」ページに表示されます。テストが完了するまでに時間がかかります。「進行中」0と表示されると、実行が完了したことがわかります。

OMRQL参照

問合せエンティティ・データセットに追加する発話のOMRQL問合せを定義するときに使用できるキーワードを次に示します。プライマリ名とシノニムではなく、正規名を使用します。

コンポーネント OMRQLキーワード OMRQLの例 制約
基本コンポーネント
  • 選択
  • *
  • FROM
SELECT * FROM EMP OMRQLでは、発話で参照されていない属性に名前を付けることはできません。
フィルタリング WHERE 従業員WHERE salary > 100000 ありません。
エンティティのリンク

この仕組みについては、「リンク属性」を参照してください。

.(ピリオド) SELECT * FROM Employee WHERE Departments.location = 'NYC' ありません。
順序付け
  • 順序基準
  • LIMIT
  • ASC
  • DESC
SELECT name FROM Employee ORDER BY salary DESC LIMIT 10 OMRQLでは、ORDER BY <ATTR> [LIMIT N]を使用してデータを順序付けできるのは、発話に単語順序またはその自然言語のシノニム(ソート、順序付け、最高、最小など)が含まれている場合のみです。
特定の属性のない順序付け

機能の説明は、「*による順序付け」を参照してください。

順序基準* SELECT name FROM Employee ORDER BY * DESC LIMIT 10 ORDER BY *は、UIでエンティティに"measure_by"値が設定されている場合にのみエンドツーエンドで機能します
集計関数
  • COUNT
  • 個別
  • AVG
  • 合計
  • MIN
  • MAX
従業員からのAVGの選択 OMRQLにDISTINCTを含めることができるのは、発話にその単語が含まれている場合、または異なる、一意などの自然言語シノニムが含まれている場合のみです。
グループ化
  • グループ基準
SELECT location, AVG(Employees.salary) FROM Department GROUP BY location FROM句には、group by属性が属するエンティティが含まれている必要があります
エンティティ別グループ グループ化* SELECT *, MAX(Employees.salary) FROM Department GROUP BY *

ノート:このグループは、from句のエンティティ別にグループ化されます(バックエンドは、ルート・エンティティの主キーでグループ化基準*をグループ化基準に変換します)

 
グループ化とフィルタリング 次である SELECT location FROM Department GROUP BY location HAVING AVG(Employees.salary) < 4000  
比較演算子
  • =
  • !=
  • <>
  • >
  • >=
  • <
  • <=
  • LIKE
  • NOT LIKE
  • IN
  • NOT IN
SELECT * from Department WHERE name IN ('Sales', 'HR') >、>= 、<および<= 演算子の場合、発話には、より大きい、少なくとも、より小さい、最大などの同等の自然言語シノニムが含まれている必要があります。

発話に演算子のシノニムが含まれていない場合は、OMRQLに= が含まれている必要があります。

OMRQLにLIKEを含めることができるのは、発話にその単語が含まれている場合、またはinclude、contains、substringなどの自然言語シノニムが含まれている場合のみです。

OMRQLにBETWEENを含めることができるのは、発話にその単語または自然言語のシノニム(範囲内など)が含まれている場合のみです。

論理演算子
  • AND
  • または
  • NOT
SELECT name FROM Employee WHERE salary > 10000 AND role = 'VP' ありません。

OMRQL文のすべての値は、データベースの値と書式と完全に一致する必要があります。たとえば、「Who is the employee whose name is Jones」という発話があるとします。name属性のデータベース値がすべて大文字の場合、name値もすべて大文字である必要があります。「SELECT * FROM Emp WHERE name = 'JONES'」です。

マッピングする発話で実際のデータベース値にシノニムが使用されている場合、そのシノニムを値リストの値に定義する必要があり、OMRQLでは実際のデータベース値を使用する必要があります。たとえば、発話が"show the department whose location is the big apple"の場合、dept_loc値リストには"NEW YORK"という値のシノニムとして"big apple"を定義する必要があり、OMRQLは"SELECT * FROM Dept WHERE loc = 'NEW YORK'"である必要があります。

発話のOMRQLを記述する方法の例を次に示します:

発話 SQL OMRQL コメント
事務員として働くすべての従業員を表示 SELECT * FROM Emp WHERE job = 'CLERK' SELECT * FROM Emp WHERE job = 'CLERK' OMRQLはSQLと同じです。
営業部門に勤務する従業員の数を表示 SELECT COUNT(*) FROM Emp AS T1 JOIN Dept AS T2 ON T1.deptno = T2.deptno WHERE T2.dname = 'SALES' SELECT COUNT(*) FROM Emp WHERE dept.dname = 'SALES' JOINのかわりに、link_attribute.attribute_nameを使用して別のエンティティの属性を参照します。
Adamsはどの部門のメンバーですか? SELECT * FROM Deptno AS T1 JOIN Emp AS T2 ON T1.deptno = T2.deptno WHERE T2.ename = 'Adams' SELECT * FROM Dept WHERE emp.ename = 'ADAMS' JOINのかわりに、link_attribute.attribute_nameを使用して別のエンティティの属性を参照します。
従業員Adamsの部門事業所およびジョブ・ロールは何ですか T1を選択します。ロケーション、T2。部門からのジョブ T1結合従業員 T2上の T1.DEPTNO = T2。部門番号 T2ENAME = 'ADAMS' SELECTロケール、 emp.job FROM Dept WHERE emp.ename = 'ADAMS' OMRQLがSQLよりも簡単に記述できることに注意してください。
ジョブ・ロールごとに何人の従業員がいますか。 SELECT COUNT(*)、job FROM Emp GROUP BYジョブ SELECT COUNT(*)、job FROM Emp GROUP BYジョブ OMRQLはSQLと同じです。
最も給与が高い従業員はどれですか。 SELECT * FROM Emp ORDER BY salary DESC LIMIT 1 SELECT * FROM Emp ORDER BY salary DESC LIMIT 1 OMRQLはSQLと同じです。
給与順に従業員名および部門名を昇順で表示します SELECT T1.ename, T2.dname FROM Emp AS T1 JOIN Dept AS T2 ON T1.deptno = T2.deptno ORDER BY T1.sal ASC SELECT ename, dept.dname FROM Emp ORDER BY salary ASC OMRQLがSQLよりも簡単に記述できることに注意してください。
各事業所の従業員数 SELECT COUNT(*), loc FROM Emp AS T1 JOIN Dept AS T2 ON T1.deptno = T2.deptno GROUP BY T2.loc SELECT loc, COUNT(emp) from Dept GROUP BY loc GROUP BYでは、リンクされたエンティティをカウントするときに、COUNT(*)のかわりに新しいCOUNT(LINK)構文を使用します。これにより、OMRQLはSQLよりも読みやすくなります。
平均給与が40000以上の事業所の表示 SELECT T2.name FROM Emp AS T1 JOIN Dept AS T2 ON T1.deptno = T2.deptno GROUP BY T2.name HAVING AVG(T1.sal) >= 40000 SELECT loc from Dept GROUP BY loc HAVING AVG(emp.sal) <= 40000 HAVING句を使用したGROUP BYの例。
各部門の従業員の平均給与 SELECT AVG(T1.sal), T2.dno FROM Emp AS T1 JOIN Dept AS T2 ON T1.deptno = T2.deptno GROUP BY T2.dno SELECT *, AVG(sal) from Dept GROUP BY * ここでの目標は、departmentエンティティの一意の属性でグループ化することです。主キーは最も適切な候補ですが、主キーの表示が常に役立つとはかぎりません。

OMRLでは、かわりに*でグループ化します。バックエンドは主キー別にグループ化され、結果をより使いやすくするためにエンティティの最小属性も表示されます

各部門の従業員の勤務地と最低給与の表示 SELECT T2.dno, T2.loc, MIN(T1.sal) FROM Emp AS T1 JOIN Dept AS T2 ON T1.deptno = T2.deptno GROUP BY T2.dno, T2.loc SELECT *, loc, MIN(sal) from Dept GROUP BY *, loc ここでは、引き続き部門エンティティ別にグループ化しますが、発話は特に部門の場所の表示を要求しています。SELECT句とGROUP BY句の両方に*およびリクエストされた表示属性があることに注意してください。
平均給与が最も高い部門の名前と事業所の表示 SELECT T2.name, T2.loc FROM Emp AS T1 JOIN Dept AS T2 ON T1.deptno = T2.deptno GROUP BY T2.name ORDER BY AVG(T1.sal) LIMIT 1 SELECT *, name, loc from Dept GROUP BY *, name, loc ORDER BY AVG(emp.sal) LIMIT 1 エンティティでグループ化し、要求された属性を表示する別の例(今回はORDER BY LIMIT 1を使用)
上位10の従業員の表示 SELECT * from Emp ORDER BY rating LIMIT 10から SELECT * from Emp ORDER BY * LIMIT 10 「最良の従業員」が評価順に並べられていると仮定すると、評価はEmpエンティティの「measure_by」属性として設定されます。

リンク属性

エンティティのリンクを除き、OMRQLコンポーネントはSQLに似ています。SQL JOINのかわりに、リンク属性のペアを使用してエンティティを別のエンティティにリンクします。リンク属性には、エンティティ間の関係を定義するプライマリ名とシノニムがあります。たとえば、1-1の関係を持つ従業員/部門属性リンクには、プライマリ名"department"およびシノニム"works in"、"belongs to"および"team"を指定できます。1対多関係を持つ部門/従業員属性リンクには、プライマリ名"employees"およびシノニム"members"および"workers"を指定できます。

一般的な主キー/外部キー・リンク属性の他に、次のタイプのリンク属性も指定できます。

  • 複数のセマンティック関係を定義する、あるエンティティから別のエンティティへの複数のリンク属性。
  • 自己結合を意味するエンティティからそれ自体へのリンク属性。
  • 多対多結合による交差表のリンク属性

順序基準*

アスタリスク(*)は、ユーザーがソート基準を指定せずに何かをオーダーするよう求める場合にORDER BYとともに使用されます。たとえば、"show the top 10 employees" (順序付けが必要な属性が不明)。バックエンドは、*をデフォルトの事前指定属性(measure_by)に置き換えます。