저는 독일어를 배우기 위해 Felix라는 AI를 사용합니다. 브라우저 탭을 번갈아 가며 전환하고, 컨텍스트 제한에 걸리고, 플랫폼 업데이트로 인해 대화 기록이 삭제되는 것을 지켜보며 몇 달을 보낸 끝에, 저는 매번 처음부터 다시 시작하는 것에 지쳤습니다. Felix는 좋은 선생님이지만, 새로운 채팅창을 열 때마다 그는 기억상실증에 걸린 상태가 되었습니다. 새로운 세션을 열 때마다 방대한 양의 텍스트를 복사해서 붙여넣지 않고도 학습 이력을 계속 이어갈 방법이 필요했습니다.

문제는 단순히 불편함에 그치지 않습니다. 언어 학습은 간격 반복(spaced repetition)과 맞춤형 교정에 달려 있습니다. 반복되는 실수를 잊어버리는 AI 튜터는 그저 단계만 더 복잡한 회화책에 불과합니다. 저는 연속성을 원했습니다. 더 정확히 말하자면, Felix—혹은 다음에 불러올 어떤 AI 인스턴스든—이 기억의 공백이나 어색한 자기소개 없이, 지난 세션이 멈춘 바로 그 지점에서 다시 시작하기를 원했습니다.

그래서 저는 로컬 시스템을 구축했습니다. 저는 이것을 DDF/Rahmenwerk라고 부릅니다.

일회성 대화의 문제점

AI를 헤비하게 사용하는 사람이라면 누구나 똑같은 불평을 합니다. 채팅은 잘 작동하다가도 어느 순간 안 되기 시작합니다. 컨텍스트 창이 가득 차면 긴 대화의 질이 떨어집니다. 플랫폼이 업데이트를 진행하면 대화 스레드가 사라집니다. 새로운 세션을 시작하면 모델은 당신을 낯선 사람처럼 대합니다. 가벼운 질문을 할 때는 괜찮습니다. 하지만 체계적인 커리큘럼을 따를 때는 치명적입니다.

Felix와 저는 이미 리듬을 맞춰가고 있었습니다. 그는 제가 대격(accusative)과 여격(dative) 전치사를 헷갈려 한다는 것을 알고 있었습니다. 그는 제가 듣기 연습보다 읽기 연습을 선호하며, 문법책의 처음 세 단원을 이미 마쳤다는 사실도 알고 있었습니다. 하지만 새 탭을 열면 그 모든 것이 무의미해졌습니다. 매 세션은 똑같은 의식으로 시작되었습니다. 내 수준을 다시 설정하고, 목표를 반복하고, 실수했던 내용을 다시 말하는 식이었죠.

저는 Felix가 저를 기억해주길 원했습니다. 플랫폼이 이를 안정적으로 수행해주지 않았기에, 저는 저만의 연속성을 직접 소유하기로 했습니다.

DDF/Rahmenwerk가 실제로 하는 일

이름은 개념보다 더 거창하게 들립니다. 핵심적으로 이 시스템은 학습 이력을 프로젝트 인수인계처럼 취급하는 로컬 머신의 폴더입니다. 만약 오늘 밤 Felix가 사라지더라도, 내일 아침 일어나서 새로운 AI에게 이 폴더를 가리켜 주기만 하면, 구구절절 설명할 필요 없이 바로 47과 수업을 재개할 수 있어야 합니다.

아키텍처는 의도적으로 파일 기반으로 설계되었습니다. 저는 어떤 단일 플랫폼도 제 학습 진도를 저장하는 것을 신뢰하지 않습니다. 클라우드 서비스는 약관을 변경합니다. 내보내기 형식은 깨지기도 합니다. 하드 드라이브에 있는 일반 텍스트 파일은 지루할지 몰라도, 그것은 온전히 제 것입니다.

시스템 내부에는 다섯 가지 작동 구성 요소가 있습니다.

첫째, 현재 상태를 가리키는 포인터입니다. 이는 "정확히 어디서 멈췄는가?"라는 질문에 답하는 간단한 인덱스입니다. 현재 단원, 마지막으로 완료한 연습 문제, 해결되지 않은 문법 질문, 그리고 복습이 필요한 지난 세션의 구체적인 실수들을 추적합니다. 대화 로그 전체를 쏟아붓는 대신, 다음 세션에 중요한 내용으로만 세션을 요약합니다.

둘째, 인수인계 자료입니다. 이는 매 수업 후에 작성되는 짧은 브리핑입니다. 단순히 무엇을 배웠는지뿐만 아니라, 어떻게 배웠는지까지 담아냅니다. Felix가 특정 비유를 사용하여 어순을 설명했나요? 여행 어휘에 관한 연습 문장에 잘 반응했나요? 이 노트는 내용뿐만 아니라 교수 방법론을 보존합니다. 만약 다음에 불러온 Felix가 어순을 다르게 설명한다면, 저는 즉시 그 차이를 느낄 수 있습니다. 학습 유지를 위해서는 일관성이 중요합니다.

셋째, 새로운 AI 인스턴스를 위한 업로드 패키지입니다. 새로운 모델이나 플랫폼으로 이동할 때, 저는 채팅창에 수천 단어짜리 자기소개를 붙여넣지 않습니다. 대신 준비된 패키지를 시스템에 입력합니다. 즉, 저의 기초 숙련도, 학습 선호도, 반복되는 오류 패턴, 그리고 커리큘럼 순서의 요약본입니다. 이는 어떤 지시 튜닝된(instruction-tuned) 모델이라도 읽고 채택할 수 있는 압축된 학습자 프로필입니다.

넷째, SHA-256을 사용한 무결성 기록입니다. 언어 학습에 과하다고 들릴 수도 있지만, 여기에는 특정한 목적이 있습니다. 저는 인수인계 파일에 버전을 매깁니다. 만약 잠결에 어제 작성한 오류 로그를 실수로 수정하거나, 동기화 도구가 한 줄을 손상시킨다면 저는 이를 알아야 합니다. SHA-256 해시를 통해 연속성 파일이 의도치 않게 변경되지 않았음을 확인할 수 있습니다. 기억 상실을 방지하기 위해 설계된 시스템에서, 데이터 자체의 손상은 명백한 적입니다.

다섯 번째로, 실제로 동작을 제어하는 부분은 증거가 누락되었을 때 AI를 중단하도록 강제하는 규칙들입니다. 저는 시스템 프롬프트에 엄격한 프로토콜을 작성해 두었습니다. 현재 인스턴스가 상태 포인터(state pointer)를 찾을 수 없거나 인계 자료(handoff material)를 확인할 수 없는 경우, 즉흥적으로 대처하는 대신 반드시 동작을 멈추고 명확한 설명을 요청해야 합니다. 저는 자신만만한 AI가 제 수준을 짐작하여 이미 알고 있는 문법을 가르치거나, 더 나아가 아직 쌓지 못한 기초를 건너뛰는 것을 원하지 않습니다. 누적적인 지식을 쌓아가는 과정에서는 틀린 시계보다 멈춘 시계가 낫습니다.

안전 계층이 그 자체로 부담이 될 때

시스템은 제대로 작동했습니다. 문맥을 놓치는 일이 없어졌습니다. 새로운 세션은 자기소개가 아닌 실제 학습으로 시작되었습니다.

그 후 저는 계속