Cognee - AI 에이전트 메모리 플랫폼 치트시트
Cognee는 자체 호스팅 지식 그래프를 사용하여 세션 전반에 걸쳐 에이전트에 지속적인 장기 메모리를 제공하는 오픈소스 AI 메모리 플랫폼입니다. 그 핵심은 ECL 파이프라인(Extract, Cognify, Load)으로, 많은 소스로부터 문서, 대화, 데이터를 수집하고, 엔티티와 관계의 그래프로 구조화하는 “cognify” 단계를 거쳐, 검색을 위해 그래프와 벡터 저장소에 로드합니다. 이는 메모리를 수동적인 저장소가 아닌 활성적이고 쿼리 가능한 레이어로 만듭니다.
설치
| 방법 | 명령어 |
|---|
| pip | pip install cognee |
| uv | uv add cognee |
| 확장 포함 | pip install "cognee[postgres,neo4j]" |
| LLM 키 설정 | export LLM_API_KEY="sk-..." |
| 검증 | python -c "import cognee; print('ok')" |
ECL 파이프라인
| 단계 | 역할 |
|---|
| Extract | 30개 이상의 소스 타입에서 원본 데이터 수집 |
| Cognify | 지식 그래프 구축 (엔티티, 관계) |
| Load | 검색을 위해 그래프 + 벡터 데이터베이스에 저장 |
| Search | 메모리 쿼리 (그래프, 벡터, 또는 하이브리드) |
기본 사용법
import cognee
import asyncio
async def main():
# 1) 메모리에 데이터 추가
await cognee.add("Nick prefers concise, direct answers.")
await cognee.add(open("notes.md").read())
# 2) 지식 그래프 구축
await cognee.cognify()
# 3) 메모리 쿼리
results = await cognee.search("What are Nick's preferences?")
print(results)
asyncio.run(main())
| 호출 | 설명 |
|---|
cognee.add(data) | 텍스트, 파일 또는 구조화된 데이터 수집 |
cognee.cognify() | 수집된 데이터를 그래프로 처리 |
cognee.search(query, ...) | 메모리에서 검색 |
cognee.prune() | 메모리 저장소 재설정/지우기 |
검색 유형
| 유형 | 반환 |
|---|
SearchType.GRAPH_COMPLETION | 지식 그래프에 기반한 답변 |
SearchType.RAG_COMPLETION | 클래식 벡터 RAG 답변 |
SearchType.INSIGHTS | 엔티티 관계/인사이트 |
SearchType.CHUNKS | 일치하는 원본 청크 |
SearchType.SUMMARIES | 요약된 결과 |
from cognee import SearchType
res = await cognee.search("connections between X and Y",
query_type=SearchType.INSIGHTS)
데이터 소스
| 카테고리 | 예제 |
|---|
| 문서 | PDF, DOCX, Markdown, text |
| 구조화된 | CSV, JSON, databases |
| 대화 | Chat/message history |
| 코드 | 소스 파일/repos |
저장소 백엔드
| 레이어 | 옵션 |
|---|
| 그래프 저장소 | NetworkX (기본), Neo4j, Kuzu |
| 벡터 저장소 | LanceDB (기본), Qdrant, pgvector, Weaviate |
| 관계형 | SQLite (기본), PostgreSQL |
| 설정 | 환경 변수 / 설정으로 설정 |
데이터세트 및 멀티테넌시
| 기능 | 사용 |
|---|
| 데이터세트 | 사용자/프로젝트당 메모리 네임스페이스 |
cognee.add(data, dataset_name="user-123") | 수집 범위 지정 |
| 권한 | 메모리 파티션에 대한 접근 제어 |
일반적인 워크플로우
# 세션 전반에 걸쳐 사용자의 지속적인 메모리 제공
await cognee.add(conversation_history, dataset_name="user-42")
await cognee.cognify()
context = await cognee.search("summarize what we know about user-42")
# 에이전트 프롬프트에 `context` 주입
# 문서 모음에 대한 그래프 구축
for f in docs: await cognee.add(open(f).read())
await cognee.cognify()
await cognee.search("how do these documents relate?",
query_type=SearchType.INSIGHTS)
Cognee vs 다른 메모리 프레임워크
| 측면 | Cognee | Mem0 | Graphiti |
|---|
| 모델 | 그래프 네이티브 (ECL) | 다층 벡터/그래프/KV | 시간 지식 그래프 |
| 강점 | 로컬 첫 그래프 추론 | 대화 개인화 | 변화하는 사실 |
| 자체 호스팅 | 예 | 예 | 예 |
| 최고의 용도 | 프라이버시 중심 그래프 메모리 | 개인화 | 시간 추론 |
리소스