> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# 랭킹과 가중치

> 어느 청크가 먼저 돌아올지 정하는 노브들

필터링이 후보 풀을 마련하고, **랭킹**이 승자를 뽑습니다. Nora가 레버를 여럿 드러냅니다.

## 융합 가중치

주된 노브입니다. 벡터와 키워드를 얼마나 믿을지죠.

* **Vector weight**(0.0\~1.0) 밀집 의미 유사도.
* **Keyword weight**(0.0\~1.0) BM25 어휘 겹침.

가중치는 절대값이 아니라 상대값입니다. `0.7/0.3`은 `0.35/0.15`와 똑같이 됩니다. 강조를 옮기려고 조정하세요.

## 부스트

최근성 부스트, 태그 부스트, 소스 부스트가 있습니다. 다 선택이고, 다 융합 점수에 곱합니다.

### 최근성 부스트

새 콘텐츠를 더 높게 올립니다. 두 형태입니다.

* **Decay** 반감기(일수). 오래된 청크가 매끄러운 곡선으로 낮아집니다.
* **Hard cutoff** N일보다 오래된 청크를 아예 뺍니다(사실 부스트보다 필터로 하는 편이 낫습니다).

### 태그 부스트

태그로 올리거나 내립니다. 예를 들어 `verified` 청크를 1.5배 올리고, `internal-draft` 청크를 0.5배 내립니다.

### 소스 부스트

특정 문서나 컬렉션을 올립니다. 크롤한 사본보다 앞세우고 싶은 정본 소스가 있을 때 좋습니다.

## 리랭커

상위 20개쯤 융합 결과에 거는 크로스 인코더 패스입니다(선택). (쿼리, 청크) 쌍을 함께 읽는 작은 트랜스포머로 다시 점수를 매깁니다. 임베딩 코사인 유사도만 쓰는 것보다 훨씬 정확합니다.

* 150\~300ms 지연을 더합니다.
* 쿼리당 작은 비용을 더합니다.
* 어려운 쿼리에서 recall\@1을 눈에 띄게 올립니다.

리트리벌 프리셋에서 켭니다. **rerank top K**(후보를 몇 개 리랭크할지, 기본 20)와 **model**(쓸 수 있는 크로스 인코더 중 하나)을 정합니다.

## 다양성

가끔 상위 6개 청크가 다 거의 같은 중복입니다. **Diversity**를 켜서 어느 정도 흩뜨립니다.

* **MMR(Maximum Marginal Relevance)** 관련성을 조금 내주고 중복을 줄입니다. 람다를 정합니다(0은 최대 다양성, 1은 최대 관련성). 기본 0.7.
* **Group cap** 소스당 청크 최대 N개. 큰 문서 하나가 상위 결과를 다 밀어내는 걸 막습니다.

## 점수 컷오프

컷오프 아래 청크는 top K 안이라도 버립니다. K 정원을 채우려고 낮은 확신의 매치를 Agent에게 건네는 걸 막습니다.

점수는 RRF 공간으로 대략 0\~1 입니다. 기본 컷오프는 0.15 입니다. 정밀도를 높이려면 올리고, 리콜을 높이려면(또는 0으로) 내립니다.

## 쿼리 시점 덮어쓰기

위의 무엇이든 호출마다 덮어쓸 수 있습니다. Agent가 도메인이 위험하면 컷오프를 더 높이거나, "safety" 나 "compliance" 가 든 질문에만 리랭커를 켤 수 있죠.

## 동작 살피기

트레이스 뷰가 리트리벌 스텝을 보여줍니다.

* 실제로 쓴 최종 쿼리(다시 쓴 뒤).
* 후보마다 벡터 점수, 키워드 점수, 융합 점수, 적용한 부스트.
* 리랭커가 순서를 바꿨는지.

리트리벌이 이상하다 싶으면 여기부터 보세요.
