PGVectorStore는 postgres를 백엔드로 사용하는 LangChain vectorstore의 구현입니다.
이 노트북에서는 PGVectorStore API 사용 방법을 다룹니다.
코드는 langchain-postgres라는 integration 패키지에 있습니다.
설정
이 패키지는pgvector 확장이 포함된 PostgreSQL 데이터베이스가 필요합니다.
다음 명령을 실행하여 pgvector가 활성화된 Postgres 인스턴스용 컨테이너를 실행할 수 있습니다:
설치
integration 라이브러리langchain-postgres를 설치하세요.
Postgres 값 설정
이 노트북에서 Postgres 인스턴스를 대상으로 기능을 테스트할 수 있도록 Postgres 값을 설정하세요.초기화
PGEngine 연결 풀
PostgreSQL을 vector store로 설정하기 위한 요구 사항 및 인자 중 하나는PGEngine 객체입니다. PGEngine은 Postgres 데이터베이스에 대한 공유 connection pool을 구성합니다. 이는 연결 수를 관리하고 캐시된 데이터베이스 연결을 통해 대기 시간을 줄이기 위한 업계 모범 사례입니다.
PGVectorStore는 asyncpg 및 psycopg3 드라이버와 함께 사용할 수 있습니다.
PGEngine.from_connection_string()을 사용하여 PGEngine을 생성하려면 다음이 필요합니다:
url:postgresql+asyncpg드라이버를 사용하는 connection string.
PGEngine.from_engine()을 사용하여 PGEngine을 생성하려면 다음이 필요합니다:
engine:AsyncEngine객체
테이블 초기화
PGVectorStore 클래스는 데이터베이스 테이블을 필요로 합니다. PGEngine 엔진에는 올바른 스키마로 테이블을 생성하는 데 사용할 수 있는 ainit_vectorstore_table() 헬퍼 메서드가 있습니다.
스키마를 사용자 지정하려면 Create a custom Vector Store 또는 Create a Vector Store using existing table를 참고하세요.
선택 사항 팁: 💡
table_name을 전달하는 모든 곳에서 schema_name을 전달하여 스키마 이름도 지정할 수 있습니다. 예:
Embedding 클래스 인스턴스 생성
원하는 LangChain embeddings model을 사용할 수 있습니다.기본 PGVectorStore 초기화
기본 테이블 스키마를 사용하여 vectorstore에 연결합니다. 스키마를 사용자 지정하려면 Create a custom Vector Store 또는 Create a Vector Store using existing table를 참고하세요.벡터 저장소 관리
문서 추가
벡터 저장소에 문서를 추가합니다. Metadata는 JSON 컬럼에 저장됩니다. 필터에 사용할 metadata를 저장하려면 “Create a custom Vector Store”를 참고하세요.텍스트 추가
문서로 구조화되지 않은 경우 텍스트를 vectorstore에 직접 추가하세요.문서 삭제
문서는 id를 사용하여 삭제할 수 있습니다.벡터 저장소 질의
문서 검색
자연어 쿼리를 사용하여 유사한 문서를 검색합니다.벡터로 문서 검색
벡터 embedding을 사용하여 유사한 문서를 검색합니다.인덱스 추가
vector indexes를 적용하여 벡터 검색 쿼리를 빠르게 합니다. 인덱스 이름을 제공하지 않으면 기본 인덱스 이름이 사용됩니다. 여러 인덱스를 추가하려면 서로 다른 인덱스 이름이 필요합니다.재인덱싱
인덱스의 테이블에 저장된 데이터를 사용하여 인덱스를 다시 빌드하고 오래된 사본을 교체합니다. 일부 인덱스 유형은 상당한 양의 새로운 데이터가 추가된 후 재인덱싱이 필요할 수 있습니다.인덱스 삭제
벡터 인덱스를 제거합니다.사용자 지정 Vector Store 만들기
특별한 컬럼 이름이나 사용자 지정 metadata 컬럼으로 vectorstore를 사용자 지정합니다.ainit_vectorstore_table
content_column,embedding_column,metadata_columns,metadata_json_column,id_column필드를 사용하여 컬럼 이름을 변경합니다.- 사용자 지정 id 또는 metadata 컬럼을 만들려면
Column클래스를 사용합니다. Column은 이름과 데이터 타입으로 정의됩니다. 모든 Postgres data type을 사용할 수 있습니다. - 추가 metadata를 저장하기 위해
store_metadata를 사용하여 JSON 컬럼을 생성합니다.
선택 사항 팁: 💡
uuid가 아닌 id를 사용하려면 id 컬럼을 사용자 지정해야 합니다:PGVectorStore
content_column,embedding_column,metadata_columns,metadata_json_column,id_column필드를 사용하여 컬럼 이름을 변경합니다.ignore_metadata_columns를 사용하여 Document metadata에 사용되지 않아야 하는 컬럼을 무시합니다. 이는 기존 테이블을 사용할 때 모든 데이터 컬럼이 필요하지 않은 경우에 유용합니다.- 벡터 검색 중 유사도 계산에 대해 다른
distance_strategy를 사용합니다. - 벡터 검색 중 로컬 인덱스 파라미터를 튜닝하려면
index_query_options를 사용합니다.
메타데이터 필터로 문서 검색
Vector Store는 관계형 데이터를 활용하여 유사도 검색을 필터링할 수 있습니다. vectorstore는 문서의 metadata 필드에 적용할 수 있는 일련의 필터를 지원합니다. metadata 컬럼을 사용하도록 마이그레이션하는 방법에 대한 자세한 내용은 migration guide를 참고하세요.PGVectorStore는 현재 다음 연산자와 모든 Postgres 데이터 타입을 지원합니다.
| 연산자 | 의미/범주 |
|---|---|
| $eq | 동등 (==) |
| $ne | 비동등 (!=) |
| $lt | 미만 (<) |
| $lte | 이하 (<=) |
| $gt | 초과 (>) |
| $gte | 이상 (>=) |
| $in | 특수 처리 (in) |
| $nin | 특수 처리 (not in) |
| $between | 특수 처리 (between) |
| $exists | 특수 처리 (is null) |
| $like | 텍스트 (like) |
| $ilike | 텍스트 (대소문자 무시 like) |
| $and | 논리 (and) |
| $or | 논리 (or) |
기존 테이블을 사용하여 Vector Store 만들기
기존 테이블 위에 Vector Store를 구축할 수 있습니다. PG DB에 미리 존재하는 테이블products가 있고, eComm 벤처를 위한 제품 상세 정보를 저장한다고 가정합니다.
이 테이블을 PGVectorStore에 매핑하는 방법은 다음과 같습니다:
-
id_column="product_id": ID 컬럼은 products 테이블의 각 행을 고유하게 식별합니다. -
content_column="description":description컬럼에는 각 제품의 텍스트 설명이 들어 있습니다. 이 텍스트는embedding_service에 의해 벡터로 생성되어 embedding_column에 저장되고, 각 설명의 의미를 표현합니다. -
embedding_column="embed":embed컬럼은 제품 설명에서 생성된 벡터를 저장합니다. 이 벡터는 유사한 설명을 가진 제품을 찾는 데 사용됩니다. -
metadata_columns=["name", "category", "price_usd", "quantity", "sku", "image_url"]: 이 컬럼들은 각 제품의 metadata로 취급됩니다. Metadata는 제품 이름, 카테고리, 가격, 재고 수량, SKU(Stock Keeping Unit), 이미지 URL 등 추가 정보를 제공합니다. 이 정보는 검색 결과에 제품 세부 정보를 표시하거나 필터링 및 분류에 유용합니다. -
metadata_json_column="metadata":metadata컬럼은 제품에 대한 추가 정보를 유연한 JSON 형식으로 저장할 수 있습니다. 표준 컬럼에 맞지 않는 다양한 복잡한 데이터를 저장하는 데 유용합니다.
-
선택 사항:
embed컬럼이 새로 생성되었거나 embedding 모델이 지원하는 차원과 다른 경우, 기존 레코드에 대해 임시로 embedding을 추가해야 합니다. 예:ALTER TABLE products ADD COLUMN embed vector(768) DEFAULT NULL -
새 레코드는
VectorStore를 통해 추가되면 embedding이 자동으로 생성됩니다.
정리
⚠️ 경고: 이 작업은 되돌릴 수 없습니다 vector store 테이블을 드롭합니다.검색 증강 생성(RAG) 사용법
이 vector store를 검색 증강 생성(RAG)에 사용하는 방법에 대한 가이드는 다음 섹션을 참고하세요:API 참고 문서
모든 VectorStore 기능 및 구성에 대한 자세한 문서는 API 참고 문서를 확인하세요: python.langchain.com/api_reference/postgres/v2/langchain_postgres.v2.vectorstores.PGVectorStore.htmlConnect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.