Stash - AI 에이전트를 위한 지속형 메모리 계층

3 hours ago 1
  • 세션이 바뀌어도 대화와 작업 맥락을 이어가는 지속형 메모리 계층으로, 원시 관찰을 episodes로 저장한 뒤 구조화된 지식으로 누적함
  • 모델 비종속적 구조를 사용해 Claude, GPT, 로컬 LLM, 커스텀 에이전트까지 같은 메모리 계층에 붙일 수 있으며, 저장소는 PostgreSQL과 pgvector를 기반으로 동작함
  • RAG와 다른 역할을 맡아 문서 검색에 머무르지 않고, 대화에서 새 사실과 관계, 목표, 실패, 가설까지 축적하며 RAG와 함께 사용할 수 있음
  • namespace와 계층형 경로로 사용자, 프로젝트, 에이전트 자기지식을 분리하고, consolidation 파이프라인으로 facts, relationships, causal links, patterns, contradictions를 계속 합성함
  • MCP 네이티브 통합과 /self 기반 자기 모델, 반복 연구 루프까지 포함해 기억이 없는 세션형 에이전트를 장기적 연속성을 가진 작업 주체로 바꾸려 함

Stash 개요

  • 지속형 메모리 계층으로 AI 에이전트와 외부 세계 사이에 놓이며, 세션이 바뀌어도 이전 맥락을 이어가게 만듦
  • 원시 관찰을 episodes로 저장하고, 이를 facts, relationships, patterns, goals, failures, hypotheses 같은 구조화된 지식으로 누적함
  • 모델 자체를 대체하지 않고 연속성을 보강하며, Claude, GPT, 로컬 모델 등 어떤 에이전트에도 붙일 수 있게 설계됨
  • 저장 기반으로는 PostgreSQL + pgvector를 사용함
  • GitHub

메모리 구성 방식

  • namespace로 사용자, 프로젝트, 에이전트 자기지식 같은 메모리를 분리함
  • 각 namespace는 계층형 경로로 구성되며, /projects를 읽으면 /projects/stash, /projects/cartona 같은 하위 경로까지 함께 포함됨
  • 쓰기는 하나의 정확한 namespace에만 기록돼 메모리 오염을 막음
  • 사용자 관련 메모리와 프로젝트 메모리, /self 아래의 자기지식은 서로 섞이지 않게 유지됨
  • 예시 구조로 /users/alice, /projects/restaurant-saas, /projects/mobile-app, /self/capabilities, /self/limits, /self/preferences를 둠

RAG와의 차이

  • RAG는 문서에서 관련 내용을 찾아오는 검색 계층에 가깝고, 대화 자체를 기억하거나 학습하지 않음
  • RAG는 문서에 이미 들어 있는 내용만 다룰 수 있으며, 대화에서 새 지식을 만들지 못함
  • 목표 추적, 의도 파악, 시간에 따른 모순 탐지, 원인과 결과에 대한 추론은 RAG 범위 밖으로 제시됨
  • Stash는 대화, 결정, 성공, 실패에서 자동으로 학습하고 지식 그래프를 쌓아 감
  • 문서 검색과 경험 기억은 서로 다른 문제를 다루므로, RAG와 Stash를 함께 사용할 수 있음

기존 AI 메모리와 다른 점

  • Claude.ai와 ChatGPT에도 메모리가 있지만, 해당 기능은 자기 플랫폼과 자기 모델에 묶여 있음
  • Stash는 모델 비종속적으로 동작하며, 로컬 모델과 프라이빗 모델에도 붙일 수 있음
  • 데이터 소유권을 사용자 쪽에 두고, 오픈소스로 제공됨
  • 백그라운드 consolidation, goals 및 intent 추적, failures 학습, causal reasoning, agent self-model 같은 항목을 포함함
  • 비교표 기준으로 ChatGPT Memory와 Claude.ai Memory는 “notepad”, Stash는 “mind”로 구분됨

해결하려는 문제

  • 현재 AI 모델은 추론은 잘해도 세션 간 기억이 없어, 사용자가 매번 자신과 프로젝트 배경을 다시 설명하게 됨
  • 긴 대화 기록을 매번 프롬프트에 넣는 방식은 느리고 비싸며, context window 한계도 남아 있음
  • 실패한 시도를 다음 세션에서 다시 반복하지 않게 막아 줄 교훈 전달 메커니즘이 부족함
  • 메모리 기능이 일부 플랫폼의 전용 기능으로만 제공돼, 커스텀 에이전트나 로컬 LLM은 처음부터 맥락 없이 시작하게 됨

