Qdrant에서 Cognee 사용하기
Qdrant에서 Cognee 사용하기 (cognee)
임베딩은 비슷한 텍스트 청크를 쉽게 찾아주지만, 대부분의 에이전트 작업은 그 이상을 요구해요. 구조(structure), 시간적 맥락(temporal context), 문서를 넘나드는 추론(cross-document reasoning) 이 필요한데요. 바로 여기서 Cognee가 등장해요. Cognee는 원시 데이터 소스를 AI 메모리로 바꿔 줘요. 임베딩으로 뒷받침되는 모듈식·쿼리 가능한 지식 그래프 기반의 시맨틱 데이터 레이어를 만들어서, 에이전트가 구조를 갖고 검색하고 추론하고 기억할 수 있게 해 줘요.
왜 메모리 레이어에 Qdrant를 쓸까요?
런타임에서 Cognee의 시맨틱 메모리 레이어는 그래프 추론을 위한 후보를 표면화하기 위해 빠르고 예측 가능한 조회가 필요하고, 다중 홉(multi-hop) 탐색의 근거를 잡기 위해 메타데이터에 대한 촘촘한 통제도 필요해요. Qdrant의 설계가 이 요구에 잘 맞는데요, 그 이유를 보면:
- 최근접 이웃(nearest-neighbor) 검색으로 빠른 후보 recall.
- 표현력 있는 payload 필터링으로 타임스탬프 윈도우, 문서 타입, 소스 태그 같은 기준으로 결과를 제약.
- 운영 단순성으로 팀이 메모리 레이어 자체에 집중할 수 있게 함.
검색이 정확히 어떻게 흘러갈까요?
이 통합은 Qdrant의 벡터 검색과 Cognee의 그래프 추론을 하나의 루프로 합쳐요. 사용자의 쿼리가 단일 저장소를 때리지 않고, 임베딩 → 검색 → 매핑 → 융합을 거쳐 최종 생성까지 이어져요.
- 쿼리 임베딩 → Qdrant로 보내 최근접 이웃 검색.
- 엔티티/관계 식별 → Cognee의 그래프 레이어가 후보를 지식 그래프에 매핑.
- 융합과 랭킹 → Cognee가 벡터 후보와 그래프 맥락을 합쳐 증거를 랭킹.
- 생성 → 벡터의 폭(breadth)과 그래프의 정밀도(precision)로 근거된 최종 답변.
결과적으로 벡터에서 폭을, 그래프에서 정밀도를 얻어요. '누가 누구와 연결됐고, 그 연결이 시간에 따라 어떻게 변했는지'가 관건인 질문에서 특히 유용하죠.
네이티브 통합
Cognee는 Qdrant 어댑터를 기본 제공하고, Qdrant를 선호되는 내장 벡터 데이터베이스 옵션으로 문서화해요. 즉 URI와 키 하나만 설정하면, Cognee의 파이프라인이 그래프를 만들고 쿼리하면서 임베딩을 Qdrant에 직접 읽고 쓸 수 있어요.
pip install Cognee-community-vector-adapter-qdrant
최소 설정 예제
아래 예제는 Cognee-community 저장소에서 가져온 것으로, 많은 팀이 시작하는 구조를 그대로 보여줘요. SQLite는 소규모 관계형 메타데이터용, Qdrant는 벡터용, Kùzu는 그래프용으로 써요. register 임포트만으로 Cognee가 Qdrant 어댑터를 발견해 사용하게 돼요.
import asyncio, os, pathlib
from os import path
from cognee_community_vector_adapter_qdrant import register
async def main():
from Cognee import SearchType, add, cognify, config, prune, search
system_path = pathlib.Path(__file__).parent
config.system_root_directory(path.join(system_path, ".cognee_system"))
config.data_root_directory(path.join(system_path, ".data_storage"))
config.set_relational_db_config({"db_provider": "sqlite"})
config.set_vector_db_config({
"vector_db_provider": "qdrant",
"vector_dataset_database_handler": "qdrant",
"vector_db_url": os.getenv("QDRANT_API_URL", "http://localhost:6333"),
"vector_db_key": os.getenv("QDRANT_API_KEY", ""),
# ... 나머지 설정은 Cognee 문서 참고
})
# add() 로 데이터 추가, cognify() 로 그래프 구축, search() 로 검색
await asyncio.gather(main())
핵심 설정 두 가지를 보면, vector_db_provider를 "qdrant"로 지정해 벡터 DB를 Qdrant로 바꾸고, vector_db_url과 vector_db_key로 접속 정보를 넣어요. QDRANT_API_URL 환경 변수가 없으면 로컬 http://localhost:6333을 기본값으로 써요. 이후 add()로 데이터를 넣고 cognify()로 지식 그래프를 구축한 뒤 search()로 검색하는 흐름이 이어져요.