$rerank$rerank단계는 Voyage AI의 리랑킹 모델 을 사용하여 입력 문서의 순서를 다시 정렬하고 쿼리와 관련성이 높은 순서로 정렬된 동일한 문서를 반환합니다.$rerank단계는 집계 파이프라인의 어디에든 나타날 수 있습니다. MongoDB는$vectorSearch,$search,$rankFusion또는$scoreFusion단계 뒤에$rerank을 사용할 것을 권장합니다.
구문
$rerank 파이프라인 단계의 구문은 다음과 같습니다.
{ "$rerank": { "query": { "text": "<query-text>" }, "path": "<text-field-name>", "numDocsToRerank": <number-of-documents-to-rerank>, "model": "<reranker-model>" }}필드
$rerank 단계에서는 다음 필드가 있는 문서를 사용합니다.
필드 | 유형 | 필요성 | 설명 |
|---|---|---|---|
| 객체 | 필수 사항 | 순위 재지정에 사용할 쿼리입니다. |
| 문자열 | 필수 사항 | 순위 재지정에 사용할 쿼리 텍스트입니다. 예시 를 들어 다음을 지정할 수 있습니다.
|
| 문자열 또는 문자열 배열 | 필수 사항 | |
| Int | 필수 사항 | 순위를 재지정하고 결과에 반환하기 위해 Voyage AI 로 보낼 최대 문서 수입니다. 문서는 파이프라인에 정의된 문서 순서에 따라 선택됩니다. 최대값은 |
| 객체 | 필수 사항 | 문서의 순위를 다시 매기는 데 사용할 Voyage AI 모델 입니다. 값은 다음 모델 중 하나일 수 있습니다.
|
고려 사항
$rerank을 사용하기 전에 요구 사항, 제한 사항 및 $rerank 동작을 검토하세요.
요구 사항:
$rerank 사용 방법:
클러스터가 MongoDB 9.0 이상을 실행 중인지 확인합니다.
Project Settings를 통한 네이티브 리랭킹 활성화. 자세한 학습은 네이티브 리랭킹 활성화 또는 비활성화를 참조하세요.
rerank-3 및 rerank-3-lite 모델에는 다음과 같은 추가 요구 사항이 있습니다.
- 클러스터는 MongoDB 9.0 이상을 실행하는 전용 클러스터(
M10이상)여야 합니다.
이러한 모델의 지원 상태에 대해 알아보려면 현재 모델 상태를 참조하세요.
제한 사항
$rerank 단계를 사용할 수 없습니다.
자체 관리형 또는 Atlas Local 배포서버에 적용됩니다.
$rankFusion또는$scoreFusion입력 파이프라인을 위해서.보기에 대한 쿼리의 경우.
View에 MongoDB Search 또는 MongoDB 벡터 검색 인덱스가 있는 경우 View 대신 소스 컬렉션에서
.aggregate()을 실행하여 인덱스를 쿼리합니다.클라이언트 사이드 필드 레벨 암호화 또는 Queryable Encryption을 사용하는 경우
$rerank을(를) 포함하는 파이프라인은Unrecognized pipeline stage name: '$rerank'와(과) 같은 오류와 함께 실패합니다.이 제한은 암호화된 필드가 없는 컬렉션을 포함한 모든 컬렉션과
$unionWith.와 같은 하위 파이프라인 내에서$rerank을(를) 사용하는 경우에 적용됩니다.
rerank-3 및 rerank-3-lite 모델에는 다음과 같은 추가 제한 사항이 있습니다.
MongoDB 9.0 이상을 실행하는 전용 클러스터(
M10이상)에서만 사용할 수 있습니다.무료 클러스터(
M0) 또는 Flex 클러스터에서는 아직 사용할 수 없습니다.
행동
$rerank 는 파이프라인의 어디에든 나타날 수 있습니다. 하지만 MongoDB는 $search 또는 $vectorSearch 와 같이 이미 정렬된 순서로 관련 문서를 반환하는 단계 뒤에 $rerank 를 사용할 것을 권장합니다.
$rerank 단계로 전달된 첫 numDocsToRerank 개 문서의 순위를 재지정하고 반환합니다. $rerank 이 첫 번째 단계이거나 이전 단계가 결정론적으로 정렬된 결과를 반환하지 않는 경우 $rerank 에 사용된 문서가 쿼리 간에 변경될 수 있습니다.
$rerank path 에 지정된 필드 중 하나 이상의 입력 문서에 없는 경우 오류를 반환합니다. 이를 완화하려면 다음을 사용합니다.
$rerank이(가) 시행하는 메모리 제한과 요청이 제한을 초과할 때 반환되는 오류에 대해 자세히 알아보려면 $rerank 요청이 메모리 제한 오류로 실패함을 참조하세요.
쿼리
query.text 필드는 리러잉커 모델이 각 문서의 점수를 매기는 방식을 결정합니다. 지정된 Voyage 리러잉커 모델 은 지정된 path에서 쿼리 텍스트와 각 문서 내용 간의 유용성 점수를 계산합니다. 대부분의 사용 사례에서는 $rerank.query.text 를 이전 $search 또는 $vectorSearch 단계의 쿼리와 동일하거나 유사한 텍스트로 설정합니다.
득점
score 변수를 $meta 표현식과 함께 사용하여 $rerank 단계의 결과에서 각 문서의 점수를 조회.
예시: 파이프라인에 재순위 점수 추가
{ "$addFields": { "rerankScore": { "$meta": "score" } }}$rerank 단계에서는 $meta: "score" 값을 새 점수로 대체합니다. $rankFusion와 같은 이전 단계의 값을 보존하려면 점수를 $rerank 단계 이전의 명명된 필드에 프로젝트 할 수 있습니다.
예시: 이전 단계의 점수 보존
{ "$addFields": { "originalRankFusionScore": { "$meta": "score" } }},{ "$rerank": { ... }},{ "$addFields": { "rerankScore": { "$meta": "score" } }}성능 및 정확성
$rerank 단계는 리랑크할 필드, 리랑크할 문서 수 및 쿼리 텍스트 등 입력 크기에 따라 계산 방식이 많을 수 있습니다. $rerank 은 쿼리 시간에 쿼리와 문서를 함께 처리합니다. 따라서 $rerank 는 $search 또는 $vectorSearch의 인덱스와 같이 인덱스에 의해 제공되는 유의성 검색보다 느릴 수 있습니다. 정확도와 성능 간의 균형을 맞추려면 numDocsToRerank 과 path 을 구성하여 입력 크기를 제한합니다. $rerank 는 Atlas 클러스터 리소스에서 Voyage AI 리랑크 모델을 실행하지 않습니다.
$rerank RAG 및 에이전틱 AI 애플리케이션과 같이 최소한 지연 시간보다 검색 품질이 우선시되는 워크로드에 가장 적합합니다. 최소한 지연 시간이 필요한 워크로드의 경우 MongoDB는 $search 또는 $vectorSearch과 같이 인덱스 기반 검색 단계를 사용할 것을 권장합니다.
예시
다음 예시 $rerank 단계를 사용하여 Voyage AI reranker 모델을 기반으로 sample_mflix.embedded_movies 컬렉션 의 문서 순서를 변경하는 방법을 보여 줍니다. 이 쿼리 $match 단계 이후에 $rerank 를 사용하여 rerank-2.5 reranker 모델을 사용하여 문서를 재정렬합니다. 다음 집계 파이프라인 에서:
$match단계는 string 유형의plot필드 있는 문서만 포함하도록 문서를 필터링합니다.$sort단계는 결정론적 순서를 보장하기 위해released필드 의 내림차순으로 문서를 정렬합니다.$rerank이 단계에서는rerank-2.5reranker 모델을 사용하여 쿼리 와 일치하도록 문서를 재정렬합니다.$addFields단계는 문서에rerankScore이라는 필드 추가합니다.
db.embedded_movies.aggregate([ { "$match": { "plot": { "$exists": true, "$type": "string" } } }, { "$sort": { "released": -1 } }, { "$rerank": { "model": "rerank-2.5", "query": { "text": "a group of heroes band together to stop a powerful enemy and save the world" }, "numDocsToRerank": 100, "path": ["title", "plot"] } }, { "$addFields": { "rerankScore": { "$meta": "score" } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "plot": 1, "rerankScore": 1 } }])