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 |
|
Ondersteunde vectoreigenschappentypen | ReadOnlyMemory<float> |
Ondersteunde indextypen |
|
Ondersteunde afstandsfuncties |
|
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 });