Azure DocumentDB의 통합 벡터 데이터베이스를 사용하여 AZURE DocumentDB에 저장된 데이터와 AI 기반 애플리케이션을 원활하게 연결합니다. 이 통합에는 Azure OpenAI 포함을 사용하여 빌드한 앱이 포함될 수 있습니다. 고유하게 통합된 벡터 데이터베이스를 사용하면 벡터 데이터가 만들어진 원래 데이터와 함께 Azure DocumentDB에 직접 저장된 고차원 벡터 데이터를 효율적으로 저장, 인덱싱 및 쿼리할 수 있습니다. 데이터를 대체 벡터 저장소로 전송할 필요가 없으며 추가 비용이 발생합니다.
벡터 저장소란?
벡터 저장소 또는 벡터 데이터베이스는 벡터 포함을 저장하고 관리하도록 설계된 데이터베이스로, 높은 차원 공간에서 데이터의 수학 표현입니다. 이 공간에서 각 차원은 데이터의 기능에 해당하며, 정교한 데이터를 나타내기 위해 수만 개의 차원이 사용될 수 있습니다. 이 공간에서 벡터의 위치는 해당 특성을 나타냅니다. 단어, 구 또는 전체 문서, 이미지, 오디오 및 기타 유형의 데이터를 모두 벡터화할 수 있습니다.
벡터 저장소는 어떻게 작동하나요?
벡터 저장소에서는 벡터 검색 알고리즘을 사용하여 포함을 인덱싱하고 쿼리합니다. 잘 알려진 일부 벡터 검색 알고리즘에는 HNSW(계층적 탐색 가능 Small World), IVF(반전된 파일) 및 DiskANN이 포함됩니다. 벡터 검색은 속성 필드의 정확한 일치가 아닌 데이터 특성을 기반으로 유사한 항목을 찾는 데 도움이 되는 방법입니다. 이 기술은 유사한 텍스트 검색, 관련 이미지 찾기, 권장 사항 제공 또는 변칙 징후 검색과 같은 애플리케이션에 유용합니다. 기계 학습 모델을 사용하여 만든 데이터의 벡터 임베딩(숫자 목록)을 Embeddings API를 사용하여 쿼리하는 데 사용됩니다. 포함 API의 예로는 Azure OpenAI 포함 또는 Azure의 Hugging Face가 있습니다. 벡터 검색은 데이터 벡터와 쿼리 벡터 사이의 거리를 측정합니다. 쿼리 벡터에 가장 가까운 데이터 벡터는 의미상 가장 유사한 것으로 확인된 벡터입니다.
Azure DocumentDB의 통합 벡터 데이터베이스에서 원본 데이터와 함께 포함을 저장, 인덱싱 및 쿼리할 수 있습니다. 이 방식은 별도의 순수 벡터 데이터베이스에 데이터를 복제하는 데 드는 추가 비용을 제거합니다. 또한 이 아키텍처는 벡터 포함 및 원본 데이터를 함께 유지하므로 다중 모달 데이터 작업을 더 용이하게 하고 데이터 일관성, 크기 조정 및 성능을 높일 수 있습니다.
벡터 데이터베이스 사용 사례
벡터 데이터베이스는 AI 및 데이터 분석의 여러 영역에서 사용됩니다. 자연어 이해, 이미지 및 비디오 인식, 권장 사항 시스템 빌드 및 검색 기능 강화와 같은 작업을 지원합니다. 분석 AI 및 생성 AI 애플리케이션 모두에서 찾을 수 있습니다.
예를 들어 다음 경우에서 벡터 데이터베이스를 사용할 수 있습니다.
- 콘텐츠, 테마, 감정, 스타일을 기반으로 비슷한 이미지, 문서, 노래 식별.
- 특성, 기능, 사용자 그룹을 기반으로 유사한 제품 식별.
- 개인의 기본 설정에 따라 콘텐츠, 제품 또는 서비스를 추천합니다.
- 사용자 그룹의 유사성에 따라 콘텐츠, 제품 또는 서비스를 권장합니다.
- 복잡한 요구 사항을 충족하기 위해 선택 항목의 큰 풀에서 가장 적합한 잠재적 옵션을 식별합니다.
- 주 패턴 또는 일반 패턴과 다른 데이터 이상 또는 사기 활동 식별.
- AI 에이전트에 대한 영구 메모리를 구현합니다.
- RAG(검색 보강 생성)를 사용하도록 설정합니다.
통합 벡터 데이터베이스와 순수 벡터 데이터베이스 비교
두 가지 일반적인 유형의 벡터 데이터베이스 구현이 있습니다. 순수 벡터 데이터베이스와 NoSQL 또는 관계형 데이터베이스의 통합 벡터 데이터베이스입니다.
순수 벡터 데이터베이스는 소량의 메타데이터와 함께 벡터 포함을 효율적으로 저장하고 관리합니다. 임베딩이 파생된 데이터 원본과는 서로 다릅니다.
고성능 NoSQL 또는 관계형 데이터베이스에 통합되는 벡터 데이터베이스는 추가 기능을 제공합니다. NoSQL 또는 관계형 데이터베이스의 통합 벡터 데이터베이스 는 해당 원래 데이터와 함께 포함을 저장, 인덱싱 및 쿼리할 수 있습니다. 이 방식은 별도의 순수 벡터 데이터베이스에 데이터를 복제하는 데 드는 추가 비용을 제거합니다. 또한 벡터 포함 및 원본 데이터를 함께 유지하면 다중 모달 데이터 작업이 더 용이하고 데이터 일관성, 크기 조정 및 성능이 향상됩니다.
오픈 소스 벡터 데이터베이스
개발자가 벡터 데이터베이스를 선택할 때 오픈 소스 옵션은 다양한 이점을 제공합니다. 오픈 소스 는 소프트웨어의 소스 코드를 자유롭게 사용할 수 있으므로 사용자가 특정 요구 사항에 따라 데이터베이스를 사용자 지정할 수 있음을 의미합니다. 이러한 유연성은 금융 서비스 산업의 회사와 같이 데이터에 대한 고유한 규제 요구 사항이 적용되는 조직에 유용합니다.
오픈 소스 벡터 데이터베이스의 또 다른 이점은 강력한 커뮤니티 지원입니다. 활발한 사용자 커뮤니티는 종종 이러한 데이터베이스 개발에 기여하고, 지원을 제공하고, 모범 사례를 공유하여 혁신을 촉진합니다.
일부 개인은 "무료"이므로 오픈 소스 벡터 데이터베이스를 선택합니다. 즉, 소프트웨어를 획득하거나 사용하는 데 비용이 들지 않습니다. 다른 대안은 관리형 벡터 데이터베이스 서비스에서 제공하는 무료 계층을 사용하는 것입니다. 이러한 관리형 서비스는 특정 사용량 한도까지 액세스 권한을 비용 없이 제공할 뿐만 아니라 유지 관리, 업데이트, 스케일링 성능을 처리하여 운영 부담을 간소화합니다. 따라서 관리되는 벡터 데이터베이스 서비스의 무료 계층을 사용하여 관리 오버헤드를 줄이면서 비용을 절감할 수 있습니다. 이 방법을 사용하면 데이터베이스 관리보다는 핵심 활동에 더 집중할 수 있습니다.
최상의 오픈 소스 벡터 데이터베이스 선택
최상의 오픈 소스 벡터 데이터베이스를 선택하려면 몇 가지 요소를 고려해야 합니다. 데이터베이스가 특정 워크로드 요구 사항을 처리할 수 있는지 여부에 영향을 주므로 데이터베이스의 성능 및 확장성은 매우 중요합니다. 효율적인 인덱싱 및 쿼리 기능이 있는 데이터베이스는 일반적으로 최적의 성능을 제공합니다. 또 다른 요인은 데이터베이스에 사용할 수 있는 커뮤니티 지원 및 설명서입니다. 강력한 커뮤니티와 풍부한 설명서는 귀중한 지원을 제공할 수 있습니다. 예를 들어 DocumentDB 는 인기 있는 오픈 소스 벡터 데이터베이스입니다.
가장 인기 있는 옵션은 최상의 옵션이 아닐 수도 있습니다. 따라서 기능, 지원되는 데이터 형식 및 사용하는 기존 도구 및 프레임워크와의 호환성에 따라 다양한 옵션을 비교해야 합니다. 오픈 소스 벡터 데이터베이스의 문제도 염두에 두어야 합니다.
오픈 소스 벡터 데이터베이스의 문제점
이전에 나열된 데이터베이스를 포함하여 대부분의 오픈 소스 벡터 데이터베이스는 순수 벡터 데이터베이스입니다. 즉, 소량의 메타데이터와 함께 벡터 포함만 저장하고 관리하도록 설계되었습니다. 원래 데이터와는 별도로 작동하므로 서로 다른 서비스 간에 데이터를 이동해야 합니다. 이러한 복잡성으로 인해 추가 비용이 추가되고, 상황이 더 복잡해지며, 프로덕션 시스템의 속도가 느려질 수 있습니다.
또한 오픈 소스 데이터베이스의 일반적인 문제도 야기합니다.
- 설치: 특히 복잡한 배포의 경우 데이터베이스를 설치, 구성 및 운영하려면 심층적인 지식이 필요합니다. 작업을 스케일링 업하는 동안 리소스와 구성을 최적화하려면 면밀한 모니터링 및 조정이 필요합니다.
- 유지 관리: 고유한 업데이트, 패치 및 유지 관리를 관리해야 합니다. 기계 학습 전문 지식만으로는 충분하지 않습니다. 또한 데이터베이스 관리에 대한 광범위한 경험이 있어야 합니다.
- 지원: 공식 지원은 관리되는 서비스에 비해 제한될 수 있으며 커뮤니티 지원에 더 많이 의존할 수 있습니다.
따라서 처음에는 무료이지만 오픈 소스 벡터 데이터베이스는 스케일링 업할 때 상당한 비용이 발생합니다. 운영을 확장하려면 하드웨어, 숙련된 IT 직원, 고급 인프라 관리가 필요하므로 하드웨어, 인건비, 운영 비용이 더 많이 듭니다. 오픈 소스 벡터 데이터베이스의 스케일링은 라이선스 요금이 들지 않아도 재정적으로 부담이 될 수 있습니다.
오픈 소스 벡터 데이터베이스의 문제 해결
성능이 뛰어난 NoSQL 또는 관계형 데이터베이스에 통합되는 완전 관리형 벡터 데이터베이스는 오픈 소스 벡터 데이터베이스의 추가 비용과 복잡성을 방지합니다. 이러한 데이터베이스는 해당 원본 데이터와 함께 임베딩을 저장, 인덱싱 및 쿼리합니다. 이 방식은 별도의 순수 벡터 데이터베이스에 데이터를 복제하는 데 드는 추가 비용을 제거합니다. 또한 벡터 포함 및 원본 데이터를 함께 유지하면 다중 모달 데이터 작업이 더 용이하고 데이터 일관성, 크기 조정 및 성능이 향상됩니다. 한편, 완전 관리형 서비스를 사용하면 개발자가 오픈 소스 벡터 데이터베이스에 대한 커뮤니티 지원을 설정, 유지 관리 및 사용하는 번거로움을 방지할 수 있습니다. 또한 일부 관리되는 벡터 데이터베이스 서비스는 수명 무료 계층을 제공합니다.
예를 들어 Azure DocumentDB의 통합 벡터 데이터베이스가 있습니다. 이 설정을 통해 개발자는 오픈 소스 벡터 데이터베이스와 마찬가지로 비용을 절감할 수 있습니다. 그러나 오픈 소스 옵션과 달리 서비스 공급자는 유지 관리, 업데이트 및 크기 조정을 처리합니다. 업그레이드는 작업을 확장할 때 TCO(총 소유 비용)를 낮게 유지하면서 빠르고 쉽습니다. 이 서비스를 사용하여 이미 프로덕션 상태인 MongoDB 애플리케이션의 크기를 편리하게 조정할 수도 있습니다.
벡터 유사성 검색 수행
Azure DocumentDB는 강력한 벡터 검색 기능을 제공하므로 복잡한 데이터 세트 간에 고속 유사성 검색을 수행할 수 있습니다. Azure DocumentDB에서 벡터 검색을 수행하려면 먼저 벡터 인덱스 만들기가 필요합니다. Azure DocumentDB는 여러 옵션을 제공하지만 데이터 세트의 크기에 따라 시작하는 데 도움이 되는 몇 가지 일반적인 지침은 다음과 같습니다.
| IVF (주) | HNSW | DiskANN(권장) | |
|---|---|---|---|
| 설명 | IVFFlat 인덱스는 벡터를 목록으로 나눈 다음 쿼리 벡터에 가장 가까운 하위 집합을 검색합니다. | HNSW 인덱스는 다중 계층 그래프를 만듭니다. | DiskANN은 임의 규모에서 효율적인 벡터 검색을 위해 설계된 근사한 인접 검색 알고리즘입니다. |
| 주요 트레이드오프 |
프로: 빌드 시간이 빨라지고 메모리 사용량이 줄어듭니다. 단점: 쿼리 성능이 낮아집니다(속도-회수 간의 절충 측면에서). |
장점: 빈 테이블에 속도와 재호출을 고려한 더 나은 쿼리 성능을 구축할 수 있습니다. 죄수: 빌드 시간이 느리고 메모리 사용량이 높습니다. |
프로: 모든 규모에서 효율적, 높은 회수, 높은 처리량, 짧은 대기 시간. |
| 벡터 수 | 10,000 미만 | 최대 50,000개 | 최대 500,000+ |
| 권장 클러스터 계층 | M10 또는 M20 | M30 이상 | M30 이상 |
M30 이상 계층에서 DiskANN 인덱스를 사용할 수 있습니다. DiskANN 인덱을 만들려면 매개 변수를 "kind" 다음 템플릿으로 "vector-diskann" 설정합니다.
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"dimensions": <integer_value>,
"similarity": <string_value>,
"maxDegree" : <integer_value>,
"lBuild" : <integer_value>,
}
}
]
}
| 분야 | 유형 | Description |
|---|---|---|
index_name |
문자열 | 인덱스의 고유 이름입니다. |
path_to_property |
문자열 | 벡터가 포함된 속성의 경로입니다. 이 경로는 최상위 속성이거나 속성에 대한 점 표기법 경로일 수 있습니다. 벡터 검색 결과에 인덱싱되고 사용되려면 벡터가 number[]여야 합니다. 같은 double[]다른 형식을 사용하는 벡터는 문서가 인덱싱되지 않도록 합니다. 인덱스되지 않은 문서는 벡터 검색 결과로 반환되지 않습니다. |
kind |
문자열 | 만들 벡터 인덱스의 형식입니다. 옵션은 vector-ivf, vector-hnsw 및 vector-diskann입니다. |
dimensions |
integer | 벡터 유사성의 차원 수입니다. DiskANN은 최대 16,000개의 차원( 제품 양자화 포함)을 지원하며 향후 지원은 40,000개 이상에 대해 계획됩니다. |
similarity |
문자열 | 인덱스와 함께 사용할 유사성 메트릭입니다. 가능한 옵션은 COS(코사인 거리), L2(유클리드 거리) 및 IP(내적)입니다. |
maxDegree |
integer | 그래프의 노드당 최대 에지 수입니다. 이 매개 변수의 범위는 20~2048입니다(기본값은 32). 더 높은 maxDegree는 높은 차원 및/또는 높은 정확도 요구 사항이 있는 데이터 세트에 적합합니다. |
lBuild |
integer | DiskANN 인덱스 생성 중에 평가되는 후보 인접 항목의 수를 설정합니다. 10~500(기본값은 50) 범위의 이 매개 변수는 정확도와 계산 오버헤드의 균형을 맞춥니다. 값이 높을수록 인덱스 품질과 정확도가 개선되지만 빌드 시간은 늘어납니다. |
DiskANN으로 벡터 검색 수행
벡터 검색을 수행하려면 $search 집계 파이프라인 단계를 사용하고 cosmosSearch 연산자로 쿼리합니다. DiskANN을 사용하면 지리 공간적 또는 텍스트 기반 필터와 같은 선택적 필터링을 사용하여 대규모 데이터 세트 간에 고성능 검색을 수행할 수 있습니다.
{
"$search": {
"cosmosSearch": {
"path": "<path_to_property>",
"query": "<query_vector>",
"k": <num_results_to_return>,
"filter": {"$and": [
{ "<attribute_1>": { "$eq": <value> } },
{"<location_attribute>": {"$geoWithin": {"$centerSphere":[[<longitude_integer_value>, <latitude_integer_value>], <radius>]}}}
]}
}
}
},
| 분야 | 유형 | Description |
|---|---|---|
lSearch |
integer | 검색을 위한 동적 후보 목록의 크기를 지정합니다. 기본값은 40이며 구성 가능한 범위는 10에서 1000까지입니다. 값을 늘리면 회수가 향상되지만 검색 속도가 저하될 수 있습니다. |
k |
integer | 반환할 검색 결과의 수를 정의합니다.
k 값은 lSearch보다 작거나 같아야 합니다. |
필터링과 함께 DiskANN 인덱스 사용 예제
데이터베이스에 벡터 추가
지리 공간적 필터와 함께 벡터 검색을 사용하려면 벡터 포함과 위치 좌표를 모두 포함하는 문서를 추가합니다. 고유한 모델, Azure OpenAI 임베딩 또는 Azure의 Hugging Face와 같은 API를 사용하여 임베딩을 생성할 수 있습니다.
from pymongo import MongoClient
client = MongoClient("<your_connection_string>")
db = client["test"]
collection = db["testCollection"]
documents = [
{"name": "Eugenia Lopez", "bio": "CEO of AdventureWorks", "is_open": 1, "location": [-118.9865, 34.0145], "contentVector": [0.52, 0.20, 0.23]},
{"name": "Cameron Baker", "bio": "CFO of AdventureWorks", "is_open": 1, "location": [-0.1278, 51.5074], "contentVector": [0.55, 0.89, 0.44]},
{"name": "Jessie Irwin", "bio": "Director of Our Planet initiative", "is_open": 0, "location": [-118.9865, 33.9855], "contentVector": [0.13, 0.92, 0.85]},
{"name": "Rory Nguyen", "bio": "President of Our Planet initiative", "is_open": 1, "location": [-119.0000, 33.9855], "contentVector": [0.91, 0.76, 0.83]}
]
collection.insert_many(documents)
DiskANN 벡터 인덱스 만들기
다음 예에서는 필터링 기능을 사용하여 DiskANN 벡터 인덱스를 설정하는 방법을 보여 줍니다. 이 예제에는 유사성 검색을 위한 벡터 인덱스 만들기, 벡터 및 지리 공간적 속성이 있는 문서 추가, 더 많은 필터링을 위한 인덱싱 필드가 포함됩니다.
db.command({
"createIndexes": "testCollection",
"indexes": [
{
"name": "DiskANNVectorIndex",
"key": {
"contentVector": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"dimensions": 3,
"similarity": "COS",
"maxDegree": 32,
"lBuild": 64
}
},
{
"name": "is_open",
"key": {
"is_open": 1
}
},
{
"name": "locationIndex",
"key": {
"location": 1
}
}
]
})
이 명령은 contentVector의 exampleCollection 필드에 DiskANN 벡터 인덱스를 만들어 유사성 검색을 사용하도록 설정합니다. 또한 다음 내용이 추가되었습니다.
- 필드의
is_open인덱스이므로 비즈니스가 열려 있는지 여부에 따라 결과를 필터링할 수 있습니다. -
location필드에 대한 지리 공간적 인덱스를 사용하여 지리적 근접성을 기준으로 필터링합니다.
벡터 검색 수행
특정 지리적 반경 내에서 유사한 벡터를 가진 문서를 찾으려면 유사성 검색에 queryVector를 지정하고 지리 공간적 필터를 포함합니다.
query_vector = [0.52, 0.28, 0.12]
pipeline = [
{
"$search": {
"cosmosSearch": {
"path": "contentVector",
"vector": query_vector,
"k": 5,
"filter": {
"$and": [
{"is_open": {"$eq": 1}},
{"location": {"$geoWithin": {"$centerSphere": [[-119.7192861804, 34.4102485028], 100 / 3963.2]}}}
]
}
}
}
}
]
results = list(collection.aggregate(pipeline))
for result in results:
print(result)
이 예에서 벡터 유사성 검색은 지정된 k 유사성 메트릭을 기반으로 상위 COS개의 가장 가까운 벡터를 반환하는 동시에 100마일 반경 내에 있는 영업 중인 사업체만 포함하도록 결과를 필터링합니다.
[
{
similarityScore: 0.9745354109084544,
document: {
_id: ObjectId("645acb54413be5502badff94"),
name: 'Eugenia Lopez',
bio: 'CEO of AdventureWorks',
is_open: 1,
location: [-118.9865, 34.0145],
contentVector: [0.52, 0.20, 0.23]
}
},
{
similarityScore: 0.9006955671333992,
document: {
_id: ObjectId("645acb54413be5502badff97"),
name: 'Rory Nguyen',
bio: 'President of Our Planet initiative',
is_open: 1,
location: [-119.7302, 34.4005],
contentVector: [0.91, 0.76, 0.83]
}
}
]
이 결과는 queryVector와 가장 유사한 문서를 100마일 반경으로 제한하고 영업 중인 업체를 보여 줍니다. 각 결과에는 유사성 점수와 메타데이터가 포함되며, Azure DocumentDB의 DiskANN이 보강된 위치 구분 검색 환경을 위해 결합된 벡터 및 지리 공간적 쿼리를 지원하는 방법을 보여 줍니다.
벡터 인덱스 정의 가져오기
컬렉션에서 벡터 인덱스 정의를 검색하려면 listIndexes 명령을 사용합니다.
db.exampleCollection.getIndexes();
이 예에서는 인덱스를 만드는 데 사용된 모든 vectorIndex 매개 변수와 함께 cosmosSearch가 반환됩니다.
[
{ v: 2, key: { _id: 1 }, name: '_id_', ns: 'test.exampleCollection' },
{
v: 2,
key: { vectorContent: 'cosmosSearch' },
name: 'vectorSearchIndex',
cosmosSearch: {
kind: <index_type>, // options are `vector-ivf`, `vector-hnsw`, and `vector-diskann`
numLists: 3,
similarity: 'COS',
dimensions: 3
},
ns: 'test.exampleCollection'
}
]
필터링된 벡터 검색
이제 $lt, $lte, $eq, $neq, $gte, $gt, $in, $nin 및 $regex 같은 지원되는 쿼리 필터를 사용하여 벡터 검색을 실행할 수 있습니다.
미리 필터링을 사용하려면 먼저 벡터 인덱스 외에도 필터링하려는 속성에 표준 인덱스도 정의해야 합니다. 필터 인덱스 만들기의 예는 다음과 같습니다.
db.runCommand({
"createIndexes": "<collection_name>",
"indexes": [ {
"key": {
"<property_to_filter>": 1
},
"name": "<name_of_filter_index>"
}
]
});
필터 인덱스가 배치되면 절을 "filter" 벡터 검색 쿼리에 직접 추가할 수 있습니다. 이 예제에서는 제공된 목록에 속성 값이 "title" 없는 결과를 필터링하는 방법을 보여 있습니다.
db.exampleCollection.aggregate([
{
'$search': {
"cosmosSearch": {
"vector": "<query_vector>",
"path": <path_to_vector>,
"k": num_results,
"filter": {<property_to_filter>: {"$nin": ["not in this text", "or this text"]}}
},
"returnStoredSource": True }},
{'$project': { 'similarityScore': { '$meta': 'searchScore' }, 'document' : '$$ROOT' }
}
]);
중요합니다
미리 필터링된 벡터 검색의 성능과 정확도를 최적화하려면 벡터 인덱스 매개 변수를 조정하는 것이 좋습니다.
DiskANN 인덱스의 경우 증가 maxDegree 하거나 lBuild 더 나은 결과를 얻을 수 있습니다.
HNSW 인덱스의 경우, m, efConstruction, efSearch의 값을 높여 실험하면 성능을 향상시킬 수 있습니다. 마찬가지로, IVF 인덱스의 경우 튜닝 numLists 또는 nProbes 더 만족스러운 결과로 이어질 수 있습니다. 결과가 요구 사항을 충족하는지 확인하기 위해 데이터로 특정 구성을 테스트하는 것이 중요합니다. 이러한 매개 변수는 인덱스 구조 및 검색 동작에 영향을 줍니다. 최적 값은 데이터 특성 및 쿼리 패턴에 따라 달라질 수 있습니다.
LLM(대규모 언어 모델) 오케스트레이션 도구 사용
의미 체계 커널과 함께 벡터 데이터베이스로 사용
의미 체계 커널을 사용하여 Azure DocumentDB 및 LLM에서 정보 검색을 오케스트레이션합니다. 자세한 내용은 GitHub 리포지토리를 참조하세요.
LangChain과 함께 벡터 데이터베이스로 사용
LangChain을 사용하여 Azure DocumentDB 및 LLM에서 정보 검색을 오케스트레이션합니다. 자세한 내용은 Azure DocumentDB에 대한 LangChain 통합을 참조하세요.
LangChain에서 의미 체계 캐시로 사용
LangChain 및 Azure DocumentDB를 사용하여 LLM API 비용을 절감하고 응답 대기 시간을 줄일 수 있는 이전에 기록된 LLM 응답을 사용하여 의미 체계 캐싱을 오케스트레이션합니다. 자세한 내용은 Azure DocumentDB와 LangChain 통합을 참조하세요.
기능 및 제한 사항
- 지원되는 거리 측정법: L2(유클리드), 내적 및 코사인.
- 지원되는 인덱싱 방법: IVFFLAT, HNSW 및 DiskANN.
- DiskANN 및 제품 정량화를 사용하면 벡터를 최대 16,000차원까지 인덱싱할 수 있습니다.
- HNSW 또는 IVF를 반정밀도 로 사용하면 최대 4,000개의 벡터를 인덱싱할 수 있습니다.
- 압축이 없으면 인덱싱의 기본 최대 벡터 차원은 2,000입니다.
- 인덱싱은 경로당 하나의 벡터에만 적용됩니다.
- 벡터 경로당 하나의 인덱스만 만들 수 있습니다.
요약
이 가이드에서는 벡터 인덱스 만들기, 벡터 데이터가 있는 문서 추가, 유사성 검색 수행 및 인덱스 정의를 검색하는 방법을 보여줍니다. 통합 벡터 데이터베이스를 사용하면 Azure DocumentDB에서 직접 고차원 벡터 데이터를 효율적으로 저장, 인덱싱 및 쿼리할 수 있습니다. 또한 벡터 포함을 통해 데이터의 잠재력을 최대한 활용할 수 있으며 더욱 정확하고 효율적이며 강력한 애플리케이션을 빌드할 수 있습니다.
관련 콘텐츠
- .NET RAG 패턴 소매 참조 솔루션
- C# RAG 패턴 - OpenAI Service를 Cosmos와 통합
- Python RAG 패턴 - Azure 제품 챗봇
- Python Notebook 자습서 - LangChain을 통한 벡터 데이터베이스 통합
- Python Notebook 자습서 - LangChain을 통한 LLM 캐싱 통합
- Python - LlamaIndex 통합
- Python - 의미 체계 커널 메모리 통합