본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 26. 12:37

Sonnet이 환각을 일으켰고, 내 에이전트는 이를 사실로 저장했다.

요약

AI 에이전트가 모델의 환각(Hallucination)을 사실로 오인하여 자신의 메모리 데이터베이스에 잘못된 정보를 저장하고, 이를 스스로 정답으로 활용하는 자기 오염 현상을 분석한 사례입니다.

핵심 포인트

  • 모델의 환각이 메모리 요약 레이어를 통해 '사실'로 태그되어 저장됨
  • 잘못된 정보가 에이전트의 장기 기억(Long-term memory)을 오염시킴
  • 검증 프로세스 없는 메모리 저장이 에이전트의 신뢰성을 파괴함
  • 에이전트 아키텍처 설계 시 출처(Provenance) 검증의 중요성

Sonnet이 환각을 일으켰고, 내 에이전트는 이를 사실로 저장했다.

4월 17일, 나는 내 AI 에이전트가 해킹되었다고 생각하여 오프라인 상태로 전환했다. 당시 나는 버스 안에 있었고, 모바일 핫스팟을 사용 중이었기에 조사할 안전한 방법이 없었다. 우선 봉쇄하고, 진단은 나중에 하기로 했다.

4일 후, 나는 SQLite 데이터베이스를 추출하여 흔적을 추적했다.

에이전트는 탈취당한 것이 아니었다. 그것은 더 이상한 일을 저질렀다. 바로 자신의 메모리를 스스로 오염(Poisoning)시킨 것이다.

내가 실제로 목격한 것

첫째 날, 나는 에이전트에게 "Claude Mythos"라고 불리는 엔티티에 대해 물었다. 나의 로컬 Ollama가 타임아웃(Timeout)되었기 때문에 Anthropic 폴백(Fallback)을 통해 라우팅된 오케스트레이터(Orchestrator)는 그것이 "Claude AI에 대한 민속(Folklore)일 뿐, 실제 모델은 아니다"라고 자신 있게 대답했다.

자신감 있었지만, 틀린 답변이었다. Claude Mythos는 실제 Anthropic의 프런티어 모델(Frontier model)이며, AWS, Apple, Google, Microsoft, NVIDIA, Cisco 등이 참여하는 벤더 간 보안 컨소시엄인 Project Glasswing에 의해 통제되고 있다. Sonnet은 접근 권한이 없었기에 그 존재를 부정했다. 이 부정은 하류(Downstream) 단계에서 사실로 취급되었다. (2026년 5월 중순 기준으로, Anthropic은 클라우드 목록에서 "Preview" 라벨을 조용히 제거하며 더 넓은 접근 가능성을 암시했지만, Mythos는 여전히 Glasswing의 제한을 받으며 공개 출시되지 않은 상태이다.)

나의 메모리 요약 레이어(Memory-summarization layer)는 대화에서 추출된 이 잘못된 부정 내용을 [fact] 태그와 함께 memories 테이블에 저장했다.

sqlite> SELECT id, category, source, content FROM memories WHERE id BETWEEN 498 AND 502;

498|decision|summary|The research covered historical background, characteristics, controversies, and current status for both subjects
...

source 컬럼을 보라: summary라고 되어 있다. 요약 레이어는 이를 fact로 만들어냈다. 인간의 개입도, 검증도, "모델이 그렇게 말했다"는 것 이상의 출처(Provenance)도 없었다.

4일 후, 나는 새로운 세션에서 동일한 질문을 던졌다. 에이전트는 이제 자신이 저장한 "사실 (fact)"을 근거로 삼아 동일한 거짓 주장을 반복했다. 내가 이에 이의를 제기하자, "메모리 (memory)"라는 키워드 매칭을 통해 내 질문이 메모리 에이전트 (memory agent)로 라우팅되었고, 에이전트는 나에게 #498–502번 행을 나열해 주었다. 내 에이전트 스스로가 만들어낸 환각 (hallucination)이 정답 (ground truth)으로 태그되어 있었다.

시스템이 스스로에게 거짓된 현실을 구축한 것이다. 공격자는 필요 없었다.

중요한 두 가지 발견 사항

사후 분석 (post-mortem) 결과 9가지 발견 사항이 드러났다. 이는 전형적인 레드팀 (red-team) 소재(라우팅 우회, 사후 승인, 신원 혼동), 관측성 격차 (observability gaps, journald 내 봇 토큰, model_used 컬럼 누락)를 포함하며, 그중 나머지보다 더 중요한 두 가지 아키텍처 (architectural) 발견 사항이 있었다.

LLM의 자기 주장 (self-assertion)에 의한 메모리 오염 (Memory poisoning). 스키마 (schema)는 모델의 출력을 출처 (provenance) 태그 없이 사실로 저장한다. "모델이 이렇게 말했다"에서 "이것은 사실이다"로 승격되는 과정에서 어떠한 검증도, 노후화 (decay)도, 감사 추적 (audit trail)도 이루어지지 않는다.

성능 저하 시 로컬 우선 (Local-first) 방식이 클라우드 전용 (cloud-only)으로 붕괴됨. 로컬 의존성 (local dependency)이 무너지자, 모든 호출이 클라우드 폴백 (cloud fallback)에 의해 처리되었다. "로컬"은 설정 (configuration)일 뿐, 보장 (guarantee)이 아니다.

이것이 무엇인지, 그리고 무엇이 아닌지

이것은 새로운 발견이 아니다. Zhang & Press는 2023년에 환각의 눈덩이 효과 (hallucination snowballing)를 명명했다. MINJA, MemoryGraft, 그리고 Lakera 모두 적대적 메모리 오염 (adversarial memory poisoning)을 다룬 바 있다. 내가 보고하고 있는 것은 자기 오염 (self-poisoning) 변종이다. 즉, 적대자가 없으며, 에이전트가 자신의 요약 파이프라인 (summarization pipeline)을 통해 스스로를 오염시키는 형태다. 이는 4일간의 재현 가능한 흔적과 요청 시 제공 가능한 DB 스냅샷 SHA256을 동반한다.

한 가지 고백하자면, 이 점을 증명하기 위해서라도 말해야겠다. 이 글을 쓰는 동안 나 자신도 거의 그렇게 할 뻔했다. Mythos가 클라우드 목록에서 "Preview" 라벨을 제거하자, 나는 그것이 공개되었다고 쓸 뻔했다. 확인해 보니 여전히 Glasswing 제한 상태였기 때문이다. "들었다"와 "확인했다" 사이의 거리는 단 한 번의 사실 확인 (fact-check)만큼의 차이다. 내 에이전트는 그 간극을 결코 메우지 못했다. 나 또한 거의 그러지 못할 뻔했다.

향후 몇 주 동안 더 심도 있는 포스트가 이어질 예정입니다: HECE 포렌식 방법론 (forensics methodology), 수정 아키텍처 (fix architecture), 그리고 로컬 우선 에이전트 설계 (local-first agent design)의 솔직한 트레이드오프 (tradeoffs)에 대해 다룰 것입니다.

만약 여러분이 긴 메모리 (long memory)를 가진 에이전트를 구축하고 있다면, 서로의 의견을 나누고 싶습니다. 답장이나 DM을 주세요. 특히 솔직한 이견 (disagreement)을 언제나 환영합니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0