다음을 통해 공유


Azure AI Search 벡터 저장소 커넥터 사용(미리 보기)

Warning

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

개요

Azure AI Search 벡터 저장소 커넥터를 사용하여 Azure AI Search에서 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.

기능 영역 지원
컬렉션이 다음으로 매핑됩니다. Azure AI Search 인덱스
지원되는 키 속성 형식 string
지원되는 데이터 속성 형식
  • string
  • int
  • long
  • double
  • float
  • bool
  • DateTimeOffset
  • 이러한 각 형식의 열거형 및 열거형
지원되는 벡터 속성 형식 ReadOnlyMemory<float>
지원되는 인덱스 형식
  • Hnsw
  • 플랫
지원되는 거리 함수
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
지원되는 필터 구문
  • AnyTagEqualTo
  • EqualTo
레코드에서 여러 벡터를 지원합니다.
IsFilterable이 지원되는가요?
IsFullTextSearchable이 지원되나요?
StoragePropertyName이 지원되는가요? 아니요, 대신 사용합니다 JsonSerializerOptionsJsonPropertyNameAttribute . 자세한 내용은 여기를 참조하세요.

제한 사항

주목할 만한 Azure AI Search 커넥터 기능 제한 사항입니다.

기능 영역 해결 방법
컬렉션을 만드는 동안 전체 텍스트 검색 분석기를 구성하는 것은 지원되지 않습니다. 컬렉션을 만들기 위해 Azure AI Search 클라이언트 SDK를 직접 사용

시작

Azure AI Search 벡터 저장소 커넥터 NuGet 패키지를 프로젝트에 추가합니다.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureAISearch --prerelease

의미 체계 커널에서 제공하는 확장 메서드를 사용하여 종속성 주입 컨테이너 또는 KernelBuilder 종속성 주입 컨테이너에 IServiceCollection 사용할 수 있는 종속성 주입 컨테이너에 벡터 저장소를 추가할 수 있습니다.

using Azure;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddAzureAISearchVectorStore(new Uri(azureAISearchUri), new AzureKeyCredential(secret));
using Azure;
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAzureAISearchVectorStore(new Uri(azureAISearchUri), new AzureKeyCredential(secret));

매개 변수를 사용하지 않는 확장 메서드도 제공됩니다. 이를 위해서는 Azure AI Search SearchIndexClient 인스턴스를 종속성 주입 컨테이너에 별도로 등록해야 합니다.

using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<SearchIndexClient>(
    sp => new SearchIndexClient(
        new Uri(azureAISearchUri),
        new AzureKeyCredential(secret)));
kernelBuilder.AddAzureAISearchVectorStore();
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<SearchIndexClient>(
    sp => new SearchIndexClient(
        new Uri(azureAISearchUri),
        new AzureKeyCredential(secret)));
builder.Services.AddAzureAISearchVectorStore();

Azure AI Search Vector Store 인스턴스를 직접 생성할 수 있습니다.

using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;

var vectorStore = new AzureAISearchVectorStore(
    new SearchIndexClient(
        new Uri(azureAISearchUri),
        new AzureKeyCredential(secret)));

명명된 컬렉션에 대한 직접 참조를 생성할 수 있습니다.

using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;

var collection = new AzureAISearchVectorStoreRecordCollection<Hotel>(
    new SearchIndexClient(new Uri(azureAISearchUri), new AzureKeyCredential(secret)),
    "skhotels");

시작

Azure AI Search SDK를 포함하는 Azure 엑스트라를 사용하여 의미 체계 커널을 설치합니다.

pip install semantic-kernel[azure]

그런 다음 클래스를 사용하여 AzureAISearchStore 벡터 저장소 인스턴스를 만들 수 있습니다AZURE_AI_SEARCH_ENDPOINT. 그러면 환경 변수를 AZURE_AI_SEARCH_API_KEY 사용하고 Azure AI Search 인스턴스에 연결하기 위해 해당 값을 직접 제공할 수도 있습니다. API 키 대신 Azure 자격 증명 또는 토큰 자격 증명을 제공할 수도 있습니다.


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

