SWE-Trail이 이전 시도로 코딩 에이전트 학습 궤적 수집을 개선한다
SWE-Trail: History-Guided Trajectory Collection for Coding Agent Training
무엇인가
코딩 에이전트는 저장소 이슈를 풀기 위해 탐색하고, 코드를 고치고, 검증하는 긴 시퀀스를 거친다. 이 상호작용 궤적은 점점 더 post-training 데이터로 쓰이고 있으므로, 궤적을 어떻게 수집하느냐가 학습된 모델이 무엇을 배우는지를 결정한다. 일반적인 방식은 이슈마다 여러 궤적을 독립적으로 샘플링한 뒤 테스트나 판정 모델로 걸러내는 것이다. 문제는 논문의 2절이 실측으로 보여주듯, 독립 샘플을 늘릴수록 뒤쪽 샘플이 점점 중복된다는 점이다. SeedBank의 이슈당 5회 시도에서 기대 해결 이슈 수는 1회에 58.4개였고, 2회로 늘리면 13.1개가 늘지만 3·4·5회 추가는 각각 8.0, 5.1, 3.4개만 늘었다. 수정 파일 기준 커버리지도 1회 시도만으로 stable-solved 이슈 90.0%, mixed 73.2%, never-solved 80.1%를 이미 덮었다. 즉 뒤쪽 시도는 새로운 곳을 탐색하기보다 이미 탐색한 수리 지점을 다시 방문한다.
어떻게 동작하나
저자들이 던지는 질문은 이력(history)을 어떻게 쓸 것인가다. 가장 손쉬운 방법은 이전 궤적을 조언(advice) 형태로 에이전트 컨텍스트에 넣는 것이지만, 그러면 학습 궤적이 테스트 시점에는 없는 조언에 의존해 생성된다. 이 train-test 불일치가 실제로 해롭다는 것을 논문은 SWE-Exp 변형으로 보여준다. SeedBank 궤적에서 경험 메시지를 만들어 에이전트에게 읽히고 그 메시지를 학습 레코드에 남긴 조건은, 독립 샘플링 대비 Multilingual에서 1.33%p, SWE-Pro에서 2.78%p 오히려 낮았다. 그래서 저자들의 원칙은 이력은 '어디에 수집 노력을 쓸지'만 정하고, '무엇을 생성할지'는 에이전트가 평소 컨텍스트로 스스로 결정하게 하는 것이다.
무엇과 다른가
SWE-Trail은 두 단계로 동작한다. 수집 전 컴파일러가 (이슈, 이력)을 분석해 성공 시도가 뒷받침하는 결정, 수리 경로 간 차이, 반복되는 실패 같은 allocation signal을 뽑고, 소스 코드를 건드리지 않는 읽기 전용 저장소 검사로 남은 질문을 보충해 비공개 acquisition record R_i에 담는다. 이를 바탕으로 고정 스텝 번호가 아니라 롤아웃의 행동과 관찰로 상태를 인식하는 detector D_i의 규칙, 상태별 비교 목적 u_i(d), 후보 생성용 샘플링 온도 λ_i를 정한다. mixed·never-solved 이력에는 더 높은 온도를 준다. 규칙은 기록된 시도에 리플레이해 근거가 부족한 상태를 걸러내고, 채택된 상태는 수집 라운드 동안 고정된다.
어떻게 쓰나
롤아웃이 detector 상태에 도달하면, 에이전트는 이력 없이 평소 컨텍스트로 다음 행동 후보들을 샘플링한다. 첫 샘플은 평소 온도의 기본안이 되고 나머지는 λ_i를 쓴다. SWE-Trail은 동등한 제안을 묶고 실행 가능한 대안을 추린 뒤, R_i와 u_i(d)로 최대 하나의 대안만 고른다. 같은 체크포인트에서 격리된 워크스페이스 두 개를 복원해 기본안과 대안을 동일한 짧은 지평으로 병렬 실행하고, 두 접미사(suffix)를 섞인 순서로 제시해 어느 쪽이 기본안인지 가린 채 비교한다. 명확한 근거가 있을 때만 대안 경로를 택하고 아니면 기본안을 유지한다. 궤적당 이런 비교는 최대 한 번으로 제한해 다단계 탐색 트리로 번지는 것을 막는다. 학습 레코드에는 선택된 경로만, 에이전트의 원래 추론과 행동을 고쳐 쓰지 않은 채로 남고, 선택되지 않은 접미사와 수집기 내부 이벤트는 제거된다.
전제와 한계
실험은 300개 SWE-rebench V2 이슈에서 이슈당 5개, 총 1,500개 궤적을 GLM-5.1과 OpenHands 스캐폴드로 수집해 진행했다. 수집은 커밋 이력이 제거된 오프라인 샌드박스에서 이뤄졌고 참조 패치는 주어지지 않았다. 124B Ling-3.0-flash-base를 128개 H800에서 full-parameter SFT로 학습하고 3회 독립 실행해 평균을 냈다. 이력 5개를 쓰는 H5는 독립 샘플링(SeedBank) 대비 SWE-bench Multilingual 2.33%p, SWE-bench Pro 1.60%p 평균 해결률을 올렸고 세 번의 학습 실행 모두 SeedBank의 모든 실행을 앞섰다(p=0.05, 단측 permutation test). 같은 파이프라인에서 이력을 뺀 H0은 +0.11/+0.73%p에 그쳤고, H5는 H0보다 추가로 2.22/0.87%p 높았다. 이력이 어디서 비교할지를 정하는 부분을 무작위화하면 -1.44/-1.28%p, 어떤 경로를 남길지를 무작위화하면 -0.89/-1.19%p 떨어졌다. Qwen3-14B-Base에서도 H5는 SeedBank 대비 +3.11/+2.42%p, H0 대비 +1.67/+1.60%p를 기록했다.
흥미로운 지점은 수집 성공률과 학습 효과가 비례하지 않는다는 것이다. H0은 SeedBank보다 해결된 궤적을 37개 더 만들었지만 학생 모델은 0.11%p밖에 좋아지지 않았다. 반면 H5는 H0보다 해결 궤적 16개, 해결 이슈 6개만 더 만들고도 2.22%p를 더 올렸다. 이득은 mixed 이력에 집중된다. 300개 이슈 중 51개뿐인 mixed 이력이 H5의 추가 해결 궤적 16개 중 13개, 추가 해결 이슈 6개 중 5개를 설명한다. 과정 지표에서도 H5는 평균 행동 수를 40.89에서 39.51로, 반복 파일 읽기를 7.59에서 7.01로 줄였고 마지막 수정 후 검사 비율은 88.91%에서 89.53%로 거의 변하지 않았다. 수집 단계에서는 후보 샘플링이 1,500개 롤아웃 중 664개(H0)에서 1,147개(H5)로 늘었고, 두 접미사 실행은 560개에서 968개로 늘었다.
실무적으로 이 논문이 주는 교훈은 롤아웃 예산을 '이슈당 균등 반복'이 아니라 '이력이 가리키는 분기점'에 배분하라는 것이다. 다만 비용 곡선은 가파르지 않다. 이력을 5개에서 10개로 늘린 H10은 H5 대비 0.22/0.14%p만 더 얻으면서 일반 롤아웃 외 토큰을 307M에서 510M으로 66.0% 늘렸고 총 수집 토큰도 12.9% 늘었다. H5 자체는 H0 대비 최대 3.7% 토큰만 더 쓴다. 사후 선택도 대체재가 아니다. 이슈당 10개를 독립 샘플링해 5개를 고르는 Top-5-of-10은 H5보다 Multilingual 1.56%p, SWE-Pro 0.96%p 낮았다. 반면 SeedBank 5개와 H5 5개를 합쳐 같은 검증기로 5개를 고르는 Top-5-hybrid는 66.22/43.14로 H5를 0.56/0.32%p 웃돌아, 수집 방식 개선과 사후 선택이 상보적임을 보여준다.
저자들이 명시한 한계도 분명하다. 실험은 학생 모델 두 개를 쓰지만 수집 모델과 에이전트 스캐폴드는 각각 하나씩(GLM-5.1, OpenHands)만 썼으므로 다른 조합에서의 일반화는 검증되지 않았다. 또한 수집 라운드 동안 이력을 고정하고 모든 이슈에 동일한 수집 예산을 배정했으며, 라운드가 반복되며 이력을 갱신하거나 이슈별로 예산을 차등 배분하는 것은 향후 과제로 남겼다. SWE-Trail을 코딩 외 영역으로 확장하려면 상태 복원과 대안 비교를 위한 피드백을 지원하는 환경이 필요하다고 밝히고 있으며, 웹 내비게이션을 한 가지 가능성으로 언급한다.