次の方法で共有


Azure AI Search Vector Store コネクタの使用 (プレビュー)

警告

セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。

概要

Azure AI Search Vector Store コネクタを使用して、Azure AI Search のデータにアクセスして管理できます。 コネクタには次の特性があります。

機能領域 サポート
コレクションのマップ Azure AI Search インデックス
サポートされているキー プロパティの種類 string
サポートされているデータ プロパティ型
  • string
  • INT
  • long
  • 倍精度浮動小数点
  • float
  • [bool]
  • DateTimeOffset
  • これらの各型の列挙可能な値
サポートされているベクター プロパティ型 ReadOnlyMemory<float>
サポートされているインデックスの種類
  • Hnsw
  • フラット
サポートされている距離関数
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
レコード内の複数のベクターをサポートします はい
IsFilterable がサポートされていますか? はい
IsFullTextSearchable がサポートされていますか? はい
StoragePropertyName がサポートされていますか? いいえ。代わりに JsonSerializerOptionsJsonPropertyNameAttribute を使用してください。 詳細については、こちらを参照してください。

制限事項

Azure AI Search コネクタの機能に関する重要な制限事項。

機能領域 回避策
コレクションの作成時にフルテキスト検索アナライザーを構成することはサポートされていません。 コレクションの作成に Azure AI Search クライアント SDK を直接使用する

作業の開始

Azure AI Search Vector Store コネクタ NuGet パッケージをプロジェクトに追加します。

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

セマンティック カーネルによって提供される拡張メソッドを使用して、 KernelBuilder で使用できる依存関係挿入コンテナーまたは IServiceCollection 依存関係挿入コンテナーにベクター ストアを追加できます。

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

名前付きコレクションへの直接参照を構築できます。

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 AI Search SDK を含む Azure extras を使用してセマンティック カーネルをインストールします。

pip install semantic-kernel[azure]

その後、 AzureAISearchStore クラスを使用してベクター ストア インスタンスを作成できます。これにより、 AZURE_AI_SEARCH_ENDPOINT 環境変数が使用され、azure AI Search インスタンスに接続するために AZURE_AI_SEARCH_API_KEY されます。これらの値を直接指定することもできます。 API キーの代わりに Azure 資格情報またはトークン資格情報を指定することもできます。


from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchStore

vector_store = AzureAISearchStore()

また、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)

コレクションを直接作成することもできます。

from semantic_kernel.connectors.memory.azure_ai_search import AzureAISearchCollection

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

シリアル化

Azure AI Search コネクタには、入力としてインデックスに対応するフィールドを含む単純なディクテーションが必要であるため、シリアル化は非常に簡単で、インデックス フィールドに対応するキーを持つ値を含むディクテーションを返すだけです。dict からストア モデルへの組み込みの手順は、作成されたディクテーションの直線パススルーです。

この概念の詳細については、 erialization のドキュメントを参照してください

作業の開始

次の依存関係を pom.xmlに追加して、Maven プロジェクトにセマンティック カーネル Azure AI Search データ コネクタの最新バージョンを含めます。

<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 Search コネクタによって使用される既定のマッパーは、Azure AI Search SDK によって提供されるマッパーです。

このマッパーは、データ モデルのプロパティの一覧を Azure AI Search のフィールドに直接変換し、 System.Text.Json.JsonSerializer を使用してストレージ スキーマに変換します。 つまり、データ モデルのプロパティ名に別のストレージ名が必要な場合は、 JsonPropertyNameAttribute の使用がサポートされます。

カスタマイズされたプロパティの名前付けポリシーでカスタム JsonSerializerOptions インスタンスを使用することもできます。 これを有効にするには、 JsonSerializerOptionsSearchIndexClient と構築時の 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 });