共用方式為


使用 Azure AI 搜尋向量存放區連接器 (預覽)

警告

語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。

概觀

Azure AI 搜尋向量存放區連接器可用來存取和管理 Azure AI 搜尋服務中的數據。 連接器具有下列特性。

功能區域 支援
集合對應至 Azure AI 搜尋索引
支援的索引鍵屬性類型 字串
支援的數據類型
  • 字串
  • int
  • long
  • double
  • float
  • bool
  • DateTimeOffset
  • 和這些類型的可列舉專案
支援的向量屬性類型 ReadOnlyMemory<float>
支援的索引類型
  • Hnsw
  • 一般
支援的距離函式
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
支援記錄中的多個向量 Yes
是否支援IsFilterable? Yes
是否支援IsFullTextSearchable? Yes
支援的 StoragePropertyName? 否,請改用 JsonSerializerOptionsJsonPropertyNameAttribute如需詳細資訊,請參閱這裡。

限制

值得注意的 Azure AI 搜尋連接器功能限制。

功能區域 因應措施
不支援在集合建立期間設定全文搜索分析器。 直接使用 Azure AI 搜尋用戶端 SDK 來建立集合

開始使用

將 Azure AI 搜尋向量存放區連接器 NuGet 套件新增至您的專案。

dotnet add package Microsoft.SemanticKernel.Connectors.AzureAISearch --prerelease

您可以使用 Semantic Kernel 所提供的擴充方法,將向量存放區新增至 IServiceCollectionKernelBuilder可用的相依性插入容器或相依性插入容器。

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

也提供不採用任何參數的擴充方法。 這些要求 Azure AI 搜尋 SearchIndexClient 的實例必須個別向相依性插入容器註冊。

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

您可以直接建構 Azure AI 搜尋向量存放區實例。

using Azure;
using Azure.Search.Documents.Indexes;
using Microsoft.SemanticKernel.Connectors.AzureAISearch;

var vectorStore = new AzureAISearchVectorStore(
    new SearchIndexClient(
        new Uri(azureAISearchUri),
        new AzureKeyCredential(secret)));

可以建構具名集合的直接參考。

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

開始使用

使用 Azure 額外項目安裝語意核心,其中包括 Azure AI 搜尋 SDK。

pip install semantic-kernel[azure]

接著,您可以使用 類別建立向量存放區實例,這會使用 AzureAISearchStore 環境變數 AZURE_AI_SEARCH_ENDPOINTAZURE_AI_SEARCH_API_KEY 連線到 Azure AI 搜尋服務實例,也可以直接提供這些值。 您也可以提供 Azure 認證或令牌認證,而不是 API 金鑰。


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

您也可以使用自己的 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)

您也可以直接建立集合。

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

collection = AzureAISearchCollection(collection_name="skhotels", data_model_type=hotel)

序列化

由於 Azure AI 搜尋連接器需要一個簡單的聽寫,其欄位對應至索引做為輸入,因此串行化相當容易,只要傳回具有對應至索引欄位之索引鍵值的聽寫,從聽寫到存放區模型的內建步驟就是建立的聽寫的直接傳遞。

如需此概念的詳細資訊,請參閱 串行化檔

開始使用

在 Maven 專案中加入下列相依性 pom.xml,以在 Maven 專案中包含最新版的語意核心 Azure AI 搜尋數據連接器:

<dependency>
    <groupId>com.microsoft.semantic-kernel</groupId>
    <artifactId>semantickernel-data-azureaisearch</artifactId>
    <version>[LATEST]</version>
</dependency>

接著,您可以使用 類別建立向量存放區實例 AzureAISearchVectorStore ,並將 AzureAISearch 用戶端設定為參數。

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

您也可以直接建立集合。

var collection = new AzureAISearchVectorStoreRecordCollection<>(searchClient, "skhotels",
        AzureAISearchVectorStoreRecordCollectionOptions.<Hotel>builder()
                .withRecordClass(Hotel.class)
                .build());

資料對應

將數據模型的數據對應至記憶體時,Azure AI 搜尋連接器所使用的預設對應程式是 Azure AI 搜尋 SDK 所提供的對應程式。

此對應程式會將數據模型上的屬性清單直接轉換成 Azure AI 搜尋服務中的欄位,並使用 System.Text.Json.JsonSerializer 轉換為記憶體架構。 這表示如果需要與資料模型屬性名稱不同的記憶體名稱,則支援 使用 JsonPropertyNameAttribute

您也可以使用自定義實例搭配自定義 JsonSerializerOptions 屬性命名原則。 若要啟用此功能, JsonSerializerOptions 必須將 傳遞至 SearchIndexClientAzureAISearchVectorStoreRecordCollection 建構時。

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