Utilisation du connecteur du magasin de vecteurs Recherche d’IA Azure (préversion)
Avertissement
La fonctionnalité de magasin de vecteurs du noyau sémantique est en préversion et des améliorations nécessitant des modifications cassants peuvent toujours se produire dans des circonstances limitées avant la mise en production.
Vue d’ensemble
Le connecteur Azure AI Search Vector Store peut être utilisé pour accéder aux données et les gérer dans Recherche IA Azure. Le connecteur présente les caractéristiques suivantes.
Zone Fonctionnalités | Support |
---|---|
Mappages de collection à | Index recherche Azure AI |
Types de propriétés de clé pris en charge | string |
Types de propriétés de données pris en charge |
|
Types de propriétés vectorielles pris en charge | Float ReadOnlyMemory<> |
Types d’index pris en charge |
|
Fonctions de distance prises en charge |
|
Prend en charge plusieurs vecteurs dans un enregistrement | Oui |
Est-il pris en charge ? | Oui |
IsFullTextSearchable pris en charge ? | Oui |
StoragePropertyName pris en charge ? | Non, utilisez et JsonPropertyNameAttribute à JsonSerializerOptions la place. Pour plus d’informations, voir ici. |
Limites
Limitations notables des fonctionnalités du connecteur Recherche d’IA Azure.
Zone Fonctionnalités | Solution de contournement |
---|---|
La configuration des analyseurs de recherche en texte intégral lors de la création d’une collection n’est pas prise en charge. | Utiliser le Kit de développement logiciel (SDK) client Recherche Azure AI directement pour la création de regroupements |
Mise en route
Ajoutez le package NuGet du connecteur Azure AI Search Vector Store à votre projet.
dotnet add package Microsoft.SemanticKernel.Connectors.AzureAISearch --prerelease
Vous pouvez ajouter le magasin de vecteurs au conteneur d’injection de dépendances disponible sur le KernelBuilder
conteneur ou au conteneur d’injection de dépendances à l’aide IServiceCollection
de méthodes d’extension fournies par le noyau sémantique.
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));
Les méthodes d’extension qui ne prennent aucun paramètre sont également fournies. Celles-ci nécessitent l’inscription distincte d’une instance d’Azure AI Search SearchIndexClient
auprès du conteneur d’injection de dépendances.
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();
Vous pouvez construire directement une instance azure AI Search Vector Store.
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;
var vectorStore = new AzureAISearchVectorStore(
new SearchIndexClient(
new Uri(azureAISearchUri),
new AzureKeyCredential(secret)));
Il est possible de construire une référence directe à une collection nommée.
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");
Mise en route
Installez le noyau sémantique avec les extras Azure, qui inclut le Kit de développement logiciel (SDK) Azure AI Search.
pip install semantic-kernel[azure]
Vous pouvez ensuite créer une instance de magasin de vecteurs à l’aide de la AzureAISearchStore
classe, cela utilisera les variables AZURE_AI_SEARCH_ENDPOINT
d’environnement et AZURE_AI_SEARCH_API_KEY
pour vous connecter à l’instance Recherche d’IA Azure, ces valeurs peuvent également être fournies directement. Vous pouvez également fournir des informations d’identification Azure ou des informations d’identification de jeton au lieu d’une clé API.
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore
vector_store = AzureAISearchStore()
Vous pouvez également créer le magasin de vecteurs avec votre propre instance du client recherche Azure.
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)
Vous pouvez également créer une collection directement.
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection
collection = AzureAISearchCollection(collection_name="skhotels", data_model_type=hotel)
Sérialisation
Étant donné que le connecteur Recherche d’IA Azure a besoin d’une dictée simple avec les champs correspondant à l’index en tant qu’entrée, la sérialisation est assez simple, il suffit de renvoyer une dictée avec les valeurs avec les clés correspondant aux champs d’index, l’étape intégrée de dictée au modèle de magasin est une passe directe droite de la dictée créée.
Pour plus d’informations sur ce concept, consultez la documentation de sérialisation.
Mise en route
Incluez la dernière version du connecteur de données Azure AI Search du noyau sémantique dans votre projet Maven en ajoutant la dépendance suivante à votre pom.xml
:
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-data-azureaisearch</artifactId>
<version>[LATEST]</version>
</dependency>
Vous pouvez ensuite créer une instance de magasin de vecteurs à l’aide de la AzureAISearchVectorStore
classe, avec le client AzureAISearch en tant que paramètre.
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();
}
}
Vous pouvez également créer une collection directement.
var collection = new AzureAISearchVectorStoreRecordCollection<>(searchClient, "skhotels",
AzureAISearchVectorStoreRecordCollectionOptions.<Hotel>builder()
.withRecordClass(Hotel.class)
.build());
Mappage de données
Le mappeur par défaut utilisé par le connecteur Recherche IA Azure lors du mappage des données du modèle de données au stockage est celui fourni par le Kit de développement logiciel (SDK) Azure AI Search.
Ce mappeur effectue une conversion directe de la liste des propriétés sur le modèle de données vers les champs dans Recherche IA Azure et utilise System.Text.Json.JsonSerializer
pour effectuer une conversion vers le schéma de stockage. Cela signifie que l’utilisation de l’objet JsonPropertyNameAttribute
est prise en charge si un nom de stockage différent du nom de propriété du modèle de données est requis.
Il est également possible d’utiliser une instance personnalisée JsonSerializerOptions
avec une stratégie d’affectation de noms de propriété personnalisée. Pour l’activer, le JsonSerializerOptions
doit être transmis à la SearchIndexClient
fois au et à la AzureAISearchVectorStoreRecordCollection
construction.
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 });