같은 모델인데 결과가 다른 이유 - 작은 LLM 외부화 실험 노트

같은 모델인데 결과가 다른 이유 - 작은 LLM 외부화 실험 노트
Photo by Scott Brayley / Unsplash

며칠 전 다모앙에서 어느 분이 이런 글을 올리셨습니다.

메인 에이전트한테 직접 작업 금지, 무조건 서브에이전트 소환해서 일 시키라고 해도 하루에 한 번은 새 세션으로 리프레시 시켜줘야 할 정도로 오염이 잘 됩니다.

클로드나 GPT, 제미나이처럼 초거대울트라킹왕짱 모델은 수천 명의 전문가들이 모여 관리를 하니 이런 걱정이 덜 하겠죠?

이 글에 답을 달려고 하다가, 댓글로 풀기엔 너무 큰 주제라 글로 정리하는 게 낫겠다 싶어서 적습니다. 답답함이 충분히 이해가 가고, 그 답답함이 사실 요즘 AI 에이전트 연구의 가장 활발한 주제 중 하나와 정확히 맞닿아 있어서요.

저는 이 문제를 측정해보는 실험 노트를 운영하고 있습니다. 이름은 Gemento고, 이 글은 그 노트에서 발견한 것들을 풀어쓰는 글입니다.

일단 "오염" 이라는 표현부터

가장 먼저 짚을 게 - "에이전트 오염" 이라는 표현 자체가 약간 잘못된 프레이밍입니다. 이 단어를 쓰면 마치 외부에서 뭔가 침투해서 에이전트가 더러워진 것 같은 그림이 되는데, 실제로 일어나는 일은 그게 아닙니다.

LLM은 컨텍스트 윈도우에 들어온 토큰들을 보고 다음 토큰을 예측하는 시스템입니다. 그래서 토큰이 길게 쌓이면 모델이 이전 대화의 패턴을 따라가게 됩니다. 이건 침투당한 게 아니라 설계된 대로 작동하는 것입니다.

잘못된 프레임 정확한 프레임
에이전트가 오염됐다 컨텍스트가 길어지면서 모델이 이전 패턴을 따라간다
깨끗한 상태로 되돌려야 한다 작업 단위로 컨텍스트를 분리하면 된다
외부 침투 문제 컨텍스트 관리 문제

그리고 "메인 에이전트는 작업 금지, 서브에이전트만 시킴" 이라는 시도 - 이건 효과가 거의 없습니다. 메인이 직접 코드를 짜든, 서브가 짠 코드를 받아오든, 토큰은 똑같이 메인 컨텍스트에 누적되거든요. 결국 "하루에 한 번 새 세션으로 리프레시" 하시는 게 정답에 가깝고, 그게 부족해서 그러시는 게 아니라 정상적인 작업 패턴입니다.

마지막으로 "수천 명 전문가가 관리하는 큰 모델은 이런 걱정이 없을 것" - 이건 안타깝게도 사실이 아닙니다. GPT/Claude/Gemini도 컨텍스트 길어지면 똑같이 이렇게 작동합니다. 오히려 큰 모델일수록 컨텍스트 윈도우가 깁니다(200K, 1M 토큰). 그래서 "길게 쓸 수 있으니까 길게 쓰자" 가 되어 장기 의존성 문제가 더 두드러지기도 합니다.

수천 명 전문가가 해주는 건 모델 자체의 학습이지 사용자 세션 관리가 아닙니다. 즉 이 문제는 모델을 키워서 푸는 문제가 아니라, 모델 밖에서 푸는 문제입니다.

그래서 모델 밖에서 푼다는 게 무엇인가

여기서부터가 본격적인 이야기입니다.

저는 약 한 달 전부터 이 질문을 측정해보고 있었습니다. 작은 로컬 LLM(Gemma 4 E4B, 8B급)이 메모리·도구·역할·통제를 외부화하면 단일 추론보다 얼마나 더 나아지는가.

처음 시작은 단순한 호기심이었습니다. seCall과 tunaFlow를 만들면서 반복적으로 부딪힌 문제가 - 장기 메모리, 컨텍스트 폭증, 세션을 가로지르는 작업의 보존 - 이거 셋이었거든요. 그러다 한 가지 생각을 했습니다.

프롬프트 컨텍스트를 비우고 데이터베이스 검색에 의존하면, 데이터베이스가 거의 무한한 컨텍스트처럼 작동할 수 있을까?

