키-값 저장소(스토어) 통합

키-값 저장소(스토어) 통합

LangChain 앱에서 데이터를 키로 저장하고 다시 꺼내고 싶을 때가 있어요. 예를 들어 임베딩(벡터)을 계산했다면, 같은 텍스트를 두 번 계산하지 않도록 그 결과를 어딘가에 보관해 두고 싶죠. 이때 쓰는 게 바로 LangChain의 키-값 저장소 인터페이스예요. 영어로는 store, 넓게 보면 ByteStore 구현들과 그 통합들을 가리켜요.

출처: 공식문서 - Store integrations

어떻게 동작하나요

LangChain은 키-값 저장소를 위한 인터페이스를 제공하는데, 이 인터페이스는 주로 임베딩을 캐시하는 데 쓰여요. 같은 질문에 대한 임베딩을 매번 다시 만들 필요가 없도록, 계산한 결과를 키에 담아 보관하는 식이죠.

공통 인터페이스

모든 BaseStore 구현은 같은 인터페이스를 지원해요. 네 가지 메서드가 핵심이에요.

  • mget(key: Sequence[str]) -> List[Optional[bytes]]: 여러 키의 내용을 가져와요. 키가 없으면 None이 돌아와요.
  • mset(key_value_pairs: Sequence[Tuple[str, bytes]]) -> None: 여러 키에 값을 저장해요.
  • mdelete(key: Sequence[str]) -> None: 여러 키를 삭제해요.
  • yield_keys(prefix: Optional[str] = None) -> Iterator[str]: 저장소의 모든 키를 하나씩 돌려줘요. prefix를 주면 그 접두사로 시작하는 키만 골라줘요.

기본 스토어는 효율을 위해 한 번에 여러 키-값 쌍을 다루도록 설계됐어요. 이렇게 하면 네트워크 왕복이 줄고, 기반 저장소에서 더 효율적인 배치 연산을 쓸 수 있거든요.

로컬 개발용 내장 저장소

개발할 때 바로 꺼내 쓸 수 있는 내장 구현이 두 개 있어요.

  • InMemoryByteStore — 메모리에만 저장하는 비영속 저장소예요. 간단한 데모나 프로세스가 끝나면 사라져도 괜찮은 상황에 맞아요.
  • LocalFileStore — 지정한 폴더에 파일로 저장하는 영속 저장소예요. 단일 머신에서 쓰고 파일이 추가·삭제되는 걸 감수할 수 있다면 좋아요.

커스텀 저장소

BaseStore 클래스를 상속하면 나만의 커스텀 스토어도 만들 수 있어요. 자세한 내용은 스토어 인터페이스 문서를 참고하면 돼요.

쓸 수 있는 저장소들

LangChain에서 지원하는 키-값 저장소는 꽤 다양해요. 대표적으로 ElasticsearchEmbeddingsCache, AstraDBByteStore, BigtableByteStore, InMemoryByteStore, LocalFileStore 등이 있고, 커뮤니티에서 제공하는 M3Store, OmemStore, HindsightStore 같은 것들도 있어요. 저장소마다 로컬 실행 여부와 패키지가 다르니, 용도에 맞게 고르면 돼요.

더 알아보기 (Learn more)