Zep - 에이전트를 위한 컨텍스트 엔지니어링 및 메모리 치트시트
Zep는 AI 에이전트를 위한 메모리 및 컨텍스트 엔지니어링 레이어입니다. Graphiti 시간 지식 그래프 엔진을 기반으로, 대화 히스토리와 비즈니스 데이터를 수집하고, 사실이 시간에 따라 어떻게 변하는지 추적하는 쿼리 가능한 그래프로 융합하며, 에이전트 응답을 기초할 관련, 통제된 컨텍스트를 낮은 지연시간으로 반환합니다. 오픈소스 코어와 관리형 클라우드 서비스 (SOC 2 / HIPAA), Python, TypeScript, Go용 SDK를 제공합니다.
설치 / 설정
| 대상 | 명령어 |
|---|
| Python SDK | pip install zep-cloud (cloud) |
| TypeScript SDK | npm install @getzep/zep-cloud |
| 자체 호스팅 (Community Edition) | 프로젝트의 Docker Compose를 통해 실행 |
| API 키 | export ZEP_API_KEY=... |
핵심 개념
| 용어 | 의미 |
|---|
| User | 에이전트가 제공하는 최종 사용자 |
| Thread | 사용자에 대한 대화 세션 |
| Graph | 사용자/그룹의 시간 지식 그래프 |
| Fact | 시간 인식 관계 그래프에서 |
| Context block | 조립되고 주입할 준비가 된 컨텍스트 문자열 |
사용자 및 스레드
from zep_cloud.client import Zep
zep = Zep(api_key="...")
zep.user.add(user_id="nick", email="nick@example.com")
zep.thread.create(thread_id="t1", user_id="nick")
| 호출 | 설명 |
|---|
user.add(...) | 사용자 생성 |
thread.create(...) | 대화 스레드 시작 |
thread.add_messages(...) | 메시지 추가 (그래프에 자동 수집) |
user.delete(...) | 사용자 및 해당 데이터 제거 |
메모리 추가
zep.thread.add_messages(
thread_id="t1",
messages=[{"role": "user", "content": "I moved to Berlin.", "name": "Nick"}],
)
# 채팅이 아닌 비즈니스 데이터를 그래프에 직접 추가
zep.graph.add(user_id="nick", type="text",
data="Nick's subscription tier is Pro.")
| 호출 | 설명 |
|---|
thread.add_messages(...) | 대화 턴 수집 |
graph.add(...) | 그래프에 임의 텍스트/JSON 추가 |
| 수집 | 엔티티/사실 자동 추출 및 타임스탬프 |
컨텍스트 검색
# 프롬프트를 위한 조립된 컨텍스트 블록 받기
memory = zep.thread.get_user_context(thread_id="t1")
print(memory.context) # 주입할 준비가 된 관련 사실 문자열
# 또는 그래프 직접 쿼리
edges = zep.graph.search(user_id="nick", query="where does Nick live?")
| 호출 | 반환 |
|---|
thread.get_user_context(...) | 합성된 컨텍스트 블록 |
graph.search(...) | 쿼리와 일치하는 사실/엣지 또는 노드 |
| 검색 범위 | edges (사실), nodes (엔티티), 또는 episodes |
시간이 중요한 이유
Zep는 그래프 기반이고 시간 인식이므로, 모순되는 업데이트가 무분별하게 덮어쓰지 않습니다. 이전 사실은 타임스탬프로 무효화되고 새 사실이 기록되므로 에이전트는 현재 진실을 얻으면서 히스토리는 쿼리 가능하게 유지됩니다.
| 기능 | 이점 |
|---|
| 사실 무효화 | 현재 컨텍스트는 정확하게 유지 |
| 전파 | 사실을 소스로 추적 |
| 통제된 검색 | 낮은 지연시간, 허가된 컨텍스트 |
| 교차 세션 | 메모리는 스레드 전체에 지속 |
일반적인 워크플로우
# Zep 메모리를 사용한 에이전트 루프
zep.thread.add_messages(thread_id="t1", messages=user_turn)
context = zep.thread.get_user_context(thread_id="t1").context
# LLM 시스템 프롬프트 앞에 `context` 추가, 그 후 생성
Zep vs 다른 메모리 레이어
| 측면 | Zep | Mem0 | 원본 벡터 저장소 |
|---|
| 모델 | 시간 그래프 (Graphiti) | 다층 | 임베딩만 |
| 시간 사실 | 예 | 제한적 | 아니오 |
| 컨텍스트 조립 | 내장 블록 | 검색 | 수동 |
| 최고의 용도 | 프로덕션 에이전트 메모리 | 개인화 | 단순 회상 |
리소스