Weaviate Vector Store 커넥터 사용(미리 보기)
Warning
의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
개요
Weaviate Vector Store 커넥터를 사용하여 Weaviate의 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.
기능 영역 | 지원 |
---|---|
컬렉션이 다음으로 매핑됩니다. | Weaviate 컬렉션 |
지원되는 키 속성 형식 | GUID |
지원되는 데이터 속성 형식 |
|
지원되는 벡터 속성 형식 |
|
지원되는 인덱스 형식 |
|
지원되는 거리 함수 |
|
지원되는 필터 조건 |
|
레코드에서 여러 벡터를 지원합니다. | 예 |
IsFilterable이 지원되는가요? | 예 |
IsFullTextSearchable이 지원되나요? | 예 |
StoragePropertyName이 지원되는가요? | 아니요, 대신 사용합니다 JsonSerializerOptions JsonPropertyNameAttribute .
자세한 내용은 여기를 참조하세요. |
제한 사항
주목할 만한 Weaviate 커넥터 기능 제한 사항입니다.
기능 영역 | 해결 방법 |
---|---|
단일 벡터 개체에 대한 'vector' 속성 사용은 지원되지 않습니다. | 대신 'vectors' 속성을 사용할 수 있습니다. |
Warning
Weaviate를 사용하려면 컬렉션 이름이 대문자로 시작해야 합니다. 대문자로 컬렉션 이름을 제공하지 않으면 컬렉션을 만들려고 할 때 Weaviate에서 오류를 반환합니다. 보게 될 오류는 Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"?
이며, mycollection
은 컬렉션 이름입니다. 이 예제에서는 컬렉션 이름을 대신 Mycollection
변경하면 오류가 해결됩니다.
시작
Weaviate Vector Store 커넥터 NuGet 패키지를 프로젝트에 추가합니다.
dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease
의미 체계 커널에서 제공하는 확장 메서드를 사용하여 종속성 주입 컨테이너 또는 KernelBuilder
종속성 주입 컨테이너에 IServiceCollection
사용할 수 있는 종속성 주입 컨테이너에 벡터 저장소를 추가할 수 있습니다.
Weaviate 벡터 저장소는 Weaviate 서비스와 통신하는 데 사용합니다 HttpClient
. Weaviate 서비스에 대한 URL/엔드포인트를 제공하는 두 가지 옵션이 있습니다.
옵션을 통해 또는 의 기본 주소를 HttpClient
설정하여 제공할 수 있습니다.
이 첫 번째 예제에서는 옵션을 통해 서비스 URL을 설정하는 방법을 보여줍니다.
또한 이러한 메서드는 종속성 주입 서비스 공급자에서 Weaviate 서비스를 호출하기 위한 인스턴스를 검색 HttpClient
합니다.
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });
직접 HttpClient
지정할 수 있는 오버로드도 제공됩니다.
이 경우 옵션을 통해 HttpClient
BaseAddress
서비스 URL을 설정할 수 있습니다.
using System.Net.Http;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
kernelBuilder.AddWeaviateVectorStore(client);
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
builder.Services.AddWeaviateVectorStore(client);
Weaviate Vector Store 인스턴스도 직접 생성할 수 있습니다.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var vectorStore = new WeaviateVectorStore(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });
명명된 컬렉션에 대한 직접 참조를 생성할 수 있습니다.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var collection = new WeaviateVectorStoreRecordCollection<Hotel>(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
"Skhotels");
필요한 경우 위에서 언급한 메커니즘을 사용할 때 옵션으로 Api 키를 전달할 수 있습니다. 예를 들면 다음과 같습니다.
using Microsoft.SemanticKernel;
var kernelBuilder = Kernel
.CreateBuilder()
.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });
데이터 매핑
Weaviate Vector Store 커넥터는 데이터 모델에서 스토리지로 매핑할 때 기본 매퍼를 제공합니다. Weaviate를 사용하려면 ID, 페이로드 및 벡터 그룹화에 속성을 매핑해야 합니다. 기본 매퍼는 모델 주석 또는 레코드 정의를 사용하여 각 속성의 형식을 확인하고 이 매핑을 수행합니다.
- 키로 주석이 추가된 데이터 모델 속성은 Weaviate
id
속성에 매핑됩니다. - 데이터로 주석이 추가된 데이터 모델 속성은 Weaviate
properties
개체에 매핑됩니다. - 벡터로 주석이 추가된 데이터 모델 속성은 Weaviate
vectors
개체에 매핑됩니다.
기본 매퍼는 스토리지 스키마로 변환하는 데 사용합니다 System.Text.Json.JsonSerializer
.
즉 JsonPropertyNameAttribute
, 데이터 모델 속성 이름과 다른 스토리지 이름이 필요한 경우 해당 사용이 지원됩니다.
다음은 집합이 있는 데이터 모델의 JsonPropertyNameAttribute
예와 Weaviate에 표시되는 방법입니다.
using System.Text.Json.Serialization;
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
[VectorStoreRecordData(IsFilterable = true)]
public string HotelName { get; set; }
[VectorStoreRecordData(IsFullTextSearchable = true)]
public string Description { get; set; }
[JsonPropertyName("HOTEL_DESCRIPTION_EMBEDDING")]
[VectorStoreRecordVector(4, DistanceFunction.CosineDistance, IndexKind.QuantizedFlat)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
"id": 1,
"properties": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
"vectors": {
"HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
}
}
서비스 예정
추가 정보는 곧 제공될 예정입니다.
서비스 예정
추가 정보는 곧 제공될 예정입니다.