scvcoder commited on
Commit
09b80b8
·
verified ·
1 Parent(s): a3597fc

ranker: source 내부 입력 순서(reranker 결과) 보존 — recency 재정렬 제거. 가이드 청크가 citation 알파벳순으로 밀려 정답이 후순위로 추락하던 버그 수정

Browse files
Files changed (1) hide show
  1. src/kpaa/retrieval/ranker.py +8 -6
src/kpaa/retrieval/ranker.py CHANGED
@@ -1,8 +1,10 @@
1
  """Excerpt 리스트를 컨텍스트 빌더에 넘기기 전 *정렬* 과 *중복 제거*.
2
 
3
- 정렬 키 = (sort_priority asc, -recency_score desc, citation asc).
4
- 1순위: 소스 우선순위 (상담사례 → 법조문 → PIPC → 해석례),
5
- 2순위: 같은 소스 안에 최근성 .
 
 
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, int, str]:
24
- # primary: priority asc, secondary: recency desc, tiebreak: citation asc
25
- return (e.sort_priority, -e.recency_score, e.citation)
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: