RERANK

より関連性の高い検索出力を取得するために、結果の初期セットを再評価および並替えするには、DBMS_VECTOR.RERANKファンクションを使用します。

用途

類似検索シナリオと検索拡張生成(RAG)シナリオの両方で検索結果の関連性と品質を向上させます。

再ランク付けは、最も関連性の高いドキュメントまたはチャンクが優先されるようにすることで、LLMに取り込まれた情報の品質を向上させます。これにより、ハルシネーションを減らし、生成された出力の精度を向上させることができます。

この操作では、Oracle AI Vector Searchは、CohereおよびVertex AIが提供する再ランク付けモデルをサポートしています。

警告:

データベースの特定の機能により、たとえば、REST APIへのアクセスを容易にするJSON仕様を使用して、第三者によって個別に提供されるサービスにアクセスできる場合があります。

お客様によるこれらの機能の使用は、お客様自身の責任においてのみ行われ、お客様は、当該第三者サービスの使用に関連するあらゆる条件を遵守する責任を負います。第三者のサービスに関するその他の条件にかかわらず、お客様は、かかるデータベース機能の使用によって、そのリスクを受諾し、当該アクセスにより生じた一切の損害について、Oracleの責任または法的責任を明示的に除外することになります。

構文

DBMS_VECTOR.RERANK(
                QUERY      IN CLOB,
                DOCUMENTS  IN JSON,
                PARAMS     IN JSON default NULL
) return JSON;

このファンクションは、問合せを含む入力をCLOBとして、ドキュメントのリストをJSON形式で受け取ります。次に、この情報を処理して、再ランク付けされたドキュメントのリストを含むJSONオブジェクトをスコアでソートして生成します。

たとえば、再ランク付けされた出力には次のものが含まれます:
{
    "index"   : "1",
    "score"   : "0.99",
    "content" : "Jupiter boasts an impressive system of 95 known moons."
}
説明は次のとおりです。
  • indexは、入力テキストのリスト内のドキュメントの位置を示します。

  • scoreは、関連スコアを示します。

  • contentは、索引に対応する入力テキストを示します。

QUERY

検索問合せ(通常は初期検索の)をCLOBとして指定します。

DOCUMENTS

文字列のJSON配列(再ランク付けする関連している可能性のあるドキュメントのリスト)を次の形式で指定します:

{
  "documents": [
  "string1",
  "string2",
    ...
  ]
}

PARAMS

JSON形式で次のパラメータのリストを指定します。これらのパラメータはすべて必須です。

{
  "provider"         : "<service provider>",
  "credential_name"  : "<credential name>",  
  "url"              : "<REST endpoint URL for reranking>",
  "model"            : "<reranking model name>",
  ...
}

表12-10 RERANKのパラメータの詳細

パラメータ 説明

provider

再ランク付けでアクセスするためにサポートされているRESTプロバイダ:

  • cohere

  • vertexai

credential_name

次の形式の資格証明の名前:

schema.credential_name

資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。

まず、資格証明を作成および格納するためにDBMS_VECTOR.CREATE_CREDENTIALヘルパー関数をコールして、資格証明をセットアップしてから、ここで資格証明書の名前を参照する必要があります。

「CREATE_CREDENTIAL」を参照してください。

url

「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」にリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。

model

次の形式の再ランク付けモデルの名前:

schema.model_name

モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。

追加のRESTプロバイダのパラメータ:

オプションで、再ランク付け用のプロバイダ固有の追加パラメータを指定します。

重要:

Cohereの例:
{
  "provider"        : "cohere", 
  "credential_name" : "COHERE_CRED",
  "url"             : "https://api.cohere.example.com/rerank",
  "model"           : "rerank-english-v3.0",
  "return_documents": false,
  "top_n"           : 3
}
Vertex AIの例:
{
  "provider"         : "vertexai",
  "credential_name"  : "VERTEXAI_CRED",
  "url"              : "https://googleapis.example.com/default_ranking_config:rank",
  "model"            : "semantic-ranker-512@latest",
  "ignoreRecordDetailsInResponse" : true,
  "topN"             : 3
  }

表12-11 追加のRESTプロバイダのパラメータの詳細

パラメータ 説明

return_documents

検索結果とともに元のドキュメントまたは入力テキスト(content)を返すかどうか:

  • false(デフォルト、推奨): 入力テキストを返さない(索引とスコアのみを返す)場合

  • true: 索引およびスコアとともに入力テキストを返します

ノート: Cohereをプロバイダとして使用する場合、Oracleでは、パフォーマンスを向上させるためにこのオプションを無効にしておくことをお薦めします。元のテキストを表示する必要がある場合に、デバッグのために有効にすることもできます。

ignoreRecordDetailsInResponse

検索結果とともに元のレコードの詳細または入力テキスト(content)を返すかどうか:

  • false (デフォルト): 索引およびスコアとともに入力テキストを返す場合

  • true (推奨): 入力テキストを返さない(索引とスコアのみを返す)場合

ノート: Vertex AIをプロバイダとして使用する場合、Oracleでは、パフォーマンスを向上させるためにこのオプションを有効にしておくことをお薦めします。元のテキストを表示する必要がある場合、デバッグのために無効にすることもできます。

top_nまたはtopN

返される最も関連性の高いドキュメントの数。

  • Cohereを使用した場合:

    declare
      params clob;
      reranked_output json;
    begin
      params := '
    {
      "provider": "cohere",
      "credential_name": "COHERE_CRED",
      "url": "https://api.cohere.com/v1/rerank",
      "model": "rerank-english-v3.0",
      "return_documents": true,
      "top_n": 3
    }';
    
      reranked_output := dbms_vector.rerank(:query, json(:initial_retrieval_docs), json(params));
      dbms_output.put_line(json_serialize(reranked_output));
    end;
    /
  • Vertex AIを使用した場合:

    declare
      params clob;
      reranked_output json;
    begin
      params := '
    {
      "provider": "vertexai",
      "credential_name": "VERTEXAI_CRED",
      "url": "https://discoveryengine.googleapis.com/v1/projects/1085581009881/locations/global/rankingConfigs/default_ranking_config:rank",
      "model": "semantic-ranker-512@latest",
      "ignoreRecordDetailsInResponse": false,
      "topN": 3
    }';
    
      reranked_output := dbms_vector.rerank(:query, json(:initial_retrieval_docs), json(params));
      dbms_output.put_line(json_serialize(reranked_output));
    end;
    /

エンドツーエンドの例:

この関数を使用してエンドツーエンドのシナリオ例を実行するには、「RAG結果を向上させるのための再ランク付けの使用」を参照してください。