이 글은 https://danarcheronline.github.io/posts/mind-body-agent 에서 처음 공개되었습니다 (originally published at https://danarcheronline.github.io/posts/mind-body-agent).
에이전트(Agent)를 생각할 때, 자꾸만 '모델 그 자체'라고 생각하기 쉽습니다. 대단한 일을 하면 모델이 똑똑하고, 어리석은 일을 하면 모델이 형편없다고 평가하죠. 그래서 더 새로운 모델이나 더 좋은 프롬프트(prompt)를 찾아 헤매게 됩니다.
물론 모델이나 프롬프트를 개선하면 성능이 향상되는 경우도 있습니다. 하지만 이야기는 그렇게 단순하지 않습니다.
제가 납득하게 된 관점은 에이전트를 한 명의 인간으로 생각하는 것 (이미 무섭도록 그럴싸하지만요). 그리고 LLM(대규모 언어 모델)과 하네스(Harness)를 이 디지털 인간의 '뇌'와 '몸'으로 간주하는 것이었습니다.
모델은 뇌
뇌에 해당하는 것은 대규모 언어 모델 자체입니다. 텍스트를 입력받아 다음에 올 텍스트를 예측하죠. AI가 '똑똑하다'고 평가받을 때, 그 안에 담긴 추론 과정이나 제안하는 코드 모두 이곳에서 탄생합니다.
하지만 아무리 좋은 뇌라도 병 속에 담겨만 있으면 별것 할 수 없습니다. 코드베이스를 볼 눈도 없고, 파일을 수정하거나 테스트를 실행할 손도 없죠. 심지어 5분 전에 무슨 일이 있었는지조차 누군가 다시 보여주지 않으면 기억하지 못합니다. 그렇기 때문에 Anthropic의 Messages API와 같은 모델의 API는 호출할 때마다 대화 기록 전체를 받는 구조로 되어 있습니다. 모델 단독으로는 채팅 화면에서 수정 방법을 설명하는 것까지만 가능하며, 실제로 고치는 것은 불가능합니다.
하네스는 몸
하네스란 모델 주변에 존재하는 모든 것을 의미합니다. 이 용어는 온라인상에서 급격히 퍼졌는데, 제가 처음 접한 것은 Birgitta Böckeler의 글 'Harness engineering for coding agent users'이었습니다. 그녀는 하네스라는 단어를 두고, "AI 에이전트 중 모델 자체를 제외한 모든 것을 지칭하는 약어로 정착되었다"고 설명합니다.
이것이 몸입니다. 뇌가 무엇을 보고, 무엇에 접촉하며, 뇌가 만들어낸 결과물이 어떻게 되는지를 결정하죠.
엄밀히 말하자면, 프롬프트를 LLM 모델에 직접 전달할 수도 있기 때문에 이 비유는 여기서 무너집니다. 인간의 뇌에 감각 입력을 직접 주입할 수는 없으니까요. 현재로서는…
그럼에도 불구하고 보통은 프롬프트를 가장 먼저 받는 것은 하네스의 '눈'입니다.
예를 들어, 에디터의 코딩 에이전트에게 떨어진 테스트를 고쳐달라고 요청했다고 가정해 봅시다. 눈에 해당하는 부분은 리포지토리(repository)를 검색하여 모델에게 어떤 파일을 보여줄지 선택하는 부분입니다. 손에 해당하는 것은 파일을 수정하거나 npm test 같은 명령을 실행하는 도구입니다. 모델이 할 수 있는 것은 그것들을 사용하고 싶다고 요청하는 것뿐입니다. 그 도구가 애초에 존재하는지 여부를 판단하고 실제로 작업을 수행하는 쪽은 하네스 측입니다.
게다가 신경도 있습니다. 테스트가 실패하면, 그 출력이 모델에게 되돌아오고, 모델은 다시 도전합니다. 타입 에러(type error)나 린트(lint) 실패는 누군가 피드백을 주지 않으면 뇌에 도달하지 못합니다. 규칙 또한 알아야 하는데, 이는 벤더의 시스템 프롬프트나 저 자신의 AGENTS.md 파일에서 나옵니다. 게다가 무언가를 망가뜨리기 전에 멈춰주는 반사 작용도 있습니다. 권한 확인 프롬프트나 main 브랜치에 무언가가 들어가기 전에 제가 diff를 읽는 행위 등이 그렇습니다.
이 몸의 일부는 처음부터 내장되어 있습니다. Claude Code나 Cursor 같은 코딩 에이전트를 사용할 때, 모델의 행동을 지시하는 숨겨진 시스템 프롬프트는 벤더가 이미 작성해 두었습니다. 모델에게 보여줄 파일을 찾는 코드나 도구를 실행하고 결과를 피드백하는 루프 역시 벤더가 만든 것입니다. 저는 그 부분에는 전혀 손대지 않았습니다.
남은 것은 그 위에 스스로 만들어가는 부분입니다. 저의 AGENTS.md 파일, 테스트 및 린트 규칙, 실행을 허용하는 명령어, 그리고 머지(merge) 전 리뷰 과정 같은 것들이죠. 이 외부 레이어야말로 우리가 실제로 통제할 수 있는 부분입니다.
에이전트는 한 명의 인간
[!tip] AI 공식
인간 = 몸 + 뇌
에이전트 = 하네스 + LLM 모델
이 두 가지가 결합하여 에이전트를 이룹니다. 뇌와 몸이 갖춰지면, 실제로 일을 해낼 수 있는 한 명의 인간이 되는 것이죠. 영혼을 프로그래밍하는 방법은 아직 탐구 중이지만요… 🤔
이렇게 생각하게 된 후로는, 일이 잘 풀리지 않을 때 주목하는 곳이 달라졌습니다. 만약 어떤 사람이 계속 문에 부딪힌다면, 가장 필요한 것은 더 똑똑한 뇌가 아닙니다. 저는 눈을 확인할 것입니다. 에이전트도 마찬가지입니다. 제 에이전트가 특정 규약을 무시한 것은, 그 지침이 단 한 번도 로드되지 않는 파일에 적혀 있었기 때문이었습니다. 테스트가 빨간색인 채로 '완료'라고 말한 것은, 아무도 테스트를 실행하지 않았기 때문이었습니다. 접촉할 이유 없는 파일을 수정한 것은, 그것을 막는 것이 아무것도 없었기 때문이었습니다. 이 모든 것들은 뇌의 문제가 아니었습니다.
모델의 유용성은 그 모델이 탑재된 몸체(body)에 의해 결정됩니다. 그래서 지금은 에이전트가 어리석은 행동을 하더라도, 그것을 뇌의 잘못으로 돌리는 것을 멈췄습니다. 먼저 몸체를 살펴봅니다.
Discussion