검색 에이전트의 치명적인 착각
RL로 훈련된 검색 에이전트(Search-R1, R1-Searcher, DeepResearcher)가 다음 질문을 받았다고 하자. “X의 멘토가 설립한 회사의 본사는 어디인가?” 에이전트는 열심히 쿼리를 만들어 검색을 반복한다. 하지만 훈련이 진행될수록 에이전트가 생성하는 쿼리 문자열은 수십 가지로 다양한데, 실제로 검색되는 문서의 집합은 거의 동일해지는 현상이 발생한다.
이것이 바로 retrieval-equivalence collapse다. 표면적 쿼리 다양성이 진짜 검색 다양성으로 이어지지 않는다. GRPO 같은 그룹 상대 최적화에서 이것은 치명적이다 — 같은 증거를 가져온 궤적들은 같은 정답을 내고 같은 보상을 받으므로, within-group advantage(군집 내 이점)가 0으로 수렴한다. 에이전트는 “다양한 시도를 하고 있다”고 착각하지만, 실제로는 하나의 검색 경로를 반복하고 있는 것이다.

Harness-G는 이 문제의 근본 원인이 보상 신호가 아니라 검색 인터페이스 설계 자체에 있다고 진단한다. 그리고 해결책으로 자유 형식 쿼리 생성을 그래프 기반 유한 액션 선택으로 완전히 대체한다.
검색 인터페이스가 만드는 병목
기존 RL 검색 에이전트의 액션 공간은 “어떤 검색 쿼리 문자열을 생성할 것인가”이다. 이 설계는 두 가지 구조적 문제를 만든다.
첫째, 문자열-투-검색 다대일 매핑. “Who founded OpenAI?”, “OpenAI founder”, “OpenAI establishment history”는 모두 다른 문자열이지만 같은 문서를 검색한다. LLM은 쉽게 표면적으로 다르면서 의미적으로 동등한 쿼리를 양산한다.
둘째, 크레딧 할당의 모호성. 같은 증거를 검색한 두 궤적이 다른 정답을 내면, 그 점수 차이는 검색 품질이 아니라 downstream 추론 능력에서 온 것이다. 하지만 GRPO는 이 차이를 검색 액션의优劣로 귀속시킨다.

이 두 문제를 해결하기 위해 Harness-G는 검색을 메뉴 탐색으로 재정의한다. 정책이 자연어 쿼리를 생성하는 대신, 환경이 제시하는 유한 액션 메뉴에서 하나를 선택한다. 핵심 통찰은 간결하다: 액션 공간을 바꾸면, 같은 GRPO 옵티마이저도 완전히 다른 학습 시그널을 얻는다.
그래프 기반 검색 환경
Harness-G의 오프라인 단계는 코퍼스를 **단락-문장-개체 삼분 그래프(paragraph–sentence–entity tripartite graph)**로 구성한다. 이 그래프는 LLM을 사용하지 않고 프로그램적으로 구축된다 — 문장 분할, 개체 인식 및 정규화, 밀집 인코딩만으로 완성된다. Graph-R1이 LLM으로 사실/관계 추출을 수행하는 것과 대조적이다.
그래프의 노드와 엣지는 다음과 같다:
- 단락 노드 ↔ 문장 노드: 각 문장(최소 증거 단위)을 문서 컨텍스트에 연결
- 문장 노드 ↔ 개체 노드: 개체 멘션을 기록, 개체가 문장 간/문서 간 호프의 다리 역할
- 문장 노드 ↔ 문장 노드: 인접 문장 연결, 전체 단락 노출 없이 로컬 컨텍스트 확장
- 개체 노드 ↔ 개체 노드: 동일/유사 개체 연결 (표면 정규화, 앵커, 약어 매칭)

