Google Memorystore for Redis는 Redis 인메모리 데이터 스토어를 기반으로 하는 완전 관리형 서비스로, 밀리초 미만의 데이터 액세스를 제공하는 애플리케이션 캐시를 구축할 수 있습니다. Memorystore for Redis의 LangChain 통합을 활용하여 AI 기반 경험을 구축하도록 데이터베이스 애플리케이션을 확장하세요.
이 노트북은 Memorystore for Redis를 사용하여 MemorystoreDocumentLoaderMemorystoreDocumentSaverlangchain 문서를 저장, 로드 및 삭제하는 방법을 다룹니다. GitHub에서 패키지에 대해 자세히 알아보세요. Open In Colab

시작하기 전에

이 노트북을 실행하려면 다음을 수행해야 합니다: 이 노트북의 런타임 환경에서 데이터베이스에 대한 액세스를 확인한 후, 다음 값을 입력하고 예제 스크립트를 실행하기 전에 셀을 실행하세요.
# @markdown Please specify an endpoint associated with the instance and a key prefix for demo purpose.
ENDPOINT = "redis://127.0.0.1:6379"  # @param {type:"string"}
KEY_PREFIX = "doc:"  # @param {type:"string"}

🦜🔗 라이브러리 설치

이 통합은 자체 langchain-google-memorystore-redis 패키지에 있으므로 설치해야 합니다.
pip install -upgrade --quiet langchain-google-memorystore-redis
Colab 전용: 다음 셀의 주석을 해제하여 커널을 재시작하거나 버튼을 사용하여 커널을 재시작하세요. Vertex AI Workbench의 경우 상단의 버튼을 사용하여 터미널을 재시작할 수 있습니다.
# # Automatically restart kernel after installs so that your environment can access the new packages
# import IPython

# app = IPython.Application.instance()
# app.kernel.do_shutdown(True)

☁ Google Cloud Project 설정

이 노트북 내에서 Google Cloud 리소스를 활용할 수 있도록 Google Cloud 프로젝트를 설정하세요. 프로젝트 ID를 모르는 경우 다음을 시도해보세요:
  • gcloud config list를 실행하세요.
  • gcloud projects list를 실행하세요.
  • 지원 페이지를 참조하세요: 프로젝트 ID 찾기.
# @markdown Please fill in the value below with your Google Cloud project ID and then run the cell.

PROJECT_ID = "my-project-id"  # @param {type:"string"}

# Set the project id
!gcloud config set project {PROJECT_ID}

🔐 인증

Google Cloud Project에 액세스하기 위해 이 노트북에 로그인한 IAM 사용자로 Google Cloud에 인증하세요.
  • Colab을 사용하여 이 노트북을 실행하는 경우 아래 셀을 사용하고 계속 진행하세요.
  • Vertex AI Workbench를 사용하는 경우 여기에서 설정 지침을 확인하세요.
from google.colab import auth

auth.authenticate_user()

기본 사용법

문서 저장

MemorystoreDocumentSaver.add_documents(<documents>)로 langchain 문서를 저장하세요. MemorystoreDocumentSaver 클래스를 초기화하려면 다음 2가지가 필요합니다:
  1. client - redis.Redis client 객체.
  2. key_prefix - Redis에 Documents를 저장하기 위한 키의 prefix.
Documents는 key_prefix로 지정된 prefix를 가진 무작위로 생성된 키에 저장됩니다. 또는 add_documents 메서드에서 ids를 지정하여 키의 suffix를 지정할 수 있습니다.
import redis
from langchain_core.documents import Document
from langchain_google_memorystore_redis import MemorystoreDocumentSaver

test_docs = [
    Document(
        page_content="Apple Granny Smith 150 0.99 1",
        metadata={"fruit_id": 1},
    ),
    Document(
        page_content="Banana Cavendish 200 0.59 0",
        metadata={"fruit_id": 2},
    ),
    Document(
        page_content="Orange Navel 80 1.29 1",
        metadata={"fruit_id": 3},
    ),
]
doc_ids = [f"{i}" for i in range(len(test_docs))]

redis_client = redis.from_url(ENDPOINT)
saver = MemorystoreDocumentSaver(
    client=redis_client,
    key_prefix=KEY_PREFIX,
    content_field="page_content",
)
saver.add_documents(test_docs, ids=doc_ids)

문서 로드

특정 prefix로 Memorystore for Redis 인스턴스에 저장된 모든 문서를 로드하는 loader를 초기화하세요. MemorystoreDocumentLoader.load() 또는 MemorystoreDocumentLoader.lazy_load()로 langchain 문서를 로드하세요. lazy_load는 반복 중에만 데이터베이스를 쿼리하는 generator를 반환합니다. MemorystoreDocumentLoader 클래스를 초기화하려면 다음이 필요합니다:
  1. client - redis.Redis client 객체.
  2. key_prefix - Redis에 Documents를 저장하기 위한 키의 prefix.
import redis
from langchain_google_memorystore_redis import MemorystoreDocumentLoader

redis_client = redis.from_url(ENDPOINT)
loader = MemorystoreDocumentLoader(
    client=redis_client,
    key_prefix=KEY_PREFIX,
    content_fields=set(["page_content"]),
)
for doc in loader.lazy_load():
    print("Loaded documents:", doc)

문서 삭제

MemorystoreDocumentSaver.delete()로 Memorystore for Redis 인스턴스에서 지정된 prefix를 가진 모든 키를 삭제하세요. 알고 있다면 키의 suffix를 지정할 수도 있습니다.
docs = loader.load()
print("Documents before delete:", docs)

saver.delete(ids=[0])
print("Documents after delete:", loader.load())

saver.delete()
print("Documents after delete all:", loader.load())

고급 사용법

Document Page Content 및 Metadata 커스터마이징

2개 이상의 content field로 loader를 초기화할 때, 로드된 Documents의 page_contentcontent_fields에 지정된 필드와 동일한 최상위 필드를 가진 JSON 인코딩된 문자열을 포함합니다. metadata_fields가 지정된 경우, 로드된 Documents의 metadata 필드는 지정된 metadata_fields와 동일한 최상위 필드만 가집니다. metadata 필드의 값 중 JSON 인코딩된 문자열로 저장된 값이 있는 경우, metadata 필드에 로드되기 전에 디코딩됩니다.
loader = MemorystoreDocumentLoader(
    client=redis_client,
    key_prefix=KEY_PREFIX,
    content_fields=set(["content_field_1", "content_field_2"]),
    metadata_fields=set(["title", "author"]),
)

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I