Dela via


Använda Azure AI Search Vector Store-anslutningsappen (förhandsversion)

Varning

Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Översikt

Azure AI Search Vector Store-anslutningsappen kan användas för att komma åt och hantera data i Azure AI Search. Anslutningsappen har följande egenskaper.

Funktionsområde Support
Samlingskartor till Azure AI Search Index
Nyckelegenskapstyper som stöds sträng
Dataegenskapstyper som stöds
  • sträng
  • heltal
  • lång
  • dubbel
  • flyttal
  • bool
  • DateTimeOffset
  • och uppräkningar av var och en av dessa typer
Egenskapstyper för vektorer som stöds ReadOnlyMemory-flyttal<>
Indextyper som stöds
  • Hnsw
  • Förenklat
Avståndsfunktioner som stöds
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
Stöder flera vektorer i en post Ja
Stöds IsFilterable? Ja
Stöds IsFullTextSearchable? Ja
Stöds StoragePropertyName? Nej, använd JsonSerializerOptions och JsonPropertyNameAttribute i stället. Mer information finns här.

Begränsningar

Anmärkningsvärda funktionsbegränsningar för Azure AI Search-anslutningsappen.

Funktionsområde Lösning
Det går inte att konfigurera analysverktyg för fulltextsökning när samlingen skapas. Använda Azure AI Search Client SDK direkt för att skapa en samling

Komma igång

Lägg till NuGet-paketet för Azure AI Search Vector Store-anslutningsappen i projektet.

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

Du kan lägga till vektorlagret i den beroendeinmatningscontainer som är tillgänglig i containern KernelBuilder eller till containern för IServiceCollection beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk kernel.

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

Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av Azure AI Search SearchIndexClient registreras separat med containern för beroendeinmatning.

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

Du kan skapa en Azure AI Search Vector Store-instans direkt.

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

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

Det går att skapa en direktreferens till en namngiven samling.

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

Komma igång

Installera semantisk kernel med azure-extrafunktionerna, som innehåller Azure AI Search SDK.

pip install semantic-kernel[azure]

Du kan sedan skapa en vektorlagerinstans med hjälp av AzureAISearchStore klassen, detta använder miljövariablerna AZURE_AI_SEARCH_ENDPOINT och AZURE_AI_SEARCH_API_KEY för att ansluta till Azure AI Search-instansen kan dessa värden också anges direkt. Du kan också ange autentiseringsuppgifter för Azure-autentiseringsuppgifter eller token i stället för en API-nyckel.


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

Du kan också skapa vektorarkivet med din egen instans av Azure Search-klienten.

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)

Du kan också skapa en samling direkt.

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

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

Serialisering

Eftersom Azure AI Search-anslutningsappen behöver en enkel diktering med fälten som motsvarar indexet som indata, är serialiseringen ganska enkel, bara returnera en dikta med värdena med nycklarna som motsvarar indexfälten, är det inbyggda steget från diktering till butiksmodellen en rak genomströmning av den skapade diktamen.

Mer information om det här konceptet finns i serialiseringsdokumentationen.

Komma igång

Ta med den senaste versionen av Semantic Kernel Azure AI Search-dataanslutningen i ditt Maven-projekt genom att lägga till följande beroende i :pom.xml

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

Du kan sedan skapa en vektorlagerinstans med hjälp av AzureAISearchVectorStore klassen med AzureAISearch-klienten som parameter.

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

Du kan också skapa en samling direkt.

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

Mappning av data

Standardmapparen som används av Azure AI Search-anslutningsappen vid mappning av data från datamodellen till lagring är den som tillhandahålls av Azure AI Search SDK.

Den här mapparen gör en direkt konvertering av listan över egenskaper i datamodellen till fälten i Azure AI Search och använder System.Text.Json.JsonSerializer för att konvertera till lagringsschemat. Det innebär att användning av JsonPropertyNameAttribute stöds om ett annat lagringsnamn än datamodellens egenskapsnamn krävs.

Du kan också använda en anpassad JsonSerializerOptions instans med en anpassad namngivningsprincip för egenskaper. För att aktivera detta JsonSerializerOptions måste skickas till både SearchIndexClient och på konstruktionen AzureAISearchVectorStoreRecordCollection .

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