잊어버려야 할 것은 잊는 LLM이 필요한 시점
컨텐츠 정보
- 조회 779
본문
의존성을 삭제하면 챗GPT가 인식한다. 하지만 답변을 5개 정도 받은 후에는 똑같이 사용되지 않는 라이브러리를 코드에 환각으로 나타낸다. 다시 수정하면, 챗GPT는 고개를 끄덕이고 사과한 다음, 또 다시 같은 실수를 반복한다.
문제는 단순히 성가신 버그가 아니라 더 심층부에 있다. LLM 애플리케이션은 무엇을 잊어야 할지 모르기 때문이다.
개발자는 생성형 AI 기반 도구가 실수를 통해 학습하고, 지식을 업데이트하고 적응하면서 동적으로 개선된다고 가정한다. 하지만 실제로는 그렇지 않다. 대형 언어 모델(LLM)은 의도적으로 이전 요청의 정보를 기억하지 않게 설계됐다. 외부 시스템이 사전 맥락을 주지 않는 한, 각 요청은 독립적으로 처리된다.
즉, 메모리는 실제로는 모델에 내장된 것이 아니라 종종 불완전하게 최상위에 레이어링되어 있다. 챗GPT를 한동안 사용해 본 적이 있다면 다음과 같은 점을 눈치챘을 것이다.
- 세션 사이에 일부는 기억하지만, 일부는 완전히 잊어버린다.
- 여러 번 수정해도 그 전의 가정을 고수한다.
- 같은 세션 안에서도 “잊어버리는” 경우가 있으며, 중요한 세부 사항을 생략한다.
이것은 모델의 오류가 아니라 메모리 관리의 오류다.
LLM 애플리케이션에서 메모리가 작동하는 방식
LLM에는 영구적인 메모리가 없다. 메모리처럼 보이는 것은 실제로는 관련 이력이 각 요청에 수동으로 다시 로드되는 컨텍스트 재구성이다. 실제로 챗GPT 같은 애플리케이션은 핵심 모델 위에 여러 메모리 구성 요소를 계층화한다.
- 컨텍스트 창 : 각 세션은 과거 메시지의 롤링 버퍼를 유지한다. GPT-4o는 최대 12만 8,-000개 토큰을 지원하지만, 다른 모델에는 자체 제한이 있다(예 : 클로드는 20만 토큰을 지원).
- 장기 기억 : 일부 고급 세부 정보는 세션 간에도 유지되지만, 유지 기간은 일관적이지 않다.
- 시스템 메시지 : 보이지 않는 프롬프트가 모델의 응답을 형성한다. 장기 기억은 종종 이런 방식으로 세션으로 전달된다.
- 실행 컨텍스트 : 파이썬 변수와 같은 임시 상태는 세션이 재설정될 때까지만 존재한다.
외부 메모리 스캐폴딩이 없으면 LLM 애플리케이션의 상태가 유지되지 않는다. 모든 API 호출은 독립적이기 때문에 연속성을 유지하려면 이전 상호 작용을 명시적으로 다시 로드해야 한다.
LLM에서 상태가 유지되지 않는 이유
API 기반 LLM 통합에서 모델은 요청 사이에 메모리를 유지하지 않다. 이전 메시지를 수동으로 전달하지 않으면 각 프롬프트는 개별적으로 해석된다. 다음은 오픈AI의 GPT-4o에서 API를 호출하는 간단한 예시다.
import { OpenAI } from "openai";const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });const response = await openai.chat.completions.create({ model: "gpt-4o", messages: [ { role: "system", content: "You are an expert Python developer helping the user debug." }, { role: "user", content: "Why is my function throwing a TypeError?" }, { role: "assistant", content: "Can you share the error message and your function code?" }, { role: "user", content: "Sure, here it is..." }, ],});문맥 연속성이 필요할 경우 각 요청에 과거 메시지를 명시적으로 포함해야 한다. 대화 기록이 너무 길어지면 별도로 관리하는 메모리 시스템을 설계해야 한다. 그렇지 않으면 응답이 중요한 세부 정보를 생략하거나 오래된 문맥에 의존할 수 있다.
이것이 LLM 애플리케이션에서 메모리가 일관성 없이 느껴지는 이유이다. 과거 문맥이 제대로 재구성되지 않으면 모델은 관련 없는 세부 정보를 유지하거나 중요한 정보를 잃을 수 있다.
과거를 붙잡고 놓지 않는 LLM
일부 LLM 애플리케이션은 잊지 않는 것은 너무 많고, 대신 잘못된 것을 기억하는 반대되는 문제가 있다. 챗GPT에 “마지막 부분은 무시해”라고 말했는데도 나중에 다시 그 부분이 언급된 경험이 있는가? 필자는 이렇게 LLM이 오래되거나 관련이 없는 세부 정보를 고집스럽게 기억해 유용성을 떨어뜨리는 현상을 트라우마라고 부른다.
예를 들어, 한 프로젝트에 파이썬 라이브러리를 테스트한 적이 있는데, 이 라이브러리가 유용하지 않다고 판단해 삭제한 후 챗GPT에 알렸다. 챗GPT는 이 사실을 인식했지만, 그 후에도 동일한 구식 라이브러리를 사용하는 코드 스니펫을 계속 제안했다. 이것은 AI의 환각 문제가 아니다. 메모리 검색이 제대로 되지 않은 것이다.
프롬프트 캐싱 및 영구 메모리를 제공하는 앤트로픽의 클로드는 올바른 방향으로 나아가고 있다. 클로드는 개발자가 효율성을 위해 사전 검증된 식별자를 사용해 캐시된 프롬프트 조각을 전달할 수 있도록 함으로써 요청 간의 반복을 줄이고 세션 구조를 더 명확하게 한다.
그러나 캐싱은 연속성을 향상시키지만, 더 큰 과제가 여전히 남아 있다. 애플리케이션은 작업 메모리에서 활성 상태로 유지할 항목, 장기 저장소로 이동할 항목, 완전히 삭제할 항목을 관리해야 한다. 클로드 도구도 도움이 되지만, 개발자가 구축해야 하는 제어 시스템의 일부에 불과하다.
진정한 과제는 단순히 메모리를 추가하는 것이 아니라 더 나은 잊기 기능을 설계하는 것이다.
메모리가 잘 잊어버려야 진짜 ‘스마트’
인간 기억은 단순히 기억하는 작업만 하지 않는다. 연관성에 따라 선택적으로 세부 정보를 필터링해 적절한 정보를 작업 메모리로 옮기고, 쓸모 없는 정보는 버린다. LLM 애플리케이션은 명시적인 설계 없이는 이런 능력을 갖추지 못한다. 현재 LLM을 위한 메모리 시스템의 결함은 두 가지로 나뉜다.
- 스테이스리스 AI : 수동으로 재로드하지 않으면 과거 상호작용을 완전히 잊어버린다.
- 메모리 강화 AI : 일부 정보는 유지하지만, 우선순위 개념이 없어 잘못된 세부 정보를 기억한다.
LLM 메모리를 개선하려면 다음 조건이 필요하다.
- 컨텍스트 작업 메모리 : 토큰 오버플로를 방지하기 위해 메시지 요약 및 선택적 리콜을 통해 세션 컨텍스트를 적극적으로 관리한다.
- 영구 메모리 시스템 : 원본 기록이 아닌 관련성에 따라 검색하는 장기 저장소다. 많은 팀이 벡터 기반 검색(예 : 과거 메시지의 의미적 유사성)을 사용하지만, 관련성 필터링은 아직 취약하다.
- 주의력 제어 : 유용한 정보에 우선순위를 부여하고 오래된 세부 정보를 희미하게 하는 시스템이다. 이 기능이 없으면 모델은 오래된 데이터에 집착하거나 필수적인 수정 사항을 잊어버리게 된다.
예 : 코딩 어시스턴트는 여러 번의 수정 후에는 더 이상 사용되지 않는 종속성을 제안하지 않아야 한다.
현재의 AI 도구는 다음 중 한 가지 이유로 이 기능을 제대로 수행하지 못한다.
- 모든 것을 잊어버리므로 사용자가 컨텍스트를 다시 제공해야 한다.
- 너무 많은 정보를 유지하느라ㅑ 관련이 없거나 오래된 정보가 표시된다.
빠진 것은 더 큰 메모리가 아니라 더 스마트한 잊기 기능이다.
생성형 AI의 메모리는 더 커지는 것이 아니라 더 스마트해져야 한다.
단순히 컨텍스트 창 크기를 늘려서는 메모리 문제를 해결할 수 없다. LLM 애플리케이션에는 다음과 같은 개선이 필요하다.
- 선택적 유지 : 전체 기록이 아닌 관련성이 높은 지식만 저장한다.
- 주의 집중 검색 : 중요하고 관련성이 높은 세부 정보를 우선적으로 표시하고, 오래되고 관련성이 낮은 세부 정보는 희미하게 표시한다.
- 잊기 메커니즘 : 오래되거나 가치가 낮은 세부 정보는 시간이 지남에 따라 사라져야 한다.
차세대 AI 도구는 모든 것을 기억하는 도구가 아니라 잊어야 할 것을 아는 도구여야 한다. LLM 애플리케이션을 개발하는 개발자는 작업 메모리를 형성하는 것부터 시작해야 한다. 영구 메모리가 시간이 지남에 따라 확장되더라도 컨텍스트 레이어에서 관련성을 고려해 설계해야 한다.
dl-itworldkorea@foundryco.com
관련자료
-
링크
-
이전
-
다음






