Freigeben über


Verwenden des Azure AI Search Vector Store-Connectors (Vorschau)

Warnung

Die Funktionalität des semantischen Kernelvektorspeichers befindet sich in der Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.

Übersicht

Der Azure AI Search Vector Store-Connector kann verwendet werden, um auf Daten in Azure AI Search zuzugreifen und sie zu verwalten. Der Verbinder weist die folgenden Merkmale auf.

Featurebereich Unterstützung
Auflistungszuordnungen Azure AI Search-Index
Unterstützte Schlüsseleigenschaftentypen Zeichenfolge
Unterstützte Datentypen für Datentypen
  • Zeichenfolge
  • int
  • long
  • double
  • float
  • bool
  • DateTimeOffset
  • und Aufzählungen dieser Typen
Unterstützte Vektoreigenschaftentypen ReadOnlyMemory<float>
Unterstützte Indextypen
  • Hnsw
  • Flach
Unterstützte Entfernungsfunktionen
  • KosinusSimilarität
  • DotProductSimilarity
  • EuklideanDistance
Unterstützt mehrere Vektoren in einem Datensatz Ja
IstFilterbar unterstützt? Ja
WirdFullTextSearchable unterstützt? Ja
StoragePropertyName wird unterstützt? Nein, verwenden JsonSerializerOptions Und JsonPropertyNameAttribute stattdessen. Weitere Informationen finden Sie hier.

Begrenzungen

Wichtige Einschränkungen der Azure AI Search-Connectorfunktionalität.

Featurebereich Problemumgehung
Das Konfigurieren von Volltextsuchanalysen während der Sammlungserstellung wird nicht unterstützt. Verwenden des Azure AI Search Client SDK direkt zum Erstellen von Sammlungen

Erste Schritte

Fügen Sie ihrem Projekt das NuGet-Paket des Azure AI Search Vector Store-Connectors hinzu.

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

Sie können den Vektorspeicher dem Container zum Einfügen von Abhängigkeiten hinzufügen, der für den KernelBuilder Container für Abhängigkeitseinfügungen verfügbar ist, oder dem IServiceCollection Container zum Einfügen von Abhängigkeiten mithilfe von Erweiterungsmethoden, die vom semantischen Kernel bereitgestellt werden.

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

Erweiterungsmethoden, die keine Parameter verwenden, werden ebenfalls bereitgestellt. Dazu muss eine Instanz der Azure AI Search SearchIndexClient separat im Container für abhängigkeitseinfügungen registriert werden.

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

Sie können eine Azure AI Search Vector Store-Instanz direkt erstellen.

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

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

Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.

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

Erste Schritte

Installieren Sie den semantischen Kernel mit den Azure-Extras, die das Azure AI Search SDK enthält.

pip install semantic-kernel[azure]

Anschließend können Sie eine Vektorspeicherinstanz mithilfe der AzureAISearchStore Klasse erstellen. Dadurch werden die Umgebungsvariablen AZURE_AI_SEARCH_ENDPOINT verwendet und AZURE_AI_SEARCH_API_KEY eine Verbindung mit der Azure AI Search-Instanz hergestellt, diese Werte können auch direkt bereitgestellt werden. Sie können auch Azure-Anmeldeinformationen oder Tokenanmeldeinformationen anstelle eines API-Schlüssels angeben.


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

Sie können den Vektorspeicher auch mit Ihrer eigenen Instanz des Azure Search-Clients erstellen.

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)

Sie können auch eine Sammlung direkt erstellen.

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

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

Serialisierung

Da der Azure AI Search-Connector ein einfaches Diktieren mit den Feldern benötigt, die dem Index als Eingabe entsprechen, ist die Serialisierung ganz einfach, einfach ein Diktat mit den Werten mit den Schlüsseln zurückzugeben, die den Indexfeldern entsprechen, der integrierte Schritt vom Diktieren bis zum Speichermodell ist eine direkte Passthrough des erstellten Diktats.

Weitere Informationen zu diesem Konzept finden Sie in der Serialisierungsdokumentation.

Erste Schritte

Fügen Sie die neueste Version des Semantischen Kernel-Azure AI Search-Datenconnectors in Ihr Maven-Projekt ein, indem Sie die folgende Abhängigkeit zu Ihrem pom.xmlHinzufügen hinzufügen:

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

Anschließend können Sie eine Vektorspeicherinstanz mithilfe der AzureAISearchVectorStore Klasse erstellen, wobei der AzureAISearch-Client als Parameter vorhanden ist.

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

Sie können auch eine Sammlung direkt erstellen.

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

Datenzuordnung

Der standardzuordnungser, der vom Azure AI Search-Connector beim Zuordnen von Daten aus dem Datenmodell zum Speicher verwendet wird, ist der vom Azure AI Search SDK bereitgestellte.

Dieser Mapper führt eine direkte Konvertierung der Liste der Eigenschaften im Datenmodell in die Felder in Azure AI Search durch und verwendet System.Text.Json.JsonSerializer die Konvertierung in das Speicherschema. Dies bedeutet, dass die Verwendung der JsonPropertyNameAttribute Datenmodelleigenschaft unterstützt wird, wenn ein anderer Speichername für den Namen der Datenmodelleigenschaft erforderlich ist.

Es ist auch möglich, eine benutzerdefinierte Instanz mit einer benutzerdefinierten JsonSerializerOptions Eigenschaftsbenennungsrichtlinie zu verwenden. Um dies zu ermöglichen, muss dies JsonSerializerOptions sowohl an den SearchIndexClient Bau als auch an den AzureAISearchVectorStoreRecordCollection Bau übergeben werden.

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