홈으로 돌아가기

벡터 검색이 포함된 Redis 호환 스토리지

Agentis Memory는 ONNX와 HNSW를 통해 내장 벡터 검색을 구현한 Redis 프로토콜입니다. 로컬 임베딩 추론으로 멀티 에이전트 시스템의 저지연을 보장합니다. KV 작업에서 RedisStack을 36% 능가하는 성능입니다.

Redis 프로토콜에서의 벡터 검색: Agentis Memory
Advertisement 728x90

에이전티스 메모리: 네이티브 벡터 검색과 로컬 추론을 지원하는 Redis 호환 프로토콜

여섯 개의 서브에이전트가 사고를 조사합니다: 하나는 로그에서 OOMKilled를 발견하고, 다른 하나는 Grafana에서 CPU 급증을 포착하며, 세 번째는 Slack에서 컨텍스트를 추출합니다. 공유 메모리가 없으면 그들은 경쟁 가설을 생성합니다. 해결책은 내장된 의미 검색 기능을 가진 Redis 호환 스토리지입니다. 하나의 GraalVM 바이너리, ONNX를 통한 로컬 임베딩, 변경 없이 모든 Redis 클라이언트가 연결됩니다.

기존 솔루션이 부족했던 이유

Mem0와 Zep은 REST API, 외부 벡터 데이터베이스(Qdrant, Postgres), 클라우드 임베딩(OpenAI)에 의존합니다. 모든 MEMSAVE는 밀리초 지연을 가진 세 번의 네트워크 홉을 포함합니다. Redis Stack은 RediSearch를 통해 벡터 검색을 지원하지만 외부 벡터 추론이 필요합니다. 제로 의존성 서비스가 필요했습니다: RESP 프로토콜, 비동기 벡터화, 단일 프로세스 내 HNSW 인덱싱.

첫 번째 시도는 C 모듈과 ONNX 런타임을 사용한 Redis 포크였습니다. 결과: 동시성 하에서 세그폴트, 할당자 경계에서 수동 메모리 관리. Java로 전환: GraalVM native-image는 all-MiniLM-L6-v2 모델이 내장된 150MB 바이너리로 컴파일됩니다(384 차원, 2-5ms 추론).

Google AdInline article slot

고성능을 위한 기술 스택

  • GraalVM native-image: 시작 시간 <1초, JIT 워밍업 없이 예측 가능한 지연 시간.
  • Java Vector API (Project Panama): HNSW 검색에서 코사인 유사도를 위한 SIMD.
  • Project Loom (Virtual Threads): 리액터 패턴 없이 경량 스레드에서 RESP 연결.
  • ONNX Runtime: 로컬 임베딩 추론.
  • jvector: ANN 검색을 위한 HNSW.

memtier_benchmark로 벤치마크: JVM 버전 — Redis의 0.5배(60k ops/s). native-image + Vector API 이후 — 문자열 작업에서 Redis의 1.36배(168k ops/s).

아키텍처: KV + 벡터 레이어

클래식 KV 엔진(90개 이상의 Redis 명령어: 문자열, 해시, 리스트, 집합, 정렬 집합, TTL, SCAN, pub/sub) + 벡터 레이어.

redis-cli -p 6399 MEMSAVE "agent:fact:stack" "우리는 Python 3.12와 FastAPI를 사용합니다"
# → OK (비동기적으로: 청크 → 임베딩 → HNSW)

MEMQUERY는 쿼리를 벡터화하고, 코사인으로 HNSW를 검색하며, 키+텍스트+점수를 반환합니다:

Google AdInline article slot
redis-cli -p 6399 MEMQUERY "Python FastAPI 메모리 문제" TOPK 3
# 1) "agent:fact:stack" "우리는 Python 3.12와 FastAPI를 사용합니다" 0.92

MEMDEL은 HNSW+KV에서 제거합니다. MEMSIM은 텍스트 간 유사도 점수를 위한 것입니다. 비동기 처리: KV는 즉시 OK, 인덱싱은 백그라운드에서(5-10ms/청크).

시나리오: 사고 조사

  • LogsInvestigator: MEMSAVE "logs:pod:payment" "OOMKilled pod payment-service".
  • MetricsInvestigator: MEMQUERY "memory pressure payment-service" → OOM을 찾고 가설을 조정합니다.
  • SlackContextInvestigator: MEMQUERY "deploy payment-service yesterday" → 배포와 연결합니다.

Synthesizer는 잡음 없이 일관된 보고서를 집계합니다.

벤치마크와 최적화

| 작업 | Redis (ops/s) | 에이전티스 메모리 (ops/s) | 속도 향상 |

Google AdInline article slot

|-----------|---------------|------------------------|---------|

| SET/GET | 120k | 168k | 1.36배 |

| MEMSAVE | 해당 없음 | 12k (추론 포함) | - |

| MEMQUERY | 해당 없음 | 8k TOPK=10 | - |

Vector API는 코사인 유사도를 스칼라 대비 2.5배 가속합니다. Virtual Threads는 스레드 고갈 없이 10k 연결로 확장됩니다.

핵심 요약

  • 호환성: 90% Redis API + 4개의 의미 명령어(MEMSAVE, MEMQUERY, MEMDEL, MEMSIM).
  • 성능: KV에서 Redis의 1.36배, 네트워크 없이 로컬 추론.
  • 제로 의존성: 모델이 내장된 네이티브 바이너리, Docker/키 없음.
  • 사용 사례: 다중 에이전트 시스템을 위한 실시간 공유 메모리.
  • 개방성: 실험을 위한 GitHub 소스 코드.

— Editorial Team

Advertisement 728x90

다음 읽기