本页介绍了重新排名,并展示了如何使用 API 重新排名检索到的回答。
检索后重新排名是一种用于提高检索结果相关性的技术。Vertex AI RAG Engine 提供可选的重新排名器,可在查询期间提高检索结果的相关性。重新排名器会评估查询中各个块的相关性,并相应地对结果进行重新排序。新的顺序可生成更适合回答查询的回答,或者可包含在模型推理提示中,以生成更相关、更准确的回答。
可用的重新排名器
本部分将探讨重新排名算法的类型。
LLM 重新排名器
LLM 重新排名器是一种重新排名器,它使用 LLM 来评估各个块与查询的相关性,并相应地对结果进行重新排序,从而为模型推理提供更合适的回答或改进的提示。
Vertex AI 排名服务重新排名器
排名服务重新排名器基于排名 API,该 API 会接受文档列表,并根据文档与查询的相关性对这些文档进行重新排名。与仅考虑文档与查询的语义相似度的嵌入相比,这种方法可以为文档回答给定查询的准确程度提供精确的得分。
选择重新排名算法时的注意事项
选择重新排名算法时,请考虑以下事项:
- LLM 和 Rank 服务重排序程序使用重新排序来提高检索到的上下文的相关性,从而使模型能够提供更优质的回答。
- 重新排名器会引入延迟,随着处理的上下文数量增加,延迟会增加。
- LLM 重新排名器的费用取决于所处理的 token 数量,但使用 Rank 服务重新排名器的费用是按查询固定收取的。
如何使用重新排名器
本部分介绍了使用重新排名器的前提条件和代码示例。
使用 LLM 重新排名器的前提条件
LLM 重新排名器仅支持 Gemini 模型,您可以在启用 RAG API 后访问这些模型。如需查看受支持的模型列表,请参阅 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/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"
}
}
}
}
}'
Python
如需了解如何安装或更新 Python 版 Vertex AI SDK,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 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_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。
替换示例代码中使用的以下变量:
- PROJECT_ID:您的 Google Cloud 项目的 ID。
- LOCATION:处理请求的区域。
- MODEL_ID:用于内容生成的 LLM 模型。例如
gemini-1.5-flash-002
。 - GENERATION_METHOD:用于生成内容的 LLM 方法。选项为
generateContent
和streamGenerateContent
。 - INPUT_PROMPT:发送到 LLM 用于生成内容的文本。
- 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/v1/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 方法。选项为
generateContent
和streamGenerateContent
。 - INPUT_PROMPT:发送到 LLM 用于生成内容的文本。
- RAG_CORPUS_RESOURCE:RAG 语料库资源的名称。
格式:projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
。 - SIMILARITY_TOP_K(可选):要检索的热门上下文数量。
- MODEL_NAME:用于重新排名的模型的名称。
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"
MODEL_NAME= "MODEL_NAME"
# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")
config = 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 排名服务重新排名器的前提条件
如需使用 Vertex AI 排名服务重新排名器,必须启用 Discovery Engine API。如需查看所有受支持的模型,请参阅此文档
使用 RAG API 检索相关上下文
创建 RAG 语料库后,您可以通过 RetrieveContexts
API 从 Vertex AI RAG 引擎检索相关上下文。
以下代码示例演示了如何使用该 API 从 Vertex AI RAG Engine 检索上下文。
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": 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 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 RAG 引擎检索数据。
替换示例代码中使用的以下变量:
- PROJECT_ID:您的 Google Cloud 项目的 ID。
- LOCATION:处理请求的区域。
- MODEL_ID:用于内容生成的 LLM 模型。例如
gemini-1.5-flash-002
。 - GENERATION_METHOD:用于生成内容的 LLM 方法。选项包括
generateContent
和streamGenerateContent
。 - INPUT_PROMPT:发送到 LLM 用于生成内容的文本。
- 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/v1/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
如需了解如何安装或更新 Python 版 Vertex AI SDK,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档。
替换示例代码中使用的以下变量:
- PROJECT_ID:您的 Google Cloud 项目的 ID。
- LOCATION:处理请求的区域。
- MODEL_ID:用于内容生成的 LLM 模型。例如
gemini-1.5-flash-002
。 - GENERATION_METHOD:用于生成内容的 LLM 方法。选项包括
generateContent
和streamGenerateContent
。 - INPUT_PROMPT:发送到 LLM 用于生成内容的文本。
- RAG_CORPUS_RESOURCE:RAG 语料库资源的名称。
格式:projects/{project}/locations/{location}/ragCorpora/{rag_corpus}
。 - SIMILARITY_TOP_K(可选):要检索的热门上下文数量。
- MODEL_NAME:用于重新排名的模型的名称。
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=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....
# ...
后续步骤
- 如需详细了解 RAG 的回答,请参阅 Vertex AI RAG Engine 的检索和生成输出。
- 管理 RAG 知识库 (corpus)