세 가지 액션: Select, Lookup, Answer
온라인 에피소드가 시작되면, 환경이 초기 검색을 수행하고 표시된 문장 후보들을 메뉴로 노출한다. 정책은 여기서부터 세 가지 액션만 선택할 수 있다:
Select(s): 가시적인 문장 s를 “확정 증거(committed evidence)“로 채택한다. 최종 답변은 확정된 증거에만 조건부로 생성되므로, Select는 답변 시점의 증거 상태를 고정한다.
Lookup(e): 개체 e에 대한 추가 정보를 검색한다. 핵심은 환경이 — 정책이 아닌 — 결정론적 쿼리를 생성하여 실행한다는 점이다. 쿼리 m_t = concat(q, text(C_t))를 개체 e의 후보 풀에 대해 실행하고, 상위 K개 문장을 새 후보로 가져온다. 따라서 두 개의 다른 Lookup은 정의상 다른 대상을 추구한다.
Answer: 검색을 종료하고 확정된 증거에서 답변을 생성한다.
메뉴는 매 스텝 재구성된다: 이미 확정된 문장과 중복 검색은 제거되고, 방문한 개체는 Lookup 대상에서 사라지며, 날짜/기수형/국적 형용사 같은 저가치 대상은 노출되지 않는다.
이 설계의 세 가지 구조적 보장이 중요하다:
- 유한성 (Finiteness): 메뉴 크기가 가시 문장 캡(K_s)과 Lookup 후보 캡(K_e)으로 bounded
- 검증 가능성 (Verifiability): 모든 액션이 명시적 타입과 대상을 가지므로, 잘못된 액션은 사후 처벌이 아니라 feasible set에서 원천 차단
- 미리보기 가능성 (Previewability): 전환이 결정론적 인덱스 연산이므로, 어떤 후보 액션의 결과도 실제 상태를 변경하지 않고 읽기 전용으로 미리 확인 가능
미리보기 가능성은 다음 단계의 크레딧 설계를 가능하게 하는 핵심 속성이다.
Structured Non-myopic Credit (SNC)
Harness-G의 두 번째 혁신은 메뉴 구조를 활용한 새로운 크레딧 할당 방식이다. SNC는 두 가지 보완적 항으로 구성된다.
Frontier-relative advantage
“frozen answerer”(파라미터가 고정된 답변 모델)가 현재 증거 상태에서 정답을 얼마나 잘 생성할 수 있는지 점수를 매긴다. 각 정보 획득 액션의 한계 이득(marginal gain)은 다음과 같이 정의된다:
p_t(a) = g(O_t ∪ Ũ(a)) − g(O_t)
여기서 g(·)는 길이 정규화된 teacher-forced 정답 확률이고, Ũ(a)는 액션 a가 가져올 문장들의 미리보기 결과다.
같은 상태의 다른 대안들(frontier)의 평균 이득을 빼면, frontier-relative advantage가 된다. 이것이 의미하는 바: 여러 메뉴 항목이 동등한 증거를 가져오면, 그 이득은 비슷하고 advantage는 0에 가깝다. 정책은 표면적 선택으로는 보상을 받지 않는다. 다른 대안보다 진짜로 더 나은 선택을 해야만 양수 크레딧을 얻는다. 이 비교는 자유 형식 문자열 공간에서는 계산 자체가 불가능하다.
Structured enablement credit
초기 호프(검색 단계)의 가치는 나중에야 드러난다 — 브릿지 개체를 발견하는 Select는 그 자체로는 정답 확률을 높이지 않지만, 그 개체에 대한 후속 Lookup이 결정적 증거를 가져온다. SNC는 이 연쇄를 provenance edge로 추적하여, downstream 이득을 그것을 가능하게 한 이전 액션으로 전파한다.
이 두 항을 결합하여 GRPO의 outcome advantage와 함께 사용한다. SNC는 외부 보상 모델이나 추가 롤아웃 없이, 환경 내부 연산만으로 계산된다.
실험: 6개 QA 벤치마크에서의 압도적 우위
Harness-G는 6개 QA 벤치마크(Bamboogle, HotpotQA, 2Wiki, MuSiQue, NQ, TriviaQA)에서 Qwen2.5-1.5B와 3B 백본으로 평가되었다.

핵심 결과:
- 1.5B 스케일: Harness-G가 Graph-R1 대비 평균 F1 +10.74점 압도. 특히 Bamboogle에서 71.04 vs 46.46, MuSiQue에서 34.50 vs 21.80이라는 큰 격차
- 3B 스케일: Graph-R1 대비 평균 F1 +3.98점. 더 큰 모델에서도 일관된 개선
- Search-R1 대비: 자유 형식 쿼리 기반 RL 검색 에이전트 대비 훨씬 더 안정적인 훈련 곡선

