Text-to-SQL
===========

Text-to- SQLは、 *「前四半期に最も費やした顧客はどこですか?」*
などの自然言語の質問を、独自のスキーマに対する正しいクエリーに変換します。セマンティックKBにより、これが信頼できます。テーブル名と列名を推測するのではなく、質問は最初にKBのインデックス付けされたスキーマに基づいています。

2つの補完的なパスが :ref:`Searching a semantic knowledge base <Searching a semantic knowledge base>`  にビルドされます。

- **エージェント駆動。**
  :ref:`Agents reference <Agents reference>` は、関連するスキーマを検出するツールとしてKBの検索機能を呼び出し、
  SQLを生成および実行します。オープンエンドの会話型分析に最適です。

- **アプリケーション駆動**
  アプリケーションは :ref:`エイリアスを見つける <エイリアスを見つける>` および :ref:`エイリアスを実行する <エイリアスを実行する>` を呼び出して、確認されたパラメーター化されたクエリーに質問を解決します。決定論的で管理された回答が必要な繰り返しの質問に最適です。

text-to- SQLエンジンとしてのエージェント
----------------------------------------

セマンティックKB検索機能は、ネイティブ :ref:`agent tools <Knowledge bases reference>` 
として登録されます。これらのツールを与えられたエージェントは、質問がマップするテーブルと列を自分自身で見つけ、それらに基づいてSQLを書くことができます。利用するツール

.. csv-table::
  :header: Tool,Role in text-to-SQL
  :widths: 10,30
  :align: left
  :class: longtable

  :ref:`AI pipelines <Searching a semantic knowledge base>` ,One ranked list of the schema entities (and any matching aliases) relevant to the question.
  :ref:`AI pipelines <Searching a semantic knowledge base>`  /  :ref:`AI pipelines <Searching a semantic knowledge base>`  /  :ref:`AI pipelines <Searching a semantic knowledge base>` ,"Narrower schema lookups when the agent needs only tables, only columns, or lean definitions."
  :ref:`AI pipelines <Searching a semantic knowledge base>` ,Finds entities through the intent captured in `COMMENT ON` text.
  `run_sql_query`,Runs the read-only SQL the agent generates and returns the rows.

すべての検索ツールは読み取り専用であるため、エージェントは書き込みのリスクなしで自由にスキーマを探索できます。

ワークフロー
------------

::

      "Which customers        ┌───────────────────────┐
       spent the most   ─────▶│  agent (pg_agent)     │
       last quarter?"         └───────────┬───────────┘
                                          │ 1. discover schema
                                          ▼
                              ┌───────────────────────┐
                              │  semantic_kb_search   │  schema entities
                              │  (+ get_metadata, …)  │  + matching aliases
                              └───────────┬───────────┘
                                          │ 2. generate SQL grounded in the results
                                          ▼
                              ┌───────────────────────┐
                              │  run_sql_query        │  execute read-only SQL
                              └───────────┬───────────┘
                                          ▼
                                      answer rows

1. **Discover.** エージェントは\ ``semantic_kb_search``
   および必要に応じてより狭いファンクションを呼び出して、質問がマップする正確なテーブル、列、コメントに加えて、既に一致する :ref:`Semantic aliases <Semantic aliases>` を取得します。これらは\ ``source_type = 'alias'``
   で結果に表示されます。

2. **Generate、grounded.**
   エージェントは、取得した定義に対してSQLを書き込みます。実際のスキーマコンテキスト実際の列名、タイプ、コメントに対する生成は、テーブル名のみに対して生成するよりもはるかに正確です。

3. **Run.** エージェントは\ ``run_sql_query``
   でSQLを実行し、行を結果ます。

このようなエージェントを構築するには、作成時にセマンティックKBツールを提供します。
:ref:`Managing agents <Managing agents>` および :ref:`tool catalog <Knowledge bases reference>` を参照してください。

代わりにエイリアスに手を伸ばす場合
----------------------------------

エイリアスは、エージェント生成の決定論的な対応物です。
:ref:`Semantic aliases <Semantic aliases>` は、レビューされたパラメーター化された\ ``SELECT``
であるため、検証する要求ごとの生成なしで信頼できる結果を返します。次の場合にエイリアスを使用します。

- 同じ質問が繰り返し発生し、1つの正規クエリーに値します。

- エイリアスが単一の読み取り専用の\ ``SELECT``
  として実行され、\ ``execute_role``
  を介して最小特権ロールで実行できるガバインド実行が必要です。

エイリアスは\ ``semantic_kb_search``
結果内の表面に表示されるため、エージェントは質問にキュレートされたクエリが存在することを
*確認*
できます。ただし、エイリアスの実行は、\ ``aidb.execute_semantic_alias()``
を介して直接実行されます。エイリアス機能は意図的にエージェントツールではありません。

raw生成との比較
---------------

- **根拠あり、推測ではありません。**
  モデルは、関連するリレーションの実際の定義とコメントを参照するため、存在する列を適切なタイプで参照します。

- **信頼できる回答が発生します。**
  エイリアスとしてキャプチャしたすべての質問は、生成の必要がなくなった質問であり、モデルが間違ったSQLを生成する可能性のあるサーフェスを縮小します。

- **構築による読み取り専用。**
  スキーマ検索ツールとエイリアスはすべて読み取り専用であるため、検出パスと回答パスはデータを変更できません。

次のステップ
------------

- :ref:`Examples <Examples>` のサンプルスキーマのフロー全体を説明します。

- :ref:`Searching a semantic knowledge base <Searching a semantic knowledge base>` の検索機能と
  :ref:`Semantic aliases <Semantic aliases>` のエイリアス機能を確認します。
