Vertex AI RAG Engine の再ランク付け

このページでは、再ランキングとランキングの種類について説明します。このページでは、Vertex AI ランキング API を使用して、取得した回答を再ランキングする方法についても説明します。

利用可能な再ランキング ツール

ランカー オプション 説明 レイテンシ 精度 料金
Vertex AI ランキング API Vertex AI ランキング API は、高精度の関連性スコアリングと低レイテンシを実現するように設計されたスタンドアロンのセマンティック リランカーです。

Vertex AI ランキング API の詳細については、ランキング API で検索と RAG の品質を改善するをご覧ください。
非常に低い(100 ミリ秒未満) 最先端のパフォーマンス Vertex AI RAG Engine リクエストごと
LLM 再ランキング ツール LLM 再ランキング ツールは、Gemini への別の呼び出しを使用して、クエリに対するチャンクの関連性を評価します。 高(1 ~ 2 秒) モデルによって異なる LLM トークンの料金

Vertex AI ランキング API を使用する

Vertex AI ランキング API を使用するには、Discovery Engine API を有効にする必要があります。サポートされているすべてのモデルについては、ランキング API で検索と RAG の品質を向上させるをご覧ください。

次のコードサンプルは、ツール構成で Vertex AI ランキング API を使用してランキングの再ランキングを有効にする方法を示しています。

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

サンプルコードで使用されている次の変数を置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_NAME: コンテンツ生成用の LLM モデル。例: gemini-2.0-flash
  • INPUT_PROMPT: コンテンツ生成のために LLM に送信されるテキスト。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。
    形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • SIMILARITY_TOP_K: 省略可。取得する上位コンテキストの数。
  • RANKER_MODEL_NAME: 再ランキングに使用するモデルの名前。例: semantic-ranker-default@latest
from vertexai import rag
from vertexai.generative_models import GenerativeModel, Tool
import vertexai

PROJECT_ID = "PROJECT_ID"
CORPUS_NAME = "projects/{PROJECT_ID}/locations/LOCATION/ragCorpora/RAG_CORPUS_RESOURCE"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

config = rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        rank_service=rag.RankService(
            model_name=RANKER_MODEL_NAME
        )
    )
)

rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_resources=[
                rag.RagResource(
                    rag_corpus=CORPUS_NAME,
                )
            ],
            rag_retrieval_config=config
        ),
    )
)

rag_model = GenerativeModel(
    model_name="MODEL_NAME", tools=[rag_retrieval_tool]
)
response = rag_model.generate_content("INPUT_PROMPT")
print(response.text)
# Example response:
#   The sky appears blue due to a phenomenon called Rayleigh scattering.
#   Sunlight, which contains all colors of the rainbow, is scattered
#   by the tiny particles in the Earth's atmosphere....
#   ...

REST

Gemini モデルを使用してコンテンツを生成する場合は、Vertex AI GenerateContent API を呼び出します。リクエストを行うときに RAG_CORPUS_RESOURCE を指定すると、モデルは Vertex AI RAG Engine からデータを自動的に取得します。

サンプルコードで使用されている次の変数を置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_NAME: コンテンツ生成用の LLM モデル。例: gemini-2.0-flash
  • GENERATION_METHOD: コンテンツ生成の LLM メソッド。オプションには generateContentstreamGenerateContent があります。
  • INPUT_PROMPT: コンテンツ生成のために LLM に送信されるテキスト。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。
    形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • SIMILARITY_TOP_K: 省略可。取得する上位コンテキストの数。
  • RANKER_MODEL_NAME: 再ランキングに使用するモデルの名前。例: semantic-ranker-default@latest
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_NAME:GENERATION_METHOD" \
-d '{
  "contents": {
    "role": "user",
    "parts": {
      "text": "INPUT_PROMPT"
    }
  },
  "tools": {
    "retrieval": {
      "disable_attribution": false,
      "vertex_rag_store": {
        "rag_resources": {
            "rag_corpus": "RAG_CORPUS_RESOURCE"
          },
        "rag_retrieval_config": {
          "top_k": SIMILARITY_TOP_K,
          "ranking": {
            "rank_service": {
              "model_name": "RANKER_MODEL_NAME"
            }
          }
        }
      }
    }
  }
}'

Vertex AI RAG Engine で LLM リランカーを使用する

このセクションでは、LLM 再ランキング ツールを使用する際の前提条件とコードサンプルについて説明します。

LLM 再ランキング ツールは Gemini モデルのみをサポートしています。Gemini モデルには、Vertex AI RAG Engine API が有効になっている場合にアクセスできます。サポートされているモデルの一覧については、Gemini モデルをご覧ください。

Vertex AI RAG Engine API を使用して関連するコンテキストを取得する手順は次のとおりです。

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

コードサンプルで使用されている次の変数を置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • TEXT: 関連するコンテキストを取得するクエリテキスト。
  • MODEL_NAME: 再ランキングに使用するモデルの名前。
from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
CORPUS_NAME = "projects/[PROJECT_ID]/locations/LOCATION/ragCorpora/RAG_CORPUS_RESOURCE"
MODEL_NAME= "MODEL_NAME"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

rag_retrieval_config = rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        llm_ranker=rag.LlmRanker(
            model_name=MODEL_NAME
        )
    )
)

response = rag.retrieval_query(
    rag_resources=[
        rag.RagResource(
            rag_corpus=CORPUS_NAME,
        )
    ],
    text="TEXT",
    rag_retrieval_config=rag_retrieval_config,
)
print(response)
# Example response:
# contexts {
#   contexts {
#     source_uri: "gs://your-bucket-name/file.txt"
#     text: "....
#   ....

REST

コードサンプルで使用されている次の変数を置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • TEXT: 関連するコンテキストを取得するクエリテキスト。
  • MODEL_NAME: 再ランキングに使用するモデルの名前。
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION:retrieveContexts" \
  -d '{
    "vertex_rag_store": {
      "rag_resources": {
          "rag_corpus": "RAG_CORPUS_RESOURCE"
        }
    },
    "query": {
      "text": "TEXT",
      "rag_retrieval_config": {
        "top_k": 10,
        "ranking": {
          "llm_ranker": {
            "model_name": "MODEL_NAME"
          }
        }
      }
    }
  }'

次のステップ