Sdílet prostřednictvím


Použití konektoru Azure AI Search Vector Store (Preview)

Upozorňující

Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.

Přehled

Konektor Azure AI Search Vector Store je možné použít k přístupu k datům ve službě Azure AI Search a jejich správě. Konektor má následující charakteristiky.

Oblast funkcí Technická podpora
Kolekce map na Azure AI Search Index
Podporované typy vlastností klíče string
Podporované typy datových vlastností
  • string
  • int
  • long
  • double
  • float (číslo s plovoucí řádovou čárkou)
  • bool
  • DateTimeOffset
  • a výčty každého z těchto typů
Podporované typy vektorových vlastností ReadOnlyMemory<float>
Podporované typy indexů
  • Hnsw
  • Plochý
Podporované funkce vzdálenosti
  • KosineSimilarita
  • DotProductSimilarity
  • EuclideanDistance
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? Ano
StoragePropertyName se podporuje? Ne, použijte JsonSerializerOptions a JsonPropertyNameAttribute místo toho. Další informace najdete tady.

Omezení

Skvělá omezení funkcí konektoru Azure AI Search

Oblast funkcí Alternativní řešení
Konfigurace analyzátorů fulltextového vyhledávání během vytváření kolekce se nepodporuje. Použití klientské sady SDK služby Azure AI Search přímo k vytvoření kolekce

Začínáme

Přidejte do projektu balíček NuGet konektoru Azure AI Search Vector Store.

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

Vektorové úložiště můžete přidat do kontejneru injektáže závislostí dostupného IServiceCollection v KernelBuilder kontejneru injektáže závislostí nebo do kontejneru injektáže závislostí pomocí rozšiřujících metod poskytovaných sémantickým jádrem.

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

K dispozici jsou také metody rozšíření, které nepoužívají žádné parametry. Vyžadují samostatnou registraci instance služby Azure AI Search SearchIndexClient v kontejneru injektáže závislostí.

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

Instanci Azure AI Search Vector Store můžete vytvořit přímo.

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

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

Je možné vytvořit přímý odkaz na pojmenovanou kolekci.

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

Začínáme

Nainstalujte sémantické jádro s využitím azure extra, které zahrnuje sadu SDK služby Azure AI Search.

pip install semantic-kernel[azure]

Pak můžete vytvořit instanci vektorového úložiště pomocí AzureAISearchStore třídy, tím se použijí proměnné AZURE_AI_SEARCH_ENDPOINT prostředí a AZURE_AI_SEARCH_API_KEY pro připojení k instanci Azure AI Search, tyto hodnoty lze také zadat přímo. Místo klíče rozhraní API můžete zadat přihlašovací údaje Azure nebo přihlašovací údaje tokenu.


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

Vektorové úložiště můžete vytvořit také pomocí vlastní instance klienta služby 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)

Kolekci můžete vytvořit také přímo.

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

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

Serializace

Vzhledem k tomu, že konektor Azure AI Search potřebuje jednoduchý diktování s poli odpovídajícími indexu jako vstup, serializace je poměrně snadná, stačí vrátit diktování s hodnotami s klíči odpovídajícími polím indexu, integrovaný krok z diktování do modelu úložiště je přímý průchod vytvořeného diktování.

Další podrobnosti o tomto konceptu najdete v dokumentaci k serializaci.

Začínáme

Přidejte do projektu Maven nejnovější verzi datového konektoru Azure AI Search pro sémantické jádro tím, že do svého projektu Maven přidáte pom.xmlnásledující závislost:

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

Pak můžete vytvořit instanci vektorového úložiště pomocí AzureAISearchVectorStore třídy, přičemž klient AzureAISearch jako parametr.

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

Kolekci můžete vytvořit také přímo.

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

Mapování dat

Výchozí mapovač používaný konektorem Azure AI Search při mapování dat z datového modelu do úložiště je ten, který poskytuje sada SDK služby Azure AI Search.

Tento mapovač provede přímý převod seznamu vlastností datového modelu na pole ve službě Azure AI Search a používá System.Text.Json.JsonSerializer k převodu na schéma úložiště. To znamená, že použití tohoto objektu JsonPropertyNameAttribute se podporuje, pokud se vyžaduje jiný název úložiště s názvem vlastnosti datového modelu.

Vlastní instanci je také možné použít JsonSerializerOptions s vlastní zásadou pojmenování vlastností. Aby to bylo možné, musí být předána jak SearchIndexClient do budovy, JsonSerializerOptions tak i do AzureAISearchVectorStoreRecordCollection konstrukce.

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