Použití konektoru Azure AI Search Vector Store (Preview)
Upozorňující
Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.
Přehled
Konektor Azure AI Search Vector Store je možné použít k přístupu k datům ve službě Azure AI Search a jejich správě. Konektor má následující charakteristiky.
Oblast funkcí | Technická podpora |
---|---|
Kolekce map na | Azure AI Search Index |
Podporované typy vlastností klíče | string |
Podporované typy datových vlastností |
|
Podporované typy vektorových vlastností | ReadOnlyMemory<float> |
Podporované typy indexů |
|
Podporované funkce vzdálenosti |
|
Podporuje více vektorů v záznamu. | Ano |
Je podporováno Filtrování? | Ano |
Podporuje se IsFullTextSearchable? | Ano |
StoragePropertyName se podporuje? | Ne, použijte JsonSerializerOptions a JsonPropertyNameAttribute místo toho. Další informace najdete tady. |
Omezení
Skvělá omezení funkcí konektoru Azure AI Search
Oblast funkcí | Alternativní řešení |
---|---|
Konfigurace analyzátorů fulltextového vyhledávání během vytváření kolekce se nepodporuje. | Použití klientské sady SDK služby Azure AI Search přímo k vytvoření kolekce |
Začínáme
Přidejte do projektu balíček NuGet konektoru Azure AI Search Vector Store.
dotnet add package Microsoft.SemanticKernel.Connectors.AzureAISearch --prerelease
Vektorové úložiště můžete přidat do kontejneru injektáže závislostí dostupného IServiceCollection
v KernelBuilder
kontejneru injektáže závislostí nebo do kontejneru injektáže závislostí pomocí rozšiřujících metod poskytovaných sémantickým jádrem.
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));
K dispozici jsou také metody rozšíření, které nepoužívají žádné parametry. Vyžadují samostatnou registraci instance služby Azure AI Search SearchIndexClient
v kontejneru injektáže závislostí.
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();
Instanci Azure AI Search Vector Store můžete vytvořit přímo.
using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;
var vectorStore = new AzureAISearchVectorStore(
new SearchIndexClient(
new Uri(azureAISearchUri),
new AzureKeyCredential(secret)));
Je možné vytvořit přímý odkaz na pojmenovanou kolekci.
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");
Začínáme
Nainstalujte sémantické jádro s využitím azure extra, které zahrnuje sadu SDK služby Azure AI Search.
pip install semantic-kernel[azure]
Pak můžete vytvořit instanci vektorového úložiště pomocí AzureAISearchStore
třídy, tím se použijí proměnné AZURE_AI_SEARCH_ENDPOINT
prostředí a AZURE_AI_SEARCH_API_KEY
pro připojení k instanci Azure AI Search, tyto hodnoty lze také zadat přímo. Místo klíče rozhraní API můžete zadat přihlašovací údaje Azure nebo přihlašovací údaje tokenu.
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore
vector_store = AzureAISearchStore()
Vektorové úložiště můžete vytvořit také pomocí vlastní instance klienta služby Azure Search.
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)
Kolekci můžete vytvořit také přímo.
from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection
collection = AzureAISearchCollection(collection_name="skhotels", data_model_type=hotel)
Serializace
Vzhledem k tomu, že konektor Azure AI Search potřebuje jednoduchý diktování s poli odpovídajícími indexu jako vstup, serializace je poměrně snadná, stačí vrátit diktování s hodnotami s klíči odpovídajícími polím indexu, integrovaný krok z diktování do modelu úložiště je přímý průchod vytvořeného diktování.
Další podrobnosti o tomto konceptu najdete v dokumentaci k serializaci.
Začínáme
Přidejte do projektu Maven nejnovější verzi datového konektoru Azure AI Search pro sémantické jádro tím, že do svého projektu Maven přidáte pom.xml
následující závislost:
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-data-azureaisearch</artifactId>
<version>[LATEST]</version>
</dependency>
Pak můžete vytvořit instanci vektorového úložiště pomocí AzureAISearchVectorStore
třídy, přičemž klient AzureAISearch jako parametr.
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();
}
}
Kolekci můžete vytvořit také přímo.
var collection = new AzureAISearchVectorStoreRecordCollection<>(searchClient, "skhotels",
AzureAISearchVectorStoreRecordCollectionOptions.<Hotel>builder()
.withRecordClass(Hotel.class)
.build());
Mapování dat
Výchozí mapovač používaný konektorem Azure AI Search při mapování dat z datového modelu do úložiště je ten, který poskytuje sada SDK služby Azure AI Search.
Tento mapovač provede přímý převod seznamu vlastností datového modelu na pole ve službě Azure AI Search a používá System.Text.Json.JsonSerializer
k převodu na schéma úložiště. To znamená, že použití tohoto objektu JsonPropertyNameAttribute
se podporuje, pokud se vyžaduje jiný název úložiště s názvem vlastnosti datového modelu.
Vlastní instanci je také možné použít JsonSerializerOptions
s vlastní zásadou pojmenování vlastností. Aby to bylo možné, musí být předána jak SearchIndexClient
do budovy, JsonSerializerOptions
tak i do AzureAISearchVectorStoreRecordCollection
konstrukce.
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 });