Azure Search 클라이언트의 고유한 인스턴스를 사용하여 벡터 저장소를 만들 수도 있습니다.

from azure.search.documents.indexes import SearchIndexClient
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

search_client = SearchIndexClient(endpoint="https://<your-search-service-name>.search.windows.net", credential="<your-search-service-key>")
vector_store = AzureAISearchStore(search_index_client=search_client)

컬렉션을 직접 만들 수도 있습니다.

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

collection = AzureAISearchCollection(collection_name="skhotels", data_model_type=hotel)

직렬화

Azure AI Search 커넥터는 입력으로 인덱스로 해당하는 필드가 있는 간단한 받아쓰기를 필요로 하므로 직렬화는 매우 쉽습니다. 인덱스 필드에 해당하는 키가 있는 값이 있는 받아쓰기를 반환하기만 하면 dict에서 저장소 모델로의 기본 제공 단계는 생성된 받아쓰기의 직선 통과입니다.

이 개념에 대한 자세한 내용은 serialization 설명서를 참조 하세요.

시작

다음 종속성을 추가하여 Maven 프로젝트에 최신 버전의 의미 체계 커널 Azure AI Search 데이터 커넥터를 pom.xml포함합니다.

<dependency>
    <groupId>com.microsoft.semantic-kernel</groupId>
    <artifactId>semantickernel-data-azureaisearch</artifactId>
    <version>[LATEST]</version>
</dependency>

그런 다음, AzureAISearch 클라이언트를 AzureAISearchVectorStore 매개 변수로 사용하여 클래스를 사용하여 벡터 저장소 인스턴스를 만들 수 있습니다.

import com.azure.core.credential.AzureKeyCredential;
import com.azure.search.documents.indexes.SearchIndexClientBuilder;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStore;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStoreOptions;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStoreRecordCollection;
import com.microsoft.semantickernel.data.azureaisearch.AzureAISearchVectorStoreRecordCollectionOptions;

public class Main {
    public static void main(String[] args) {
        // Build the Azure AI Search client
        var searchClient = new SearchIndexClientBuilder()
                .endpoint("https://<your-search-service-name>.search.windows.net")
                .credential(new AzureKeyCredential("<your-search-service-key>"))
                .buildAsyncClient();

        // Build an Azure AI Search Vector Store
        var vectorStore = AzureAISearchVectorStore.builder()
                .withSearchIndexAsyncClient(searchClient)
                .withOptions(new AzureAISearchVectorStoreOptions())
                .build();
    }
}

컬렉션을 직접 만들 수도 있습니다.

var collection = new AzureAISearchVectorStoreRecordCollection<>(searchClient, "skhotels",
        AzureAISearchVectorStoreRecordCollectionOptions.<Hotel>builder()
                .withRecordClass(Hotel.class)
                .build());

데이터 매핑

데이터 모델에서 스토리지로 데이터를 매핑할 때 Azure AI Search 커넥터에서 사용하는 기본 매퍼는 Azure AI Search SDK에서 제공하는 매퍼입니다.

이 매퍼는 데이터 모델의 속성 목록을 Azure AI Search의 필드로 직접 변환하고 스토리지 스키마로 변환하는 데 사용합니다 System.Text.Json.JsonSerializer . 즉 JsonPropertyNameAttribute , 데이터 모델 속성 이름과 다른 스토리지 이름이 필요한 경우 해당 사용이 지원됩니다.

사용자 지정 속성 명명 정책과 함께 사용자 지정 JsonSerializerOptions 인스턴스를 사용할 수도 있습니다. 이를 JsonSerializerOptions 사용하도록 설정하려면 생성 시 및 시공 모두 SearchIndexClientAzureAISearchVectorStoreRecordCollection 전달되어야 합니다.

var jsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseUpper };
var collection = new AzureAISearchVectorStoreRecordCollection<Hotel>(
    new SearchIndexClient(
        new Uri(azureAISearchUri),
        new AzureKeyCredential(secret),
        new() { Serializer = new JsonObjectSerializer(jsonSerializerOptions) }),
    "skhotels",
    new() { JsonSerializerOptions = jsonSerializerOptions });