이 페이지에서는 재랭킹을 설명하고 API를 사용하여 검색된 응답의 순위를 다시 지정하는 방법을 보여줍니다.
검색 후 재랭킹은 검색 결과의 관련성을 개선하는 기법입니다. Vertex AI RAG 엔진은 쿼리 중에 검색된 결과의 관련성을 개선하는 선택적 재랭커를 제공합니다. 재랭커는 쿼리의 청크 관련성을 평가하고 그에 따라 결과를 재정렬합니다. 새로운 순서를 사용하면 쿼리에 더 적합한 응답을 얻거나 모델 추론을 위한 프롬프트에 포함하여 더 관련성 높고 정확한 응답을 생성할 수 있습니다.
사용 가능한 재랭킹 도구
이 섹션에서는 재랭커 유형을 살펴봅니다.
LLM 재랭커
LLM 재랭커는 LLM을 사용하여 청크와 쿼리의 관련성을 평가하고 그에 따라 결과를 재정렬하여 더 적합한 응답을 제공하거나 모델 추론을 위한 프롬프트를 개선하는 재랭커입니다.
Vertex AI 순위 서비스 재랭커
순위 서비스 재순위 지정기는 문서 목록을 가져와 문서가 쿼리와 얼마나 관련성이 있는지에 따라 문서의 순위를 다시 지정하는 순위 API를 기반으로 합니다. 문서와 쿼리의 시맨틱 유사성만 고려하는 임베딩과 비교하여 Ranking API는 문서가 특정 쿼리에 얼마나 잘 대답하는지에 관한 정확한 점수를 제공할 수 있습니다.
재랭커 선택 시 고려사항
재랭킹 도구를 선택할 때 다음 사항을 고려하세요.
- LLM 및 순위 서비스 재랭커는 재정렬을 사용하여 검색된 컨텍스트의 관련성을 개선하므로 모델이 개선된 대답을 제공할 수 있습니다.
- 재랭커는 지연 시간을 도입하며, 이는 처리된 문맥의 수에 따라 증가합니다.
- LLM 재랭커의 비용은 처리된 토큰 수에 따라 달라지지만 순위 서비스 재랭커를 사용하는 비용은 쿼리당 고정됩니다.
재랭커 사용 방법
이 섹션에서는 재랭커 사용을 위한 기본 요건과 코드 샘플을 설명합니다.
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
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.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 방법입니다.
옵션은
generateContent
및streamGenerateContent
입니다. - 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
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에 전송된 텍스트입니다. 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 = 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 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
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.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 방법입니다.
옵션은
generateContent
및streamGenerateContent
입니다. - 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
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에 전송된 텍스트입니다. 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 = 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 엔진의 검색 및 생성 출력을 참고하세요.
- RAG 기술 자료 (코퍼스) 관리하기