채팅 저장을 멈추고 대신 stateful 학습 에이전트를 만들었어요 !!
I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you already provided) here? Once I have the text, I’ll translate it into Korean while preserving the original formatting, markdown, and any code blocks or URLs.
이것은 무엇인가
저와 제 팀은 학생들이 보통 별도로 사용하는 몇 가지 기능을 결합한 단일 페이지 앱을 만들었습니다:
- 세션 추적이 가능한 포모도로 타이머
- 피드백 루프가 포함된 플래시카드
- 실수를 기록하는 퀴즈 시스템
- 간단한 챗봇
- XP, 연속 기록, 과목 등과 같은 진행 상황 추적
모든 것이 브라우저에서 실행됩니다. 백엔드가 없습니다. 데이터는 로컬에 저장됩니다.
흥미로운 부분은 기능이 아니라, 모든 기능이 공유 메모리 레이어에 어떻게 연결되는가입니다.
문제: 가짜 기억
첫 번째 버전의 챗봇은 실제로 아무것도 기억하지 못했습니다.
당신이 어떤 분야에 약하다고 말하면, 바로 다음 메시지에서 그것을 완전히 무시했습니다.
모델 자체가 나쁜 것이 아니라, 모든 상호작용이 무상태(stateless)였기 때문입니다—각 메시지는 새로 시작하는 것으로 취급되었습니다.
내가 처음 시도한 것
우리는 명백한 접근법부터 시작했습니다: 이전 메시지를 시스템에 다시 전달하는 것이었습니다.
조금 도움이 되었지만 새로운 문제를 만들었습니다:
- 컨텍스트가 금방 관련 없는 메시지들로 가득 찼다
- 오래된 대화가 새로운 응답을 오염시켰다
- 프롬프트는 늘어났지만 품질은 향상되지 않았다
- 여전히 사용자를 진정으로 이해하지 못했다
마치 실제로 메모리를 구축하는 대신 메모리를 시뮬레이션하고 있는 느낌이었다.
전환점: 채팅 저장 중단
전환점은 간단했습니다:
나는 대화를 저장하지 않았습니다.
대신, 나는 상태를 저장했습니다—다음과 같은 매우 작고 구조화된 정보 조각들:
- 약한 주제
- 현재 작업
- 활성 주제
- 학습 활동
채팅 로그도 없습니다. 전사도 없습니다. 단지 신호만 있습니다.
이 접근 방식은 Hindsight와 같은 시스템이 메모리를 다루는 방식과 유사합니다—대화를 재생하는 대신 구조화된 회상을 중점으로 합니다. 그들의 문서와 에이전트 메모리에 관한 아이디어는 이 방향이 타당함을 강화시켰습니다.
데이터는 어디서 오는가
핵심 아이디어는 사용자를 직접 묻는 것을 멈추는 것이었습니다. 대신 행동을 통해 모든 것을 추론했습니다:
- 사용자가 퀴즈 문제를 틀리면 그 주제가 약점이 됩니다.
- 플래시카드를 “Again”으로 표시하면 또 다른 신호가 됩니다.
- 학습 세션을 완료하면 활동이 업데이트됩니다.
시간이 지나면서 시스템은 명시적인 입력 없이도 사용자의 모습을 그려냅니다. 이는 훨씬 더 신뢰할 수 있음을 확인했습니다.
응답이 바뀐 방식
대신 과거 대화를 입력하는 대신, 사용자의 상태에 대한 작고 구조화된 요약을 전달하기 시작했습니다. 예시:
- 그들이 겪고 있는 어려움
- 그들이 현재 작업하고 있는 것
- 그들이 최근에 공부하고 있는 것
그 맥락은 작지만 매우 관련성이 높으며, 큰 차이를 만들었습니다.
Before vs. after
Same question: “오늘 무엇을 공부해야 할까요?”
- 전: 개인화되지 않은 일반적인 답변.
- 후: 약점 주제와 현재 작업을 기반으로 한 구체적인 제안.
모델 자체는 변하지 않았습니다—입력 컨텍스트만 변경되었습니다.
지속성
모든 것이 브라우저에 로컬로 저장됩니다. 페이지를 새로 고치면 상태가 복원됩니다.
I deliberately avoided adding a backend because for this kind of system:
- 데이터는 사용자‑특정입니다
- 단순함이 규모보다 더 중요합니다
- 빠른 반복이 인프라보다 더 중요합니다
Local storage was enough.
What didn’t work
시도했지만 포기한 몇 가지 사항:
- 전체 채팅 대화 저장
- 채팅 요약 시도
- 점점 더 많은 컨텍스트 추가
이 중 어느 것도 의미 있는 방식으로 동작을 개선하지 못했으며, 대부분 잡음만 추가했습니다.
아직도 문제가 되는 부분
시스템은 작동하지만 완벽하지는 않습니다:
- 약한 주제는 시간이 지나도 사라지지 않습니다
- 모든 신호가 동일하게 취급됩니다
- 시간이나 최신성에 대한 개념이 없습니다
- 모든 것이 주제별이 아닌 전역적으로 저장됩니다
그 단순함이 이러한 제한점을 보여줍니다.
내가 다음에 바꿀 점
- 빈도에 따라 주제 가중치 부여
- 오래된 데이터의 중요도 감소
- 주제별 메모리 분리
- 장치 간 동기화 추가 가능성
하지만 핵심 아이디어는 그대로 유지하겠습니다.
요약
시스템은 메모리를 더 추가해도 개선되지 않았습니다.
무엇을 기억할지 선택적으로 결정했을 때 개선되었습니다.
채팅 기록이 메모리처럼 느껴졌습니다. 구조화된 상태가 실제로 작동했습니다.
다른 사람들은 어떻게 접근하고 있는지 궁금합니다.
더 많은 데이터를 저장하고 있나요, 아니면 더 좋은 데이터를 저장하고 있나요?