액션 메뉴 vs 자유 쿼리: 통제 비교
Harness-G의 가장 중요한 통제 실험은 동일한 환경 전환과 동일한 feasible 액션을 유지하면서, 정책이 메뉴에서 직접 선택하는지 아니면 같은 대상에 도달하기 위해 쿼리를 생성하는지만 바꾼 비교다.
결과: 메뉴 선택은 다중 검색 동치 클래스를 유지하는 반면, 자유 쿼리 그룹은 빠르게 단일 동치 클래스로 붕괴한다. 이것은 유효한 탐험(exploration)이 보상 신호뿐 아니라 인터페이스 설계에도 의존한다는 것을 보여준다.

훈련 안정성과 범용성
Harness-G는 6개 3B 실행 전체에서 지속적인 후반 붕괴 없이 안정적으로 훈련된다. Qwen2.5-3B, Qwen3.5-4B, Llama-3.2-3B 모두 동일한 GRPO 레시피에서 경쟁력 있는 F1에 도달하여, 특정 백본에 국한되지 않는다.

RL 알고리즘 측면에서도 GRPO, PPO, REINFORCE++, DAPO 모두 안정적으로 상승하며, GRPO가 미세하게 리드한다.

효율성: 더 많은 턴, 더 짧은 응답
흥미로운 점은 훈련 후반부에 Harness-G가 Search-R1과 Graph-R1보다 **더 많은 턴(3.6 vs 2.3, 2.9)**을 사용하면서도 **더 짧은 응답(2.5k vs 4.3k, 3.1k 토큰)**을 유지한다는 것이다. 구조적 탐색은 상호작용 빈도를 늘리되 자연어 생성 비용은 줄인다.
SNC의 오버헤드는 스텝당 벽시계 시간의 9–11%에 불과하다. Tree-GRPO의 트리 확장 롤아웃이나 GiGPO의 특수 앵커 상태 그룹화가 필요 없다. 전체 3B 훈련에 약 170 GPU·시간이 소요된다.
그래프 구축 비용 측면에서도 Harness-G는 프로그램적 구축으로 API 비용 2.81–$4.14). 코퍼스 1K 토큰당 0.12초, 쿼리당 5.1초이다.
크로스 데이터셋 일반화
6개 데이터셋에서 하나로 훈련하고 나머지 5개에서 평가하는 설정에서, Harness-G는 30개 off-diagonal 쌍 중 21개에서 승리하고 평균 O.O.D. F1을 44.10에서 47.38로 끌어올린다 (+3.29). 멀티홉 타겟에서의 개선이 특히 크다.
의의: 액션 공간 설계가 보상 설계의 동반축
Harness-G의 핵심 기여는 에이전트 RL에서 액션 공간 설계(action-space design)가 보상 설계(reward design)와 동등하게 중요한 축이라는 것을 실험적으로 입증한 것이다. 기존 연구가 주로 “더 나은 보상 신호”나 “더 조밀한 크레딧”에 집중할 때, Harness-G는 “정책이 보는 액션의 형태 자체”를 바꾸었다.
이것은 에이전트 하네스(harness) 설계의 일반적 원칙을 시사한다: 정책의 액션 공간이 최적화의 효율성을 구조적으로 제한할 수 있다. 아무리 좋은 보상 신호를 줘도, 액션 공간이 aliased되어 있으면 정책은 진짜 대안들을 구별할 수 없다. Harness-G는 이 문제를 메뉴 기반 액션 공간과 미리보기 기반 크레딧으로 해결한다.
한계도 명확하다. 현재 텍스트 전용이며, 멀티모달 증거(이미지, 표, 그래프)로의 확장은 후속 연구 과제다. 또한 그래프 구축 품질이 전체 성능의 상한선을 결정하므로, 개체 정규화와 문장 분할의 품질이 중요하다.
더 실습해보고 싶은 분들께
이 포스트에서 다룬 Harness-G는 에이전트 하네스 설계와 RL 기반 에이전트 훈련이라는 실전 주제와 직접 연결됩니다. 에이전트 루프를 직접 설계하고, 도구 인터페이스를 최적화하고, 강화학습으로 에이전트를 훈련시키는 전체 과정을 더 깊이 체험하고 싶다면 다음 두 자료를 추천합니다:
- 『이게 되네? 오픈클로 미친 활용법 50제』 — 에이전트 하네스와 루프 엔지니어링의 실전 활용 사례를 50가지 시나리오로 풀어낸 가이드
- 「모두를 위한 루프 엔지니어링」 — 에이전트 루프 설계와 최적화의 원리부터 실습까지를 체계적으로 다루는 강의
Paper: Harness-G: A Graph-Structured Harness for Search Agents · Code: github.com/7HHHHH/Harness-G