ranker: source 내부 입력 순서(reranker 결과) 보존 — recency 재정렬 제거. 가이드 청크가 citation 알파벳순으로 밀려 정답이 후순위로 추락하던 버그 수정
Browse files
src/kpaa/retrieval/ranker.py
CHANGED
|
@@ -1,8 +1,10 @@
|
|
| 1 |
"""Excerpt 리스트를 컨텍스트 빌더에 넘기기 전 *정렬* 과 *중복 제거*.
|
| 2 |
|
| 3 |
-
정렬 키 = (sort_priority asc
|
| 4 |
-
|
| 5 |
-
|
|
|
|
|
|
|
| 6 |
|
| 7 |
본문 *절단은 하지 않는다* (정책: 가이드·상담사례·OpenAPI 응답을 왜곡 없이
|
| 8 |
LLM 에 그대로 전달). 본문 길이 제한은 (a) API fetch 단계의 카테고리별 cap
|
|
@@ -20,9 +22,9 @@ from __future__ import annotations
|
|
| 20 |
from kpaa.retrieval.excerpts import Excerpt
|
| 21 |
|
| 22 |
|
| 23 |
-
def _key(e: Excerpt) -> tuple[int
|
| 24 |
-
#
|
| 25 |
-
return (e.sort_priority,
|
| 26 |
|
| 27 |
|
| 28 |
def _dedup_key(e: Excerpt) -> tuple:
|
|
|
|
| 1 |
"""Excerpt 리스트를 컨텍스트 빌더에 넘기기 전 *정렬* 과 *중복 제거*.
|
| 2 |
|
| 3 |
+
정렬 키 = (sort_priority asc).
|
| 4 |
+
소스 간: 상담사례(0) → 가이드(1) → 법조문(1) → PIPC(2) → 해석례(...).
|
| 5 |
+
같은 소스 내부: **입력 순서 그대로 (stable sort)**. retriever 단계에서 BM25+Dense+
|
| 6 |
+
Cross-encoder reranker 가 매긴 적합도 순서를 그대로 보존한다 (recency 기반 재정렬은
|
| 7 |
+
reranker 효과를 무력화하므로 제거함, 2026-05-06).
|
| 8 |
|
| 9 |
본문 *절단은 하지 않는다* (정책: 가이드·상담사례·OpenAPI 응답을 왜곡 없이
|
| 10 |
LLM 에 그대로 전달). 본문 길이 제한은 (a) API fetch 단계의 카테고리별 cap
|
|
|
|
| 22 |
from kpaa.retrieval.excerpts import Excerpt
|
| 23 |
|
| 24 |
|
| 25 |
+
def _key(e: Excerpt) -> tuple[int]:
|
| 26 |
+
# source 간 우선순위만. 같은 source 내부는 stable sort 로 입력 순서(=reranker 결과) 보존.
|
| 27 |
+
return (e.sort_priority,)
|
| 28 |
|
| 29 |
|
| 30 |
def _dedup_key(e: Excerpt) -> tuple:
|