Knowledge bases
===============

ナレッジベースKBには、エンベディングとその構成モデル、距離演算子、ベクトルインデックスが保存されます。パイプラインはそれに書き込み、
:ref:`aidb.retrieve_text() <aidb.retrieve_text()>` または :ref:`aidb.retrieve_key() <aidb.retrieve_key()>` を使用して名前で照会します。

ナレッジベースは、単一のパイプラインと :ref:`지식 기반 <지식 기반>` 
から始まります。同じナレッジベースに追加のパイプラインを接続できます。さまざまなソースまたは処理チェーンをすべて、1つの照会可能なベクトルテーブルへのエンベディングに貢献させます。

.. csv-table::
  :header: Page,What it covers
  :widths: 10,30
  :align: left
  :class: longtable

  :ref:`Multi-pipeline knowledge bases<Multi-pipeline knowledge bases>` ,Attach multiple pipelines to one KB; compatibility rules and deletion semantics
  :ref:`Hybrid search<Hybrid search>` ,Combining semantic search with relational filters and full-text search
  :ref:`Examples<Examples>` ,End-to-end worked examples for table and volume sources

取得ファンクション
------------------

パイプラインが実行されたら、 ``aidb.retrieve_text()``
または\ ``aidb.retrieve_key()``
を使用してナレッジベースを照会します。どちらもベクトルの類似度を使用して、正確なキーワードではなく意味に基づいて結果を検索し、クエリ入力として\ ``TEXT``
と\ ``BYTEA`` の両方をサポートしています。

検索ファンクションの流れ
------------------------

取得ファンクションが呼び出されると、システムは内部で次の手順を実行します。

- **埋め込み**
  入力クエリテキストまたは画像は、そのナレッジベース用に構成された特定の埋め込みモデルを使用してベクトルに変換されます。

- **類似性検索**
  ベクトル類似性検索は、ナレッジベースの内部ベクトルテーブルに対して実行され、上位Kの最近傍を見つけます。

- **ソースルックアップテキストのみ** ``retrieve_text``
  の場合、システムはソーステーブルを識別し、一致したキーに対応する生のコンテンツを取得します。

promoteb.retrieve_text()
^^^^^^^^^^^^^^^^^^^^^^^^

このファンクションは、最も近いベクトル一致に関連付けられた実際のソーステキストを取得する必要がある場合に使用します。

- **プロセス**
  ファンクションはクエリーを埋め込み、類似性検索を実行して、第2フェーズを実行して、\ ``pipeline_id``
  を使用して元のテーブルからソーステキストをルックアップします。

- **戻り値** 以下を含む列のセット

- **key** ソーステーブルの識別子

- **value** 実際のソーステキスト

- **distance** 類似性スコア。通常、低いほど、より近い一致を示します。

- **part_ids** 一致した特定のチャンクまたはパーツを示すIDの配列。

- **pipeline_name** データを提供したパイプラインの名前。

- \**intermediate_steps\* \*
  ナレッジベースの前に発生するステップからのデータを含むJSONB列。例、ChunkText。

promoteb.retrieve_key()
^^^^^^^^^^^^^^^^^^^^^^^

このファンクションは、完全なソースコンテンツではなく、一致の一意の識別子のみが必要な高パフォーマンスの検索に使用します。

- **戻り値** 以下を含む列のセット

- **key** ソーステーブルからの識別子

- **distance** 類似度スコア。通常、低い値は、より近い一致を示します。

- **part_ids** 一致した特定のチャンクまたはパーツを示すIDの配列。

- **pipeline_name** データを提供したパイプラインの名前。

高度なクエリー 中間ステップの結合
---------------------------------

ChunkTextやParseHtmlなどの中間変換を含むパイプラインの場合、
``part_ids``
列を使用して取得結果を中間パイプラインテーブルと結合することにより、特定の変換済みセグメントにアクセスできます。

構文の例
^^^^^^^^

次のクエリは、取得結果を中間ステップテーブルと結合して、特定のチャンク値にアクセスします。

.. code:: sql

   SELECT 
       r.key, 
       r.value, 
       r.distance, 
       r.part_ids, 
       int_step.value AS chunked_content
   FROM aidb.retrieve_text(my_kb, search query, 5) AS r
   JOIN pipeline_my_pipeline_step_1 AS int_step
     ON int_step.source_id = r.key
     AND int_step.part_ids = (r.part_ids)[:1];

.. toctree::
  :maxdepth: 3

  knowledge-bases--example
  knowledge-bases--hybrid-search--index
  knowledge-bases--multi-pipeline
