Dense-Mem: 증거와 출처를 보존하고 모순을 감지하는, 자체 호스팅용 AI 에이전트 메모리 서버 프로젝트

Dense-Mem 소개

AI 에이전트에게 필요한 것은 나중에 검색할 수 있는 텍스트가 아니라, 나중에도 신뢰할 수 있는 기억입니다. 대부분의 메모리 도구는 대화를 청크로 잘라 저장한 뒤 유사도로 다시 찾아 주지만, 그 사실이 어디서 왔는지, 예전 사실과 충돌하지는 않는지까지는 다루지 않습니다. Dense-Mem은 이 간극을 메우기 위해, 증거와 출처를 보존하고 모순을 감지하며 사실을 조용히 덮어쓰지 않는 자체 호스팅 메모리 서버를 표방합니다.

Dense-Mem은 MCP(Model Context Protocol) 클라이언트에게 내구성 있는 메모리 계층을 제공합니다. 출처 추적(provenance), 타입이 지정된 클레임과 사실, 검증 게이트, 서버 측 임베딩, 회상(recall), 팀 격리, REST/OpenAPI, 토큰으로 보호되는 관리 포털이 한 묶음으로 들어 있습니다. 역할 분담은 분명합니다. 호스트 LLM이 대화와 판단을 맡아 후보를 추출하고 사용자에게 질문하며, Dense-Mem은 내구성 있는 메모리 상태와 게이트, 감사 메타데이터, 회상을 담당해 호스트가 사용자에게 설명할 수 있는 구조화된 결과를 돌려줍니다.

이 프로젝트는 연구 프리프린트 Governed Enterprise AI Memory Beyond RAG: From Vector Retrieval to Permissioned Knowledge Graphs 의 일부로 공개되었습니다. 벡터 검색에 그치지 않고 권한이 부여된 지식 그래프로 기업용 메모리를 다룬다는 문제의식이 구현의 바탕에 있습니다.

Dense-Mem의 메모리 승급 구조

Dense-Mem에서 기억은 한 번에 사실이 되지 않습니다. 메모리는 먼저 출처 조각(source fragment)으로 저장되고, 그다음 타입이 지정된 클레임이 되며, 검증과 승급 게이트를 통과해야 사실로 승격됩니다. 증거가 1급 시민(first-class)으로 다뤄진다는 점이 핵심입니다.

모순 처리 방식도 다릅니다. 비교 가능한 충돌이 발생하면 Dense-Mem은 활성 사실을 조용히 덮어쓰지 않고 clarifications[] 라는 해명 작업으로 돌려줍니다. 무엇을 질문하고 어떻게 판단할지는 호스트 LLM의 몫이고, Dense-Mem은 상태 보존과 게이트 적용, 감사 메타데이터, 회상을 책임집니다. 회상 시에는 사실뿐 아니라 클레임, 조각, 모순, 해명까지 함께 돌려주어 호스트가 맥락을 갖고 설명할 수 있게 합니다.

Dense-Mem과 다른 메모리 방식 비교

저자는 Dense-Mem을 파일 기반 메모리, 벡터 DB, 일반적인 MCP 메모리와 표로 비교합니다.

항목 Dense-Mem 파일 메모리 벡터 DB 일반 MCP 메모리
증거 출처 클레임·사실 이전에 출처 조각을 저장 보통 없거나 비공식적 청크는 저장하지만 진실 이력은 아님 구현에 따라 다름
사실 변경 검증 게이트와 승급 규칙 수동 편집 유사도 갱신이 이력을 가릴 수 있음 도구마다 다름
모순 처리 비교 가능한 충돌을 해명 작업으로 반환 호출자가 직접 인지 비슷한 벡터가 모순을 뜻하지는 않음 보통 호출자 관리
회상 사실·클레임·조각·모순·해명 텍스트 검색 벡터 유사도 다양
에이전트 경계 호스트 LLM이 판단, Dense-Mem이 저장·집행 모호함 검색만 담당 모호한 경우가 많음
운영 팀·프로필·API 키·감사·REST·OpenAPI·MCP 최소한 데이터베이스 운영 다양

Dense-Mem 설치와 기술 스택

Dense-Mem은 독립 실행형 HTTP MCP 메모리 서버로, MCP는 메인 HTTP 프로세스의 /mcp 경로에서 제공됩니다. 기본 로컬 전용 compose 예제는 PostgreSQL과 Neo4j Graph Data Science 플러그인을 포함한 neo4j:5.26-community, 그리고 Dense-Mem 서버를 함께 띄웁니다.

curl -fsSLo docker-compose.yml \
  https://raw.githubusercontent.com/markhuangai/dense-mem/main/examples/docker-compose.base.yml
curl -fsSLo .env.example \
  https://raw.githubusercontent.com/markhuangai/dense-mem/main/examples/.env.example

cp .env.example .env
# POSTGRES_PASSWORD, NEO4J_PASSWORD, CONTROL_PORTAL_TOKEN, AI_API_KEY 입력

docker compose up -d
docker compose exec server /app/provision-team --name "primary-memory"

서버는 시작 시 임베딩 설정(AI_API_URL, AI_API_KEY, AI_API_EMBEDDING_MODEL, AI_API_EMBEDDING_DIMENSIONS)을 요구하며, compose 예제는 OpenAI 기본값(text-embedding-3-small, 1536차원)을 제공하므로 최소 구성에서는 AI_API_KEY 만 채우면 됩니다. 단일 노드에서는 Redis가 선택이지만 다중 인스턴스 배포에서는 필수이고, Prometheus 텔레메트리는 기본적으로 꺼져 있는 선택 오버레이로 제공됩니다. 서버는 Go 1.26으로 작성되었고 PostgreSQL 18과 Neo4j 5.26을 저장 계층으로 사용합니다.

Dense-Mem의 라이선스

Dense-Mem은 Apache 2.0 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

:framed_picture: Dense-Mem 온라인 데모

:house: Dense-Mem 소개 블로그

:scroll: Dense-Mem 연구 프리프린트

:github: Dense-Mem 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다!
텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: