取得とランキング

このページでは、再ランク付けについて説明し、API を使用して取得した回答を再ランク付けする方法について説明します。

検索後の再ランキングは、検索結果の関連性を高める手法です。Vertex AI RAG Engine には、クエリ中に取得された結果の関連性を高めるオプションの再ランクツールが用意されています。再ランク付けツールは、クエリのチャンクの関連性を評価し、それに応じて結果を並べ替えます。新しい順序により、クエリに応じてより適切なレスポンスが生成されます。また、モデル推論のプロンプトに含めて、より関連性の高い正確なレスポンスを生成することもできます。

利用可能な再ランクツール

このセクションでは、再ランクの種類について説明します。

LLM 再ランクツール

LLM 再ランクツールは、LLM を使用してクエリに対するチャンクの関連性を評価し、それに応じて結果を並べ替える再ランクツールです。これにより、より適切な回答が得られ、モデル推論用のプロンプトが改善されます。

Vertex AI ランクサービス リランク

ランクサービス再ランク付けツールは、ドキュメントのリストを取得し、ドキュメントがクエリにどの程度関連しているかに基づいてドキュメントを再ランク付けする rank API に基づいています。ドキュメントとクエリの意味的な類似性のみを考慮するエンベディングと比較して、この方法では、ドキュメントが特定のクエリにどの程度適切に回答しているかを正確にスコア付けできます。

再ランクツールの使用方法

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

LLM 再ランクツールを使用するための前提条件

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

RAG API を使用して関連するコンテキストを取得する

このコードサンプルは、RAG API を使用して関連するコンテキストを取得する方法を示しています。

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/v1beta1/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"
          }
        }
      }
    }
  }'

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.preview import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
CORPUS_NAME = "projects/[PROJECT_ID]/locations/LOCATION/ragCorpora/[RAG_CORPUS_ID]"
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: "....
#   ....

RAG API を使用してコンテンツを生成する

REST

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

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

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: コンテンツ生成用の LLM モデル。例: gemini-1.5-flash-002
  • GENERATION_METHOD: コンテンツ生成の LLM メソッド。generateContentstreamGenerateContent を指定できます。
  • INPUT_PROMPT: コンテンツ生成のために LLM に送信されるテキスト。Vertex AI Search のドキュメントに関連するプロンプトを使用します。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。
    形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • SIMILARITY_TOP_K: 省略可。取得する上位コンテキストの数。
  • MODEL_NAME: 再ランク付けに使用するモデルの名前。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID: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": 10,
          "ranking": {
            "llm_ranker": {
              "model_name": "MODEL_NAME"
            }
          }
        }
      }
    }
  }
}'

Python

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

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

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: コンテンツ生成用の LLM モデル。例: gemini-1.5-flash-002
  • GENERATION_METHOD: コンテンツ生成の LLM メソッド。generateContentstreamGenerateContent を指定できます。
  • INPUT_PROMPT: コンテンツ生成のために LLM に送信されるテキスト。Vertex AI Search のドキュメントに関連するプロンプトを使用します。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。
    形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • SIMILARITY_TOP_K: 省略可。取得する上位コンテキストの数。
  • MODEL_NAME: 再ランク付けに使用するモデルの名前。
from vertexai.preview import rag
from vertexai.preview.generative_models import GenerativeModel, Tool
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")

config = vertexai.preview.rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        llm_ranker=rag.LlmRanker(
            model_name=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("Why is the sky blue?")
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....
#   ...

Vertex Rank Service の再ランク処理の前提条件

Vertex AI ランクサービス再ランクを使用するには、Discovery Engine API を有効にする必要があります。

RAG API を使用して関連するコンテキストを取得する

RAG コーパスを作成したら、RetrieveContexts API を使用して Vertex AI Search から関連するコンテキストを取得できます。

次のコードサンプルは、API を使用して Vertex AI Search からコンテキストを取得する方法を示しています。

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/v1beta1/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": 5,
        "ranking": {
          "rank_service": {
            "model_name": "MODEL_NAME"
          }
        }
      }
    }
  }'

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.preview 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(
        rank_service=rag.RankService(
            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: "....
#   ....

RAG API を使用してコンテンツを生成する

REST

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

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

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: コンテンツ生成用の LLM モデル。例: gemini-1.5-flash-002
  • GENERATION_METHOD: コンテンツ生成の LLM メソッド。オプションには generateContentstreamGenerateContent があります。
  • INPUT_PROMPT: コンテンツ生成のために LLM に送信されるテキスト。Vertex AI Search のドキュメントに関連するプロンプトを使用します。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。
    形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • SIMILARITY_TOP_K: 省略可。取得する上位コンテキストの数。
  • MODEL_NAME: 再ランク付けに使用するモデルの名前。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID: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": 10,
          "ranking": {
            "rank_service": {
              "model_name": "MODEL_NAME"
            }
          }
        }
      }
    }
  }
}'

Python

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

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

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: コンテンツ生成用の LLM モデル。例: gemini-1.5-flash-002
  • GENERATION_METHOD: コンテンツ生成の LLM メソッド。オプションには generateContentstreamGenerateContent があります。
  • INPUT_PROMPT: コンテンツ生成のために LLM に送信されるテキスト。Vertex AI Search のドキュメントに関連するプロンプトを使用します。
  • RAG_CORPUS_RESOURCE: RAG コーパス リソースの名前。
    形式: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
  • SIMILARITY_TOP_K: 省略可。取得する上位コンテキストの数。
  • MODEL_NAME: 再ランク付けに使用するモデルの名前。
from vertexai.preview import rag
from vertexai.preview.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 = vertexai.preview.rag.RagRetrievalConfig(
    top_k=10,
    ranking=rag.Ranking(
        rank_service=rag.RankService(
            model_name=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....
#   ...

次のステップ