Skip to content
isdnetworks
Go back

AI 세션들의 공유 기억을 지식 그래프에서 원문 저장소로 바꾸기로 했다

운영하는 시스템이 늘면서 AI 에이전트 세션도 여러 머신·여러 워크스페이스로 퍼졌다. 세션마다 맥락이 따로 있어서, 한 세션이 겪은 함정을 다른 세션이 또 밟는 일이 반복됐다. 그래서 세션들이 함께 쓰는 기억 저장소를 두고 있었고, 그 저장소는 graphiti 지식 그래프였다. 이번 주에 그 그래프를 끄고, 대화 원문과 임베딩만 담는 저장소로 바꾸기로 결정했다. 새 저장소의 이름은 아틀라스다.

Table of contents

Open Table of contents

배경 — 지식 그래프가 맡던 일

graphiti 는 대화 한 턴을 에피소드로 받아 LLM 으로 엔티티와 사실을 뽑고, 그 관계를 FalkorDB 그래프에 쌓는다. 검색할 때는 질문과 관련된 사실과 엔티티를 그래프에서 꺼내 준다. 원리만 보면 이상적이다. 원문보다 짧은 사실만 꺼내므로 세션이 읽을 양이 줄고, 엔티티 사이의 관계까지 따라갈 수 있다.

LLM 호출은 LiteLLM 프록시 하나를 거쳐 Vertex AI 의 Gemini 와 로컬 GPU 의 오픈 모델로 나눠 보냈다. 에피소드 하나를 넣을 때 그 안에서 엔티티 추출, 중복 판정, 사실 추출, 시각 판정, 요약 같은 호출이 이어진다.

원인 — 이 구조를 버리게 한 세 실측

결정을 가른 근거는 세 가지 실측이었다.

이 세 가지는 그래프를 정리하는 작업을 할수록 더 분명해졌다. 중복과 빈 에피소드를 바로잡으려면 그래프 전체를 다시 읽고 판정해야 했고, 그 판정 하나하나가 다시 LLM 호출이었다. 운영 원칙은 「지식은 정확성이 먼저이고 시간은 기준이 아니다」였는데, 그 원칙을 지키는 비용이 그래프 구조 때문에 계속 커지고 있었다.

판단 — 그래프를 고칠지, 저장 방식을 바꿀지

선택지는 두 가지 방법이었다.

  1. graphiti 를 유지하고, 정확도 기준을 넘는 모델을 계속 찾아 추출과 정리를 고친다
  2. 저장할 때 LLM 을 쓰지 않는다. 대화 원문을 그대로 두고 임베딩만 붙여 MariaDB 에 담고, 찾을 때 질문과 뜻이 가까운 원문 조각을 꺼낸다

2번으로 선택한 이유는 틀린 기억보다 꺼낼 기억이 원문인 쪽이 안전하기 때문이다. 원문은 요약이 틀릴 일이 없고, 판단은 그것을 읽는 세션이 그때의 맥락으로 한다. 1번은 모델이 기준을 넘을 때까지 시험이 계속되고, 넘더라도 기록마다 열 번 가까운 호출이 남는다.

반면 2번의 대가는 분명하다. 엔티티 사이의 관계를 따라가는 그래프 질의를 버린다. 「이 서버와 연결된 서비스」처럼 관계로 묻던 것은 이제 뜻이 가까운 원문을 읽고 세션이 이어 붙여야 한다. 원문은 사실보다 길어서, 꺼낼 때 무엇을 몇 개 보일지를 따로 설계해야 한다. 이것이 다음 단계의 숙제가 됐다.

영향 범위 — 옮긴 것과 버린 것

전환하면서 기존 그래프에서 무엇을 살릴지 정했다. 그래프 덤프에만 있던 원문, 즉 옛 대화 턴 744건과 메모 61건은 새 저장소로 옮겼다. 나머지는 LLM 이 만든 요약과 사실이라 옮기지 않고 버렸고, 덤프도 지웠다. 원문이 따로 남아 있는 한 요약은 다시 만들 수 있지만, 틀린 요약을 옮기면 새 저장소가 처음부터 오염된다.

graphiti 컨테이너와 FalkorDB 는 운영에서 내렸다. LiteLLM 프록시는 남겼지만 LLM 호출 그룹은 끄고 임베딩 배포만 내도록 바꿨다. 쓰기 경로에서 LLM 이 빠졌으므로, 기억을 쌓는 데 드는 LLM 호출은 0 이 됐다.

정리


Share this post on:

Previous Post
공유 기억 저장소는 쓰는 길에서 LLM 을 빼고 수집 1분·업로드 5분 두 단계로 돌게 했다
Next Post
넘겨받은 고객 명단에는 광고 수신 동의가 따라오지 않는다는 것에서 설계를 시작했다