이 사고가 Memento(크리스토퍼 놀란, 2000)와 주인공 레너드의 문신, 폴라로이드, 전화 기록으로 저를 데려갔습니다. 단기 기억을 잃은 사람이 외부 매개체에 기억을 분산시켜서 작업을 이어가는 것 - 이게 작은 LLM이 긴 워크플로우를 견디게 만드는 구조의 비유가 됐습니다.

그래서 만든 게 Gemento입니다.

4축 외부화 프레임

Gemento는 LLM의 인지를 4개 축으로 나누고, 각각을 모델 가중치 밖으로 빼는 실험을 합니다.

외부화 대상 메커니즘
Tattoo (문신) 작업 메모리 (주장, 근거, 상태) 루프 간 전달되는 구조화된 JSON state
Tools 계산 (수학, 검색, 검색) OpenAI-compatible function calls
Role 자기검증 A(제안)/B(비판)/C(판단) — 같은 모델, 다른 프롬프트
Orchestrator 종료/단계 전환/자원 예산 모델이 아닌 결정론적 Python 루프

여기서 중요한 점은 - A/B/C 역할이 같은 베이스 모델이라는 겁니다. Gemma 4 E4B 하나로 세 역할을 모두 굴립니다. 차이는 프롬프트와 검증 계약뿐이고요. 모델을 키운 게 아니라 구조를 바꿨을 뿐인데도 결과가 달라지는지가 핵심 질문입니다.

첫 번째 발견 - 자기검증은 안 됩니다

가장 먼저 측정한 건 자기검증이었습니다. 일부러 오류가 들어간 답변 15개를 만들어 모델한테 "이 답에 문제 있어?" 라고 물어봤습니다.

검출률 0/15. 자기 답을 자기가 못 봅니다.

그런데 같은 모델한테 다른 역할(Critic) 을 입혀서 같은 답을 다시 보게 했더니 - 12/15(80%)를 잡아냈습니다. 같은 모델, 같은 답, 다른 역할 프롬프트. 이게 다입니다.

이게 의미하는 게 뭐냐면 - "AI한테 네 답 한 번 더 검토해봐" 라는 흔한 워크플로우가 거의 작동하지 않는다는 겁니다. 모델은 자기가 만든 답을 거의 그대로 옹호합니다. 진짜 검증이 일어나려면 역할이 분리되어야 합니다. 같은 모델이라도.

이 결과가 다모앙 그분이 말씀하신 "메인 에이전트가 오염되니까 새 세션으로 리프레시" 라는 직관과 닿아 있습니다. 새 세션이 아니라 새 역할이면 같은 세션 안에서도 효과가 있다는 거니까요.

두 번째 발견 - 더 큰 모델을 위에 얹는다고 좋아지지 않습니다

이게 다모앙 그분의 "수천 명 전문가가 관리하는 모델" 질문에 대한 직접적인 답입니다.

실험 11(H10)에서 - A/B는 Gemma 4 E4B 그대로 두고, Judge C에만 Gemini 2.5 Flash를 붙여봤습니다. 더 강한 모델이 위에서 검증해주면 좋아질 것 같잖아요? 직관적으로는 그렇습니다.

결과: -0.08 (악화). Cohen's d = -0.316, 작지만 음수.

특히 logic-02 케이스가 결정적이었습니다. 베이스라인(Gemma만)은 5번 중 4번 "105 inconsistent" 라는 정답을 포함-배제 원리로 도출했습니다. 그런데 Mixed(Gemini Judge)는 5번 모두 null이거나 키워드를 놓친 답이 나왔습니다. 더 강한 Judge가 더 약한 모델의 자기 발견 사슬을 끊어버린 거예요.

메커니즘은 이렇습니다. 강한 Judge가 작은 모델의 Tattoo 스키마를 자기 식으로 재해석하면서 미스매치가 생깁니다. 그러면 작은 모델 입장에서는 "내가 한 작업이 인정 안 되네" 가 되어 조기 수렴해버립니다.

이게 결정적인 이유 - "더 큰 모델 = 더 좋음" 이라는 직관이 깨지는 자리이기 때문입니다. 수천 명 전문가가 만든 큰 모델을 가져다 붙이는 게 답이 아니라, 구조를 어떻게 짜느냐가 답이라는 겁니다.

세 번째 발견 - 같은 모델인데 1-loop 41% → 8-loop 78%

이건 헤드라인 수치입니다. 같은 Gemma 4 E4B인데, 단일 추론으로 41.3%였던 정답률이 8루프 ABC 오케스트레이션으로 78.1%까지 올라갔습니다. 9개 태스크 × 60 trial = 540 trial로 측정했고요.

