Använda Azure AI Search Vector Store-anslutningsappen (förhandsversion)
Varning
Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.
Översikt
Azure AI Search Vector Store-anslutningsappen kan användas för att komma åt och hantera data i Azure AI Search. Anslutningsappen har följande egenskaper.
Funktionsområde | Support |
---|---|
Samlingskartor till | Azure AI Search Index |
Nyckelegenskapstyper som stöds | sträng |
Dataegenskapstyper som stöds |
|
Egenskapstyper för vektorer som stöds | ReadOnlyMemory-flyttal<> |
Indextyper som stöds |
|
Avståndsfunktioner som stöds |
|
Stöder flera vektorer i en post | Ja |
Stöds IsFilterable? | Ja |
Stöds IsFullTextSearchable? | Ja |
Stöds StoragePropertyName? | Nej, använd JsonSerializerOptions och JsonPropertyNameAttribute i stället. Mer information finns här. |
Begränsningar
Anmärkningsvärda funktionsbegränsningar för Azure AI Search-anslutningsappen.
Funktionsområde | Lösning |
---|---|
Det går inte att konfigurera analysverktyg för fulltextsökning när samlingen skapas. | Använda Azure AI Search Client SDK direkt för att skapa en samling |
Komma igång
Lägg till NuGet-paketet för Azure AI Search Vector Store-anslutningsappen i projektet.
dotnet add package Microsoft.SemanticKernel.Connectors.AzureAISearch --prerelease
Du kan lägga till vektorlagret i den beroendeinmatningscontainer som är tillgänglig i containern KernelBuilder
eller till containern för IServiceCollection
beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk 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));
Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av Azure AI Search SearchIndexClient
registreras separat med containern för beroendeinmatning.
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();
Du kan skapa en Azure AI Search Vector Store-instans direkt.
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;
var vectorStore = new AzureAISearchVectorStore(
new SearchIndexClient(
new Uri(azureAISearchUri),
new AzureKeyCredential(secret)));
Det går att skapa en direktreferens till en namngiven samling.
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");
Komma igång
Installera semantisk kernel med azure-extrafunktionerna, som innehåller Azure AI Search SDK.
pip install semantic-kernel[azure]
Du kan sedan skapa en vektorlagerinstans med hjälp av AzureAISearchStore
klassen, detta använder miljövariablerna AZURE_AI_SEARCH_ENDPOINT
och AZURE_AI_SEARCH_API_KEY
för att ansluta till Azure AI Search-instansen kan dessa värden också anges direkt. Du kan också ange autentiseringsuppgifter för Azure-autentiseringsuppgifter eller token i stället för en API-nyckel.
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore
vector_store = AzureAISearchStore()
Du kan också skapa vektorarkivet med din egen instans av Azure Search-klienten.
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)
Du kan också skapa en samling direkt.
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection
collection = AzureAISearchCollection(collection_name="skhotels", data_model_type=hotel)
Serialisering
Eftersom Azure AI Search-anslutningsappen behöver en enkel diktering med fälten som motsvarar indexet som indata, är serialiseringen ganska enkel, bara returnera en dikta med värdena med nycklarna som motsvarar indexfälten, är det inbyggda steget från diktering till butiksmodellen en rak genomströmning av den skapade diktamen.
Mer information om det här konceptet finns i serialiseringsdokumentationen.
Komma igång
Ta med den senaste versionen av Semantic Kernel Azure AI Search-dataanslutningen i ditt Maven-projekt genom att lägga till följande beroende i :pom.xml
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-data-azureaisearch</artifactId>
<version>[LATEST]</version>
</dependency>
Du kan sedan skapa en vektorlagerinstans med hjälp av AzureAISearchVectorStore
klassen med AzureAISearch-klienten som parameter.
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();
}
}
Du kan också skapa en samling direkt.
var collection = new AzureAISearchVectorStoreRecordCollection<>(searchClient, "skhotels",
AzureAISearchVectorStoreRecordCollectionOptions.<Hotel>builder()
.withRecordClass(Hotel.class)
.build());
Mappning av data
Standardmapparen som används av Azure AI Search-anslutningsappen vid mappning av data från datamodellen till lagring är den som tillhandahålls av Azure AI Search SDK.
Den här mapparen gör en direkt konvertering av listan över egenskaper i datamodellen till fälten i Azure AI Search och använder System.Text.Json.JsonSerializer
för att konvertera till lagringsschemat. Det innebär att användning av JsonPropertyNameAttribute
stöds om ett annat lagringsnamn än datamodellens egenskapsnamn krävs.
Du kan också använda en anpassad JsonSerializerOptions
instans med en anpassad namngivningsprincip för egenskaper. För att aktivera detta JsonSerializerOptions
måste skickas till både SearchIndexClient
och på konstruktionen AzureAISearchVectorStoreRecordCollection
.
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 });