통합 파이프라인

  • 백그라운드 프로세스가 경험을 계속 합성해 원시 메모리를 구조화된 지식으로 바꿈
  • Episodes 단계에서 관찰을 append-only로 저장함
  • Facts 단계에서 episode 묶음을 LLM으로 합성함
  • Relationships 단계에서 fact 사이의 엔티티 관계를 추출함
  • Causal Links 단계에서 fact 간 원인-결과 쌍을 연결함
  • Patterns 단계에서 더 높은 수준의 추상 패턴을 도출함
  • Contradictions 단계에서 자기 수정과 confidence decay를 수행함
  • Goal Inference로 활성 목표에 대한 사실을 자동 추적하고 진행 상황과 충돌을 드러냄
  • Failure Patterns로 반복 실수를 감지하고 새로운 사실로 추출해 같은 실패 반복을 줄임
  • Hypothesis Scan으로 새로운 증거가 열린 가설을 수동 개입 없이 확인하거나 기각하게 함

MCP 통합

  • MCP 네이티브로 동작하며 Claude Desktop, Cursor, OpenCode, 커스텀 에이전트, 로컬 LLM, 기타 MCP 클라이언트에 붙일 수 있음
  • SDK 없이 연결할 수 있고, vendor lock-in 없이 어디서든 같은 메모리 계층을 쓰게 함
  • 28개 도구를 제공하며 remember, recall, forget, init부터 causal links, contradictions, hypotheses까지 포함함
  • ./stash mcp execute --with-consolidation으로 stdio MCP 서버와 consolidation을 함께 시작할 수 있음
  • ./stash mcp serve --port 8080 --with-consolidation으로 원격 에이전트용 SSE 서버를 띄울 수 있음

에이전트 자기 모델

  • init 호출 시 /self namespace 뼈대를 만들어 자기 모델 구성을 시작함
  • /self/capabilities에는 에이전트가 잘하는 일을 기억해 작업 계획에 활용함
  • /self/limits에는 실패 기록과 약점을 저장해 같은 실수 반복을 막게 함
  • /self/preferences에는 가장 잘 작동하는 운영 방식을 학습해 장기적으로 작업 스타일을 형성함

자율 학습 루프

  • 5분 단위 research loop를 돌리면 과거 메모리에서 현재 맥락을 잡고, 스스로 주제를 골라 조사하고, 새 연결을 만들고, 다시 통합한 뒤 종료함
  • Orient 단계에서 과거 맥락, 활성 목표, 열린 가설, 과거 실패를 불러옴
  • Research 단계에서 에이전트가 직접 고른 주제로 웹 검색을 수행함
  • Think 단계에서 현재 아는 내용 안의 긴장, 빈틈, 모순을 드러냄
  • Invent 단계에서 가설, 패턴, 발견 같은 새 산출물을 만듦
  • Consolidate 단계에서 파이프라인을 실행해 원시 episode를 구조화된 지식으로 합성함
  • Reflect + Sleep 단계에서 세션 요약을 남기고 다음 실행을 위한 맥락을 설정한 뒤 멈춤
  • 루프 프롬프트 보기

모델 및 인프라 호환성

  • embedding과 reasoning 모두에 OpenAI 호환 API를 사용하는 하나의 provider 구성을 전제로 함
  • 클라우드, 로컬, self-hosted 구성을 모두 지원하며 vendor lock-in이 없다고 밝힘
  • OpenRouter를 로컬에서 연결해 사용 중이라고 적고, 수백 개 모델을 하나의 API 키로 접근할 수 있게 함
  • Ollama와도 바로 동작하며, Qwen, Llama, Mistral 같은 로컬 모델로 오프라인 메모리 구성이 가능함
  • vLLM, LM Studio, llama.cpp server, Together AI, Groq처럼 OpenAI API 형식을 쓰는 백엔드도 지원 대상으로 적음
  • 기본 embedding 모델은 openai/text-embedding-3-small이고, 그 조합에서 STASH_VECTOR_DIM=1536을 사용함
  • STASH_VECTOR_DIM은 첫 실행 전에만 설정할 수 있으며, 초기화 후 바꾸면 전체 데이터베이스 재설정이 필요함

배포 및 사용 정보

  • Docker Compose로 Postgres, pgvector, Stash를 함께 올리는 구성을 제공함
  • 실행 절차는 저장소 clone, .env.example을 .env로 복사한 뒤 API 키와 모델을 설정하고 docker compose up을 실행하는 3단계로 제시됨
  • 초기 실행 후 postgres + pgvector 준비, migration 적용, MCP 서버 대기, 백그라운드 consolidation 실행 상태를 기대함
  • 프로젝트는 Apache 2.0 라이선스로 공개됨
  • GitHub Repository
  • alash3al.com
Read Entire Article