같은 벤치마크에서 1-call Gemini 2.5 Flash 베이스라인은 59.1%였습니다. 즉 작은 로컬 모델이 8루프 구조 덕분에 큰 모델 1번 호출보다 +19pp 높았다는 결과입니다.

다만 여기서 함정이 있어서 짚어둡니다.

  • 시간 비용은 약 20배 더 듭니다 (8루프니까)
  • API 비용은 0이지만 GPU 시간이 들어갑니다
  • 9개 태스크 벤치마크에서의 결과이지 일반적인 우월성 주장은 아닙니다

이게 "작은 모델로 큰 모델을 대체할 수 있다" 는 글이 절대 아닙니다. "같은 모델이라도 구조에 따라 결과가 크게 달라진다" 는 사실 자체가 측정 가능하다는 글이고요.

네 번째 발견 - 구조는 모노토닉하지 않습니다

이게 가장 흥미로운 부분입니다. "구조 추가하면 좋아진다" 가 모든 경우에 맞는 게 아닙니다.

같은 시기에 두 가지 역할 추가 실험을 돌렸습니다.

실험 어디에 추가 결과
Extractor (사전 단계) A 들어가기 전에 entity/claim 추출 후 prefix Δ = +0.05 (긍정)
Reducer (사후 단계) C 끝난 후 답변 정제 Δ = -0.05 (부정)

거의 거울처럼 대칭입니다. 둘 다 같은 모델로 추가했는데, 어디에 추가했느냐에 따라 결과가 정확히 반대 방향이 나왔습니다. (둘 다 n=15에서 통계적 유의성은 없음, p=0.198 / 0.180)

여기서 한 가지 짚어두면 - Reducer 결과는 키워드 채점기의 한계 때문일 가능성도 있습니다. Reducer가 다중 출처 답변을 "단일 추정치" 로 압축하다 보니 키워드 매칭이 떨어진 거지, 실제 품질이 떨어진 게 아닐 수도 있거든요. 이거 LLM-as-judge로 재검증할 계획입니다.

다만 "n=15에서 유의하지 않다" 는 점, 그리고 "키워드 채점기의 잠재적 아티팩트" 양쪽 다 명시했으니, 이건 확정된 비대칭이 아니라 cross-model로 재현해봐야 하는 패턴으로 다룹니다.

만약 이 방향이 cross-model에서도 유지된다면 - "역할은 추가가 아니라 위치가 중요하다" 는 결론이 됩니다. 이게 다음 단계의 작업입니다.

다섯 번째 발견 - 도구도 사실 한 종류가 아닙니다

도구 외부화도 몇 차례 측정했는데, 흥미로운 sub-distinction이 나왔습니다.

도구 종류 결과
결정론적 단일 호출 도구 (계산기, linprog) +18~23pp (긍정)
확률적 에이전트 반복 검색 (BM25 search) -22pp (부정, p=0.012 통계적 유의)

이 격차가 큰 이유는 - 검색은 모델이 "몇 번 검색해야 하는지" 를 스스로 결정해야 합니다. 다중 hop 태스크에서 모델은 1-hop을 찾고 "문서에 답이 없네" 하고 조기 수렴해버립니다. 5번의 진단 trial에서 tool-call 수가 [1, 2, 2, 3, 0]이었고, 정답률이 정확히 [0, 1, 1, 1, 0]으로 매핑됐습니다. 반복이 부족하면 검색은 안 합쳐집니다.

반면 계산기는 "한 번 부르면 정답" 이라 모델이 결정해야 할 게 별로 없습니다. 그래서 잘 됩니다.

이게 다모앙 그분의 "서브에이전트한테 시킴" 와도 연결됩니다. 서브에이전트한테 작업을 위임할 때, 그게 결정론적인 한 번의 호출로 끝나는 작업이면 효과적인데, 반복적이고 판단이 필요한 작업이면 서브에이전트도 결국 컨텍스트 누적과 조기 수렴 문제를 겪습니다. 외부화의 효과가 작업 종류에 따라 다르다는 겁니다.

통합 발견 - "더 많은 구조가 항상 더 좋은 게 아니다"

H11+H12의 위치 효과 + H13의 도구 sub-distinction을 합치면, 1차 결론이 이렇게 됩니다.

더 많은 구조가 모노토닉하게 더 좋은 게 아니다. 어디에 두느냐, 그리고 그것이 어떻게 반복되느냐가 중요하다.

