CogneeMemoryStore

CogneeMemoryStore

CogneeMemoryStore는 Cognee의 knowledge graph API로 구동되는 영구 메모리 저장소예요. CogneeRetriever와 CogneeWriter가 공유하는 데이터 계층입니다.

출처: 문서

본문

항목 내용
사용자 CogneeRetriever, CogneeWriter
선택적 init 변수 search_type, top_k, dataset_name, session_id, self_improvement, timeout
API reference Cognee
GitHub link https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/cognee
Package name cognee-haystack

Overview

CogneeMemoryStore는 Cognee의 V2 메모리 API를 감쌉니다:

  • add_memories → cognee.remember
  • search_memories → cognee.recall
  • improve → cognee.improve
  • delete_all_memories → cognee.forget

Cognee는 두 가지 메모리 계층을 지원해요. session_id를 설정하면 세션 캐시를 쓰는데, LLM 추출 없이 빠른 쓰기와 세션 인식 recall이 가능합니다. session_id를 None으로 두면 영구 knowledge graph에 쓰는데, 수집(ingestion) 시 LLM 추출을 사용하고 더 풍부한 그래프 완성 쿼리를 지원해요.

Cognee 설정(LLM 제공 업체, 데이터베이스, 벡터 저장소)은 환경 변수에서 읽어옵니다. 설정 방법은 Cognee 문서를 참고하세요.

Parameters

  • search_type — 선택적이며 기본값은 "GRAPH_COMPLETION". 어떤 Cognee recall 전략을 쓸지 제어해요. 그 밖에 유용한 값으로 원시 검색용 "CHUNKS", 요약된 그래프 노드용 "SUMMARIES"가 있습니다.
  • top_k — 선택적이며 기본값은 5. 검색당 반환되는 최대 메모리 수의 기본값을 설정해요.
  • dataset_name — 선택적이며 기본값은 "haystack_memory". 이 스토어를 뒷받침하는 Cognee 데이터셋 이름을 지정해요.
  • session_id — 선택적이며 기본값은 None. 설정하면 읽기·쓰기가 세션-캐시 계층을 대상으로 하고, None이면 영구 knowledge graph를 사용합니다.
  • self_improvement — 선택적이며 기본값은 True. True면 Cognee가 매 쓰기 후 그래프 개선을 인라인으로 실행해요. improve()를 유일한 개선 트리거로 만들고 싶다면 False로 설정하세요.
  • timeout — 선택적이며 기본값은 300. Cognee 연산 하나당 제한 시간(초)입니다.

Installation

Cognee 통합을 설치합니다:

pip install cognee-haystack

LLM API 키를 설정합니다(Cognee가 그래프 추출·쿼리에 사용):

export LLM_API_KEY="your-llm-api-key"

선택적으로 별도의 임베딩 API 키를 설정할 수 있어요(설정하지 않으면 LLM_API_KEY를 사용):

export EMBEDDING_API_KEY="your-embedding-api-key"

Usage

On its own

from haystack.dataclasses import ChatMessage
from haystack_integrations.memory_stores.cognee import CogneeMemoryStore

store = CogneeMemoryStore(search_type="GRAPH_COMPLETION", top_k=5)

store.add_memories(
    messages=[ChatMessage.from_user("Alice enjoys hiking and outdoor activities.")],
    user_id="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
)

memories = store.search_memories(
    query="What does Alice like?",
    user_id="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
)
print([msg.text for msg in memories])

Session tier vs permanent graph

session_id로 어느 메모리 계층을 대상으로 할지 제어할 수 있어요. 하나의 스토어가 두 계층을 모두 처리할 수 있으며, writer의 session_id가 호출별로 스토어의 session_id를 덮어씁니다.

from haystack.dataclasses import ChatMessage
from haystack_integrations.memory_stores.cognee import CogneeMemoryStore

store = CogneeMemoryStore(dataset_name="my_agent_memory", self_improvement=False)

# Write long-lived facts to the permanent graph (no session_id).
store.add_memories(
    messages=[ChatMessage.from_user("Alice is a senior data scientist at Acme Corp.")],
)

# Write transient session context to the session cache.
store.add_memories(
    messages=[
        ChatMessage.from_user("Alice is currently debugging a vector store issue.")
    ],
    session_id="alice_session_1",
)

# Promote the session cache into the permanent graph.
store.improve(session_id="alice_session_1")

Delete all memories

# Delete only this store's dataset (session cache is unaffected).
store.delete_all_memories()

# To wipe everything including the session cache, call cognee directly:
import asyncio
import cognee

asyncio.run(cognee.forget(everything=True))

더 알아보기 (Learn more)