Python 버전 확인 명령어
python --version
또는
python3 --version
Python 다운로드 링크
설치 시 주의 사항
설치 시 "Add Python to PATH" 옵션 체크 필수
설치 완료 후 확인 방법
VSCode에서 다음 명령어로 설치 확인
python --version
pip install faiss-cpu weaviate-client pymilvus pinecone-client
import faiss
import weaviate
import pymilvus
import pinecone
print("벡터 DB 라이브러리 설치 완료!")
필수 요구 사항 : Python 3.10.x 권장 + pip 최신 버전 + 가상환경(Virtual Environment) 사용
Python 버전 확인
python --version
pip 최신 버전으로 업데이트
python -m pip install --upgrade pip
가상환경 생성 및 활성화 (venv 사용)
python -m venv chromadb_env
.\chromadb_env\Scripts\Activate
ChromaDB 설치
pip install chromadb
import chromadb
# Chroma DB 인스턴스 생성
chroma_client = chromadb.PersistentClient(path="./chroma_db")
# 컬렉션 생성 (벡터를 저장할 공간)
collection = chroma_client.get_or_create_collection(name="test_collection")
# 데이터 추가 (텍스트와 벡터)
collection.add(
documents=["Hello World", "Artificial Intelligence", "벡터 Databases are cool!"],
metadatas=[{"source": "A"}, {"source": "B"}, {"source": "C"}],
ids=["doc1", "doc2", "doc3"]
)
# 검색 테스트 (유사한 문서 찾기)
results = collection.query(
query_texts=["AI"],
n_results=2
)
print("검색 결과:", results)
벡터 DB Collection = RDB 테이블 = 엑셀 시트…
Collection은 RDB의 테이블과 같은 역할로 데이터를 저장할 수 있는 저장소
벡터 데이터와 그와 관련된 메타데이터를 논리적으로 그룹화한 데이터 집합
벡터, 메타데이터, ID = RDB 테이블 컬럼…
벡터(Vector): 컬렉션에 저장되는 고차원 벡터 값, 각 데이터의 임베딩(embedding) 정보
ID: 각 벡터의 고유한 식별자, 이름 등을 통해 특정 벡터를 조회하거나 업데이트 가능
메타데이터(Metadata): 벡터에 추가로 연결된 정보로, JSON 형식의 데이터
(예: 한국어 위키의 각 제목, 작성자 등)
문서(Document): 컬렉션에서 추가적으로 저장되는 문서 형식의 데이터
URI: 컬렉션에 추가적으로 저장하기 어려운 이미지나 음성 등의 데이터 경로
client.count_collections()
→ Collection 개수 조회client.list_collections()
→ Collection 목록 조회client.delete_collection(name="height_weight")
→ Collection 삭제 → 해당 Collection이 존재하지 않으면 오류 발생client.get_or_create_collection(
name="chroma_tutorial",
metadata={
"hnsw:space": "cosine"
}
)
"hnsw:space"
옵션을 통해 l2
, ip
, cosine
등 검색 방법 지정 가능metadata={"hnsw:space": "cosine"}
설명이 설정은 HNSW(탐색 알고리즘)를 사용할 때 어떤 거리 측정 방식(search metric)을 사용할지를 지정합니다.
값 | 의미 | 설명 |
---|---|---|
"l2" | L2 거리 (유클리드 거리) | 두 벡터 간의 직선 거리로, 물리적 거리 기반 비교 |
"ip" | Inner Product (내적) | 값이 클수록 유사하다고 판단. 보통 정규화된 벡터에 사용 |
"cosine" | 코사인 유사도 | 각도 기반의 유사도, 값이 클수록 방향이 유사 (0도 → 완전 유사) |
collection.add(
ids=id_list,
embeddings=embedding_list,
metadatas=metadata_list,
documents=doc_list,
uris=uri_list
)
각 인자의 의미:
ids=id_list
→ 유일한 구분자. 중복 입력 불가embeddings=embedding_list
→ 특정 벡터 목록. 고차원 임베딩 벡터들을 직접 지정metadatas=metadata_list
→ 원본 데이터의 메타데이터. Dict 형식으로 입력 (예: 출처, 카테고리 등)documents=doc_list
→ 특정 벡터를 생성하기 위한 문서 텍스트uris=uri_list
→ 이미지, 음성 등과 같이 컬렉션에 직접 저장하기 어려운 데이터의 경로이 중 최소한 ids
와 documents
또는 embeddings
는 필수입니다. 둘 다 없으면 벡터 추가가 불가능합니다.
collection.count()
→ 데이터 개수 조회
collection.get(
offset=0, # 데이터 시작 위치
limit=3, # 조회할 데이터 개수
where={"키": {"$gte": 170}}, # Metadata 검색 조건
where_document={"$contains": "name"} # Document 검색 조건
)
$contains
: 문자열 포함$not_contains
: 문자열 포함하지 않음$and
: and 조건$or
: or 조건$eq
: 동일 (문자열, 정수, 부동 소수점)$ne
: 동일하지 않음$gt
: 큼 (정수, 부동 소수점)$gte
: 크거나 같음$lt
: 작음$lte
: 작거나 같음collection.query(
[183, 78], # 유사도를 검색할 특정 벡터
where={"키": {"$gte": 170}}, # Metadata 검색 조건
where_document=None, # Document 검색 조건
n_results=11, # 조회할 데이터 개수
include=['metadatas', 'embeddings'] # 검색 결과에 포함시킬 필드
)
collection.delete(
ids=None, # 삭제할 데이터 ID
where={"키": {"$lte": 170}}, # 삭제할 Metadata 조건
where_document={"$contains": "name"} # 삭제할 Document 조건
)
ids
: 삭제할 벡터의 ID 목록. None
이면 ID 조건 없이 삭제where
: 메타데이터를 기준으로 삭제할 조건 지정where_document
: 문서 내용을 기준으로 삭제할 조건 지정이 함수는 조건에 일치하는 데이터만 삭제하며, ID, 메타데이터, 문서 중 하나 이상으로 삭제 조건을 줄 수 있습니다.
sudo apt -y install postgresql
sudo apt -y install postgresql-server-dev-all gcc make
sudo service postgresql start
sudo -u postgres psql -U postgres -c "ALTER USER postgres PASSWORD 'postgres';"
위 명령어들은 Ubuntu 등 Debian 기반 리눅스 환경에서 PostgreSQL을 설치하고 기본 설정을 하는 데 사용됩니다.
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
sudo make install
CREATE EXTENSION IF NOT EXISTS vector;
위 단계를 따라 하면 PostgreSQL에서 벡터 유사도 검색을 수행할 수 있습니다.
CREATE TABLE IF NOT EXISTS height_weight (
username varchar(64) NOT NULL, -- 기존 RDB 필드
height real NOT NULL,
weight real NOT NULL,
embedding vector(2) NOT NULL -- 2차원 벡터를 저장할 수 있는 필드
);
username
, height
, weight
는 일반적인 관계형 데이터베이스(RDB) 필드embedding vector(2)
는 pgvector 확장을 통해 사용 가능한 2차원 벡터 필드[180.0, 75.0]
같은 벡터를 저장INSERT INTO height_weight VALUES (
'hong', -- 기존 RDB 입력과 동일
176.7,
72.2,
'[176.7, 72.2]' -- 벡터 입력 형식은 string 형식
);
username
, height
, weight
는 일반적인 RDB 필드 값embedding
필드에는 문자열 형태의 벡터를 입력 (예: '[값1, 값2]'
)pgvector
확장을 통해 벡터 형태로 저장됨SELECT * FROM height_weight
WHERE height > 177
ORDER BY embedding <-> '[183,78]'
LIMIT 11;
WHERE height > 177
→ 기존 RDB 조건과 동일하게 사용 가능ORDER BY embedding <-> '[183,78]'
→ embedding 벡터 필드를 기준으로 유사도 정렬연산자 | 의미 |
---|---|
<-> | L2 거리 (유클리드 거리) |
<+> | L1 거리 (맨해튼 거리) |
<#> | Dot-product (내적) |
<=> | Cosine similarity (코사인 유사도) |
위 쿼리는 pgvector를 사용하는 PostgreSQL에서 벡터 기반 최근접 이웃(NN) 검색을 수행하는 대표적인 방식입니다.