View a markdown version of this page

LangChain에서 DynamoDB 사용 - Amazon DynamoDB

LangChain에서 DynamoDB 사용

LangChain은 대규모 언어 모델(LLM)로 애플리케이션을 구축하기 위한 프레임워크입니다. 두 LangChain 통합은 DynamoDB를 사용합니다. DynamoDBChatMessageHistory 클래스는 대화 기록을 저장하므로 모델이 세션 간에 사용자와 주고받을 수 있으며, DynamoDBVectorStore 클래스는 유사성 검색을 위해 DynamoDB 벡터 인덱스에 LangChain 벡터 스토어 인터페이스를 구현합니다.

채팅 메시지 기록

Python용 langchain-community 패키지와 JavaScript용 @langchain/community 패키지의 DynamoDBChatMessageHistory 클래스는 DynamoDB 테이블에 채팅 메시지를 유지합니다. 클래스에는 파티션 키가 SessionId라는 문자열 속성(primary_key_name을 통해 구성 가능)인 기존 테이블이 필요합니다. AWS CLI를 사용하여 테이블을 생성합니다.

aws dynamodb create-table \ --table-name SessionTable \ --attribute-definitions AttributeName=SessionId,AttributeType=S \ --key-schema AttributeName=SessionId,KeyType=HASH \ --billing-mode PAY_PER_REQUEST

패키지를 설치한 다음 세션 ID로 키가 지정된 기록을 읽고 씁니다.

pip install langchain-community boto3
from langchain_community.chat_message_histories import DynamoDBChatMessageHistory history = DynamoDBChatMessageHistory( table_name="SessionTable", session_id="user-42", ) history.add_user_message("Hello!") history.add_ai_message("How can I help you today?") print(history.messages)

각 채팅 세션의 메시지는 session_id에 저장되므로 다시 돌아오는 사용자는 중단한 대화를 이어서 진행할 수 있습니다. 또한 생성자는 사용자 ID(key), 이전 세션의 TTL(Time to Live) 기반 만료(ttl), 저장된 메시지의 한도(history_size)와 같은 애플리케이션 세부 정보를 기준으로 기록을 격리하기 위한 복합 키를 지원합니다. 전체 API는 Python 참조 및 JavaScript 참조를 참조하세요.

벡터 인덱스가 지원하는 벡터 스토어

langchain-aws 패키지의 DynamoDBVectorStore 클래스는 DynamoDB 벡터 인덱스를 사용하여 LangChain 벡터 스토어 인터페이스를 구현합니다(DynamoDB에서 벡터 인덱스 사용 참조). 문서는 일반 DynamoDB 항목으로 저장되고 SearchVectors API를 사용하여 테이블의 벡터 인덱스를 통해 검색되므로 LangChain 리트리버 및 RAG 체인은 데이터를 보관하는 테이블에 대해 직접 유사성 검색을 실행합니다.

패키지를 설치합니다.

pip install langchain-aws boto3

테이블 이름과 임베딩 함수를 제공합니다. 테이블 및 벡터 인덱스가 없는 경우 첫 번째 쓰기 시 생성됩니다.

from langchain_aws.embeddings import BedrockEmbeddings from langchain_aws.vectorstores.dynamodb import DynamoDBVectorStore vector_store = DynamoDBVectorStore.from_texts( ["hello", "developer", "wife"], embedding=BedrockEmbeddings(model_id="amazon.titan-embed-text-v2:0"), table_name="my-documents", ) docs = vector_store.similarity_search("greeting", k=2)

검색 범위를 지정하려면 스토어를 구성할 때 partition_attribute를 전달합니다. 그런 다음 벡터 인덱스는 해당 문서 메타데이터 필드에 검색 스키마 파티션 키를 사용하여 생성되며, 각 검색은 전체 코퍼스가 아닌 컬렉션, 범주 또는 테넌트와 같은 하나의 값만 검사합니다. 그런 다음 모든 검색은 filter={partition_attribute: value} 또는 저장소 수준 default_partition_value를 통해 값을 제공합니다. 파티션 키는 인덱스 스키마의 일부이며 인덱스가 생성된 후에는 변경할 수 없습니다.

다음 사항에 유의하세요:

  • 글로벌 보조 인덱스와 마찬가지로 벡터 인덱스는 최종적으로 일관됩니다. add_texts 바로 뒤에 실행된 검색에는 인덱스가 따라잡을 때까지 방금 작성된 문서가 포함되지 않을 수 있습니다.

  • SearchVectors는 쿼리당 최대 상위 100개 일치 항목을 반환하므로 스토어의 k 파라미터는 100개로 제한됩니다.

  • 인덱스의 차원, 거리 함수 및 검색 스키마는 생성 시 고정됩니다. 스토어는 불일치를 진행하지 않고 기존 인덱스에 대해 이를 검증합니다.

전체 API는 langchain-aws 리포지토리의 DynamoDBVectorStore를 참조하세요.

추가 리소스