23. 에이전틱 AI — 행동하는 모델을 정렬하기

하네스도 배운다: 보상으로 고치는 것은 파라미터만이 아니다

앞 절에서 하네스를 고친 것은 사람이었다. LangChain 팀은 실패한 궤적을 읽고, 무엇이 막혔는지 짐작하고, 지시문과 점검을 고친 뒤 다시 돌려 점수를 봤다. 굴려 보고, 점수를 보고, 고친다. 강화학습의 루프와 같은 모양이다. 그렇다면 이 일을 사람 대신 보상에 맡길 수는 없을까? 모델을 고치는 데 쓰던 보상으로 하네스를 고치면 무엇이 달라질까?

모델을 고친다 하네스 모델 파라미터 굴리기 → 보상 → 갱신 그래디언트로 수를 고친다 하네스를 고친다 하네스 모델 (고정) 굴리기 → 보상 → 갱신 지시문·도구·기억·코드를 고친다

루프는 같다. 갱신이 어디로 가느냐만 다르다. 굵은 테두리가 고치는 대상이다.

손으로, 경험으로, 보상으로

경험을 스스로 쌓는다. 사람이 고치는 데는 사람의 시간이 든다. Voyager는 이 일의 일부를 에이전트에게 넘겼다. 행동 프로그램을 써서 실행해 보고, 환경의 반응과 오류 메시지로 고치고, 과제를 이뤘다고 스스로 확인한 프로그램만 설명을 붙여 스킬 라이브러리에 넣었다. 모델(GPT-4)은 그대로이고 자라는 것은 라이브러리다. 다만 무엇을 남길지는 「통과했는가」 하나로만 정했고, 하네스의 다른 부분(지시문, 도구의 꼴)은 사람이 짠 그대로였다.

지시문을 보상으로 고친다. 2025년 버클리·스탠퍼드 등의 아그라왈(Lakshya Agrawal)과 동료들이 낸 GEPA는 하네스의 지시문을 정책으로 보았다. 몇 번 굴린 궤적(추론, 도구 호출, 도구 출력)과 점수를 모델이 글로 되돌아보고, 무엇이 틀렸는지 진단해 지시문을 고쳐 쓰고, 고친 지시문을 다시 굴려 점수로 거른다. 같은 Qwen3 8B로 여러 단계를 거쳐 답하는 질의응답(HotpotQA)을 풀게 했더니, 손대지 않은 하네스 42.33점, 파라미터를 GRPO로 24,000번 굴려 고친 경우 43.33점, GEPA로 지시문만 6,871번 굴려 고친 경우 62.33점이었다. 여섯 과제 가운데 다섯에서 GEPA가 앞섰고, 수학 경시 문제(AIME-2025)에서는 GRPO가 38.00점으로 GEPA(32.00점)보다 나았다. 점수 하나로 파라미터 수십억 개를 조금씩 미는 것보다, 「왜 틀렸는가」를 글로 읽고 지시문 한 줄을 고치는 쪽이 굴림당 얻는 것이 많을 때가 있다는 것이다.

하네스 코드 전체를 고친다. DGM(2025)은 고칠 대상을 지시문에서 하네스 코드 전체로 넓혔다. 셸과 파일 편집 도구 두 개만 가진 단순한 코딩 에이전트에서 출발해, 에이전트가 자기 코드를 고친 새 판을 만들고, 새 판을 벤치마크로 채점해 보관함에 쌓기를 80번 되풀이했다. 모델은 내내 Claude 3.5 Sonnet으로 고정이었다. 에이전트가 스스로 붙인 것은 더 나은 코드 편집 도구, 긴 컨텍스트를 관리하는 장치, 동료 검토처럼 답을 다시 살피는 장치 같은 것이었고, SWE-bench Verified 점수는 20.0%에서 50.0%가 되었다. 이렇게 찾은 하네스는 다른 모델에 끼워도 점수를 올렸다(o3-mini 23.0% → 33.0%, Claude 3.7 Sonnet 19.0% → 59.5%, 같은 200문제).

하네스를 고치는 정책을 강화학습으로. 앞의 둘은 고치는 쪽이 고정된 큰 모델이었다. 고치는 솜씨 자체를 보상으로 기를 수도 있다. Memory-R1(2025)은 대화에서 새 사실이 들어올 때마다 기억 창고에 추가(ADD)·수정(UPDATE)·삭제(DELETE)·그대로(NOOP) 가운데 하나를 고르는 「기억 관리자」를 따로 두고, 이 고르기를 PPO와 GRPO로 학습했다. 보상은 고친 창고를 받은 답변 모델(고정)이 질문에 정답을 냈는가 하나다. 「강아지 버디를 입양했다」 뒤에 「한 마리를 더 입양했다, 이름은 스카우트」가 오면, 학습 전 관리자는 둘을 모순으로 보고 버디를 지운 뒤 스카우트를 넣었고, 학습한 관리자는 「버디와 스카우트 두 마리」로 고쳐 적었다. 학습에 쓴 질문은 152개였다. 2026년 8월의 Harness-R1은 한 걸음 더 나가, 대상 에이전트(고정)의 실패 궤적을 읽고 하네스 코드에 고침 꾸러미를 써 내는 9B 「하네스 엔지니어」 모델을 GRPO로 학습했다. 보상은 그 고침을 적용한 하네스로 대상 에이전트를 다시 돌렸을 때의 성공률이다.

