Graphiti: 실시간 지식 그래프를 구축하고 쿼리하는 프레임워크
Graphiti란 무엇인가요?
Graphiti는 지식 그래프를 구축하고 쿼리하기 위한 프레임워크로, 시간 인식 기능을 갖추고 있어 동적인 환경에 매우 적합합니다. 기존의 검색 증강 생성(RAG) 방법과 달리, Graphiti는 사용자 상호작용, 구조화 및 비구조화 데이터, 외부 정보를 실시간으로 통합하여 쿼리 가능한 그래프를 생성합니다. 그 장점은 전체 그래프를 재계산할 필요 없이 데이터의 실시간 업데이트, 효율적인 검색, 정확한 히스토리 쿼리를 지원하여 인터랙티브하고 컨텍스트를 인식하는 애플리케이션 개발에 매우 적합하다는 점입니다.

Graphiti의 주요 기능
실시간 증분 업데이트: 새로운 데이터 조각을 즉시 통합할 수 있으며, 배치 재계산이 필요하지 않습니다.
이중 시간 데이터 모델: 이벤트가 발생한 시간과 수집된 시간을 명시적으로 추적하여 정확한 시점 쿼리를 지원합니다.
효율적인 하이브리드 검색: 시맨틱 임베딩, 키워드(BM25), 그래프 탐색을 결합하여 요약을 위한 대규모 언어 모델(LLM)에 의존하지 않고도 낮은 지연 시간의 쿼리를 구현합니다.
사용자 정의 엔터티 정의: 간단한 Pydantic 모델을 통해 유연한 온톨로지와 사용자 정의 엔터티 생성을 지원합니다.
확장성: 병렬 처리를 통해 대규모 데이터 세트를 효과적으로 관리하여 엔터프라이즈 환경에 적합합니다.
다양한 LLM과의 통합: Openai, Anthropic, Groq 등 LLM 공급자를 지원하여 유연한 LLM 추론 및 임베딩 옵션을 제공합니다.
MCP 서버: FastAPI 기반의 API 서비스를 제공하여 MCP 프로토콜을 통해 지식 그래프와 상호작용할 수 있도록 지원하며, 이벤트 관리, 엔터티 관리, 관계 처리 등의 기능을 포함합니다.
Graphiti를 선택하는 이유
동적으로 변화하는 환경에 적응하여 데이터를 실시간으로 업데이트할 수 있습니다.
정확한 시점 쿼리를 지원하여 히스토리 정보를 쉽게追溯할 수 있습니다.
검색 속도가 빠르며 복잡한 언어 모델에 의존할 필요가 없습니다.
특정 요구 사항을 충족하기 위해 데이터 구조를 사용자 정의할 수 있습니다.
대량의 데이터를 효율적으로 처리할 수 있어 엔터프라이즈급 애플리케이션에 적합합니다.
Graphiti 설치 및 사용법
Graphiti 설치
먼저, 시스템이 설치 요구 사항을 충족하는지 확인하고 필요한 종속 항목을 설치합니다:
Python: 시스템에 Python 3.10 이상 버전이 설치되어 있는지 확인하세요.
Neo4j: Neo4j 데이터베이스를 설치합니다(버전 5.26 이상). Neo4j Desktop을 사용하여 설치 및 관리 프로세스를 간소화할 수 있습니다.
OpenAI API Key: OpenAI를 사용하여 LLM 추론 및 임베딩을 수행하려는 경우 유효한 OpenAI API Key가 필요합니다.
pip 또는 poetry를 사용하여 Graphiti 핵심 라이브러리를 설치할 수 있습니다:
pip install graphiti-core # 또는 poetry add graphiti-core
Graphiti 초기화
코드에서 Graphiti 인스턴스를 초기화하여 Neo4j 데이터베이스에 연결합니다:
from graphiti_core import Graphiti
graphiti = Graphiti("bolt://localhost:7687", "neo4j", "password")인덱스 및 제약 조건 구축
데이터를 추가하기 전에 그래프 데이터베이스를 초기화하고 Graphiti의 인덱스 및 제약 조건을 구축합니다:
await graphiti.build_indices_and_constraints()
데이터 추가
add_episode 메서드를 사용하여 지식 그래프에 데이터를 추가합니다. 각 데이터 조각을 "episode"라고 합니다:
from graphiti_core.nodes import EpisodeType
from datetime import datetime, timezone
episodes = [
"Kamala Harris is the Attorney General of California. She was previously the district attorney for San Francisco.",
"As AG, Harris was in office from January 3, 2011 – January 3, 2017"
]
for i, episode in enumerate(episodes):
await graphiti.add_episode(
name=f"Freakonomics Radio {i}",
episode_body=episode,
source=EpisodeType.text,
source_description="podcast",
reference_time=datetime.now(timezone.utc)
)데이터 쿼리
search 메서드를 사용하여 지식 그래프를 쿼리하며, 시맨틱 유사성과 키워드 검색을 결합합니다:
results = await graphiti.search('Who was the California Attorney General?')사용자 정의 쿼리
필요에 따라 쿼리를 사용자 정의할 수 있으며, 예를 들어 중심 노드를 지정하여 해당 노드와 더 가까운 결과를 우선적으로 고려할 수 있습니다:
await graphiti.search('Who was the California Attorney General?', center_node_uuid)연결 종료
채팅 상태 관리를 완료한 후 Graphiti 연결을 종료합니다:
graphiti.close()
MCP 서버 사용
Graphiti는 FastAPI를 통해 상호작용할 수 있는 MCP 서버를 제공합니다. 이 서버를 배포하고 MCP 프로토콜을 사용하여 지식 그래프와 상호작용할 수 있습니다:
1. Graphiti 저장소를 복제하거나 다운로드합니다.
2. MCP 서버를 실행합니다:
uvicorn graphiti.mcp_server.main:app --reload
3. AI 어시스턴트에서 MCP 프로토콜을 사용하여 서버와 통신합니다.
Azure OpenAI 사용
Azure OpenAI를 사용하려는 경우 해당 클라이언트와 임베더를 구성해야 합니다:
from openai import AsyncAzureOpenAI from graphiti_core import Graphiti from graphiti_core.llm_client import OpenAIClient from graphiti_core.embedder.openai import OpenAIEmbedder, OpenAIEmbedderConfig api_key = "<your-api-key>" api_version = "<your-api-version>" azure_endpoint = "<your-azure-endpoint>" azure_openai_client = AsyncAzureOpenAI(api_key=api_key, api_version=api_version, azure_endpoint=azure_endpoint) graphiti = Graphiti( "bolt://localhost:7687", "neo4j", "password", llm_client=OpenAIClient(client=azure_openai_client), embedder=OpenAIEmbedder(config=OpenAIEmbedderConfig(embedding_model="text-embedding-3-small"), client=azure_openai_client) )
플레이스홀더 값을 실제 Azure OpenAI 자격 증명으로 바꾸고 올바른 임베딩 모델 이름을 지정하세요.
Graphiti의 장점
기타 기술과 비교했을 때, Graphiti는 동적 데이터 처리, 실시간 업데이트, 쿼리 속도 측면에서明显的 장점이 있습니다.
서버 구현을 제공하여 다른 시스템과의 통합이 용이합니다.
다양한 환경 구성과 다른 서비스와의 통합을 지원합니다.
관련 링크
논문: https://arxiv.org/abs/2501.13956
GitHub 저장소: https://github.com/getzep/graphiti
대본 기획 도우미▸
AI 앱
AI 뉴스 