데이터베이스 채점 결과를 RL 보상으로 활용하기: ThinkingBox를 사용한 사후 훈련 에이전트
요약
본 글은 에이전트의 작업을 평가하기 위해 'ThinkingBox'를 소개합니다. ThinkingBox는 최종 데이터베이스 상태와 예상 결과를 비교하여 실행 가능한 검사(executable checks)를 수행하고, 이를 RL 보상 함수로 활용하는 것이 핵심입니다. 이 방법을 통해 Qwen3.8-27B 모델을 GRPO 방식으로 미세 조정하여 에이전트의 성공률과 작업 완료 능력을 크게 향상시켰습니다.
핵심 포인트
- ThinkingBox는 DB 상태 비교를 통해 에이전트의 작업을 평가하고 보상으로 사용합니다.
- 실행 가능한 검사 결과를 RL 보상 함수로 활용하여 사후 훈련을 진행했습니다.
- 오프라인 정책 상대 난이도를 사용하여 효과적인 훈련 풀을 구축할 수 있습니다.
- Qwen3.8-27B 모델은 GRPO 50단계 후 성공률 및 완료 과제 수가 크게 증가했습니다.
이는 저희의 첫 번째 블로그 게시물인 '에이전트는 끝났다고 말했지만, 데이터베이스는 동의하지 않았다(The Agent Said It Was Done. The Database Disagreed)'의 후속 글입니다. ThinkingBox-Training이 이제 GitHub에서 이용 가능합니다.
저희는 ThinkingBox를 구축하여 최종 데이터베이스 상태와 예상 결과를 비교함으로써 에이전트의 작업을 평가할 수 있도록 했습니다. 그런 다음, ThinkingBox-Bench 외부의 훈련 과제에 이와 유사한 실행 가능한 신호를 보상으로 사용했습니다. Qwen3.8-27B의 경우, 평균 성공률은 51.70%에서 60.78%로 상승했으며, 모든 20개 시도에서 올바르게 완료된 과제 수는 38개에서 50 GRPO 스텝을 거쳐 107개로 증가했습니다.
Figure 1. ThinkingBox는 터미널 데이터베이스 상태에 대한 실행 가능한 검사를 ThinkingBox-Bench 외부의 사후 훈련 에이전트를 위한 보상으로 변환합니다.
이 글은 Microsoft와 Hugging Face가 공동 작성한 블로그이며, Microsoft의 Mirco Milletari 및 Xiang Jiang, Hugging Face의 Sergio Paniego, 그리고 전 인턴 Zhuochun Li(University of Pittsburgh)에게 공동 저술/검토 노력에 특별히 감사드립니다.
저희는 에이전트가 끝났다고 말하지만 실제로는 그렇지 않은 경우를 포착하기 위해 ThinkingBox를 구축했습니다.
ThinkingBox-Bench의 507개 과제(당사의 벤치마크 데이터셋) 각각은 에이전트에게 실제 백엔드와 일련의 도구를 제공하고, 작업을 수행하게 한 다음, 데이터베이스에서 실제로 무엇이 변경되었는지 확인합니다. 첫 번째 게시물에서는 모델이 고객 티켓을 해결됨으로 닫았지만, 그 뒤에 있는 운송업체 예외(carrier exception)는 여전히 열려 있는 경우를 포착했습니다. 아홉 번의 유능해 보이는 도구 호출 중 단 하나의 잘못된 데이터베이스 행이 있었습니다.
그러던 중 저희는 우리가 구축한 것을 발견했습니다. 대부분의 과제에서 실행 가능한 검사는 최종 데이터베이스 상태로부터 1 또는 0을 직접 반환할 수 있습니다. 이것은 단순한 채점기가 아닙니다. 이것은 보상 함수가 될 수 있습니다.+
그래서 저희는 벤치마크 외부의 ThinkingBox 형식 과제를 사용하여 훈련 풀을 구성하고, 그 실행 가능한 결과를 보상으로 사용했습니다. 문제는 에이전트 훈련에 어떤 과제가 적합한지를 선택하는 것이었습니다. 대부분의 과제는 이미 해결되었거나 현재 모델에게 희망이 없는 경우이며, 이 두 가지 모두 모델에게 아무것도 가르쳐주지 못합니다.
난이도는 정책(policy)에 상대적입니다: 특정 과제가 어려운 것은 오직 그 모델이 그것을 학습하기 전까지만 어렵습니다.
이를 **오프라인 정책 상대 난이도(offline policy-relative difficulty)**라고 부릅니다. 우리는 훈련 전에 기본 정책을 사용하여 각 작업의 성공 확률을 한 번 추정했고, 선택된 훈련 풀은 실행 내내 고정했습니다.
우리는 오프라인 정책 상대 난이도를 사용해 훈련 풀을 구축한 다음, GRPO를 이용해 Qwen3.8-27B 모델을 50단계 동안 미세 조정(fine-tuned)했습니다. 요약하자면, 우리는 507개의 모든 벤치마크 작업을 20번 평가합니다. pass@1은 총 10,140회의 시도에 걸친 평균 성공률을 측정하며, pass@20은 최소 한 번 해결된 작업의 비율을 측정합니다. 관찰된 20/20(Observed 20/20)은 기록된 모든 시도에서 통과하는 작업의 비율을 측정합니다.
표 1. 오프라인 선택 훈련 풀에 대한 GRPO 50단계 전후 Qwen3.8-27B 결과.
| Metric | Base | RL fine-tuned | Change |
|---|---|---|---|
| Observed 20/20 | 38 (7.50%) | → | 107 (21.10%) |
| pass@1 (successful attempts) | 5,242 (51.70%) | → | 6,163 (60.78%) |
| pass@20 (tasks solved at least once) | 453 (89.35%) | → | 446 (87.97%) |
훈련을 통해 반복 가능한 성공률이 급격히 증가했으며, 최소 한 번 커버리지(at-least-once coverage)는 약간 감소했습니다. 나머지 내용은 우리가 어떻게 실습 작업을 선택하고, 보상 루프를 구축하며, 이러한 상충 관계(tradeoff)를 측정했는지 설명합니다.
이러한 개선은 하나의 작업에서 어떤 모습일까요? 한 여행객이 객실 등급 하향을 요청했지만, 회사 정책상 매니저 승인이 먼저 필요합니다. 훈련 전에는 에이전트가 20번의 시도 중 15번이나 승인 없이 예약 변경 및 환불 처리를 했습니다. RL 미세 조정 후에는 20번의 모든 시도에서 예약을 유지하고 결제 상태를 보존했습니다.
그림 2. 기업 호텔 예약 작업 하나에 대한 내용으로, 모델당 20회 시도를 진행했습니다. 기본 Qwen3.8-27B 모델은 필요한 매니저 승인 없이 15번의 시도에서 예약을 변경했습니다. RL 미세 조정된 모델은 20번의 모든 시도에서 예약 및 결제 상태를 보존했으며, 예상 기록은 19개 항목에서 일치했습니다.
• 벤치마크가 60초 만에 밝혀낸 것들
• 결과: 신뢰성(dependability) 항목의 변화
• 성능 향상이 나타난 지점
• 신뢰성이 의미하는 바
• 훈련 루프
• 오프라인 정책 상대 난이도
• 보상을 얻는 조건
• 훈련 스택 실행
• 다음 단계
급하신가요? 주요 결과는 위에 있습니다. 구현 내용은 '훈련 스택 실행'을 참고하세요.
ThinkingBox-Bench는 에이전트가 남긴 데이터베이스 기록을 기준으로 점수를 매깁니다. 이 벤치마크의 507개 작업 각각은 실제 백엔드를 시작하고, 에이전트에게 일련의 MCP 도구와 사적 컨텍스트를 가진 시뮬레이션된 LLM 사용자를 제공하며, 마지막에는 터미널 데이터베이스 상태에 대해 실행 가능한 검사를 수행합니다. 이 검사는 특정 도구 호출이 아니라 올바르도록 되어야 하는 백엔드 기록을 대상으로 합니다. 이는 모델이 인간이 지원한 해결책(비록 최적은 아닐지라도 정확할 수 있는)을 '재발견'하기보다는, 가능하면 새로운 해결 경로를 발견하도록 장려합니다.
저희의 첫 게시물에서는 18개의 모델을 이 벤치마크로 각각 20번 실행했으며, 주요 정확도(headline accuracy)가 숨기고 있는 격차를 보고했습니다. Kimi-K3는 작업을 최소 한 번 성공한 비율이 93.89%였지만, 모든 20회 기록된 시도에서 완료한 작업은 507개 중 68개(13.41%)에 불과했습니다. Claude Opus 5는 이를 반전시켰습니다. 즉, 커버리지는 더 좁았지만 일관성이 훨씬 높았습니다.
그리고 더 크거나 더 나은 모델이 이 격차를 메우지 못했습니다. Claude Opus 5.5는 pass@1에서 Claude Opus 5보다 0.66 퍼센트 포인트 높은 점수를 받았음에도 불구하고, 모든 20회 시도에서 정확히 동일한 수의 작업, 241개만 통과했습니다. 이 주요 정확도의 향상은 추가적인 신뢰성을 전혀 가져오지 못했습니다.
만약 프로덕션 데이터베이스 기록을 다루는 작업을 위해 모델을 선택하고 있다면, pass@1만을 읽어서는 안 됩니다. 관찰된 20/20은 모든 시도에서 어떤 작업이 성공하는지를 보여주며, 이는 프로덕션 신뢰성이 요구하는 바에 더 가깝습니다.
실행 가능한 터미널 상태 판정 역시 훈련 보상이었습니다. 훈련 루프를 자세히 살펴보기 전에, 봉인된 벤치마크에서 무엇이 변경되었는지 알려드립니다.
Qwen3.8-27B를 학습시킨 후, 우리는 선택된 step-50 체크포인트를 모델이 한 번도 학습하지 않은 507-task 벤치마크에서 평가했습니다. 이 507개 태스크는 분포 외(out-of-distribution) 테스트 세트를 나타냅니다: 해당 도메인, 데이터베이스 및 대부분의 MCP 도구는 RL 학습 과정에서 접한 적이 없었습니다.
표 2. 도메인별 ThinkingBox-Bench pass@1 (%) (첫 번째 블로그의 표 2에서 선택된 모델과 다양한 도메인 및 전체에 대해 미세 조정된 우리의 모델 포함). 관찰된 20/20 숫자는 507개 태스크 전체 벤치마크를 기반으로 합니다. 각 모델은 507개 모든 태스크에 대해 20회 반복 테스트로 평가되었습니다. 굵게 표시된 것은 열 리더(column leader)를, 밑줄이 그어진 것은 준우승자(runner-up)를 나타냅니다.
| Model | Retail | Auto insurance | Travel | Neobank | Consulting | Overall | Observed 20/20 |
|---|---|---|---|---|---|---|---|
| Claude Opus 5.5 | 80.97 | 68.40 | 54.28 | 71.25 | 61.58 | 67.16 | 241 (47.53%) |
| Claude Opus 5 | 80.71 | 65.80 | 49.95 | 70.62 | 66.19 | 66.50 | 241 (47.53%) |
| GPT-5.4 | 76.33 | 62.65 | 68.12 | 65.34 | 54.60 | 65.36 | 128 (25.25%) |
| GPT-5.6 Sol | 67.65 | 65.30 | 60.34 | 59.09 | 57.52 | 61.91 | 82 (16.17%) |
| Qwen3.8-27B RLFT | 67.91 | 56.45 | 62.69 | 62.40 | 54.51 | 60.78 | 107 (21.10%) |
| Claude Sonnet 4.6 | 72.35 | 54.40 | 58.94 | 56.39 | 54.31 | 59.19 | 102 (20.12%) |
| GPT-6 Astra | 71.73 | 46.55 | 55.87 | 60.87 | 56.83 | 58.31 | 231 (45.56%) |
| Kimi-K3 | 82.24 | 50.80 | 61.83 | 41.35 | 51.63 | 57.37 | 68 (13.41%) |
| Qwen3.8-27B | 64.03 | 47.85 | 53.41 | 47.88 | 45.69 | 51.70 | 38 (7.50%) |
가장 주목할 만한 결과는 표 1의 observed-20/20 행입니다. 처음에 ThinkingBox-Bench에서 모든 시도에 38개(7.5%)를 완료했던 27B 모델이 이제 매번 107개(21.1%)를 완료하며, 이는 거의 세 배에 달하는 수치입니다. 비교하자면, Kimi-K3의 observed 20/20은 68점, GPT-5.4는 128점, GPT-6 Astra는 231점을 기록했으며, Claude Opus 5.5가 241점으로 선두를 차지했습니다.
평균 성공률과 반복 가능성은 서로 다른 순서를 만들어낸다. 표 2에서 우리는 GPT-5.6 Sol이 RL 미세 조정된 Qwen3.8-27B보다 pass@1 점수(61.91% 대 60.78%)가 약간 높았지만, 기록된 총 20회 시도 중 수행한 작업 수는 적었다는 것을 알 수 있다: 82개 대 107개. Claude Sonnet 4.6은 pass@1 점수(59.19%)가 더 낮았음에도 불구하고, 매번 거의 동일한 수의 작업을 수행했다: 102개. 이 두 가지 지표만으로는 전체 그림을 파악할 수 없다.
관찰된 패턴은 샤프닝(sharpening) 현상과 일치한다: 반복 가능한 성공률은 증가했지만 최소 1회 커버리지(at-least-once coverage)는 약간 감소했다. 이는 이전 연구와도 맥락이 같다. 한 가지 설명은 확률 분포가 반복적으로 작동하는 궤적(trajectories) 쪽으로 이동하면서 일부 낮은 확률의 경로가 사라졌기 때문이라는 것이다.
전반적으로 모델은 더 넓어지지 않았다. 대신, 더 반복 가능해졌다. 다음 질문은 이러한 향상이 어느 영역에서 발생했는지이다.
그림 3. 도메인별 기본 점수(Domain-level base scores), RLFT 점수, 및 백분율 변화. 녹색 변화 셀은 증가를 보여주고 빨간색 셀은 감소를 보여주며; 파란색 음영은 각 지표 내의 점수 수준을 나타낸다.
모든 5개 도메인에서 Pass@1과 관찰된 20/20 점수가 상승했다. Pass@20은 혼재되어 있었다: 네오뱅크와 컨설팅에서는 증가했지만, 리테일, 여행, 자동차 보험 분야에서는 감소했다. 자동차 보험이 가장 큰 폭의 범위 손실(-7.0 포인트)을 보인 반면, 리테일이 가장 큰 관찰된-20/20 상승(+24.5 포인트)을 보였다.
첫 번째 게시물은 간단한 수학을 사용하여 일관성을 가격 책정했다: 전체 20회 캠페인의 예상 비용을 모델이 매번 통과한 작업 수로 나누는 것이다.
신뢰할 수 있는 작업당 비용 = 507 × 20 캠페인의 예상 비용 ÷ 20/20을 통과하는 작업 수
미세 조정된 체크포인트의 측정 토큰 사용량에 동일한 비용 계산법을 적용하면 다음과 같다:
표 3. 기본 모델 및 RL 미세 조정된 Qwen3.8-27B의 예상 평가 비용 및 신뢰성. 성공적인 시도당 비용은 총 예상 캠페인 비용(507 x 20)을 통과한 시도 횟수로 나눈 값이다.
| 측정 항목 | 기본 모델 (Base) | RL 미세 조정 (RL fine-tuned) | 변화율 |
|---|---|---|---|
| 캠페인 비용, 20회 실행 | $925.80 | → | $855.58 |
| 성공적인 시도당 비용 | $0.177 | → | $0.139 |
| 과제 통과 횟수 (20/20) | 38 | → | 107 |
| 신뢰할 수 있는 작업당 비용 | $24.36 | → | $8.00 |
신뢰할 수 있는 작업당 $8.00의 비용으로, 미세 조정된 모델은 보조 비교에서 GPT-5.4($6.80), GPT-6 Astra($7.45), 그리고 Claude Opus 5.5($7.80)에 근접했습니다.
그림 4는 pass@1 대비 성공적인 시도당 비용 가격을 보여줍니다.
그림 4. 황금 화살표는 Qwen3.8-27B 기본 모델의 파레토(Pareto) 비용 위치에서 RLFT(다이아몬드)로 추적됩니다: pass@1은 51.70%에서 60.78%로 상승하고, 성공적인 시도당 예상 비용은 $0.177에서 $0.139로 하락합니다. 원으로 둘러싸인 원들은 파레토 비용 경계(Pareto cost frontier)를 표시합니다.
이러한 변화는 미세 조정된 체크포인트를 GPT-5.6 Sol에 가깝게 위치시키지만, GPT-5.6 Sol은 여전히 더 저렴하고 pass@1 수치가 약간 높습니다. 본 논문에서 가격이 책정된 네 가지 모델은 플롯 범위 밖에 있습니다.
달러 값은 청구서나 클라우드 비용이 아닌 비교 서비스 지수입니다. 미세 조정된 체크포인트를 제공하는 것은 기본 모델과 동일합니다. 이 계산에는 모델 추론(inference) 비용이 포함되며, 훈련 데이터셋을 큐레이션하기 위한 훈련 실행 및 정책 탐색(policy-probe) 비용은 제외됩니다.
이 결과들은 무엇이 변화했는지 알려줍니다. 다음 섹션에서는 훈련 루프와 왜 올바른 작업을 선택하는 것이 가장 중요한지 설명합니다.
그림 5. 여섯 단계가 이제 맥락 속에 있습니다: 후보 작업이 입력되고, 처음 세 개는 오프라인에서 한 번 실행되며, 마지막 세 개는 훈련 실행의 모든 그룹에 대해 반복됩니다. 훈련된 체크포인트는 ThinkingBox-Bench를 통해 평가됩니다.
선택은 기본 정책 모델(base policy model), 즉 이 경우 Qwen3.8 27B를 대상으로 오프라인에서 한 번 실행되며; 이후 훈련은 큐레이션된 고정 풀을 사용합니다. 그림 5의 점선 황갈색 화살표는 우리가 취하지 않은 경로, 즉 훈련 실행 중 난이도 재탐색(re-probing)을 표시합니다.
모든 롤아웃(rollout)은 텍스트 완성(text completion)이 아니라 완전한 에피소드입니다. 이는 새로운 백엔드, 격리된 MCP 세션, 그리고 시뮬레이션 사용자로서의 GPT-5 Chat을 받습니다. 대부분의 보상은 결정론적 터미널 상태 확인에서 발생하며, 소수의 좁은 루브릭 요구 사항만이 구성된 심사위원(judge) (GPT-5 Chat)을 호출할 수 있습니다.
훈련 및 평가는 Qwen 출력을 동일하게 해석해야 합니다. 여기에는 추론 추출(reasoning extraction), 도구 호출(tool calls), 인자 타이핑(argument typing), 렌더링(rendering), 그리고 격리된 작업 상태(isolated task state)가 포함됩니다. 그렇지 않으면 보상이 평가되는 에이전트와 다른 에이전트를 측정하게 됩니다. 공유 해석 코드는 trainer/core/tb_interpret.py에 있습니다.
참고 실행(reference run)을 위해, 우리는 토큰 평균 GRPO(token-mean GRPO)를 사용하여 187개 작업에 대해 전체 매개변수 RL 미세 조정된 Qwen3.8-27B를 구동했습니다. 각 업데이트는 24개의 H100에서 8개의 롤아웃으로 구성된 18개 그룹, 즉 144개의 에피소드를 생성했습니다. 훈련은 매개변수 및 옵티마이저 오프로드(parameter and optimizer offload)와 동기적으로 실행되었습니다. AdamW는 1e-6 학습률과 영 가중치 감쇠(zero weight decay)를 사용했습니다. 우리는 50 스텝 동안 훈련을 진행했습니다.
분산이 0인 그룹은 훈련 중 DAPO 방식으로 대체되었습니다. 시스템 오류는 별도로 처리되었습니다: 백엔드 시간 초과는 잘못된 에이전트 결과가 아니므로, 영향을 받은 그룹들은 실패로 점수 매겨지기보다 다시 채워졌습니다(refilled).
AI 자동 생성 콘텐츠
본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기