에이전트의 영혼?

제가 항상 헤르메스 에이전트 강의나 라이브에서 하는 말이 있습니다. "SOUL.md 를 잘 설정해라." 이렇게 말하는 이유는 SOUL.md 가 생각보다 에이전트가 동작하는데 있어서 큰 영향을 주기 때문입니다.
오늘은 이 SOUL.md 가 어떻게 에이전트들에게 영향을 주고, 어떤 원리로 영향을 주게 되는지 알아보도록 하겠습니다
프롬프트가 조립되는 방식

대다수의 에이전트에서는 우리가 작성하는 프롬프트만 AI 에게 전달되는것 같지만 실제로는 그렇지 않습니다. 에이전트 내부에는 대부분 프롬프트를 조립하는 방식이 별도로 존재합니다. 이를 프롬프트 조합(Prompt Assemble) 이라고 칭합니다.
헤르메스 에이전트와 오픈클로는 기본적으로 우리가 별도로 참조(Reference)[1] 를 걸지 않아도 SOUL.md 를 읽어서 프롬프트의 가장 첫 부분으로 조립하게 됩니다. 즉, 우리가 별도로 SOUL.md 에 대해서 입력하지 않아도 이는 항상 LLM 에게 전송되는 프롬프트인 것이죠.
어텐션 메커니즘
이를 이해하기 위해서는 기본적으로 어텐션 메커니즘에 대해서 간단하게는 여러분이 알아야 할 필요가 있습니다. 어렵지 않게 설명할테니 한번 천천히 읽어보시면 좋을거에요 :)
예를 들어 아래와 같은 두 문장이 있다고 해봅시다.
- I went to the bank to deposit money
- I sat by the bank of the river, watching fish
여기서 bank 는 처음에는 은행이라는 의미로, 두번째에는 강둑이라는 의미로 쓰였습니다. 어텐션 메커니즘은 "이 단어의 의미를 알기 위해 어떤 부분에 집중해야 하는가?" 를 나타내는 메커니즘 입니다. 즉, 첫번째 문장에서는 bank 를 이해하기 위해 deposit 과 money 에 더 집중하고, 두번째에서는 river 와 fish 에 더 집중하게 되죠.
즉, 각 단어들이 어떠한 뜻을 가지기 위해서는 주변 단어들이 영향을 끼치는 구조입니다. 방금 본 것처럼 단어는 주변의 영향을 받습니다. 우리가 적는 프롬프트 역시 AI 입장에서는 '주변 단어'이기 때문에, 당연히 작업 전반에 영향을 끼칩니다. 이러한 이유로 LLM 초기에 프롬프트 엔지니어링 이라는 기술이 발달 했었죠.
즉, 우리가 입력하는 모든 프롬프트가 에이전트가 작업하는데 영향을 끼칠 수도 있다는 점을 이해하고 넘어가면 좋습니다.
Lost-in-the-middle

그렇다면 프롬프트를 입력하는 위치는 아무런 문제가 없을까요? 저희가 어텐션에 대해서 간단하게 이해했으니, Lost-in-the-middle [2]현상에 대해 간단하게 알아볼 필요가 있습니다. 갑자기 어려운 단어가 많이 나와서 살짝 어렵게 느껴질 수 있지만, 조금만 참아 봅시다 :)
앞서 단어는 주변의 영향을 받는다고 배웠죠? 그런데 여기서 중요한 점은, 주변 전체가 똑같이 영향을 주는 게 아니라는 겁니다. 즉, 작업을 할때 프롬프트가 길어지면 단어가 많아지므로 영향을 많이 주는 부분과, 영향을 상대적으로 덜 주는 부분들이 나눠지겠죠?
이 현상은 여러 논문에도 나와있듯이 긴 작업(컨텍스트가 꽤 많이 차게 되는)을 진행할때 초기 부분(Primacy Effect) 와 마지막 부분(Recency Effect) 에 적힌 프롬프트들에 의해 영향을 많이 받게 됩니다. 초기 부분과 마지막 부분에 작업의 중요한 조건에 대해 설정하면, 작업을 완수할 확률이 올라가게 됩니다. 반대로 중간에 있는 부분(in-the-middle) 에 중요한 조건을 적게 되면 작업 완수율(Performance) 가 확 떨어진다고 해요.
SOUL.md 의 위치?
SOUL.md 는 위에 그림에서 설명했듯이 가장 큰 영향을 줄 수 있는 첫 부분에 존재하게 됩니다. 즉, 우리가 에이전트에게 어떠한 작업을 시켜도 시킬때 마다 가장 큰 영향을 주는 부분이라고 생각하시면 됩니다.
즉, 작업을 진행하는 부분에도 SOUL.md 가 영향을 끼친다는 뜻 이죠. 그리고 우리에게 질문 / 답변을 어떤 타이밍에 어떤 어투로 하는가에 대한 모든 것들이 이 SOUL.md 에 영향을 받게 됩니다.
특히 헤르메스 에이전트에서 SOUL.md 가 중요한 이유
특히 헤르메스 에이전트에서 SOUL.md 를 제대로 설정하는게 좋은 이유는 Hermes Agent 는 SKILL 을 자동으로 생성하기도 하고, 삭제하기도 하는 자가-발전형(self-improvement) 에이전트이기 때문입니다.
즉, 에이전트가 작업을 할때나 스킬을 생성할때 모두 영향을 끼치게 됩니다. 진짜 성격(SOUL) 같죠? 그래서 저는 여러 헤르메스 에이전트를 이용할때 반드시 아래 내용을 초기에 설정하고 작업을 진행합니다.
- 성격(personality) 은 어떤 성격을 가져야 하는지
- 어떻게 답변해 주는게 좋은지
- 어떤 상황에 질문을 반드시 하도록 하는지 (예를 들면, 모호한 부분이 있을때는 반드시 질문하여 해소)
- 피해야 할 것들은 무엇인지
물론 SOUL.md 뿐만 아니라 USER.md 등 여러가지 부분에 정보들이 섞여서 들어가긴 하지만, 이 부분을 꼭 설정하고 들어가요. 추후에 스킬을 자동으로 생성할 때나 작업할 때 큰 영향을 주기 때문이에요.
마치며
오늘은 가볍게(?) 왜 SOUL.md 를 설정해야 하는지 알아봤어요. 다음번에는 이 SOUL.md 를 제가 대략적으로 어떻게 작성하는지, 그리고 지난번에 소개드린 프로젝트에 알맞게 AGENTS.md 파일은 어떻게 작성하는지 제 유튜브 편집 자동화 프로젝트를 통해 소개드려볼게요.
아 그리고 후원해주신 립스트롱님 감사드립니다! :)
관련 영상
의견을 남겨주세요
립스트롱
비공개 댓글 입니다. (메일러와 댓글을 남긴이만 볼 수 있어요)
의견을 남겨주세요