절대 잊지 않는 AI를 구축했습니다 — 비용 0달러로 (Cognee Hackathon)
요약
Cognee Hackathon에서 개발된 MindVault는 AI의 기억상실 문제를 해결하기 위해 지식 그래프와 벡터 검색을 결합한 개인용 메모리 레이어를 구축합니다. 텍text를 하이브리드 지식 저장소로 변환하여 대화 맥락과 관계적 정보를 지속적으로 유지합니다.
핵심 포인트
- 지식 그래프와 벡터 검색을 결합한 하이브리드 메모리 구조 활용
- Cognee 오픈 소스를 사용하여 텍스트를 지식 엔티티로 변환
- 실시간 Force-directed 지식 그래프 시각화 구현
- Web Speech API를 통한 음성 입력 및 로컬/클라우드 전환 지원
절대 잊지 않는 AI를 구축했습니다 — 비용 0달러로 (Cognee Hackathon)
Team MindVault — Jay Bamroliya & Kaushal Karkar 작성
모든 AI 어시스턴트는 동일하고 당혹스러운 문제를 가지고 있습니다.
당신은 프로젝트를 설명하는 데 20분을 소비합니다. 탭을 닫습니다. 그리고 다음 날 다시 돌아오면 — AI는 당신이 누구인지 전혀 모릅니다.
당신의 AI는 기억상실증에 걸렸습니다. 매번. 매번 말이죠.
WeMakeDevs × Cognee Hackathon를 위해, 우리는 이를 해결하기 위해 MindVault를 구축했습니다. 이는 당신이 대화함에 따라 당신의 삶에 대한 지식 그래프 (Knowledge Graph)를 구축하는 개인적인 "살아있는 기억 (living memory)"입니다. 그리고 우리는 이를 완전히 무료인 스택 (Stack)으로 구동되도록 만들었습니다. 과정 중에 발생한 모든 문제점을 포함하여 정확히 어떻게 구현했는지 소개합니다.
상태 비저장 (Stateless) AI의 문제점
LLM (Large Language Model)을 호출할 때, 모든 요청은 제로(0)에서 시작됩니다. 당신의 지난 세션, 선호도, 결정, 또는 이름에 대한 기억이 전혀 없습니다.
일반적인 해결책들은 모두 한계가 있습니다:
- 시스템 프롬프트 (System prompts) — 토큰 (Token) 제한이 있고, 수동으로 관리해야 함
- 벡터 데이터베이스 (Vector databases) — 의미론적 유사성 (Semantic similarity)만 제공하며, 관계적 맥락 (Relational context)이 없음
- RAG 파이프라인 (RAG pipelines) — 구축이 복잡하며, 그래프 인식 (Graph awareness) 능력이 없음
이 중 그 어느 것도 진정한 지속적인 기억을 제공하지 못합니다.
Cognee의 등장
Cognee는 AI 에이전트 (AI agents)를 위한 오픈 소스 메모리 레이어 (Memory layer)입니다. 이는 텍스트를 **하이브리드 그래프-벡터 지식 저장소 (Hybrid graph-vector knowledge store)**로 변환하며, 두 가지 검색 시스템이 함께 작동합니다:
- 벡터 검색 (Vector search) — "이 쿼리와 의미론적으로 유사한 것을 찾으시오"
- 그래프 탐색 (Graph traversal) — "개념 간의 관계를 따라가시오"
이것이 서류 보관함과 실제 뇌의 차이점입니다.
Cognee 1.2의 메모리 API는 매우 단순합니다 — 전체 메모리 생명 주기를 아우르는 네 가지 동사로 구성됩니다:
import cognee
await cognee.remember("Jay is a developer from India building MindVault.")
...
우리가 구축한 것: MindVault
모든 메시지가 구조화된 기억이 되는 채팅 인터페이스입니다:
| 작업 | 발생하는 일 |
|---|---|
| 💾 Remember (기억하기) | 텍스트 → 임베딩 (Embedded) + 지식 그래프 엔티티 (Knowledge-graph entities)로 추출 |
| ... |
그리고 우리가 자랑스럽게 생각하는 부분들입니다:
- Canvas 상에 렌더링되는 실시간 Force-directed 지식 그래프 (Knowledge graph) — 라이브러리 없이 커스텀 물리 엔진(척력, 스프링, 중력)을 사용했습니다. 타이핑을 함에 따라 당신의 기억이 성장하는 것을 말 그대로 지켜볼 수 있습니다.
- Web Speech API를 통한 음성 입력 (Voice input) — 당신의 기억을 말하세요.
- 실시간 로컬 ↔ 클라우드 전환 (LOCAL ↔ CLOUD toggle) — 클릭 한 번으로 로컬 머신에서 실행되는 오픈 소스 Cognee와 Cognee Cloud 사이를 전환합니다. 재시작은 필요 없습니다. 동일한 코드베이스를 사용하며,
memory_engine.py가 동일한 비동기 함수(async functions) 뒤에서 두 백엔드를 모두 추상화합니다.
Browser (chat · voice · live graph · toggle)
│
▼
...
진짜 이야기: 0달러로 실행하기
이 부분이 가장 어렵고 교육적인 부분이었습니다. 저희에게는 API를 위한 예산이 전혀 없었습니다. 저희가 사용한 무료 스택과 마주쳤던 모든 장벽은 다음과 같습니다:
장벽 1: LLM 비용. Groq의 무료 티어는 분당 6,000 토큰의 llama-3.3-70b-versatile을 제공합니다. 괜찮게 들릴 수도 있지만, Cognee의 cognify 파이프라인이 여러 개의 동시 LLM 호출을 수행한다는 사실을 알게 되기 전까지는 그렇습니다. 즉시 429 Rate-limit 에러가 발생합니다.
해결책: Cognee는 내장된 속도 제한기(rate limiter, aiolimiter 기반)를 제공합니다. 세 가지 환경 변수(env vars)를 설정합니다:
LLM_RATE_LIMIT_ENABLED=true
LLM_RATE_LIMIT_REQUESTS=1
LLM_RATE_LIMIT_INTERVAL=15
호출은 자동으로 큐에 쌓이고 간격이 조정됩니다. 무료 티어에서는 remember() 실행에 약 90초가 소요되지만, 0달러를 위해라면 충분히 감수할 만한 거래입니다.
장벽 2: 임베딩 (Embedding) 비용. Cognee는 기본적으로 OpenAI 임베딩을 사용합니다. 이는 OpenAI 키와 비용이 발생함을 의미합니다.
해결책: fastembed를 사용하여 BAAI/bge-small-en-v1.5를 로컬에서 실행합니다. API 키도, 네트워크 호출도 필요 없습니다:
EMBEDDING_PROVIDER=fastembed
EMBEDDING_MODEL=BAAI/bge-small-en-v1.5
장벽 3: 벡터 차원 불일치 (Vector dimension mismatch). 저희의 LanceDB 저장소는 OpenAI의 3072차원 벡터로 생성되어 있었으나, fastembed는 384차원을 생성합니다. 스키마 충돌과 난해한 에러가 발생했습니다.
해결책: .cognee_system/databases를 삭제하고 올바른 스키마로 다시 구축되도록 합니다. 교훈: 임베딩 차원은 스토리지 스키마의 일부입니다. 제공자(provider)를 변경한다는 것은 마이그레이션(migration)을 의미합니다.
Wall 4 (Cloud mode): 조용한 no-op (아무 일도 일어나지 않음). Cognee Cloud의 /api/v1/add는 JSON이 아닌 **멀티파트 파일 업로드 (multipart file uploads)**를 허용합니다. 우리의 JSON POST 요청은 그럴듯한 상태 코드(status codes)를 반환했지만, 실제로는 아무것도 저장하지 않았습니다. Recall(회상) 답변은 순수한 LLM 환각(hallucination)이었으며 — 질문별로 캐싱되어 자신 있게 틀린 답을 내놓았습니다.
해결책: OpenAPI 명세(/openapi.json)를 읽고, 멀티파트로 전환합니다:
files={"data": ("memory.txt", text.encode(), "text/plain")},
data={"datasetName": dataset},
디버깅 교훈: 검색(search) 결과가 "데이터를 찾을 수 없음(no data found)"이라고 나오는데 추가(add) 결과가 "성공(success)"이라면, 부정적인 신호(negative signal)를 신뢰하세요 — 상태 코드를 믿는 대신 실제로 무엇이 저장되었는지 확인하십시오 (GET /api/v1/datasets/{id}/data).
우리를 놀라게 한 것들
그래프 탐색 (Graph traversal)은 벡터 검색 (vector search)과 진정으로 다릅니다. 우리는 "Jay는 MindVault를 구축하고 있다"와 "MindVault는 Cognee AI로 구동된다"를 별개의 메모리로 저장한 뒤, "Jay는 무엇을 구축하고 있는가?"라고 물었습니다. Cognee는 키워드 중복이 아니라 그래프를 통해 점들을 연결했습니다.
improve() 기능은 과소평가되어 있습니다. 대부분의 사람들은 추가(add)하고 검색(search)하는 단계에서 멈춥니다. 메모리가 축적된 후 강화(enrichment)를 다시 실행하면 그래프가 눈에 띄게 강화됩니다 — 기존 노드(nodes) 사이에 새로운 엣지(edges)가 나타납니다.
시도해보기
git clone https://github.com/jaybamroliya/mindvault
cd mindvault
pip install -r requirements.txt
...
총 비용: $0. 스택 어디에도 신용카드가 필요하지 않습니다.
마치며
"상태가 없는 AI (Stateless AI)"는 AI 분야에서 가장 짜증 나는 미해결 UX 문제 중 하나입니다. Cognee는 이를 제대로 해결합니다 — 프롬프트 해킹(prompt hack)이 아니라, 무료로 셀프 호스팅하거나 클라우드에서 확장할 수 있는 실제 하이브리드 메모리 아키텍처(hybrid memory architecture)를 통해서 말입니다.
에이전트(agents)를 구축하고 있다면, AI에게 메모리를 부여하세요. 그것이 모든 것을 바꿉니다.
WeMakeDevs × Cognee Hackathon를 위해 Team MindVault(Jay Bamroliya & Kaushal Karkar)가 제작함. 출처: github.com/jaybamroliya/mindvault
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기