[Agent] Agent Distillation: CoT가 아니라 ‘행동’을 증류해서 0.5B 모델을 도구 쓰는 에이전트로 만들기
[Agent] Agent Distillation: CoT가 아니라 ‘행동’을 증류해서 0.5B 모델을 도구 쓰는 에이전트로 만들기
- paper: https://arxiv.org/pdf/2505.17612 (Distilling LLM Agent into Small Models with Retrieval and Code Tools)
- github: https://github.com/Nardien/agent-distillation
- NeurIPS 2025 accepted (arXiv v2, ‘25-11-05)
- 저자: KAIST / University of Wisconsin-Madison / KRAFTON / DeepAuto.ai (Minki Kang, Jongwon Jeong, Seanie Lee, Jaewoong Cho, Sung Ju Hwang)
- downstream task: tool-using small agent (retrieval + code interpreter)
- factual reasoning 4종 (HotpotQA, Bamboogle, MuSiQue, 2WikiMultiHopQA) + math reasoning 4종 (MATH500, GSM-Hard, AIME, OlymMATH)
- 주요 용어
- agent trajectory: thought $\to$ action $\to$ observation 이 반복되는 상호작용 시퀀스. $\tau = ((r_1, a_1, o_1), \dots, (r_{L_\tau}, a_{L_\tau}, o_{L_\tau}))$. observation $o$ 는 모델이 생성하는 게 아니라 환경이 돌려주는 값이라 loss에서 제외
- agent distillation: teacher LLM agent가 만든 trajectory로 student sLM을 SFT. CoT distillation이 정적인 rationale을 베끼게 한다면, 이쪽은 어떻게 행동할지를 베끼게 함
- first-thought prefix (FTP): teacher에게 먼저 CoT 프롬프트로 첫 추론 스텝 $y_1$ 을 뽑고, 그걸 agent의 첫 thought 접두사로 강제 주입해서 trajectory를 생성하는 기법. teacher trajectory 생성에만 쓰이고 student inference에는 불필요
- self-consistent action generation (SAG): greedy decoding 대신 $N$개의 thought-action을 고온 샘플링 $\to$ 코드 인터프리터로 parsing/execution 에러 나는 것 필터링 $\to$ 남은 것 중 observation이 가장 일치하는(majority) action을 선택하는 test-time 기법
- CodeAct: action을 Python 코드로 표현하는 에이전트 포맷. 본 논문의 student agent가 따르는 형식
1. Motivation
-
sLM은 싸지만 복잡한 문제를 못 풂 $\to$ 지금까지의 표준 해법은 reasoning(CoT) distillation, 즉 teacher LLM의 CoT를 next-token prediction으로 베끼게 하는 것
-
그런데 CoT distillation된 작은 모델은 두 곳에서 무너짐
- rare factual knowledge — 모르는 사실은 그냥 hallucinate 함
- precise computation — 자릿수 많은 산술에서 계산을 틀림
-
논문의 running example: “2010년에 Apple 주식에 $100을 넣었으면 2020년에 얼마인가?”
- 주가 히스토리(사실) + split 반영 산술(계산)이 둘 다 필요함
- LLM은 암기된 지식 + 수치 능력으로 CoT만으로 풀 수 있지만, 이 trace를 sLM에 그대로 증류해도 학습 때 못 본 새 종목/새 수치에는 일반화되지 않음
figure2 첨부 (CoT distillation vs agent distillation 개념 비교 — CoT 학생은 Nvidia 질문에서 사실·계산을 동시에 틀리고, agent 학생은 검색 쿼리를 새로 만들고 코드로 계산)
-
$\to$ (Research Question) 지식·계산을 암기시키는 대신, retrieval과 code tool을 쓰는 행동 자체를 30B급 teacher agent에서 0.5~3B student로 증류할 수 있는가?
2. Contribution
- Agent Distillation 제안: teacher LLM agent의 reason-act-observe trajectory로 sLM을 fine-tuning 하는 프레임워크
- 학생은 사실/계산을 외우는 게 아니라 도구로 푸는 법을 배움 $\to$ 못 본 쿼리·계산에 일반화됨
- naive distillation의 두 한계를 겨냥한 보조 기법 2개
- first-thought prefix (FTP): teacher trajectory 품질 개선 (teacher 추가 학습 없이 프롬프트만으로)
- self-consistent action generation (SAG): student의 test-time robustness 개선 (invalid code action 감소)
- 8개 벤치마크(factual 4 + math 4), student 0.5B~7B 전 스케일에서 CoT distillation 대비 일관된 향상
-
핵심 주장: agent distillation된 모델이 2~4배 큰 CoT distillation 모델과 맞먹음
figure1 첨부 (모델 크기별 5개 세팅 평균 정확도 — 0.5B/1.5B/3B/7B/32B teacher)
3. Related Works
3.1 Reasoning distillation
- 기존 CoT distillation은 teacher의 step-by-step rationale을 재현시키는 방식이고, 이미 post-training 파이프라인의 표준 구성요소임
- 일반화를 위해 retrieval이나 code execution을 끼워 넣는 시도도 있었지만, 정적인 demonstration에 의존하고 환경과의 상호작용이 없음
3.2 Language agents
- ReAct가 observe $\to$ think in natural language $\to$ act 하는 language agent 개념을 세웠고, 이후 약한 LLM을 강한 LLM의 trajectory로 fine-tuning 하는 연구들이 이어짐 (FireAct 등)
- 차이점: 선행 연구는 대부분 $\geq$ 7B 모델을 GPT-4 같은 closed-source trajectory로 튜닝함. 본 논문은 $\leq$ 3B 급까지 내려가는 setting을 다루고, teacher trajectory 품질과 student test-time 동작을 함께 건드림
4. Preliminary
-
Knowledge distillation: teacher $p_T$ 와 student $p_S$ 의 토큰 분포 차이를 최소화
\[\min_\theta \mathbb{E}_{(x,y)\sim \mathcal{D}_{train}} \frac{1}{L_y}\sum_{n=1}^{L_y} D\big(p_T(\cdot \mid y_{<n}, x) \,\|\, p_S(\cdot \mid y_{<n}, x; \theta)\big)\] -
Reasoning distillation: 사람이 rationale을 다는 건 비싸니, teacher에게 CoT 프롬프트 $I_{CoT}$ 를 줘서 rationale을 생성시키고 그걸 그대로 흉내내게 함
\[\min_\theta -\mathbb{E}_{x \sim \mathcal{D}_{train},\, y \sim p_T(\cdot \mid x, I_{CoT})} \sum_{n=1}^{L_y} \log p_S(y_n \mid x, y_{<n}; \theta)\]
5. Agent Distillation
5.1 기본 형태
-
teacher에게 agent instruction $I_{agent}$ 를 주고 trajectory를 뽑음
\[\tau = ((r_1, a_1, o_1), \dots, (r_{L_\tau}, a_{L_\tau}, o_{L_\tau})) \sim p_T(\cdot \mid x, I_{agent})\] -
student는 observation을 제외하고 thought/action만 학습
\[\min_\theta -\mathbb{E}_{x,\, \tau \sim \pi_T(\cdot\mid x, I_{agent})} \sum_{t=1}^{L_\tau} \log p_S(r_t, a_t \mid x, \tau_{<t}; \theta)\]- observation은 환경이 주는 값이라 모델이 생성할 대상이 아님
-
이렇게 하면 student는 CodeAct 스타일로 코드를 짜고, 인터프리터 에러가 나면 코드를 고치고, 검색 결과가 부실하면 쿼리를 바꿔가며 진행할 수 있음
5.2 두 가지 병목
- agentic behavior가 OOD임 — teacher/student 모두 CoT 스타일로 instruction-tuning 되어 있어서, agent 포맷을 강요하면 원래 잘하던 도메인의 성능이 오히려 떨어짐
- sLM은 정상 동작하는 코드를 잘 못 뽑음 — 포맷 깨진 코드, 라이브러리 오용 등이 상호작용 자체를 막음
5.3 First-thought prefix (FTP)
figure3 첨부 ((a) First-thought Prefix, (b) Self-consistent Action Generation 도식)
- 관찰: Qwen2.5-32B-Instruct 조차 agent로 쓰면 MATH500 어려운 문제에서 CoT 프롬프트보다 성능이 떨어짐 (Section D.1)
- 가설: instruction-tuned 모델은 이미 CoT로 푸는 데 최적화돼 있는데, agent instruction이 그 추론 패턴과 충돌해 distributional drift를 일으킴
- 첫 추론 스텝이 최종 결론을 크게 좌우한다는 선행 연구에 기대어, 첫 thought만 제대로 잡아주면 된다고 봄
-
방법: LLM jailbreaking의 prefix-attack에서 착안. CoT 프롬프트로 뽑은 첫 스텝 $y_1$ 을 agent trajectory의 첫 thought 접두사로 박아넣음
\[y_1 \sim p_T(\cdot \mid x, I_{CoT}), \quad \tau = \{(r_1', a_1, o_1), \dots\} \sim p_T(\cdot \mid x, y_1, I_{agent})\] - teacher trajectory 생성 시에만 사용. student는 inference 때 prefix가 필요 없음
5.4 Self-consistent action generation (SAG)
- 관찰: 작게 증류된 agent는 실행 실패하거나 에러를 뱉는 invalid action을 자주 냄
- 방법 (greedy decoding 대체)
- 높은 temperature로 nucleus sampling, thought-action 후보 $N$개 생성
- 가벼운 코드 인터프리터로 parsing/execution error 나는 후보 제거
- 전부 실패하면 실패한 것 중 하나를 랜덤 선택해 에러 메시지를 observation으로 되먹여 다음 스텝에서 self-correct
- 살아남은 후보의 observation에 대해 majority voting $\to$ 가장 일치하는 action 채택
- figure 3(b) 예시: 후보 4개 중 1개는 인터프리터 에러로 탈락, 나머지 3개 중 2개가 같은 출력 $\to$ 그 2개 중 하나를 최종 action으로
6. Experiments
6.1 Setup
table1 첨부 (태스크 분류 — in-domain / out-of-domain, 데이터셋별 test size)
- Tasks: factual은 HotpotQA(in-domain, 500) / Bamboogle(125) / MuSiQue(500) / 2WikiMultiHopQA(500), math는 MATH500(in-domain) / GSM-Hard(500) / AIME(90) / OlymMATH(200)
- 학습은 HotpotQA 1,000개 + MATH 2,000개만 사용
- Models: teacher =
Qwen2.5-32B-Instruct, student =Qwen2.5-Instruct0.5B / 1.5B / 3B / 7B (모두 instruction-tuned 상태) - Baselines: CoT distillation (+RAG를 붙인 변형 포함) vs agent distillation (+FTP, +SAG)
- Training: 질문당 trajectory 1개 샘플링 후 오답 trajectory는 버림 $\to$ 약 2,000개로 학습. LoRA(rank 64, 전 linear layer), 2 epochs, batch 8, lr $2\cdot 10^{-4}$, A100 80GB $\times$ 4
- Inference: greedy decoding, max 5 steps. SAG는 $N=8$, temperature 0.4
- Tools/Metric: 검색엔진 대신 Wikipedia 2018 +
e5-base-v2임베딩. math는 exact match, factual은gpt-4o-miniLLM-as-a-judge
6.2 Main results
table2 첨부 (8개 벤치마크 × 5개 모델 크기 메인 결과)
- 평균 점수 요약 (Avg. 컬럼)
| Params | CoT Prompting | CoT Distill | CoT Distill+RAG | Agent Prompting | Agent Distill | + FTP | + SAG | + FTP&SAG |
|---|---|---|---|---|---|---|---|---|
| 32B (teacher) | 39.54 | - | - | 46.00 | - | - | - | - |
| 7B | 33.19 | 33.54 | 32.16 | 36.54 | 39.85 | 42.26 | 41.86 | 42.68 |
| 3B | 29.27 | 27.72 | 28.53 | 21.20 | 33.60 | 34.49 | 33.50 | 36.60 |
| 1.5B | 20.33 | 21.28 | 24.64 | 7.94 | 28.06 | 29.11 | 30.29 | 30.55 |
| 0.5B | 11.06 | 13.64 | 15.90 | 1.80 | 19.24 | 19.99 | 20.01 | 21.90 |
- 증류 전에는 agent 프롬프팅이 오히려 재앙 — 3B에서 21.20, 1.5B 7.94, 0.5B 1.80. 작은 모델은 프롬프트만으로는 유효한 코드 action을 못 만듦
- 반대로 증류 후에는 전 스케일에서 CoT distillation을 앞지름. 특히 out-of-domain에서 격차가 큼
- 2~4배 큰 모델과 맞먹음
- 0.5B agent (21.90) $\approx$ 1.5B CoT distill (21.28)
- 1.5B agent (30.55) $\approx$ 3B CoT (29.27)
- 3B agent (36.60) > 7B CoT distill (33.54)
- 7B agent (42.68) > 32B teacher의 CoT prompting (39.54)
- Factual: RAG를 붙이면 CoT distill이 좋아지지만 정적 검색이라 math에선 오히려 해가 됨. agent distill은 RAG-augmented CoT까지 앞섬 — 추론 중에 능동적으로 검색을 걸기 때문
- Math: GSM-Hard(6자리 산술 같은 rare number combination)와 AIME/OlymMATH에서 강함
- 단, MATH500은 3B·7B에서 CoT distill이 더 나음 (3B: CoT prompting 62.8 vs agent 60.2). 저자 해석 — Qwen2.5가 대학 수준 수학에 이미 instruction-tuning 되어 CoT와 궁합이 좋고, 큰 모델일수록 내부 계산 능력이 충분해 도구 이득이 줄어듦
6.3 Analysis
(1) Code-specific 모델은 teacher 쪽에서만 약간 이득
table3 첨부 (general vs code-specific teacher/student 조합 비교)
| Teacher | Student | Avg. |
|---|---|---|
| 32B | 1.5B | 30.55 |
| 32B-Coder | 1.5B | 30.91 |
| 32B | 1.5B-Coder | 29.52 |
| 32B-Coder | 1.5B-Coder | 30.17 |
- student를 code 모델로 바꾸는 건 효과 없음, teacher를 code 모델로 쓰는 쪽이 (아주 근소하게) 나음
- 전반적으로 차이가 미미 $\to$ code 지식이 student의 핵심 병목은 아님
(2) 다른 모델 패밀리에도 적용됨
table4 첨부 (Llama-3.2-1B-Instruct, Phi-4-mini-instruct 결과)
| Student | CoT Prompting | CoT Distill | Agent (FT) | + FTP | + FTP&SAG |
|---|---|---|---|---|---|
| Llama-3.2-1B-Instruct | 11.53 | 13.23 | 19.54 | 22.93 | 23.97 |
| Phi-4-mini-instruct (3.8B) | 25.04 | 27.41 | 31.52 | 34.58 | 35.79 |
- Qwen 계열 밖에서도 FTP·SAG가 일관되게 더해짐
(3) FTP는 어려운 문제에서 효과
figure4 첨부 (3B 모델의 MATH subcategory별 / 난이도 level별 정확도 — CoT vs Agent vs Agent+FTP)
- naive agent distillation은 3B의 MATH500 성능을 대부분의 level에서 떨어뜨림
- FTP를 쓴 teacher trajectory로 학습하면 level 4, 5에서 특히 크게 개선 $\to$ AIME에서의 향상과 같은 경향
- 다만 precalculus 같은 일부 카테고리는 하락. 삼각함수 성질 적용처럼 분석적 접근이 필요한 문제는 코드로 풀기 어려움
(4) SAG vs CoT self-consistency
figure5 첨부 (샘플 수 $n$ 에 따른 agent+SAG vs CoT+self-consistency, 3B 모델)
- 같은 연산 예산에서 CoT에 self-consistency를 붙이면 MATH에서는 CoT가 앞섬
- 그러나 더 어려운 AIME에서는 agent+SAG가 여전히 우위, HotpotQA·MuSiQue 같은 factual 태스크에서는 self-consistency 이득이 미미함
(5) SAG는 invalid code action을 실제로 줄임
figure7 첨부 (MATH / GSM-Hard / AIME에서 SAG 유무에 따른 code parse·execution error rate)
- 모델이 작을수록(0.5B) 유효한 코드를 만들 확률이 떨어지는데, SAG가 이를 뚜렷이 완화함. AIME에서 효과가 가장 큼
- 단 execution error가 0이 되진 않고, 남은 건 에러 메시지를 observation으로 받아 다음 턴에서 수정
(6) 토큰 비용은 크게 늘지 않음
figure6 첨부 (3B 모델의 CoT vs Agent 생성 토큰 수 분포)
- factual: agent가 더 씀 (HotpotQA 179.3 $\to$ 267.1, MuSiQue 231.0 $\to$ 390.2) — 여러 번 검색하느라
- math: agent가 더 적게 씀 (MATH 591.3 $\to$ 486.3, AIME 1022.5 $\to$ 885.8) — 반복 계산을 for-loop 같은 코드에 위임
(7) FTP는 검색 호출을 줄인다 (양날의 검)
figure8 첨부 (모델 크기·데이터셋별 평균 retrieval tool 호출 횟수, FTP 유무)
- 큰 모델일수록 검색을 더 많이 부름. 작은 모델은 처음 가져온 문서에 과의존해 재검색을 안 함
- FTP를 쓰면 검색 호출이 줄어듦 $\to$ Bamboogle은 개선되지만 HotpotQA·MuSiQue는 엇갈림
- 해석: FTP가 thought 안에서 사실을 직접 서술하게 유도해서, 도구 대신 내부 지식에 기대다 hallucination 위험이 커짐
7. Conclusion & Limitations
Conclusion
- CoT가 아니라 tool-using 행동 전체를 증류하는 Agent Distillation을 제안. teacher 쪽은 FTP로 trajectory 품질을, student 쪽은 SAG로 test-time robustness를 끌어올림
- 0.5B~7B student가 2~4배 큰 CoT distilled 모델과 대등하거나 그 이상, 특히 out-of-domain에서 강함
Limitations (저자 명시)
- FTP가 평균적으로는 도움되지만 만능이 아님 — 도구 대신 내부 지식으로 사실을 지어내게 만들어 성능을 떨어뜨리는 경우가 있음 (figure 8). teacher trajectory 생성 전략 자체를 student의 한계에 맞춰 설계할 필요
- SAG는 test-time compute를 더 씀 ($N=8$ 샘플링). process-level reward model 결합이 후속 방향
- agent distillation이 코어 추론 능력 자체를 올려주진 않음 — 도구 사용 행동만 이식됨. tool-augmented 환경에서의 RL이 후속 단계로 필요
- 그 외 본문에서 드러나는 제약: teacher trajectory를 질문당 1개만 뽑고 오답을 버려 학습 데이터가 약 2k로 작음, max 5 steps 제한, 검색엔진 대신 Wikipedia 2018 고정 corpus
Takeaways
- “무엇을 아는가”를 증류하지 말고 “어떻게 알아내는가”를 증류하라 — 작은 모델일수록 암기보다 도구 사용이 남는 장사. OOD 격차가 이를 보여줌
- 작은 모델에게 agent 포맷은 프롬프트만으로는 절대 안 됨 (0.5B agent prompting 1.80점). 증류가 있어야 비로소 켜짐
- teacher가 instruction-tuned 상태에서 agent 역할을 하면 성능이 깎인다는 관찰이 흥미로움. FTP는 첫 thought 하나만 CoT로 고정하는 저렴한 처방
- SAG는 “샘플링해서 실행 안 되는 건 버리고, 결과가 일치하는 걸 고른다”는 단순한 아이디어인데 sLM agent의 최대 실패 모드(invalid code)를 직격함
- 도구가 항상 이기는 건 아님 — MATH500처럼 모델이 이미 강한 in-domain 태스크에서는 CoT가 여전히 우위. 도구는 rare knowledge / heavy computation에서 값을 함