릴리스 노트에는 꼭 두 번을 읽어야 하는 종류의 PR이 있다. 한 번 읽고는 실제로 무슨 일이 벌어진 건지 감이 안 오기 때문이다. Hermes Agent v0.8.0 노트에서 해당 항목은 이렇다.
자기 최적화된 GPT/Codex 툴 사용 가이던스 — 에이전트가 자동 행동 벤치마킹을 통해 GPT와 Codex의 툴 호출에서 5가지 실패 모드를 진단하고 패치해, OpenAI 모델에서의 신뢰성을 크게 끌어올렸습니다. (#6120)
처음 읽었을 때 나는 "자기 최적화"라는 말을 좀 헐겁게 쓴 문장이려니 했다. 두 번째로 읽고 나서야 깨달았다 — 말 그대로였다. 에이전트는 벤치마크 스위트를 자기 자신에게 돌려 보고, OpenAI 모델들이 이 에이전트의 툴을 호출할 때 보이는 체계적인 실패를 찾아냈고, 그 실패를 고칠 맞춤형 가이던스를 생성했고, 그 고침이 실제로 먹히는지 다시 측정했다. 최종 결과는 사람이 승인했다. 그러나 진단과 패치라는 단계 전체는 자동이었다.
이건 풀어 볼 가치가 있다. 릴리스 안에 한 줄로 슬쩍 들어오지만, 그 뒤로 나올 릴리스들이 어떤 모양을 띨 수 있는지를 바꿔 놓는 종류의 능력이기 때문이다.
구체적으로 어떤 문제였는가
Hermes Agent와 OpenAI 모델 — GPT-5, Codex — 의 조합은 최근 몇 번의 릴리스에 걸쳐 눈에 띄게 흔들리고 있었다. 사용자들의 얘기는 대체로 같았다. Anthropic Claude는 매끄럽게 도는데, GPT-5는 가끔 인자 모양이 엉뚱하거나, 단계를 건너뛰거나, 멀티 툴 시퀀스 중간에 자기가 뭘 했는지 놓쳐 버린다는 거다. 이건 미묘한 버그가 아니다. 눈앞에서 벌어지는 걸 그냥 볼 수 있다. 하지만 손으로 고치려 들면 사람을 미치게 한다 — 실패 모드가 모델마다 다르고, 프롬프트 표현에 직관으로 잡기 어려운 방식으로 반응하기 때문이다.
PR 설명에 따르면 되풀이되는 패턴은 다섯 가지였다.
- •파괴적인 툴 호출 전에 해야 할 선행 점검을 건너뛰기.
- •스키마가 구조화된 객체나 숫자를 원하는 자리에 원시 문자열을 던져 넣기.
- •체인으로 엮인 호출에서 어느 툴 호출이 이미 성공했는지를 놓치고 중복 호출을 내기.
- •가이던스가 재시도하라고 말해 주는데도 일시적 에러가 뜨면 재시도를 거부하기.
- •컨텍스트가 길어지면 "계획을 실행"에서 "계획을 다시 짜기"로 흘러 버리기.
이 다섯 개 중 어느 것도 이론상의 이야기가 아니다. 각각 뒤에 GitHub 이슈의 꼬리가 길게 달려 있다.
이것들을 고친 루프
PR #6120의 접근법에는 움직이는 부품이 세 개 있다.
첫째, 자동 행동 벤치마크 스위트. 하네스 하나가 에이전트를, 위 다섯 가지 실패 모드를 끄집어 내도록 설계된 합성 시나리오 모음에 대고 돌린다. 각 시나리오에서 벤치마크는 모델이 뭘 했는지, 뭘 했어야 했는지, 그리고 그 차이가 알려진 실패 패턴 중 하나로 분류되는지를 기록한다.
둘째, 가이던스 생성 단계. 벤치마크가 실패 하나를 표시하면, 하네스는 후보 가이던스 문자열을 내놓는다 — 시스템 프롬프트에 얹을 짧고, 모델별로 다듬어진 지시문인데, 방금 실패한 바로 그 패턴을 정확히 겨눈다. "더 신중해져라" 같은 말이 아니다. "파괴적 툴을 호출하기 전에, 동일한 인자로 짝이 되는 프리뷰 툴을 먼저 호출하고 그 출력을 보고해라" 같은 식이다. 후보는 실제로 관찰된 실패에 맞춰서 만들어지지, 일반론적인 루브릭을 따라 나오는 게 아니다.
셋째, 재벤치마킹 단계. 각 후보 가이던스 문자열이 같은 시나리오 스위트에서 다시 테스트된다. 점수를 올리는 가이던스는 남고, 다른 시나리오의 점수를 깎는 가이던스는 버려진다. 살아남은 문자열들은 Hermes가 출하하는 GPT/Codex 시스템 프롬프트에 모아진다.
이게 왜 다른 종류의 물건인가
역사적으로, 에이전트 프레임워크에 함께 출하되는 프롬프트는 사람이 쓴다 — 혼자일 때도 있고 작은 팀일 때도 있다 — 그 사람이 자기 눈으로 대화를 훑으면서 "이게 먹히더라", "저건 안 먹히더라"는 의견을 쌓아 올린다. 이 과정에는 문제가 세 개 있다. 여러 모델로 확장되지 않는다, 모델이 업데이트될 때 싸게 다시 돌릴 수 없다, 그리고 만들어진 프롬프트 안에는 그 사람의 실제 증거 옆에 그 사람 특유의 미신이 함께 박혀 있다.
"사람이 쓰고 사람이 평가"라는 루프를 "벤치마크가 후보를 쓰고 벤치마크가 평가"라는 루프로 갈아 끼우는 건, AI가 감독 없이 자기 자신을 튠하게 두는 것과는 전혀 다른 이야기다. 최종 가이던스는 여전히 사람이 승인한다. 하지만 패턴을 찾아내고 해결책을 제안하는 실제 작업은 이제 측정 가능하고 재현 가능한 일이 됐다. GPT-6이 나오면 같은 하네스가 다시 돈다. 새로운 실패 모드가 보고되면 새 시나리오 하나를 추가하고 루프가 다시 돈다. 모델의 실제 행동과 프롬프트를 맞춰 두는 데 드는 오버헤드가 한 자릿수 정도 내려간다.
v0.8.0의 관련 변경들도 같은 방향을 가리킨다. 생각 전용 프리필 이어 쓰기(#5931)는 모델이 콘텐츠 블록 없이 추론 블록만 뱉고 멎어 버리는 구체적인 경우를 다룬다. 실행 규율 가이던스(#5414)는 시스템 프롬프트에 "진짜로 뭔가 바뀌지 않았으면 계획을 다시 짜지 마라"라는 일반 규칙을 얹었다. 툴 호출 인자 강제 변환(#5265)은 JSON 스키마가 숫자나 불리언을 기대하는 자리에 들어오는 문자열을 조용히 변환해 주는데, 이게 벤치마크가 잡아낸 바로 그 인자 타입 실패를 덮어 준다. 이 세 PR은 체인지로그에서 보면 서로 무관해 보인다. PR #6120과 함께 읽으면, 의도된 캠페인의 보이는 표면이다 — 측정하고, 고치고, 다시 측정해서, 특정 모델 패밀리에 대해 에이전트를 더 신뢰할 만하게 만드는 캠페인.
조용한 함의
이걸 그냥 좋은 릴리스가 아니라 일종의 경첩 순간처럼 느끼게 하는 지점은, 프롬프트를 손으로 쓰는 걸 그만둔 뒤의 에이전트 엔지니어링이 어떤 모양일지를 슬쩍 보여 준다는 데 있다. Hermes 같은 레포는 프로바이더 12개와 모델 30개를 동시에 조준해야 한다. 각각을 손으로 추적하는 건 이미 불가능하다. 그 대신 "모델 X에는 어떻게 프롬프트해야 하는가"를 벤치마크 하네스가 푸는 튜닝 문제로 다루기 시작하면, 당신은 모델 동물원의 크기에 맞춰 확장되는 프로세스를 손에 쥐게 된다. 동물원에 빠져 죽지 않는 프로세스.
이건 v0.8.0의 헤드라인이 아니었다. 헤드라인은 "지능 릴리스"였고 데모는 라이브 모델 전환이었다. 그런데 마루 아래에 있던 조용한 물건은 — Hermes가 이제 지원하는 모든 모델에서 에이전트를 계속 똑똑하게 유지할 방법을 가지고 있다는 것이다. 사람이 모델 하나당 주말 한 번씩 시스템 프롬프트를 재튠하지 않고도. 이런 종류의 능력은 다음 릴리스에서도 기능으로 드러나지 않는다 — 대신 "GPT에서 Hermes의 신뢰성이 계속 좋아진다"라는 형태로, 다음 여섯 개의 릴리스에 걸쳐 나타난다.
릴리스 노트를 취미로 읽는 사람이라면, 이건 바로 주시해야 할 종류의 형태다.