만약 검색 에이전트가 자신에게 주어지는 대신 스스로 검색 파이프라인(retrieval pipeline)을 작성할 수 있다면 어떨까요?
KAIST AI와 Meta의 슈퍼인텔리전스 연구 그룹에서 발표한 새로운 논문은 Retrieval Program Learning (RPL)이라는 프레임워크를 소개합니다. 이 프레임워크에서는 모델이 고정된 검색기(retriever)에 단순히 쿼리를 발행하는 것이 아니라, 검색 원시 요소(search primitives)들을 조합하여 짧고 실행 가능한 Python 프로그램을 작성하고 이를 코퍼스(corpus) 상에서 샌드박스(sandbox) 환경으로 실행합니다.
작동 방식:
이 정책은 작은 검색 SDK를 받습니다. 여기에는 sparse (lexical) retrieval, dense (semantic) retrieval, reciprocal-rank fusion, deduplication, 그리고 cross-encoder reranking 기능이 포함됩니다. 단일 프로그램만으로 두 가지 검색기 모두에 걸쳐 여러 하위 쿼리(sub-queries)를 실행하고, 후보들을 병합(fuse) 및 중복 제거(dedupe)하며, 재순위화(rerank)한 다음, 상위 몇 개의 문서만을 출력할 수 있습니다. 나머지 모든 것은 프로그램 메모리에 남아있습니다. 이것이 핵심적인 부분입니다. 즉, 검색의 폭(retrieval breadth)이 컨텍스트 소비와 분리된다는 것입니다. 에이전트는 40개 이상의 후보를 스캔할 수 있지만, 자신의 컨텍스트에는 단 3개만을 노출합니다.
문제점과 해결책:
다만, 이러한 표현력은 강화학습 (RL) 탐색을 매우 어렵게 만듭니다. 결과 보상(Outcome rewards)만으로는 어떤 중간 결정이 도움이 되었는지 알 수 없습니다. 이들의 해결책은 '프로그램 변이(program mutation)'입니다. 이는 RL 과정에서 샘플링된 최적이 아닌 프로그램들을 가져와, 원래의 쿼리를 유지하면서 지역적인 변이들(검색기 교체, 폭 확장, 재순위화 추가 등)을 생성하는 문법 제약 기반 절차입니다. 이 변이들은 두 단계에 걸쳐 실행 검증됩니다 (증거를 표면화했는지? 모델이 그것으로부터 답할 수 있는지?). 이후 트랙젝토리(trajectories)에 다시 삽입되고, SFT(Supervised Fine-Tuning)를 통해 간략히 증류된 후 RL을 재개합니다. 심지어 최종 답변이 틀린 변이들조차도 정답 범위(answer span)가 마스킹 처리되어 검증된 프로그램 구조를 감독하는 역할을 합니다.
주목할 만한 결과:
- RPL로 훈련된 4B 모델은 개방형 도메인 QA에서 모든 8B 검색-RL(retrieval-RL) 베이스라인을 능가하며, 평균 정확 일치율(exact-match gains)이 최대 11.5%까지 향상되었고, 특히 다단계 추론 작업(multi-hop tasks)에서 가장 강력한 성능을 보였습니다.
- 코퍼스 수준 추론(GlobalQA)에서는 최고 베이스라인 대비 답변 F1 점수를 최대 58.2%까지 개선했습니다.
- 컨텍스트 소비량은 Search-R1의 약 7,200 토큰에 비해 150–320 토큰으로 감소했으며, 검색 과정(retrieval)은 약 1턴으로 축소되었고, 학습 실행 속도는 최대 5.8배 빨라졌습니다.
더 넓은 시사점: 검색을 도구 호출(tool calls)이 아닌 코드 생성(code generation)으로 간주해야 합니다. 파이프라인 자체가 학습 가능한 액션이 되는 것입니다.