AI

[메모리] 내부 신호와 대화 노출 분리 category tags 직렬화 제외

jykim23 2026. 8. 4. 23:26
반응형

메모리 직렬화 category tags 제외 내부 신호 대화 노출 분리 토큰

부제: 저장·검색엔 쓰지만 프롬프트엔 넣지 않기로 한 값들

챗봇이 기억하는 메모리마다 분류(category)와 태그(tags)를 붙여 둔다.
이건 나중에 관련 기억을 검색하고, 순위를 매기고, 지울 우선순위를 정하는 데 쓰는 내부 신호다.

처음엔 이 메모리를 대화에 넣을 때 그 분류·태그도 함께 앞에 붙여 보여줬다.
(preference | running) 아침에 달리기를 선호 같은 식이었다.

태그까지 대화에 넣고 있었다

문제가 세 가지였다.

하나, content가 이미 자급자족적이다.
"아침에 달리기를 선호"만으로 충분한데, 앞에 붙은 (preference | running)
응답을 만드는 데 아무것도 더해 주지 않는다.

둘, 토큰 낭비다.
메모리마다 태그 접두사가 붙으니, 기억이 여러 개면 그만큼 쌓인다.

셋, 한국어 대화에 영어 snake_case가 부조화다.
한국어로 오가는 대화에 preference·running 같은 영어 태그가 섞이면 결이 어긋나고,
모델이 그 형식을 따라 하려 들 수도 있다.

내부 신호와 대화 노출을 나눈다

그래서 분류·태그를 대화 직렬화에서만 뺐다.

저장·검색·랭킹 경로에서는 그대로 쓴다. 이건 시스템이 기억을 다루는 데 필요한 정보다.
다만 대화 컨텍스트로 만들 때는 붙이지 않고, content만 넣는다.
서버 동작에는 아무 영향이 없다. 검색도 랭킹도 그대로다.

즉 "시스템 내부용 신호"와 "모델에게 보여줄 것"을 분리한 것이다.
날짜 같은 실제 의미 있는 접두사는 남겼다. 그건 응답에 쓸모가 있으니까.

정리

  • 메모리의 분류·태그는 검색·랭킹용 내부 신호인데, 대화 컨텍스트에도 그대로 노출하고 있었다
  • content가 이미 자급자족적이라 태그 노출은 응답에 무용 + 토큰 낭비 + 한국어 대화에 영문 태그 부조화
  • 분류·태그는 저장·검색·랭킹엔 그대로 쓰되 대화 직렬화에서만 제외 — 서버 동작 무영향
  • "내부 신호"와 "모델에게 보여줄 것"을 분리

데이터에 붙인 메타데이터는 시스템이 쓰라고 있는 것이지, 모델에게 보여주라고 있는 게 아니다.
계산에 쓰는 값과 모델에 보여줄 값을 나누는 것과 같은 원칙 — 붙어 있다고 다 내보내지 않는다.

반응형