이게 작은 모델 외부화의 진짜 교훈인 것 같습니다. "외부화하면 좋아진다" 가 아니라 "외부화의 위치와 반복 방식에 따라 정반대 결과가 나올 수 있다" — 이걸 데이터로 보여주는 게 Gemento의 1차 기여라고 생각합니다.

그래서 다모앙 그분의 답답함으로 돌아가면

처음으로 돌아갑니다.

"메인 에이전트가 오염되니까 새 세션으로 리프레시" 하시는 그분의 직관 - 이거 정확합니다. 컨텍스트 누적은 LLM의 정상 작동이고, 그걸 끊어주는 게 정답이고, 부족해서 그러시는 게 아니라 그게 작업 패턴입니다.

그리고 "수천 명 전문가가 관리하는 큰 모델은 다를 것" - 안타깝게도 그렇지 않습니다. 모델을 키워서 푸는 문제가 아니라 모델 밖에서 푸는 문제입니다. Gemento 실험은 그걸 데이터로 측정해본 시도이고, 같은 모델이라도 구조를 바꾸면 41% → 78%가 가능하다는 것 - 그리고 더 큰 모델을 위에 얹는 게 오히려 -8pp 악화로 갈 수 있다는 것 - 이 두 결과가 그 답답함에 대한 가장 직접적인 답입니다.

본인만의 자동화 시스템을 구축하고 싶다고 하셨는데 - 그 방향은 맞습니다. 다만 "오염을 막는 도구" 가 아니라 컨텍스트를 어떻게 분리하고, 역할을 어떻게 나누고, 도구를 어디서 호출하고, 통제를 어디에 둘 것인지 - 이 4축을 본인 워크플로우에 맞게 설계하시는 작업이 됩니다. 큰 모델 가져다 붙이는 게 답이 아니라, 본인이 매일 쓰는 그 모델을 밖에서 어떻게 감싸느냐가 답입니다.

마치며 - 왜 이걸 공개하는가

Gemento는 MIT 라이선스이고, 의도적으로 그렇게 정했습니다. 1인 연구 노트지만 - "작은 로컬 모델 외부화" 라는 방향에서 일하는 분들이 다른 모델로 재현해보고, 다른 결과가 나오면 그걸 공개하고 - 그렇게 측정값이 쌓이는 게 한 사람의 노트보다 훨씬 가치 있다고 봅니다.

특히 cross-model 재현이 시급합니다. 지금 모든 헤드라인 수치가 Gemma 4 E4B 단일 모델 결과인데, 이게 Llama 3.1 8B나 Qwen 2.5 7B에서도 같은 패턴인지 확인해야 합니다. 위치 효과(H11/H12 거울 대칭)도, 검색 도구 음의 효과(H13)도, 모두 "이 모델에서만 나타나는 우연" 일 가능성을 배제할 수 없거든요. 그래서 다음 단계는 다른 모델로 같은 실험을 돌려보는 것입니다.

그리고 한 가지 - 이 노트는 의도적으로 "실패한 가설" 을 그대로 둡니다. H2(자기검증)는 0/15로 완전히 실패했고, H10(강한 Judge)는 -0.08로 거꾸로 갔고, H13(검색 도구)는 -0.22로 통계적으로 유의하게 악화됐습니다. 이걸 "잘 안 된 결과" 로 숨기지 않고 그대로 둡니다. 부정 결과가 사실 가장 큰 정보거든요. "이 방향은 안 됨" 을 알게 되면 다음 시도의 방향이 명확해집니다.

다모앙에서 그분 글을 보고 "어디서부터 풀어야 할지 모르겠다" 는 답답함이 들었던 게 - 사실은 이 4축 외부화 이야기를 어떻게 시작해야 할지 자신이 없었기 때문이었습니다. 그래서 이 글이 나왔고요. 답답함을 가지신 그분께, 그리고 비슷한 자리에 계신 다른 분들께, 이 노트가 작은 좌표 하나가 되면 좋겠습니다.


참고 자료

  • Gemento GitHub: https://github.com/hang-in/gemento
  • 한국어 README: README.ko.md
  • 핵심 분석 보고서들: 레포의 docs/reference/ 폴더 참조
  • 관련 연구: Zhou et al. (2026) Externalization in LLM Agents, Wu et al. (2024) StateFlow, Zhang et al. (2024) Chain of Agents
  • 영감의 원천: Christopher Nolan, Memento (2000)