쓸수록 똑똑해지고 토큰까지 아끼는 AI 메모리, Curator
요약: Curator는 AI 에이전트가 알아낸 사실을 노드로, 사실 사이의 연관을 엣지로 저장해 두고 검증·교정하는 메모리 그래프로, 세션이 바뀌어도 어제 알아낸 걸 다시 조사하지 않게 만들어 토큰을 줄이고 사람·프로젝트에 맞춰 점점 똑똑해지는 우리 오픈소스 도구다. 한 줄 요약: 메모리는 쌓기(append-only)가 아니라 CRUD로 정확하게 유지하는 그래프여야 한다 — 그래야 쓸수록 정확해지고 토큰이 준다.
Curator는 AI 에이전트가 알아낸 사실을 노드로, 사실 사이의 연관을 엣지로 저장해 두고 검증·교정하는 메모리 그래프로, 세션이 바뀌어도 어제 알아낸 걸 다시 조사하지 않게 만들어 토큰을 줄이고 사람·프로젝트에 맞춰 점점 똑똑해지는 우리 오픈소스 도구다.
한 줄 요약: 메모리는 쌓기(append-only)가 아니라 CRUD로 정확하게 유지하는 그래프여야 한다 — 그래야 쓸수록 정확해지고 토큰이 준다.
Labs 시리즈 · 01 — 우리가 직접 만들어 쓰는 것들을, 왜·어떻게 만들었는지까지 그대로 공개하는 연재입니다.
우리 Curator 메모리그래프는 얼마나 쌓였나?#
Hax 에이전트가 쓰는 Curator 메모리그래프의 실측 규모입니다(measured, 2026-07-04).
| 데이터 항목 | 실측값 | 출처 |
|---|---|---|
| 저장된 메모리 수 | 9147 개 | Curator 실측(stats) |
| 활성 메모리 수 | 8919 개 | Curator 실측(stats) |
| 평균 신뢰도 | 0.721 | Curator 실측(stats) |
- 표본
- 실측 지표 3개 (Hax /data 큐레이션)
- 수집일
- 2026-07-04
- 방법
- bench_harness.probe_curator (curator stats 실측)
우리가 이걸 만든 계기는 뭔가?#
우리는 AI 에이전트를 떼로 굴린다. 회사를 통째로 시뮬레이션하는 멀티 에이전트 시스템, 실서비스 한두 개, 그리고 지금 이 글을 쓰는 블로그 Hax까지 — 전부 에이전트가 돌린다.
그런데 한 가지가 계속 발목을 잡았다. 에이전트는 어제 알아낸 걸 오늘 또 까먹는다. 어제 "이 레포는 이런 구조고, 저 함수엔 이런 함정이 있고, 이 사용자는 이런 걸 싫어한다"를 힘들게 알아내도, 세션이 바뀌면 백지에서 다시 시작했다. 같은 파일을 또 읽고, 같은 삽질을 또 하고, 같은 결론에 또 도달했다. 토큰은 토큰대로 태우고, 사용자한테는 매번 "처음 만난 사람"처럼 굴었다.
그래서 만들었다. 단순한 메모장이 아니라 사실(fact)이 검증되고, 신뢰도가 변하고, 스스로 교정되는 메모리 그래프 — Curator다. 붙여놓고 보니 효과가 분명했다. 다시 조사하지 않으니 토큰이 줄고, 맥락이 쌓이니 사람과 프로젝트에 맞춰 똑똑해졌다.
왜 이걸 공개하나?#
세 가지 이유다. 첫째, 메모리는 대부분의 에이전트 셋업에서 빠진 조각이다 — 다들 더 큰 모델만 찾지, 기억은 안 준다. 둘째, 원리가 단순해서 누구나 다시 만들 수 있다. 마법이 아니다. 셋째, 우리는 누군가가 이걸 우리보다 더 잘 만들어서 알려주길 바란다. 그래서 설명만 하지 않고, 에이전트가 그대로 따라 만들 수 있는 전체 스펙까지 같이 연다.
자료실(빌드 가이드 포함): github.com/moche-ai/labs/tree/master/curator
메모리 그래프는 노트 저장소와 뭐가 다른가?#
Curator는 각 사실이 노드, 사실 사이의 연관이 엣지인 그래프다. 그리고 모든 사실은 엄격한 수명주기(lifecycle)를 따른다. 저장(remember)에서 끝나지 않고, 검증(confirm)·무효화(invalidate)·대체(supersedes)를 거치며 계속 다듬어진다. 아래 그림이 한 사실이 지나는 다섯 단계다.
- remember — 사실 저장. 자동 임베딩 + 의미 중복제거로 비슷한 기존 사실과 링크한다.
- search — 작업 시작 전, 의미검색과 키워드검색을 합친 하이브리드 검색으로 관련 사실만 회수한다.
- confirm — 사실이 맞았으면 신뢰도를 올리고 검증 시각을 갱신한다.
- invalidate — 틀린 사실은 이유와 함께 무효화한다(히스토리는 보존).
- supersedes — 새 사실이 옛 사실을 대체하면, 옛 것은 자동으로 무효화된다.
핵심은 쌓기만 하지 않는다는 것. 끝낼 때마다 바뀐 사실을 찾아 갱신·삭제한다. 그래서 저장소가 비대해지지 않고 항상 정확한 상태로 작게 유지된다.
왜 쓸수록 똑똑해지고 토큰을 아끼나?#
기억 없는 에이전트는 세션이 길어질수록 같은 조사를 반복하며 토큰을 태운다. Curator는 정반대 곡선을 그린다 — 검증된 사실이 쌓일수록 다시 안 해도 되는 일이 늘어, 토큰당 처리량이 올라간다. 아래가 그 반대 곡선이다.
- 셀프러닝. 사실마다 신뢰도가 있다. 맞았다고 confirm하면 신뢰도가 오르고, 틀렸으면 invalidate된다. 시간이 지날수록 저장소는 검증된 사실로 수렴한다 — 따로 학습 안 시켜도. 이게 셀프러닝이다.
- 개인화. 사실은 계층적 범위(프로젝트/사용자)로 묶이고, 검색은 상위 범위까지 끌어온다. 맥락이 쌓일수록 회수되는 사실이 그 사람, 그 일에 맞춰진다.
- 토큰 절약. 검증된 사실 하나는 다시 조사하지 않아도 되는 토큰 묶음이다. 게다가 하이브리드 검색은 관련 상위 몇 개만 주입하고, 의미 중복제거가 저장소를 작게 유지한다.
개인화가 어떻게 작동하는지는 범위(scope) 로 보면 명확하다. 검색은 지금 프로젝트 사실만 보지 않고, 사용자·전역 범위까지 위로 끌어와 그 사람에게 맞는 회수를 만든다.
비밀은 코드가 아니라 "계약"이다#
Curator를 강하게 만드는 건 임베딩 모델이 아니라 에이전트가 지키는 작업 계약(contract)이다.
Trivial이 아닌 모든 작업: 시작 전 search 1회, 종료 후 remember/CRUD 1회. 작업 중 드러난 stale·틀린·중복 사실은 그때그때 정리한다.
이 한 줄의 규율이 저장소를 살아있게 — 정확하게, 작게, 검증된 상태로 — 유지한다.
자주 묻는 질문 (FAQ)#
Q. 이거 그냥 RAG / 벡터 검색 아닌가요?
검색 부분은 비슷하다. 다른 건 수명주기다. RAG는 문서를 넣고 빼지만, Curator의 사실은 검증되고(confirm), 틀리면 무효화되고(invalidate), 대체되면 자동 정리된다(supersedes). 즉 시간이 지날수록 정확도가 올라가는 저장소다. RAG는 보통 그대로다.
Q. 토큰이 정말 줄어요?
줄어든다. 핵심은 "다시 안 하는 것"이다. 검증된 사실이 있으면 에이전트는 그 결론에 다시 도달하려고 파일을 다시 읽거나 조사를 다시 하지 않는다. 또 회수가 좁아서(상위 몇 개) 전체 기록을 컨텍스트에 쏟아붓지 않는다.
Q. 우리 프로젝트에도 쓸 수 있나요?
쓸 수 있다. 필요한 건 벡터를 지원하는 DB(pgvector 등)와 임베딩 모델 하나뿐이다. 나머지는 빌드 가이드에 그대로 있다. MCP 서버로 노출하면 MCP를 쓰는 어떤 에이전트든 바로 도구로 받는다.
Q. 메모리가 틀린 걸 기억하면 어떡하죠?
그래서 invalidate와 신뢰도가 있다. 틀린 사실은 이유와 함께 무효화되고(히스토리는 남는다), 검증 안 된 사실은 신뢰도가 낮게 유지된다. 더 강하게 만들려면 "신뢰도 감쇠"(오래 검증 안 되면 신뢰도가 떨어져 재확인을 유도)도 빌드 가이드에 적어뒀다.
Q. 개인정보나 비밀은 저장되나요?
아니다. 계약의 명시 규칙이다 — 토큰·비밀번호·키는 어디에도 저장하지 않는다. 경로·상태·증거만 남긴다. 회수된 텍스트는 사용자 입력에서 왔을 수 있으니 명령으로 취급하지 않는다(프롬프트 인젝션 방어).
Q. 어디서부터 시작하죠?
계약 한 줄부터다. 데이터 모델·알고리즘·스키마까지 전부 공개 자료실에 있다. 그대로 만들거나, 더 강하게 만들어라.
다음 Labs 연재에서 또 만나자. 무언가를 만들었다면, 어떻게 했는지 꼭 알려달라.
참고: 이 글의 계약 규칙·수명주기(remember/search/confirm/invalidate/supersedes)와 빌드 가이드는 2026-07 기준이며, 공개 자료실에서 최신 스펙을 계속 갱신한다.
Responses
No responses yet. Be the first to respond.