스스로 캐시를 튜닝하는 에이전트 구축하기

대규모 언어 모델(LLM) 애플리케이션을 최적화하는 과제는 종종 시행착오의 연속입니다. 개발자들은 일반적으로 직관에 따라 Time-to-Live (TTL) 값과 캐싱 전략을 설정한 다음, 로그를 모니터링하여 제대로 작동하는지 확인합니다. 그러나 수동 설정과 실제 사용 패턴 사이에는 종종 큰 격차가 존재하며, 이는 비용과 지연 시간 모두에서 비효율성을 초래합니다.

최근 프로젝트에서, BetterDB의 제작자는 Valkey/Redis/Dragonfly 문서를 기반으로 구축된 RAG (Retrieval-Augmented Generation) 애플리케이션을 위한 에이전트 기반 캐싱 시스템을 개발했습니다. 목표는 에이전트가 자신의 성능을 모니터링하고 실시간으로 구성 변경을 제안하도록 함으로써, 그들의 캐싱 라이브러리를 실제로 "dogfood"하는 것이었습니다.

멀티 티어 캐싱 아키텍처

효율성을 극대화하기 위해, 이 시스템은 다양한 유형의 사용자 상호작용을 처리하도록 설계된 2단계 캐싱 전략을 채택합니다.

1. Exact-Match Tool Cache

이 티어는 SDK와 도구(tools) 사이에 위치합니다. 모든 호출은 정규화되어 정확히 일치하는지 확인됩니다. 이는 미리 정의된 질문, 반복적으로 복사하여 붙여넣은 쿼리, 또는 사용자가 동일한 기술적 세부 사항을 여러 번 확인하는 경우에 이상적입니다. 히트(hit)가 발생하면 시스템은 LLM을 완전히 건너뛰고 즉시 결과를 반환합니다.

2. Semantic Cache

사람들은 질문을 동일하게 표현하는 경우가 드물기 때문에, 시스템은 시맨틱 캐시를 활용합니다. 이 티어는 프롬프트를 임베딩하고 valkey-search를 통해 K-Nearest Neighbors (KNN) 검색을 수행합니다. 새로운 프롬프트와 캐시된 프롬프트 사이의 코사인 거리가 충분히 가깝다면, 시스템은 캐시된 응답을 스트리밍합니다.

두 티어 모두에서 캐시 미스(cache miss)가 발생하면, 시스템은 프롬프트 임베딩, 사용된 모델, 그리고 OpenAI usage report에서 가져온 입력/출력 토큰을 기록합니다. 이를 통해 시스템은 이후의 히트(hit)를 통해 절약된 정확한 달러 금액을 추적할 수 있습니다. \n## 루프를 닫기: 셀프 튜닝 및 모니터링

이 프로젝트의 진정한 혁신은 정적 구성에서 에이전트 기반 루프로 전환한 것입니다. 시스템은 Valkey/Redis 인스턴스에 메타데이터를 저장하며, 이는 모니터링 프로세스에 의해 분석됩니다.

이 모니터링 루프는 다음과 같이 작동합니다:

  • Analysis: 모니터링 도구는 캐시 메타데이터를 읽고 사용 패턴을 분석합니다.
  • Suggestion: 시스템은 MCP (Model Context Protocol) 서버를 통해 개선 사항(예: TTL 변경)을 제안합니다.
  • Execution: 이 데모 환경에서는 에이전트가 자신의 제안을 승인하고 적용할 수 있습니다. 라이브러리가 Valkey 인스턴스에서 구성을 직접 읽기 때문에, 서버 재시작 없이도 변경 사항이 즉시 적용됩니다.

교훈: 설정 vs 코드

테스트 과정에서 개발자는 흥미로운 트렌드를 관찰했습니다. 세 번의 실행 동안 도구 호출(tool calls) 횟수가 15회에서 13회, 그리고 마지막으로 8회로 감소했습니다. 에이전트가 여러 번의 TTL 변경을 제안했지만, 개발자는 중요한 한계를 발견했습니다: TTL은 종종 잘못된 제어 지점입니다.

예를 들어, 사용자가 "How fast is XADD?"라고 묻거나 "XADD performance"라고 물을 수 있습니다. 이들은 의미론적으로는 동일하지만 문자열은 다릅니다. TTL 변경으로는 이 두 쿼리가 exact-match 캐시에서 미스(miss)가 발생하는 문제를 해결할 수 없습니다. 유일한 실제 해결책은 아키텍처의 변경입니다. 즉, 해당 특정 도구들을 exact-match 티어에서 시맨틱 캐시 확인 단계로 이동시키는 것입니다.

이 깨달음은 LLM 개발자들에게 핵심적인 통찰을 제공합니다: 모든 최적화가 설정으로 해결될 수 있는 것은 아닙니다. 일부 비효율성은 라우팅 로직 자체에 내재되어 있으며, 파라미터 튜닝이 아닌 코드 변경이 필요합니다.

향후 방향

시스템을 더욱 정refine(정제)하기 위해, 개발자는 라우팅 로직 자체를 구성 가능하게 만드는 방안을 검토하고 있습니다. 이렇게 하면 에이전트가 재배포 없이 exact-match와 시맨틱 티어 사이에서 도구를 이동시킬 수 있게 되어, 더 빠른 반복 루프와 최적화 가설 검증이 가능해집니다.

Sources