커스텀 스토어 사용하기
커스텀 스토어 사용하기
에이전트 배포에서 내장 Postgres 스토어를 커스텀 BaseStore 구현으로 교체해요.
LangSmith에 에이전트를 배포할 때 서버는 pgvector를 통한 선택적 벡터 검색이 있는 내장 Postgres 기반 장기 메모리 스토어를 제공해요. 이를 다른 스토리지 백엔드, 커스텀 인덱싱 또는 특수 검색 기능을 사용하기 위해 자체 BaseStore 구현으로 교체할 수 있어요.
BaseStore 인스턴스를 생성(yield)하는 비동기 컨텍스트 매니저에 대한 경로를 제공하면 서버가 스토어의 수명 주기를 자동으로 관리해요.
커스텀 스토어는 알파 단계예요. 이 기능은 마이너 버전 업데이트에서 호환되지 않는 변경이 발생할 수 있어요.
출처: 문서
본문
스토어 정의하기
기존 LangSmith 애플리케이션에서 시작해, 커스텀 스토어를 생성하는 비동기 컨텍스트 매니저를 정의하는 파일을 만드세요. 새 프로젝트를 시작한다면 CLI를 사용해 템플릿에서 앱을 만들 수 있어요.
langgraph new --template=new-langgraph-project-python my_new_project
비동기 컨텍스트 매니저 패턴을 통해 서버는 애플리케이션 수명 주기의 적절한 지점에서 스토어 연결을 열고 닫을 수 있어요. 다음 예시는 의미 검색(semantic search)이 있는 AsyncSqliteStore를 사용해요:
SQLite는 프로덕션 배포에 권장되지 않아요.
# ./src/agent/store.py
import contextlib
from langchain.embeddings import init_embeddings
from langgraph.store.base import IndexConfig
from langgraph.store.sqlite import AsyncSqliteStore
embeddings = init_embeddings("openai:text-embedding-3-small")
@contextlib.asynccontextmanager
async def generate_store():
"""Yield a BaseStore, open for the duration of the server."""
async with AsyncSqliteStore.from_conn_string(
"./custom_store.sql",
index=IndexConfig(
dims=1536,
embed=embeddings,
fields=["$"],
),
) as store:
await store.setup()
yield store
커스텀 스토어가 구성되면 내장 Postgres 스토어를 완전히 대체해요. 의미 검색과 TTL 스위핑 같은 기능은 구현에 따라 달라져요.
langgraph.json 구성하기
langgraph.json 구성 파일에 store 키를 추가하세요. path는 앞서 정의한 비동기 컨텍스트 매니저를 가리켜요.
{
"dependencies": ["."],
"graphs": {
"agent": "./src/agent/graph.py:graph"
},
"env": ".env",
"store": {
"path": "./src/agent/store.py:generate_store"
}
}
서버 시작
서버를 로컬에서 테스트하세요:
langgraph dev --no-browser
서버 로그에 커스텀 스토어가 활성화되었는지 확인할 수 있어요:
Using custom store. Skipping store TTL sweeper.
배포
이 앱을 그대로 LangSmith나 셀프 호스팅 플랫폼에 배포할 수 있어요.
다음 단계
- 내장 체크포인트 저장소를 교체하려면 커스텀 체크포인터 사용.
- LangGraph의 영속성 및 메모리에 대해 알아보기.