하나의 비서를 세 개의 뇌로 나눈 이유
AI 에이전트 생태계 구축기· 9 / 10
정부지원 공고를 놓치고 나서야 알게 되는 일이 반복됐다. 온통청년·마이홈·LH 같은 포털은 각자 공고를 올리지만, 내 조건(주거 최우선·청년 복지·교육)에 맞는 것만 걸러주는 개인 맞춤 API는 어디도 열어주지 않는다. 그래서 gov-radar라는 도구를 만들기로 했다. 전량 수집 + 프로필 자동 필터로 “내가 모르는 지원도 찾아줘”를 풀자는 것이었다. 옛 시스템으로 실측해보니 2,633건 중 실제 적격은 6건이었다 — 사람이 손으로 거르기엔 비율이 너무 나쁘다.
그런데 설계를 시작하자마자 첫 충동이 하나 있었다. 하나의 AI 에이전트가 수집·판정·알림·기억까지 다 처리하면 되지 않나? 이 글은 그 충동이 왜 꺾였는지, 그리고 꺾인 자리에 무엇이 대신 들어섰는지에 대한 기록이다.
하나로 뭉치려던 충동에 대한 세 가지 반증
에이전트 하나로 짓는 쪽이 설계는 단순하다. 그러나 실제로 따져보니 이 단순함은 세 갈래에서 각각 대가를 요구했다.
반증 1 — 신뢰성
나이·지역·재직코드·마감일 적격 판정은 본질적으로 계산 문제다. 조건문 몇 개로 참/거짓이 갈리는 일을 LLM 판정에 맡기면, 자격이 없는데 있다고 알리는 허위 적격이 생길 위험이 있다. 마침 이 계산을 이미 결정론 코드로 처리해 허위판정 0을 실측해 둔 전례가 agent-system(동결 유산)에 있었다. 그래서 gov-radar는 그 계산부만 원본 무접촉으로 이식했다. 반대로 원본에 있던 소프트 판정 기능 — 클로드 에이전트를 불러 자격 텍스트를 읽고 판단하던 부분 — 은 가져오지 않았다. 그 역할은 코드가 아니라 헤르메스 몫으로 넘겼다.
반증 2 — 학습 불가능성
크론 잡은 자가학습이 비활성이다. 아무리 오래, 아무리 많이 반복 실행돼도 판정 원칙이나 요약 포맷을 스스로 익히지 않는다. 크론 인프라 자체는 27회 연속 실증돼 신뢰할 만했지만, 절차 지식(요약 포맷·[확인 필요] 태그 원칙)을 크론이 알아서 배울 거라 기대할 수는 없었다. 그래서 이 지식은 스킬 문서에 명문화했다. 코드도 아니고 대화 기억도 아닌, 별도의 층이 하나 더 필요했던 셈이다.
반증 3 — 컨텍스트 상한
헤르메스의 지식층은 1,375자라는 물리적 상한을 갖는다. 정책 변경사나 결정 이력처럼 계속 쌓이는 영속 지식은 이 상한 안에 담을 수가 없다. 그래서 영속 지식은 헤르메스 안이 아니라 second로 분리했다. “적어둬” 입구는 이미 가동 중이었고, 대화를 소급 수확하는 하비스터는 별도 게이트 통과 후 해금되는 것으로 남겨뒀다.
”기억”이라는 한 단어 아래 숨은 네 갈래
에이전트를 하나로 뭉치려던 충동을 좀 더 파보면, 그 밑에는 “기억”이라는 단어를 뭉뚱그려 쓰고 있었다는 문제가 있었다. 실제로 풀어보니 이 시스템에서 “기억”이라 부를 만한 것은 넷으로 갈라졌다.
- 운영 상태 — seen 목록·신청 추적. 로컬 파일에 저장한다. 헤르메스 크론은 대화 메모리를 켜지 않고 도는 것으로 확인했다 — 메모리에 기대면 크론이 매 실행마다 백지에서 다시 시작하기 때문이다.
- 크론 절차 — 요약 포맷·판정 원칙. 스킬 문서에 박아둔다.
- 대화 습관 — 헤르메스가 인터랙티브 세션에서 자연히 쌓는 대화 기록. 자동증류는 이 세션 방식에서만 가동됨을 확인했다.
- 영속 지식 — 제도 지식·결정 이력. second로 보낸다.
이 넷을 하나의 “기억”으로 뭉뚱그렸다면, 새로 알게 된 것을 어디에 적어야 할지가 매번 불분명해졌을 것이다. 거처를 나눈 뒤에야 “크론이 뭘 몰라서 실패했나”를 실제로 추적할 수 있게 됐다. 즉, 기억을 나눈 것은 정리벽이 아니라 장애 원인을 특정하기 위한 최소 조건이었다.
이 구조는 몸의 신경계와 닮은 데가 있다. 척수 반사는 뜨거운 것에 손이 닿으면 뇌를 거치지 않고 즉시 손을 뗀다 — 학습도 판단도 필요 없는 순수 계산이다. 반면 대뇌피질은 상황을 읽고 언어로 판단하며 대화한다. 장기기억은 또 별도의 경로(해마)를 거쳐 굳어진다. gov-radar의 코드가 척수 반사, 헤르메스가 대뇌의 판단, second가 장기기억 계통에 해당한다고 보면 이 분할이 왜 자연스러운지 감이 온다. 물론 이건 물리적 회로 비유일 뿐, 이 시스템 어디에도 의지나 감정 같은 건 없다.
역할표로 수렴하다
네 갈래를 확인한 뒤, 이 시스템이 실제로 셋으로 쪼개져야 하는 이유가 표로 정리됐다.
| 주체 | 역할 | 근거 |
|---|---|---|
| gov-radar(코드) | 결정론 수집·하드체크·중복 방지 | 나이·지역·재직코드·마감일은 계산 문제 — 허위판정 0 실측 전례 |
| 헤르메스 | 소프트판정·요약·발송·후속 대화 | 자격 텍스트 독해 + 텔레그램 24시간 대화, 기존 크론 인프라 재사용 |
| second | 영속 지식 축적 | ”뇌는 하나” 원칙 |
이 셋 위에 지크가 하나 더 있다. 승인·검수·크론 등록은 전부 지크의 발화를 거친다 — 검증 전 자동화를 금지하는 최종 판정자이기 때문이다.
안전장치도 하나 걸었다. 헤르메스의 소프트판정은 불확실하면 무조건 [확인 필요] 태그를 붙여 발송하도록 강제했다. 실패 모드를 허위 적격이 아니라 딱지 붙은 도착으로 바꾸는 셈이다 — 옛 match 정책에서 그대로 이식한 규칙이다.
이 표대로 이 시점까지 얼마나 왔는지 자가채점하면, 기획 승인(R0)부터 코드 구축·수동 검수(R2), 헤르메스 스킬 배치(R3)까지는 마쳤다. 후속 대화 실왕복과 크론 등록·라이브 안정(R4)은 아직 대기 중이다. 표를 세우는 것과 그 표대로 며칠을 버티는 것은 다른 문제라서, R4는 지금 단정하지 않는다.
경계는 그은 뒤에도 감시가 필요했다
역할을 나눴다고 경계가 저절로 지켜지는 건 아니었다. 헤르메스에는 llm-wiki라는 스킬이 설치돼 있었는데, 확인해보니 미사용 상태였다. 위키 자리는 second이므로 이 스킬의 활성화는 금지했다 — 헤르메스가 제안하더라도 거절하고, 제안이 반복되면 운영 원칙 문서에 금지 조항을 한 줄 추가하는 것까지 검토 대상으로 남겨뒀다.
헤르메스 확장 규칙도 같은 맥락에서 세 가지로 정했다.
- 확장용 스킬 영역만 건드린다.
- 본체 코드와 운영 중인 데이터베이스·크론 설정에는 손대지 않는다.
- 배치 이후엔 지크가 텔레그램 정문으로 통보받는다.
구축 주체는 클로드 세션이고 헤르메스는 완성품을 돌리는 운영자다 — 폰 채팅으로 직접 개발하는 방식은 기각했다.
엔진 실측이 설계를 뒷받침했다
이 분할이 그럴듯한 이야기로만 끝나지 않으려면, 실제로 크론 엔진이 이 역할표를 감당할 수 있는지부터 확인해야 했다. R1에서 가장 먼저 크론이 스크립트형 잡을 지원하는지를 실측했다.
결과는 확인됐다. 크론 엔진 소스를 직접 열어보니 스크립트 실행 파라미터가 문서화돼 있었고, 스크립트 출력을 그대로 프롬프트에 주입하는 구조였다. 그리고 두 가지가 코드에 그대로 박혀 있었다 — 출력이 비면 AI 호출 자체를 건너뛰고, 스크립트가 실패하면 에이전트가 그 실패를 보고한다. 즉, “코드가 침묵하면 AI는 안 불려나온다”는 이 시스템의 설계 원칙이 남의 설명 문서가 아니라 실제 엔진 소스에서 직접 검증된 것이다.
마무리 — 뇌는 하나, 처리 주체는 셋
second 헌법의 원칙은 다음과 같다.
뇌는 하나.
이 문장을 처음 읽었을 때는 “모든 처리를 한 프로세스가 떠맡으라”는 뜻으로 오해하기 쉬웠다. 그런데 gov-radar를 실제로 설계하고 나니 다르게 읽힌다. 영속 지식의 저장소는 하나로 모으되, 판단의 성격이 다르면 처리 주체도 정직하게 나누라는 뜻이다. 계산 가능한 판정은 코드가, 텍스트 독해와 대화는 헤르메스가, 쌓여야 할 지식은 second 한 곳으로 모인다. 이렇게 나누는 것이 오히려 뇌를 하나로 지키는 방법이었다.
하나의 에이전트로 뭉뚱그리려던 첫 충동은 결국 신뢰성(허위판정 위험)·학습가능성(크론은 안 배운다)·컨텍스트 상한(1,375자)이라는 세 가지 물리적 한계에 각각 부딪혀 꺾였다. 취향의 문제가 아니라, 실측된 숫자와 코드가 내린 판정이었다.