Udostępnij za pośrednictwem


Korzystanie z łącznika usługi Azure AI Search Vector Store (wersja zapoznawcza)

Ostrzeżenie

Funkcja semantycznego magazynu wektorów jądra jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

Omówienie

Łącznik azure AI Search Vector Store może służyć do uzyskiwania dostępu do danych i zarządzania nimi w usłudze Azure AI Search. Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Indeks usługi Azure AI Search
Obsługiwane typy właściwości kluczy string
Obsługiwane typy właściwości danych
  • string
  • int
  • długi
  • double
  • liczba zmiennoprzecinkowa
  • bool
  • DateTimeOffset
  • i wyliczalne każdego z tych typów
Obsługiwane typy właściwości wektorów ReadOnlyMemory<float>
Obsługiwane typy indeksów
  • Hnsw
  • Spłaszcz
Obsługiwane funkcje odległości
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
Obsługiwane klauzule filtru
  • AnyTagEqualTo
  • EqualTo
Obsługuje wiele wektorów w rekordzie Tak
Czy filtrowanie jest obsługiwane? Tak
Czy jest obsługiwany element IsFullTextSearchable? Tak
Obsługiwana nazwa_właściwości_magazynu? Nie, użyj JsonSerializerOptions polecenia i JsonPropertyNameAttribute zamiast tego. Aby uzyskać więcej informacji, zobacz tutaj.

Ograniczenia

Istotne ograniczenia funkcji łącznika usługi Azure AI Search.

Obszar funkcji Rozwiązanie
Konfigurowanie analizatorów wyszukiwania pełnotekstowego podczas tworzenia kolekcji nie jest obsługiwane. Bezpośrednie tworzenie kolekcji przy użyciu zestawu SDK klienta usługi Azure AI Search

Wprowadzenie

Dodaj pakiet NuGet łącznika Usługi Azure AI Search Vector Store do projektu.

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

Magazyn wektorów można dodać do kontenera iniekcji zależności dostępnego w KernelBuilder kontenerze iniekcji zależności lub IServiceCollection przy użyciu metod rozszerzeń udostępnianych przez jądro semantyczne.

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));

Dostępne są również metody rozszerzeń, które nie przyjmują parametrów. Wymagają one osobnego zarejestrowania wystąpienia usługi Azure AI Search SearchIndexClient w kontenerze wstrzykiwania zależności.

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();

Wystąpienie usługi Azure AI Search Vector Store można skonstruować bezpośrednio.

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

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

Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.

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");

Wprowadzenie

Zainstaluj semantyczne jądro za pomocą dodatków platformy Azure, które obejmuje zestaw SDK usługi Azure AI Search.

pip install semantic-kernel[azure]

Następnie można utworzyć wystąpienie magazynu wektorów przy użyciu AzureAISearchStore klasy. Spowoduje to użycie zmiennych AZURE_AI_SEARCH_ENDPOINT środowiskowych i AZURE_AI_SEARCH_API_KEY nawiązanie połączenia z wystąpieniem usługi Azure AI Search. Te wartości można również dostarczyć bezpośrednio. Możesz również podać poświadczenia platformy Azure lub poświadczenia tokenu zamiast klucza interfejsu API.


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

Możesz również utworzyć magazyn wektorów przy użyciu własnego wystąpienia klienta usługi 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)

Możesz również utworzyć kolekcję bezpośrednio.

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

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

Serializacja

Ponieważ łącznik usługi Azure AI Search wymaga prostego dyktowania z polami odpowiadającymi indeksowi jako dane wejściowe, serializacja jest dość prosta, po prostu zwróć dykt z wartościami z kluczami odpowiadającymi polam indeksu, wbudowany krok od dyktowania do modelu magazynu jest prostym przekazywaniem utworzonego dyktowania.

Aby uzyskać więcej informacji na temat tej koncepcji, zobacz dokumentację serializacji.

Wprowadzenie

Dołącz najnowszą wersję łącznika danych semantycznego jądra usługi Azure AI Search w projekcie maven, dodając następującą zależność do elementu pom.xml:

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

Następnie możesz utworzyć wystąpienie magazynu wektorów przy użyciu AzureAISearchVectorStore klasy , używając klienta AzureAISearch jako parametru.

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();
    }
}

Możesz również utworzyć kolekcję bezpośrednio.

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

Mapowanie danych

Domyślnym maperem używanym przez łącznik usługi Azure AI Search podczas mapowania danych z modelu danych na magazyn jest ten udostępniany przez zestaw SDK usługi Azure AI Search.

Ten maper wykonuje bezpośrednią konwersję listy właściwości modelu danych na pola w usłudze Azure AI Search i używa System.Text.Json.JsonSerializer jej do konwersji na schemat magazynu. Oznacza to, że użycie elementu JsonPropertyNameAttribute jest obsługiwane, jeśli wymagana jest inna nazwa magazynu dla nazwy właściwości modelu danych.

Istnieje również możliwość użycia wystąpienia niestandardowego JsonSerializerOptions z dostosowanymi zasadami nazewnictwa właściwości. Aby to umożliwić, należy przekazać je JsonSerializerOptions zarówno do obiektu , jak SearchIndexClientAzureAISearchVectorStoreRecordCollection i do konstrukcji.

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 });