Delen via


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

Waarschuwing

De functionaliteit van de Semantische Kernel Vector Store is in preview, en verbeteringen die breaking changes vereisen, kunnen nog steeds in beperkte gevallen plaatsvinden voor de release.

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
Verzameling stemt overeen met Azure AI Zoekindex
Ondersteunde sleuteleigenschapstypen tekenreeks (string)
Ondersteunde gegevenseigenschapstypen
  • tekenreeks (string)
  • int
  • lang
  • dubbel
  • drijven
  • bool
  • DatumTijdOffset
  • en opsommingen van elk van deze typen
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen
  • Hnsw
  • Plat
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductSimilariteit
  • EuclideanDistance
Ondersteunde filterclausules
  • AnyTagEqualTo
  • EqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Ja
Ondersteunt StoragePropertyName? Nee, gebruik JsonSerializerOptions en JsonPropertyNameAttribute in plaats daarvan. Zie hier voor meer informatie.
HybridSearch ondersteund? Ja
Functiegebied Ondersteuning
Verzameling stemt overeen met Azure AI Zoekindex
Ondersteunde sleuteleigenschapstypen tekenreeks (string)
Ondersteunde gegevenseigenschapstypen
  • tekenreeks (string)
  • int
  • lang
  • dubbel
  • zwevend
  • bool
  • DatumTijdOffset
  • en iterables van elk van deze typen
Ondersteunde vectoreigenschappentypen
  • lijst[float]
  • lijst[int]
  • numpy-array
Ondersteunde indextypen
  • Hnsw
  • Plat
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductSimilariteit
  • EuclideanDistance
  • Hamming
Ondersteunde filterclausules
  • AnyTagEqualTo
  • EqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Ja
Functiegebied Ondersteuning
Verzameling stemt overeen met Azure AI Zoekindex
Ondersteunde sleuteleigenschappen tekenreeks (string)
Ondersteunde gegevenseigenschapstypen
  • tekenreeks (string)
  • int
  • lang
  • dubbel
  • drijven
  • bool
  • DatumTijdOffset
  • en opsommingen van elk van deze typen
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen
  • Hnsw
  • Plat
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductSimilariteit
  • EuclideanDistance
Ondersteunde filterclausules
  • AnyTagEqualTo
  • EqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Ja
Ondersteunt 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 Omweg
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 de vectorwinkel toevoegen aan de afhankelijkheidsinjectiecontainer die beschikbaar is op KernelBuilder of aan de afhankelijkheidsinjectiecontainer IServiceCollection met behulp van uitbreidingsmethoden 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 vectorwinkel maken met behulp van de AzureAISearchStore klasse. Dit zal de omgevingsvariabelen AZURE_AI_SEARCH_ENDPOINT en AZURE_AI_SEARCH_API_KEY gebruiken om verbinding te maken met het Azure AI Search-exemplaar, maar 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, retourneer gewoon een dict met de waarden en de sleutels die overeenkomen met de indexvelden. De ingebouwde stap van dict naar het winkelmodel is een rechtstreekse doorvoer 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());

Datamapping

De standaardmapper die door de Azure AI Search-connector wordt gebruikt bij het toewijzen van gegevens uit het gegevensmodel naar 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 aangepaste instantie JsonSerializerOptions te gebruiken met een aangepaste eigenschapsnaamgevingsregeling. Om dit te kunnen, moet de JsonSerializerOptions worden doorgegeven aan zowel de SearchIndexClient als de AzureAISearchVectorStoreRecordCollection bij constructie.

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