호라이즌앱스 로고
← 기술 노트

AI가 어제 배운 걸 오늘 또 틀리는 이유, 마크다운 한 뭉치가 기억이 되기까지

임균영조회 —

어제 에이전트에게 어렵게 가르친 규칙이 있었습니다. "이 명령은 이렇게 쓰면 서버가 멈추니 순서를 바꿔라."

그날은 규칙을 그대로 지켰습니다. 다음 날 아침, 같은 에이전트가 같은 실수를 태연하게 반복했습니다.

바뀐 건 없었습니다. 모델도 프롬프트도 그대로였고, 세션이 한 번 끊겼을 뿐입니다.

그 사이 에이전트의 머릿속에서 어제의 교훈은 통째로 증발했습니다.

1편에서 저는 AI를 잘 쓰는 진짜 레버가 모델 바깥의 구조라고 적었습니다. 이번 편은 그 구조 가운데 기억에 관한 이야기입니다.

세션이 끝나면 다 잊는 에이전트에게 지속되는 기억을 어떻게 붙일까요. 제가 찾은 답은 단순했습니다.

마크다운 파일 한 뭉치를 밖에 두고, 다음 세션에 다시 읽히는 것입니다.

마크다운 한 뭉치가 자기개선이 되는 이유

"AI가 스스로 학습한다"는 말을 들으면 대개 강화학습을 떠올립니다. 모델 내부의 수치(가중치)를 실제로 갱신하는 방식입니다.

그건 제 손을 떠난 영역이고, 1인 개발자가 건드릴 수 있는 레버도 아닙니다.

제가 택한 방법은 훨씬 단순합니다. 작업이 끝나면 그 자리에서 무엇이 통했고 무엇이 저를 물었는지 마크다운 파일로 적습니다.

그 파일을 볼트(제 지식을 모아 두는 파일 저장소)에 넣습니다. 다음 세션이 시작될 때 그 파일을 다시 읽습니다. 그게 전부입니다.

가중치는 1비트도 바뀌지 않습니다. 그런데도 이건 분명한 자기개선입니다.

기록을 밖에 두고 다시 읽는 행위만으로 다음 행동의 기대치가 고정되기 때문입니다.

어제 "이 순서로 하면 서버가 멈춘다"를 볼트에 박아 두면, 오늘의 에이전트는 그 교훈을 손에 쥔 채 일을 시작합니다. 모델은 그대로인데 밖에 둔 기억이 두꺼워진 것입니다.

세션이 끝나면 머릿속 규칙은 사라집니다. 끝나기 전에 파일로 적어 둔 규칙은 볼트에 남아 있다가, 다음 세션이 시작될 때 다시 읽혀 들어옵니다.

비유하자면 신입이 매일 아침 기억을 잃고 출근하는 회사입니다. 이 회사가 굴러가려면 어제의 신입이 오늘의 신입에게 업무 매뉴얼을 남겨야 합니다.

볼트는 그 매뉴얼이고, 저는 그걸 매일 아침 다시 읽히는 사람입니다.

한 파일에 한 사실, 인덱스는 지도

초심자가 가장 많이 무너지는 지점이 여기입니다. "큰 노트 하나에 다 적으면 되겠네"라고 생각하는 순간입니다.

저도 그렇게 시작했고, 반년 만에 아무도 못 읽는 벽돌을 만들었습니다.

그 뒤로 한 파일에는 사건이나 교훈, 결정 하나만 담습니다.

"서버가 멈춘 이유와 복구법"은 그 파일에만 있습니다. 파일이 잘게 쪼개져 있어야 에이전트가 지금 필요한 것만 정확히 집어 읽습니다.

전체 기억의 목차 역할을 하는 파일은 따로 하나 둡니다.

이 목차의 각 줄은 지식을 요약하지 않습니다. "언제 이게 관련되면 어느 파일을 열어라"만 가리키는 네비게이션 훅입니다.

한 줄에 200자를 넘기지 않는 게 원칙입니다.

# 인덱스 = 지도, 상세 = 목적지

├─ [서버 멈춤 사고]: 재귀 검색이 특정 경로를 긁다 I/O 포화.
│                     ★상세·복구법·재발방지 = 파일 본문
├─ [브랜치 삭제 사고]: 병렬 워커가 커밋 안 된 작업을 되돌림.
└─ [설정 백업 유출]: 지식에 시크릿 섞였다가 외부 계정 정지.

# 인덱스는 "여기 있다"만 말한다. "무엇인지"는 파일이 말한다.

인덱스에 내용을 자꾸 채우면 목차가 스스로 부풀어 백과사전이 됩니다. 그러면 정작 지도 역할을 못 합니다.

목차가 길어지기 시작하면 상세를 파일 본문으로 옮길 때가 된 것입니다.

다시 읽지 않는 볼트는 박제

세컨드 브레인이라는 말은 근사하지만, 대부분의 볼트는 죽어 있습니다. 열심히 기록만 하고 다시 읽지 않기 때문입니다.

기록은 순환할 때만 살아납니다. 제가 돌리는 엔진은 이렇습니다.

실행 → 회고 → 반복 패턴 포착 → 승격(메모리/스킬) → 다음 세션 재로딩 → 개선 →(다시 실행)

이 고리에서 가장 중요한 마디는 회고와 재로딩입니다. 작업이 끝나면 지시가 없어도 그 자리에서 회고 초안을 만드는 걸 표준 행동으로 못 박아 뒀습니다.

회고에서 유독 반복되는 절차가 보이면 메모리를 넘어 스킬로 승격됩니다. 이 승격 이야기는 3편에서 따로 다룹니다.

