다음을 통해 공유


Weaviate Vector Store 커넥터 사용(미리 보기)

Warning

의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.

개요

Weaviate Vector Store 커넥터를 사용하여 Weaviate의 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.

기능 영역 지원
컬렉션이 다음으로 매핑됩니다. Weaviate 컬렉션
지원되는 키 속성 형식 GUID
지원되는 데이터 속성 형식
  • string
  • 바이트
  • short
  • int
  • long
  • double
  • float
  • decimal
  • bool
  • DateTime
  • DateTimeOffset
  • GUID
  • 이러한 각 형식의 열거형 및 열거형
지원되는 벡터 속성 형식
  • ReadOnlyMemory<float>
  • ReadOnlyMemory<double>
지원되는 인덱스 형식
  • Hnsw
  • 플랫
  • 동적
지원되는 거리 함수
  • CosineDistance
  • 음수 내적 유사도
  • EuclideanSquaredDistance
  • 해밍
  • ManhattanDistance
지원되는 필터 조건
  • AnyTagEqualTo
  • EqualTo
레코드에서 여러 벡터를 지원합니다.
IsFilterable이 지원되는가요?
IsFullTextSearchable이 지원되나요?
StoragePropertyName이 지원되는가요? 아니요, 대신 사용합니다 JsonSerializerOptionsJsonPropertyNameAttribute . 자세한 내용은 여기를 참조하세요.

제한 사항

주목할 만한 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 지정할 수 있는 오버로드도 제공됩니다. 이 경우 옵션을 통해 HttpClientBaseAddress 서비스 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],
    }
}

서비스 예정

추가 정보는 곧 제공될 예정입니다.

서비스 예정

추가 정보는 곧 제공될 예정입니다.