Text reranking
==============

``aidb.rerank_text()``
ファンクションを使用して、クエリーとの関連性によって一連の候補テキストパッセージを並べ替えます。再ランキングは通常、取得後のステップとして適用され、候補の初期セットがナレッジベースから取得された後、最も関連性の高い結果を上部に表示します。

**ステップ1リランキングモデルを登録する**

.. code:: sql

   - - Remote: NVIDIA NIM
   SELECT aidb.create_model(
       my_reranker,
       nim_reranking,
       config => aidb.nim_reranking_config(
           api_key => nvapi-...,  -- or use create_models own credentials_env parameter instead, to avoid storing this
           model   => nvidia/nv-rerankqa-mistral-4b-v3
       )
   );

   - - Local: llama.cpp (GGUF), no API key required
   SELECT aidb.create_model(
       my_reranker,
       llamacpp_reranking,
       config => jsonb_build_object(
           model, gpustack/bge-reranker-v2-m3-GGUF,
           model_file, bge-reranker-v2-m3-Q4_K_M.gguf,
           n_ctx, 2048
       )
   );

**ステップ2:候補セットを再ランク付けする**

.. code:: sql

   SELECT * FROM aidb.rerank_text(
       model_name => my_reranker,
       query      => What is retrieval-augmented generation?,
       input      => ARRAY[
           RAG combines retrieval and generation to produce grounded answers.,
           Vector databases store high-dimensional embeddings for similarity search.,
           RAG systems retrieve relevant documents before generating a response.
       ]
   ) ORDER BY logit_score DESC;

   __OUTPUT__
                                 text                              | logit_score | id
   - ---------------------------------------------------------------+-------------+----
    RAG systems retrieve relevant documents before generating ...  |        0.97 |  2
    RAG combines retrieval and generation to produce grounded ...  |        0.91 |  0
    Vector databases store high-dimensional embeddings for ...     |        0.43 |  1
   (3 rows)

``id`` 列は、\ ``input``
配列内の各文字列の0ベースのインデックスであるため、元のデータに結合して戻すことができます。

完全なパラメーターのリファレンスについては、
:ref:`Models reference <Models reference>` を参照してください。

ナレッジベースの取得後に再ランキングを使用する
----------------------------------------------

一般的なパターンは、ナレッジベースから初期候補セットを取得し、結果を再ランク付けすることです。

.. code:: sql

   WITH candidates AS (
       SELECT key, value
       FROM aidb.retrieve_text(my_kb, What is RAG?, topk => 20)
   )
   SELECT c.key, c.value, r.logit_score
   FROM candidates c
   JOIN aidb.rerank_text(
       model_name => my_reranker,
       query      => What is RAG?,
       input      => ARRAY(SELECT value FROM candidates ORDER BY key)
   ) r ON r.text = c.value
   ORDER BY r.logit_score DESC
   LIMIT 5;

!!!note
再ランキングモデルは、クエリに対してパッセージをスコアリングしますが、テキストは生成しません。リランキングモデルを登録するには、プロバイダーに適切な :ref:`モデル構成ヘルパー <モデル構成ヘルパー>` を使用します。たとえば、NVIDIA
NIMリランキングエンドポイントの\ ``aidb.nim_reranking_config()`` 。
``llamacpp_reranking``
にはまだ構成ヘルパーがありません。上記のように、代わりに\ ``jsonb_build_object()``
を使用して\ ``config`` をビルドします。
:ref:`Local models <Local models>` を参照してください。

!!!note ``logit_score``
のスケールはプロバイダーによって異なります。上記の例のように、固定範囲の正規化スコアを結果ことができるものもありますが、
``llamacpp_reranking``
は生の境界なしのモデルロジットを結果ます。異なるプロバイダーまたは呼び出し間ではなく、1つの\ ``aidb.rerank_text()``
呼び出しとプロバイダー内のスコアを比較します。