이 고리에는 위험한 함정이 하나 숨어 있습니다. 틀린 회고는 자기오염이 됩니다.

에이전트가 실패 원인을 엉뚱하게 진단해 볼트에 박아 두면, 다음 세션은 그 오진을 진실로 믿고 일을 시작합니다.

그래서 회고 템플릿에 성공 레시피와 같은 무게로 '실패·함정' 칸을 두었습니다. 그 칸의 인과 진단은 반드시 사람이 한 번 걸러냅니다.

실패를 1급 자산으로 대접하는 일과 틀린 원인 분석을 그대로 믿는 일은 전혀 다른 이야기입니다.

회고를 미루면 이 엔진은 조용히 멈춥니다. 저도 며칠짜리 연쇄 작업에 파묻혀 회고를 이틀 밀린 적이 있습니다.

"작업의 끝"이라는 휴지점이 사라지니 기록 의무도 같이 사라지더군요.

규칙만 적어 둔 걸로는 부족했습니다. 지금은 메모리가 하루 넘게 갱신되지 않으면 알림이 오게 해서, 기계가 저를 감시합니다.

제 발등을 찍은 함정들

세컨드 브레인을 굴리며 실제로 걸린 것들입니다. 개념 설명은 잊어도 이 함정들은 오래 기억에 남더군요.

인덱스 장문화와 의미 드리프트

목차 줄을 자꾸 다시 압축하다 보면 뉘앙스가 세대를 거쳐 왜곡됩니다. "약간 매움"이 두 번 요약을 거치면 "매우 매움"이 되는 식입니다.

원본을 안 보고 요약을 다시 요약하니 강도가 계속 부풉니다.

방어책은 단순합니다. 정본은 언제나 파일 본문이고, 인덱스는 훅일 뿐입니다.

목차를 다시 압축할 땐 반드시 파일 본문을 대조하고, 요약의 요약은 금지합니다.

쌓기만 하는 무한 축적

"기록은 많을수록 좋다"는 직관은 틀렸습니다. 낡고 변동성 큰 지식이 최신 판단을 흐리기 때문입니다.

무작정 붙이기만 하면 정작 검색 품질이 떨어집니다. 그래서 선별해서 넣고, 주기적으로 병합하고 지우는 가지치기를 합니다.

지식 볼트에 섞인 시크릿

제가 실제로 대가를 치른 함정입니다. 예전에 설정 파일 백업을 별생각 없이 웹에 닿는 위치에 올려 뒀는데, 그 안에 접근 키가 평문으로 들어 있었습니다.

결국 외부 계정 하나가 엉뚱한 요금 알림에 휘말렸습니다.

지식 볼트에 내부 주소·계정·경로가 섞이면 지도 자체가 유출 통로가 됩니다.

그래서 제 지식 볼트는 운영 시크릿과 물리적으로 분리하고, 원격 동기화를 아예 금지했습니다.

메모리 자동 확정

메모리는 자동으로 굳히지 않습니다. 쓰기 전 충돌·중복 검사는 사람이 볼 자료를 추리는 보조로만 쓰고, 판정은 사람이 합니다.

한때 병렬 워커가 커밋되지 않은 작업을 "변경 없음"으로 오판하고 브랜치를 통째로 지운 적이 있습니다.

그 뒤로 사람이 마지막 확인을 거치지 않은 자동 확정은 원칙적으로 봉인했습니다.

절반쯤 찬 컨텍스트 창

제가 모아 온 실사용 사례에서 반복해 확인한 패턴도 하나 덧붙입니다. 컨텍스트 창이 절반쯤 차오르면 모델 자체의 환각이 급증합니다.

그래서 세션을 주기로 끊고 핵심만 새 세션으로 옮기는 편이 낫습니다.

지침을 손볼 때는 늘리기 전에 서로 부딪히는 문장부터 지우세요. "문서를 남겨라"와 "주석을 달지 마라"가 한 요청에서 부딪히면 에이전트는 길을 잃습니다.

무거운 검색은 통증이 온 뒤에

볼트가 커지면 무거운 스택을 얹고 싶어집니다. 임베딩(글의 의미를 좌표로 바꿔 비슷한 것끼리 묶는 기법)이나 벡터 검색 같은 것들입니다.

저는 참았습니다. 처음엔 단순 문자열 검색만 썼는데, "개념"이나 "의도"로 물으면 정확도가 무너지더군요.

그래서 들인 건 설치도 API 키도 없는 로컬 색인입니다. 제목에 가중치를 주고 순위를 매기는 얇은 층 하나였습니다.

그것만으로 개념 검색 정확도가 눈에 띄게 올랐습니다.

무거운 스택은 실사용 통증이 실제로 올 때까지 미뤄도 늦지 않습니다. 저는 스스로 이렇게 묻습니다. 지금 아픈가, 아플까 봐 두려운가.

두려움만으로 인프라를 늘리지 마세요.

오늘 볼트에 넣어 볼 것

  1. 오늘 작업에서 저를 물었던 일 하나를 파일 하나에 적습니다. 원인과 복구법, 재발 방지까지 그 파일에 둡니다.
  2. 인덱스에 "언제 관련되면 이 파일" 한 줄을 200자 안으로 붙입니다.
  3. 실패 칸의 원인 진단은 사람이 한 번 읽고 확정합니다.
  4. 다음 세션이 시작될 때 인덱스부터 읽게 합니다.

다음 3편에서는 이 회고 루프에서 자라난 반복 패턴이 재사용 가능한 스킬로 승격되는 과정을 다룹니다.

같은 일을 두 번 하면 그때 스킬이 된다는 규칙입니다.

이어서 읽기