vectordb
는 Pythonic 벡터 데이터베이스로 샤딩 및 복제를 포함한 포괄적인 CRUD(생성, 읽기, 업데이트, 삭제) 작업 제품군과 강력한 확장성 옵션을 제공합니다. 로컬부터 온프레미스, 클라우드까지 다양한 환경에 쉽게 배포할 수 있습니다. vectordb
더도 덜도 말고 딱 필요한 것을 제공합니다. 이는 과도한 엔지니어링 없이 효과적인 Python 설계를 통해 모든 요구 사항을 충족할 수 있는 간소하면서도 강력한 솔루션을 제공한다는 증거입니다.
vectordb
DocArray의 강력한 검색 능력과 Jina의 확장성, 신뢰성 및 서비스 기능을 활용합니다. 여기에 마법이 있습니다. DocArray는 벡터 검색 논리를 구동하는 엔진 역할을 하고 Jina는 효율적이고 확장 가능한 인덱스 제공을 보장합니다. 이러한 시너지 효과는 강력하면서도 사용자 친화적인 벡터 데이터베이스 경험으로 귀결됩니다. 이것이 바로 vectordb
입니다.
pip 설치 벡터DB
vectordb
시작하기DocArray 데이터 클래스 구문을 사용하여 문서 스키마를 정의하여 작업을 시작하십시오.
from docarray import BaseDocfrom docarray.typing import NdArrayclass ToyDoc(BaseDoc): 텍스트: str = '' 임베딩: NdArray[128]
InMemoryExactNNVectorDB
또는 HNSWVectorDB
와 같은 사전 구축된 데이터베이스를 선택하고 스키마를 적용합니다.
from docarray import DocListimport numpy as npfrom vectordb import InMemoryExactNNVectorDB, HNSWVectorDB# 작업 공간 경로 지정db = InMemoryExactNNVectorDB[ToyDoc](workspace='./workspace_path')# 무작위 임베딩이 포함된 문서 목록 색인화 doc_list = [ToyDoc(text=f'toy doc {나}', embedding=np.random.rand(128)) for i in range(1000)]db.index(inputs=DocList[ToyDoc](doc_list))# 검색 쿼리 수행query = ToyDoc(text='query', embedding=np .random.rand(128))results = db.search(inputs=DocList[ToyDoc]([쿼리]), Limit=10)# 결과에서 m에 대한 일치 항목을 인쇄합니다.[0].matches: print(m)
단일 쿼리를 실행했으므로 results
하나의 요소만 포함됩니다. 가장 가까운 이웃 검색 결과는 .matches
속성에 편리하게 저장됩니다.
vectordb
를 서비스로 시작하기 vectordb
는 gRPC
, HTTP
및 Websocket
통신 프로토콜을 지원하는 서비스로 쉽게 제공되도록 설계되었습니다.
서버 측에서는 다음과 같이 서비스를 시작합니다.
db.serve(protocol='grpc', port=12345, Replicas=1, shards=1)를 서비스로 사용: service.block()
이 명령은 복제본 1
샤드 1
있는 gRPC
프로토콜을 사용하여 포트 12345
에서 vectordb
서비스로 시작합니다.
클라이언트 측에서는 다음 명령을 사용하여 서비스에 액세스할 수 있습니다.
from vectordb import Client# 서버에 연결된 클라이언트를 인스턴스화합니다. 실제로는 0.0.0.0을 서버 IP 주소로 바꿉니다.client = Client[ToyDoc](address='grpc://0.0.0.0:12345')# 검색 쿼리를 수행합니다results = client.search(inputs=DocList[ToyDoc] ([쿼리]), 제한=10)
이를 통해 검색 쿼리를 수행하고 원격 vectordb
서비스에서 직접 결과를 받을 수 있습니다.
vectordb
호스팅 vectordb
인스턴스를 Jina AI Cloud에 원활하게 배포할 수 있으므로 어느 위치에서나 데이터베이스에 액세스할 수 있습니다.
데이터베이스 인스턴스나 클래스를 Python 파일에 포함시키는 것부터 시작하세요.
# example.pyfrom docarray import BaseDocfrom vectordb import InMemoryExactNNVectorDBdb = InMemoryExactNNVectorDB[ToyDoc](workspace='./Vectordb') # 어떻게 `db`가 우리가 제공하려는 인스턴스인지 확인하세요if __name__ == '__main__':# 중요: 확인하세요 __main__ Guard와 db.serve()를 service:service.block()으로 사용하여 코드의 이 부분을 보호합니다.
다음으로, 다음 단계에 따라 인스턴스를 배포하세요.
아직 가입하지 않았다면 Jina AI Cloud 계정에 가입하세요.
jc
명령줄을 사용하여 Jina AI Cloud 계정에 로그인하세요.
jc 로그인
인스턴스를 배포합니다.
벡터db 배포 --db 예:db
배포 후 vectordb
클라이언트를 사용하여 할당된 엔드포인트에 액세스합니다.
from vectordb import Client# 위 스크린샷에 표시된 대로 ID를 배포된 DB의 ID로 바꿉니다.c = Client(address='grpcs://ID.wolf.jina.ai')
그런 다음 jc
명령을 사용하여 배포된 DB를 나열, 일시 중지, 재개 또는 삭제할 수 있습니다.
jcloud list ID
jcloud pause ID
또는 jcloud resume ID
jcloud remove ID
벡터 데이터베이스는 임베딩을 위한 정교한 저장소 역할을 하며 서로 다른 개체 간의 의미적 유사성의 본질을 포착합니다. 이러한 데이터베이스는 수많은 다중 모드 데이터 유형에 대한 유사성 검색을 촉진하여 정보 검색의 새로운 시대를 열어줍니다. 벡터 데이터베이스는 상황에 맞는 이해를 제공하고 생성 결과를 풍부하게 함으로써 언어 학습 모델(LLM)의 성능과 유용성을 크게 향상시킵니다. 이는 데이터 과학 및 기계 학습 애플리케이션의 발전에서 중추적인 역할을 강조합니다.
로컬 라이브러리 사용과 vectordb
의 클라이언트-서버 상호 작용은 모두 동일한 API를 공유합니다. 이는 index
, search
, update
및 delete
기능을 제공합니다.
index
: 색인을 생성할 DocList
허용합니다.
search
: 일괄 쿼리의 DocList
또는 단일 BaseDoc
단일 쿼리로 사용합니다. 단일 또는 여러 결과를 반환하며, 각 결과는 relevance
에 따라 정렬된 matches
및 scores
속성을 포함합니다.
delete
: 색인에서 제거할 문서의 DocList
허용합니다. id
속성만 필요하므로 문서를 삭제해야 하는 경우에는 indexed
IDs
추적해야 합니다.
update
: 색인에서 업데이트할 문서의 DocList
허용합니다. update
작업은 indexed
문서를 입력 문서의 속성 및 페이로드와 동일한 인덱스로 대체합니다.
다음 매개변수를 사용하여 클라이언트에서 vectordb
제공하고 이에 액세스할 수 있습니다.
프로토콜: 제공 프로토콜입니다. gRPC
, HTTP
, websocket
또는 이들의 조합이 목록으로 제공될 수 있습니다. 기본값은 gRPC
입니다.
포트: 서비스 액세스 포트입니다. 제공된 각 프로토콜에 대한 포트 목록일 수 있습니다. 기본값은 8081입니다.
작업 공간: VectorDB가 필요한 데이터를 유지하는 경로입니다. 기본값은 '.'입니다. (현재 디렉토리).
vectordb
사용하여 벡터 데이터베이스를 제공하거나 배포할 때 두 가지 확장 매개변수를 설정할 수 있습니다.
샤드: 데이터 샤드 수입니다. vectordb
문서가 샤드 중 하나만 인덱싱되도록 보장하므로 대기 시간이 향상됩니다. 검색 요청은 모든 샤드에 전송되고 결과가 병합됩니다.
복제본: DB 복제본 수입니다. vectordb
RAFT 알고리즘을 사용하여 각 샤드의 복제본 간에 인덱스를 동기화합니다. CRUD 작업을 허용하면서 여러 복제본이 더 많은 검색 요청에 병렬로 응답할 수 있으므로 서비스 가용성과 검색 처리량이 증가합니다. 참고: JCloud 배포에서는 복제본 수가 1로 설정됩니다. 클라우드에서 복제를 활성화하기 위해 노력하고 있습니다.
각 VectorDB
유형에 대한 매개변수는 다음과 같습니다.
이 데이터베이스는 임베딩에 대한 철저한 검색을 수행하며 구성 설정이 제한되어 있습니다.
workspace
: 필요한 데이터가 유지되는 폴더입니다.
InMemoryExactNNVectorDB[MyDoc](workspace='./Vectordb')InMemoryExactNNVectorDB[MyDoc].serve(workspace='./Vectordb')
이 데이터베이스는 Approximate Nearest Neighbor 검색을 위해 HNSWLib의 HNSW(Hierarchical Navigable Small World) 알고리즘을 사용합니다. 다음과 같은 여러 구성 옵션을 제공합니다.
workspace
: 필수 데이터가 저장되고 유지되는 디렉터리를 지정합니다.
또한 HNSWVectorDB는 Nearest Neighbor 검색 알고리즘의 성능과 정확성을 조정할 수 있는 일련의 구성을 제공합니다. 이러한 구성에 대한 자세한 설명은 HNSWLib README에서 확인할 수 있습니다.
space
: 공간에 사용되는 유사성 메트릭을 지정합니다(옵션은 "l2", "ip" 또는 "cosine"임). 기본값은 "l2"입니다.
max_elements
: 동적으로 늘릴 수 있는 인덱스의 초기 용량을 설정합니다. 기본값은 1024입니다.
ef_construction
: 이 매개변수는 인덱스 생성 중 속도/정확도 균형을 제어합니다. 기본값은 200입니다.
ef
: 이 매개변수는 쿼리 시간/정확도 균형을 제어합니다. 기본값은 10입니다.
M
: 이 매개변수는 그래프에서 나가는 연결의 최대 수를 정의합니다. 기본값은 16입니다.
allow_replace_deleted
: True
로 설정하면 삭제된 요소를 새로 추가된 요소로 교체할 수 있습니다. 기본값은 False
입니다.
num_threads
: index
및 search
작업 중에 사용할 기본 스레드 수를 설정합니다. 기본값은 1입니다.
vectordb
에는 데이터베이스 제공 및 배포를 위한 간단한 CLI가 포함되어 있습니다.
설명 | 명령 |
---|---|
DB를 로컬로 제공 | vectordb serve --db example:db |
Jina AI Cloud에 DB 배포 | vectordb deploy --db example:db |
사용자 친화적인 인터페이스: vectordb
에서는 단순성이 핵심입니다. 직관적인 인터페이스는 다양한 수준의 전문 지식을 갖춘 사용자를 수용할 수 있도록 설계되었습니다.
최소한의 디자인: vectordb
불필요한 복잡성 없이 모든 필수 요소를 담고 있습니다. 로컬에서 서버 및 클라우드 배포로의 원활한 전환을 보장합니다.
전체 CRUD 지원: 인덱싱 및 검색부터 업데이트 및 삭제에 이르기까지 vectordb
CRUD 작업의 전체 스펙트럼을 포괄합니다.
서비스형 DB: vectordb
사용하여 gRPC, HTTP 및 Websocket 프로토콜의 성능을 활용하세요. 이를 통해 데이터베이스를 제공하고 삽입 또는 검색 작업을 효율적으로 수행할 수 있습니다.
확장성: 샤딩 및 복제와 같은 강력한 확장성 기능을 포함하여 vectordb
배포 기능의 강력한 성능을 경험해 보세요. 샤딩을 통해 서비스 대기 시간을 개선하고, 복제를 통해 가용성과 처리량을 향상하세요.
클라우드 배포: Jina AI Cloud를 사용하면 클라우드에 서비스를 쉽게 배포할 수 있습니다. 더 많은 배포 옵션이 곧 제공될 예정입니다!
서버리스 기능: vectordb
클라우드에서 서버리스 모드로 배포할 수 있어 필요에 따라 최적의 리소스 활용도와 데이터 가용성을 보장합니다.
다중 ANN 알고리즘: vectordb
ANN(Approximate Nearest Neighbors) 알고리즘의 다양한 구현을 제공합니다. 현재 제공되는 제품은 다음과 같습니다. 더 많은 통합이 예정되어 있습니다.
InMemoryExactNNVectorDB(정확한 NN 검색): 간단한 최근접 이웃 알고리즘을 구현합니다.
HNSWVectorDB (HNSW 기반): HNSWLib 활용
Vector Database의 미래는 밝아 보이며 우리는 야심찬 계획을 가지고 있습니다! 현재 개발 중인 기능은 다음과 같습니다.
더 많은 ANN 검색 알고리즘: 우리의 목표는 훨씬 더 광범위한 ANN 검색 알고리즘을 지원하는 것입니다.
향상된 필터링 기능: 우리는 고급 필터링을 지원하기 위해 ANN 검색 솔루션을 개선하기 위해 노력하고 있습니다.
사용자 정의 가능성: 우리는 Python 개발자가 특정 요구 사항에 맞게 동작을 쉽게 조정할 수 있도록 vectordb
고도로 사용자 정의할 수 있도록 만드는 것을 목표로 합니다.
서버리스 용량 확장: 클라우드에서 vectordb
의 서버리스 용량을 향상시키기 위해 노력하고 있습니다. 현재는 0~1개 복제본 사이의 확장을 지원하지만 목표는 이를 0~N개 복제본으로 확장하는 것입니다.
확장된 배포 옵션: 우리는 광범위한 옵션을 통해 다양한 클라우드 플랫폼 전반에 걸쳐 vectordb
배포를 촉진하기 위해 적극적으로 노력하고 있습니다.
vectordb
에 대한 도움이 필요하십니까? 사용에 관심이 있지만 고유한 요구 사항을 충족하기 위해 특정 기능이 필요합니까? 주저하지 말고 우리에게 연락하세요. Discord 커뮤니티에 가입하여 우리 및 다른 커뮤니티 회원들과 채팅하세요.
VectorDB 프로젝트는 Jina AI의 지원을 받으며 Apache-2.0에 따라 라이센스가 부여됩니다. 커뮤니티의 기여에 큰 감사를 드립니다! 새로운 기능이나 개선 사항에 대한 아이디어가 있으시면 언제든지 알려주시기 바랍니다. 우리는 vectordb
보다 사용자 친화적이고 효과적으로 만드는 방법을 항상 찾고 있습니다.