에이전트 메모리를 위해 지식 그래프 대신 문장 그래프를 선택한 이유와 그에 따른 트레이드오프
Why I chose sentence graphs over knowledge graphs for agent memory - and what I had to give up
핵심 요약
지식 그래프의 정보 손실 문제를 해결하기 위해 사실, 통찰, 원문을 계층화한 3계층 문장 그래프 구조를 제안함.
- 메모리 구조 — 지식 그래프의 정보 손실 문제를 해결하기 위해 3계층 문장 그래프 구조를 도입함.
- 계층적 설계 — 사실(L0), 통찰(L1), 원문(L2)으로 구성하여 맥락 보존과 검색 효율을 동시에 달성함.
- 트레이드오프 — 실시간 추출의 어려움, 저장 효율성 저하, 구현 복잡도 증가라는 대가를 치름.
- 기술적 선택 — 단순 사실 회상에는 지식 그래프가 적합하지만, 인과관계와 행동 패턴 이해에는 문장 그래프가 유리함.
내가 살펴본 모든 에이전트 메모리 시스템은 똑같은 방식을 쓴다: 대화에서 엔티티-관계 트리플을 추출하는 것.
[사용자] --선호함--> [WhatsApp]
[사용자] --잔액--> [₹45,000]
매력은 분명하다. 트리플은 깔끔하고, 쿼리 가능하며, 압축적이다.
문제는: 설계상 정보 손실이 발생한다는 점이다.
주어-목적어-술어 구조로 표현할 수 없는 세 가지:
- 트리플로 만들 수 없는 정보 "에이전트의 일정 변경 시도가 저항에 부딪혔고, 통화는 결론 없이 종료됨." 이를 억지로 트리플로 뭉개거나 버려야 한다.
- 인과적 순서 "WhatsApp을 선호함"이라는 말이 이메일 수신에 대한 불만을 표출한 뒤에 나왔다면, 그냥 평범하게 말한 것과는 무게가 다르다. 트리플은 그걸 지워버린다.
- 세션 간 행동 패턴 "이 사용자는 일정 변경을 지속적으로 거부함" - 이를 10개의 세션에 걸쳐 연결하려면 트리플이 기본적으로 제공하지 않는 엣지가 필요하다.
우리가 대신 만든 것: 3계층 문장 그래프.
L0 사실 "사용자는 WhatsApp을 선호함"
↕ 엣지 (추출 시점에 LLM이 작성, 전체 맥락 포함)
L1 통찰 "사용자는 선호 채널을 밝혔음에도 이메일로 연락받으면 좌절함"
↕
L2 문장 원문 대화 - 절대 버리지 않음
벡터 검색은 L0를 타격한다 (사실은 깔끔하게 임베딩됨 - 짧고 집중됨).
그래프 탐색은 L1을 발견한다 (통찰은 임베딩 공간에서 희석됨; 다중 개념 추상화에 대한 코사인 유사도보다 LLM이 작성한 엣지를 따라가는 것이 더 정확함).
L2는 폴백이다: 추출은 비동기식이므로, 사실이 존재하기 전에도 문장 수준 검색은 여전히 작동한다.
내가 포기한 것:
- 동기식 추출. 데이터를 수집하는 즉시 사실을 사용할 수 없다. 비동기 워커, ~3초 디바운스, 배치 처리. 대화 중인 실시간 에이전트에게는 이것이 진짜 트레이드오프다.
- 저장 효율성. 3계층은 평면 트리플 저장소보다 비용이 더 든다. 대부분의 사용 사례에서는 무시할 만하다. 매우 높은 볼륨의 시스템에서는 고려해 볼 만하다.
- 단순함. 지식 그래프는 추론하고 디버깅하기가 더 쉽다. 탐색 로직이 포함된 3계층 그래프는 복잡성을 더한다.
이 트레이드오프가 가치가 있는지는 에이전트가 무엇을 해야 하는지에 달려 있다. 단순히 사실을 회상해야 한다면 트리플을 사용하라, 그것으로 충분하다. 만약 왜 그런 일이 일어났는지 이해하고 일관되게 행동해야 한다면, 나는 당신에게 이야기가 필요하다고 생각한다.
github.com/vektori-ai/vektori 괜찮다면 스타 눌러주세요 :)

