Delen via


De Azure AI Search Vector Store-connector gebruiken (preview)

Waarschuwing

De Semantische Kernel Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds in beperkte omstandigheden optreden voordat ze worden uitgebracht.

Overzicht

De Azure AI Search Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Azure AI Search. De verbindingslijn heeft de volgende kenmerken.

Functiegebied Ondersteuning
Verzamelingstoewijzingen aan Azure AI Search-index
Ondersteunde sleuteleigenschapstypen tekenreeks
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • int
  • long
  • dubbel
  • zwevend
  • bool
  • DateTimeOffset
  • en opsommingen van elk van deze typen
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen
  • Hnsw
  • Vast
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductsimilarity
  • EuclideanDistance
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Ja
Ondersteunde StoragePropertyName? Nee, gebruik JsonSerializerOptions en JsonPropertyNameAttribute in plaats daarvan. Zie hier voor meer informatie.

Beperkingen

Belangrijke beperkingen voor de functionaliteit van de Azure AI Search-connector.

Functiegebied Tijdelijke oplossing
Het configureren van zoekanalyses voor volledige tekst tijdens het maken van de verzameling wordt niet ondersteund. De Azure AI Search Client SDK rechtstreeks gebruiken voor het maken van verzamelingen

Aan de slag

Voeg het NuGet-pakket azure AI Search Vector Store-connector toe aan uw project.

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

U kunt het vectorarchief toevoegen aan de container voor afhankelijkheidsinjectie die beschikbaar is op of KernelBuilder aan de IServiceCollection container voor afhankelijkheidsinjectie met behulp van extensiemethoden die worden geleverd door Semantische 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));

Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar van Azure AI Search SearchIndexClient afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.

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

U kunt rechtstreeks een Azure AI Search Vector Store-exemplaar maken.

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

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

Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.

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

Aan de slag

Installeer semantische kernel met de Azure-extra's, waaronder de Azure AI Search SDK.

pip install semantic-kernel[azure]

Vervolgens kunt u een exemplaar van een vectorarchief maken met behulp van de AzureAISearchStore klasse. Hiermee worden de omgevingsvariabelen AZURE_AI_SEARCH_ENDPOINT gebruikt en AZURE_AI_SEARCH_API_KEY verbinding gemaakt met het Azure AI Search-exemplaar. Deze waarden kunnen ook rechtstreeks worden opgegeven. U kunt ook Azure-referenties of tokenreferenties opgeven in plaats van een API-sleutel.


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

U kunt ook het vectorarchief maken met uw eigen exemplaar van de Azure Search-client.

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)

U kunt ook rechtstreeks een verzameling maken.

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

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

Serialisatie

Omdat de Azure AI Search-connector een eenvoudige dict nodig heeft met de velden die overeenkomen met de index als invoer, is de serialisatie vrij eenvoudig, maar retourneert u een dict met de waarden met de sleutels die overeenkomen met de indexvelden. De ingebouwde stap van dict naar het winkelmodel is een rechte passthrough van het gemaakte dict.

Zie de serialisatiedocumentatie voor meer informatie over dit concept.

Aan de slag

Neem de nieuwste versie van de Semantic Kernel Azure AI Search-gegevensconnector op in uw Maven-project door de volgende afhankelijkheid toe te voegen aan uw pom.xml:

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

Vervolgens kunt u een vector store-exemplaar maken met behulp van de AzureAISearchVectorStore klasse, waarbij de AzureAISearch-client als parameter wordt gebruikt.

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

U kunt ook rechtstreeks een verzameling maken.

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

Gegevenstoewijzing

De standaardtoewijzing die door de Azure AI Search-connector wordt gebruikt bij het toewijzen van gegevens uit het gegevensmodel aan opslag, is de mapper die wordt geleverd door de Azure AI Search SDK.

Deze mapper voert een directe conversie uit van de lijst met eigenschappen in het gegevensmodel naar de velden in Azure AI Search en gebruikt System.Text.Json.JsonSerializer om te converteren naar het opslagschema. Dit betekent dat het gebruik van het JsonPropertyNameAttribute bestand wordt ondersteund als een andere opslagnaam voor de naam van de gegevensmodeleigenschap is vereist.

Het is ook mogelijk om een aangepast exemplaar JsonSerializerOptions te gebruiken met een aangepast naamgevingsbeleid voor eigenschappen. Om dit mogelijk te maken, moet het JsonSerializerOptions worden doorgegeven aan zowel de SearchIndexClient als de AzureAISearchVectorStoreRecordCollection aanbouw.

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