모델 강화학습 하네스 강화학습
고치는 것 모델 파라미터 지시문, 도구 목록과 꼴, 기억 규칙, 스킬, 하네스 코드
정책 모델 그 자체 하네스를 고르는 쪽(사람이 짠 탐색, 또는 고치는 모델)
보상 과제 성공 같다 — 과제 성공
이 절의 예에서 굴린 횟수 GRPO 24,000번 (HotpotQA) GEPA 6,871번 (같은 과제)
고친 것을 읽을 수 있나 없다 (수십억 개의 수) 있다 (지시문, 코드)
옮겨 쓰기 그 모델에만 다른 모델에 끼워도 듣는 경우가 있다

보상과 루프는 같고, 갱신이 가는 곳만 다르다. 이 장의 뒤 절들은 다시 모델을 고치는 쪽으로 돌아가 「끝에 한 번 오는 보상을 어느 스텝, 어느 토큰에 나눠 줄 것인가」를 다룬다. 그 물음은 하네스를 고칠 때도 그대로 남는다. 실패한 궤적에서 고쳐야 할 것이 모델의 판단이었는지 하네스가 보여 준 관찰이었는지부터 가려야 하기 때문이다.

문제 4 — 하네스의 몫은 9.3인가 5.0인가

Harness-R1은 하네스 엔지니어 모델을 GRPO로 학습해 대상 에이전트(Qwen3.5-9B)의 하네스를 고치게 했다. 세 과제(WebShop, ALFWorld, DBBench)의 평균 성공률은 아래와 같다. 아무것도 고치지 않음 44.3%, 하네스만 고침 53.6%, 대상 모델만 직접 미세조정(SFT) 59.2%, 미세조정한 모델에 맞춰 하네스까지 고침 64.2%. (가) 하네스를 먼저 고쳤다고 보면 하네스와 모델이 보탠 몫은 각각 몇 %p인가? 모델을 먼저 고쳤다고 보면? (나) 두 순서에서 하네스의 몫이 다른 까닭을 말하시오. (다) 두 몫을 하나씩 정해 보고해야 한다면 어떻게 하겠는가?

김민준 (평상)
김민준
(가) 하네스 먼저면 하네스 53.6 − 44.3 = 9.3, 모델은 64.2 − 53.6 = 10.6. 모델 먼저면 모델 59.2 − 44.3 = 14.9, 하네스 64.2 − 59.2 = 5.0. 합은 둘 다 19.9예요.
김민준 (자신만만)
김민준
하네스 몫은 9.3이 맞죠. 아무것도 안 고친 데서 하네스만 바꾼 게 하네스의 순수한 효과니까요. 5.0은 모델이 섞인 숫자고요.
선생님 (질문)
선생님
민준 학생, 그 순수한 효과로 모델 쪽도 재 볼까요? 아무것도 안 고친 데서 모델만 고친 몫은요? 그 둘을 더하면 전체 19.9가 되나요?
김민준 (평상)
김민준
모델만 고친 몫은 14.9니까… 9.3 + 14.9 = 24.2예요.
김민준 (당황)
김민준
전체는 19.9인데 둘의 「순수한 효과」를 더하면 24.2네요. 4.3이 남아요.
이서연 (의심)
이서연
그럼 둘이 같은 실패를 겹쳐서 고친 거 아니야? 하네스가 막아 주던 실수를 미세조정한 모델은 이미 안 하니까, 모델을 고친 뒤에는 하네스가 고칠 것이 줄어든 거지.
선생님 (평상)
선생님
그래요. 둘이 고치는 실패가 겹치면, 먼저 고친 쪽이 겹친 몫을 가져가요. 그래서 순서마다 몫이 달라요.
이서연 (깨달음)
이서연
그럼 (다)는 두 순서의 몫을 평균 내면 되겠네. 하네스 (9.3 + 5.0)/2 = 7.15, 모델 (14.9 + 10.6)/2 = 12.75. 더하면 19.9로 맞아.
선생님 (평상)
선생님
하나로 보고해야 한다면 그게 공정한 방법 가운데 하나예요. 다만 숫자 넷을 함께 적어 두는 게 더 정직해요. 겹친다는 사실 자체가 결과니까요.
이서연 (평상)
이서연
확률에서 P(A 또는 B) = P(A) + P(B) − P(A 그리고 B) 랑 같네요. 겹친 부분을 빼지 않고 둘을 더하면 전체보다 커지고요.

정리 (가) 하네스 먼저: 하네스 9.3, 모델 10.6. 모델 먼저: 모델 14.9, 하네스 5.0. 합은 둘 다 19.9. (나) 하네스와 모델이 고치는 실패가 겹쳐서, 먼저 고친 쪽이 겹친 몫(24.2 − 19.9 = 4.3)을 가져간다. (다) 두 순서의 몫을 평균 내면 하네스 7.15, 모델 12.75(합 19.9). 다만 네 점수를 함께 적는 것이 가장 정직하다. 부품을 하나씩 빼 보는 제거 실험도 부품끼리 겹치면 빼는 순서에 따라 공이 달라진다.