법률 AI 검색 실험기 (3) — 복수 정답 문제와 LLM Selector 모델 비교
검색 결과에서 정답을 "선택"하는 것도 문제다
법률 QA 시스템에서 검색(retrieval) 품질은 기본 전제다. 검색이 어느 정도 궤도에 오르자, 다음 병목이 드러났다. Top-50 검색 결과 안에 정답 근거가 들어 있는데도 최종 답변에서 빠지는 경우가 생긴 것이다.
예를 들어 "택배 배송 중 물건이 파손되었을 때 누구에게 책임을 물을 수 있는가?"라는 질문에 대해, 검색 결과에는 민법 제756조(사용자책임)가 포함되어 있었다. 그런데 LLM이 답변을 생성하면서 이 조문을 근거로 선택하지 않았다. 50개 후보 중에서 어떤 것이 진짜 근거인지 "골라내는" 단계, 즉 selector가 별도로 필요했다.
이 글은 selector 구조를 설계하고, 여러 LLM 모델을 비교 실험한 과정을 정리한 기록이다.
두 가지 접근법: Single Selector vs Citation Selector
처음에는 selection planner라는 구조를 시도했다. 검색 결과 전체를 보고 어떤 조문이 왜 필요한지를 장문으로 설명하게 하는 방식이었다. 방향은 맞았지만, 출력이 길고 파싱이 불안정했다. 그래서 출력을 직접 근거, 보조 근거, 누락 포인트 세 필드로 줄인 citation selector로 전환했다.
citation selector는 안정적이었다. 전체 11문항을 파싱 오류 없이 완주했고, Selection Recall 27/31(87.1%)을 기록했다. 하지만 여전히 selection miss가 남았다. 이를 해결하기 위해 두 가지 구조를 실험했다.
- 2-pass selector: coverage pass와 completion pass를 나눠서 2회 호출. 1차에서 넓게 훑고, 2차에서 빠진 것을 보완한다.
- single selector: 1회 호출로 선택과 보완을 동시에 처리. 속도를 줄이는 대신 품질 손실이 있을 수 있다.
2-pass selector는 Gemini 3 Flash Preview 기준으로 Selection Recall을 29/31(93.5%)까지 끌어올렸다. Q2(사용자책임)와 Q11(이자소득)의 selection miss가 모두 해결되었다. 다만 질문당 2회 호출이라 latency가 19~39초 수준으로 늘어났다.
모델별 비교: 속도와 품질의 트레이드오프
selector 구조가 잡히자 다음 질문은 자연스럽게 "어떤 모델이 가장 나은가"였다. OpenAI의 GPT-5 mini, GPT-5 nano와 Google의 Gemini 3 Flash Preview, Gemini 2.5 Flash Lite를 비교했다.
2-pass selector 비교 (Q2, Q11 기준)
| 모델 | Selection Recall | pass1 평균 latency | pass2 평균 latency |
| GPT-5 mini | 6/6 | 4,399ms | 4,956ms |
| GPT-5 nano | 4/6 | 2,568ms | 3,207ms |
| Gemini 2.5 Flash Lite | 5/6 | - | - |
| Gemini 3 Flash Preview | 6/6 (전체 11문항 29/31) | - | - |
GPT-5 mini는 Q2와 Q11을 모두 해결했지만, GPT-5 nano는 Q11에서 무너졌다. 속도는 빠르지만 품질 손실이 컸다.
single selector 비교 (Q2, Q11 기준)
| 모델 | Selection Recall | 평균 selector latency |
| Gemini 3 Flash Preview | 5/6 | 12,011ms |
| Gemini 2.5 Flash Lite | 5/6 | 1,659ms |
| GPT-5 mini | 4/6 | 3,173ms |
| GPT-5 nano | 3/6 | 2,297ms |
GPT-5 mini는 2-pass에서 6/6이었지만 single selector에서는 4/6으로 떨어졌다. 반면 Gemini 2.5 Flash Lite는 single selector에서도 5/6을 유지하면서 latency가 1.6초로 가장 빨랐다.
holdout 16문항 일반화 검증 (single selector + answer)
| 모델 | 도메인 커버 | 평균 총 시간 |
| Gemini 2.5 Flash Lite | 3/3 | 4.5~5.0초 |
| GPT-5 mini | 3/3 | 8.8~11.6초 |
| GPT-5 nano | 2/3 | 5.5~9.6초 |
| Gemini 3 Flash Preview | 3/3 | 16.8~25.3초 |
Gemini 2.5 Flash Lite가 속도와 품질의 균형에서 가장 현실적인 결과를 보였다. 5초 이내에 답변이 나오면서 holdout 도메인도 모두 커버했다.
All-in-One: selector와 answer를 합치면?
selector와 answer를 분리하면 호출이 최소 2회다. 이걸 1회로 합칠 수 있다면? "근거 선택 + 최종 답변 생성"을 한 번에 처리하는 all-in-one 방식을 실험했다.
Core 11문항 결과
| 조건 | Selection Recall | Full Recall | 평균 생성 시간 |
| Gemini 3 Flash Preview (no-web) | 28/31 (90.3%) | 8/11 | 14.7초 |
| GPT-5.4 (no-web) | 29/31 (93.5%) | 9/11 | 11.7초 |
| GPT-5.4 (web) | 27/31 (87.1%) | 7/11 | 129.1초 |
GPT-5.4 no-web이 가장 좋았다. 2-pass selector의 최고 성적(29/31, 9/11)과 동일한 recall을 1회 호출로 달성했고, 평균 11.7초였다. 남은 miss는 Q6, Q7뿐이었는데, 이 둘은 애초에 Top-50 검색 결과에 정답이 없는 retrieval miss였다.
Holdout 16문항 결과
| 조건 | 도메인 커버 | 평균 생성 시간 |
| GPT-5.4 (no-web) | 14/16 | 9.1초 |
| Gemini 3 Flash Preview (no-web) | 14/16 | 12.7초 |
| Gemini 3 Flash Preview (web) | 14/16 | 13.8초 |
| GPT-5.4 (web) | 14/16 | 114.9초 |
Holdout에서도 GPT-5.4 no-web이 속도와 품질 모두에서 가장 나은 균형을 보였다.
웹 검색 보조의 효과: 기대와 다른 결과
웹 검색을 붙이면 retrieval miss를 보완할 수 있을 거라 기대했다. 결과는 정반대였다.
GPT-5.4에 웹 검색을 붙이자 Core 성능이 오히려 떨어졌다. Selection Recall이 93.5%에서 87.1%로 하락했고, latency는 11.7초에서 129.1초로 11배 증가했다. Q2와 Q11에서 새로운 miss가 발생했다. Gemini 3 Flash Preview의 웹 검색 버전은 Q5에서 반복적으로 timeout이 발생해 전체 결과를 안정적으로 수집하지도 못했다.
Holdout에서도 웹 검색 유무에 관계없이 도메인 커버는 14/16으로 동일했다. 웹 검색이 retrieval miss를 자동으로 메우지 않았다.
GPT-5.4 Thinking과 Perplexity Sonar 추가 실험
추가로 두 가지 변형을 더 시도했다.
GPT-5.4 reasoning high: 품질은 유지되었다(Core Q2, Q11 모두 해결). 하지만 평균 생성 시간이 116.1초로 치솟았다. 기존 no-web(11.7초) 대비 품질 이득은 거의 없으면서 latency만 10배 증가했다.
Perplexity Sonar (web): Core 평균 9.4초, Holdout 평균 6.2초로 속도는 빨랐다. 하지만 Q2에서 selection miss가 남았다. 빠른 web-assist 후보로는 가치가 있지만, hard case 품질은 GPT-5.4 no-web에 못 미쳤다.
| 조건 | Core (Q2, Q11) | Holdout (H2, H8, H16) | 평균 생성 시간 |
| GPT-5.4 no-web | 6/6 | 3/3 | 11.7초 |
| GPT-5.4 reasoning high | 6/6 | 3/3 | 116.1초 |
| Perplexity Sonar web | 5/6 | 3/3 | 6.2~9.4초 |
결론: Selector 실험에서 확인한 것
이 실험의 결론을 정리한다.
구조가 모델보다 먼저다. 2-pass selector는 약한 모델(Gemini 2.5 Flash Lite)에서도 selection miss를 줄여줬다. 반면 single selector는 강한 모델(GPT-5 mini)에서도 품질이 떨어졌다. 호출 구조를 어떻게 설계하느냐가 모델 선택보다 영향이 컸다.
강한 모델은 구조를 단순화할 수 있다. GPT-5.4는 all-in-one 1회 호출로 2-pass selector의 최고 성적을 재현했다. 모델이 충분히 강하면 복잡한 다단계 구조 없이도 같은 품질을 낼 수 있다.
웹 검색은 만능이 아니다. 검색 보조를 붙인다고 retrieval miss가 해결되지 않았다. 오히려 latency만 크게 늘고 기존에 잘 되던 것까지 흔들렸다. 웹 검색은 별도 경로로 분리해서, 정말 필요한 경우에만 선택적으로 태워야 한다.
실전 기본값은 단순하게. 최종적으로 실전 기본값 후보는 GPT-5.4 no-web all-in-one이 되었다. Core 29/31(93.5%), Holdout 14/16, 평균 11초 내외. 남은 miss는 selector가 아니라 retrieval 축에서 풀어야 할 문제였다.
selector는 RAG 파이프라인에서 흔히 간과되는 단계다. 검색만 잘 되면 된다고 생각하기 쉽지만, 50개 후보에서 진짜 근거를 골라내는 일은 그 자체로 독립적인 문제다. 그리고 그 문제를 푸는 방법은 모델을 바꾸는 것만이 아니라, 호출 구조를 설계하는 것이다.

